From f5b137eacfb6475382d80bd57c4bba68f5dcd6d3 Mon Sep 17 00:00:00 2001 From: dailyrandomphoto Date: Wed, 30 Oct 2019 23:29:40 +0800 Subject: [PATCH] use id-generators module --- .gitignore | 62 +-------------------------- .npmrc | 1 + .travis.yml | 10 +---- lib/id-generators/cuid-slug.js | 7 --- lib/id-generators/cuid.js | 7 --- lib/id-generators/date-seq.js | 8 ++-- lib/id-generators/id-generators.js | 24 ----------- lib/id-generators/index.js | 9 +--- lib/id-generators/nanoid-lowercase.js | 12 ------ lib/id-generators/nanoid-simple.js | 12 ------ lib/id-generators/nanoid.js | 11 ----- lib/id-generators/prefix-seq.js | 16 +++---- lib/index.js | 8 ++-- lib/new2.js | 4 +- lib/unique_post_path_filter.js | 7 +-- package.json | 5 +-- test/id-generators/index.js | 5 +-- test/register.js | 15 +++---- test/unique_post_path_filter.js | 2 - 19 files changed, 37 insertions(+), 188 deletions(-) create mode 100644 .npmrc delete mode 100644 lib/id-generators/cuid-slug.js delete mode 100644 lib/id-generators/cuid.js delete mode 100644 lib/id-generators/id-generators.js delete mode 100644 lib/id-generators/nanoid-lowercase.js delete mode 100644 lib/id-generators/nanoid-simple.js delete mode 100644 lib/id-generators/nanoid.js diff --git a/.gitignore b/.gitignore index 49b97c3..5dd87bd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,62 +1,4 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories node_modules/ -jspm_packages/ - -# TypeScript v1 declaration files -typings/ - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file -.env - -# next.js build output -.next package-lock.json +yarn.lock +.nyc_output/ diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..43c97e7 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +package-lock=false diff --git a/.travis.yml b/.travis.yml index e78421b..a9ffe97 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,16 +1,10 @@ language: node_js -sudo: false - -cache: - apt: true - directories: - - node_modules - node_js: - "8" - "10" - - "node" + - "12" + - "13" script: - npm run eslint diff --git a/lib/id-generators/cuid-slug.js b/lib/id-generators/cuid-slug.js deleted file mode 100644 index f922f64..0000000 --- a/lib/id-generators/cuid-slug.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -const cuid = require('cuid'); - -module.exports = function(option) { - return () => cuid.slug(); -}; diff --git a/lib/id-generators/cuid.js b/lib/id-generators/cuid.js deleted file mode 100644 index 0e777b7..0000000 --- a/lib/id-generators/cuid.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -const cuid = require('cuid'); - -module.exports = function(option) { - return cuid; -}; diff --git a/lib/id-generators/date-seq.js b/lib/id-generators/date-seq.js index 3798e45..a1b7128 100644 --- a/lib/id-generators/date-seq.js +++ b/lib/id-generators/date-seq.js @@ -4,7 +4,7 @@ const prefixSeq = require('./prefix-seq'); module.exports = function(option) { option = option || {}; - // date prefix sample: + // Date prefix sample: // YYYYMMDD (default) // YYYY-MM-DD- // YYMMDD- @@ -13,9 +13,9 @@ module.exports = function(option) { const pattern = typeof option.prefix === 'string' ? option.prefix : 'YYYYMMDD'; const date = new Date(); const prefix = pattern.replace(/YYYY/, date.getFullYear()) - .replace(/YY/, ('' + date.getFullYear()).substring(2)) - .replace(/MM/, ('0' + (date.getMonth() + 1)).substr(-2)) - .replace(/DD/, ('0' + date.getDate()).substr(-2)); + .replace(/YY/, String(date.getFullYear()).slice(2)) + .replace(/MM/, ('0' + (date.getMonth() + 1)).slice(-2)) + .replace(/DD/, ('0' + date.getDate()).slice(-2)); option.prefix = prefix; option.size = parseInt(option.size, 10) || 2; return prefixSeq(option); diff --git a/lib/id-generators/id-generators.js b/lib/id-generators/id-generators.js deleted file mode 100644 index 3ae738b..0000000 --- a/lib/id-generators/id-generators.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -const store = {}; - -function register(type, fn) { - if (typeof fn !== 'function') throw new TypeError('fn must be a function'); - if (typeof store[type] === 'function') throw new TypeError('already registered as type: ' + type); - store[type] = fn; -} - -function get(type) { - return store[type] || defaultFn(type); -} - -function defaultFn(type) { - return function() { - throw new TypeError('can\'t find generator with type: ' + type); - }; -} - -module.exports = { - register, - get -}; diff --git a/lib/id-generators/index.js b/lib/id-generators/index.js index 7a8adbc..40cef69 100644 --- a/lib/id-generators/index.js +++ b/lib/id-generators/index.js @@ -1,14 +1,7 @@ 'use strict'; -const generators = require('./id-generators'); -const cuid = require('./cuid'); +const generators = require('id-generators'); -generators.register('default', cuid); -generators.register('cuid', cuid); -generators.register('cuid-slug', require('./cuid-slug')); -generators.register('nanoid', require('./nanoid')); -generators.register('nanoid-simple', require('./nanoid-simple')); -generators.register('nanoid-lowercase', require('./nanoid-lowercase')); generators.register('seq', require('./seq')); generators.register('prefix-seq', require('./prefix-seq')); generators.register('date-seq', require('./date-seq')); diff --git a/lib/id-generators/nanoid-lowercase.js b/lib/id-generators/nanoid-lowercase.js deleted file mode 100644 index 613a805..0000000 --- a/lib/id-generators/nanoid-lowercase.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -/** - * https://github.com/ai/nanoid - */ -const generate = require('nanoid/generate'); -const alphabet = 'abcdefghijklmnopqrstuvwxyz'; - -module.exports = function(option) { - let size = option.size || 26; - return () => generate(alphabet, size); -}; diff --git a/lib/id-generators/nanoid-simple.js b/lib/id-generators/nanoid-simple.js deleted file mode 100644 index 93f19a3..0000000 --- a/lib/id-generators/nanoid-simple.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -/** - * https://github.com/ai/nanoid - */ -const generate = require('nanoid/generate'); -const alphabet = '0123456789abcdefghijklmnopqrstuvwxyz'; - -module.exports = function(option) { - let size = option.size || 24; - return () => generate(alphabet, size); -}; diff --git a/lib/id-generators/nanoid.js b/lib/id-generators/nanoid.js deleted file mode 100644 index 66ce53e..0000000 --- a/lib/id-generators/nanoid.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -/** - * https://github.com/ai/nanoid - */ -const nanoid = require('nanoid'); - -module.exports = function(option) { - let size = option.size || 21; - return () => nanoid(size); -}; diff --git a/lib/id-generators/prefix-seq.js b/lib/id-generators/prefix-seq.js index 29993be..0129fb8 100644 --- a/lib/id-generators/prefix-seq.js +++ b/lib/id-generators/prefix-seq.js @@ -1,7 +1,7 @@ 'use strict'; +const {join, basename} = require('path'); const chalk = require('chalk'); -const { join, basename } = require('path'); -const { listDirSync } = require('hexo-fs'); +const {listDirSync} = require('hexo-fs'); module.exports = function(option) { option = option || {}; const log = option.context ? option.context.log : console; @@ -16,11 +16,11 @@ module.exports = function(option) { return function() { let files = listDirSync(postDir).concat(listDirSync(draftDir)); - files = files.map((file) => basename(file)) - .filter((file) => pattern.test(file)) - .map((file) => parseInt(file.replace(prefix, '').replace('.md', ''), 10)) - .sort(function(a, b) { return b - a; }); - let max = Math.max((files[0] || 0) + 1, start); - return prefix + ('' + max).padStart(size, '0'); + files = files.map(file => basename(file)) + .filter(file => pattern.test(file)) + .map(file => parseInt(file.replace(prefix, '').replace('.md', ''), 10)) + .sort((a, b) => b - a); + const max = Math.max((files[0] || 0) + 1, start); + return prefix + String(max).padStart(size, '0'); }; }; diff --git a/lib/index.js b/lib/index.js index da50045..eb2726f 100644 --- a/lib/index.js +++ b/lib/index.js @@ -1,5 +1,6 @@ 'use strict'; -const generators = require('./id-generators'); + +const {register} = require('./id-generators'); if (typeof hexo !== 'undefined') { (function(ctx) { @@ -25,13 +26,12 @@ if (typeof hexo !== 'undefined') { }, require('./new2')(myconfig)); if (myconfig.auto) { - // register a filter with highest priority. + // Register a filter with highest priority. filter.register('new_post_path', require('./unique_post_path_filter')(myconfig), 1); } - }(hexo)); } module.exports = { - register: generators.register + register }; diff --git a/lib/new2.js b/lib/new2.js index 418ca11..a2cc7ff 100644 --- a/lib/new2.js +++ b/lib/new2.js @@ -2,7 +2,7 @@ const tildify = require('tildify'); const chalk = require('chalk'); -const generators = require('./id-generators'); +const {get} = require('id-generators'); const reservedKeys = { _: true, @@ -20,7 +20,7 @@ const reservedKeys = { module.exports = function(config) { return function newConsole(args) { - const generator = generators.get(config.path_type || 'default'); + const generator = get(config.path_type || 'default'); const generate = generator(config); // Display help message if user didn't input any arguments // if (!args._.length) { diff --git a/lib/unique_post_path_filter.js b/lib/unique_post_path_filter.js index b7c2750..193dd6b 100644 --- a/lib/unique_post_path_filter.js +++ b/lib/unique_post_path_filter.js @@ -1,15 +1,16 @@ 'use strict'; -const generators = require('./id-generators'); +const {get} = require('id-generators'); module.exports = function(config) { return function(data, replace) { - const generator = generators.get(config.path_type || 'default'); + const generator = get(config.path_type || 'default'); const generate = generator(config); - // generate a unique path. + // Generate a unique path. if (data.layout !== 'page') { data.slug = generate(data.title); } + return data; }; }; diff --git a/package.json b/package.json index 095ae69..b74e2d4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hexo-unique-post-path", - "version": "0.0.3", + "version": "1.0.0", "description": "This plug-in helps Hexo create new posts with unique auto-generated paths.", "main": "lib/index.js", "scripts": { @@ -10,9 +10,8 @@ }, "dependencies": { "chalk": "^2.4.2", - "cuid": "^2.1.6", "hexo-fs": "^2.0.0", - "nanoid": "^2.1.6", + "id-generators": "^1.0.0", "tildify": "^2.0.0" }, "devDependencies": { diff --git a/test/id-generators/index.js b/test/id-generators/index.js index 24b0e9a..01d0460 100644 --- a/test/id-generators/index.js +++ b/test/id-generators/index.js @@ -3,11 +3,8 @@ const generators = require('../../lib/id-generators'); describe('id-generators', () => { - - // before(() => hexo.init()); - it('should return a function', () => { - const generator = generators.get('cuid'); + const generator = generators.get(); generator.should.be.a('function'); const gen = generator({}); gen.should.be.a('function'); diff --git a/test/register.js b/test/register.js index bf7b38f..c9d6f68 100644 --- a/test/register.js +++ b/test/register.js @@ -1,14 +1,12 @@ 'use strict'; - const unique_post_path_filter = require('../lib/unique_post_path_filter'); -const { register } = require('../'); +const {register} = require('..'); describe('register', () => { - it('should use the custom function to generate a value of path', () => { - register('my_path_gen', function(option) { - return (title) => title.toLowerCase().replace(/[^\w]/g, ''); + register('my_path_gen', option => { + return title => title.toLowerCase().replace(/[^\w]/g, ''); }); const config = {path_type: 'my_path_gen'}; @@ -18,9 +16,9 @@ describe('register', () => { }); it('should use option in the custom function', () => { - register('my_custom_path', function(option) { - let size = option.size || 8; - let prefix = option.prefix || 'items-'; + register('my_custom_path', option => { + const size = option.size || 8; + const prefix = option.prefix || 'items-'; return function(title) { return prefix + title.toLowerCase().replace(/[^\w]/g, '').substring(0, size); }; @@ -31,5 +29,4 @@ describe('register', () => { unique_post_path_filter(config)(data); data.slug.should.eql('items-hellow'); }); - }); diff --git a/test/unique_post_path_filter.js b/test/unique_post_path_filter.js index f3a5d0d..4ec8a9a 100644 --- a/test/unique_post_path_filter.js +++ b/test/unique_post_path_filter.js @@ -3,7 +3,6 @@ const unique_post_path_filter = require('../lib/unique_post_path_filter'); describe('unique_post_path_filter', () => { - it('should set path: path_type = undefined', () => { const config = {}; const data = {title: 'title'}; @@ -24,5 +23,4 @@ describe('unique_post_path_filter', () => { unique_post_path_filter(config)(data); data.slug.should.be.a('string'); }); - });