From b087a900d507f461ef5f2c38e1a255a45f7bab69 Mon Sep 17 00:00:00 2001 From: Sebastien Blanchard Date: Thu, 7 Jul 2016 15:55:16 -0700 Subject: [PATCH 01/98] Allow $ in parameter names to document feather.js $limit, $sort parameters --- lib/parsers/api_param.js | 2 +- test/parser_api_param_test.js | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/parsers/api_param.js b/lib/parsers/api_param.js index 2dbcd34..bc94e2d 100644 --- a/lib/parsers/api_param.js +++ b/lib/parsers/api_param.js @@ -36,7 +36,7 @@ var regExp = { }, wName: { b: '(\\[?\\s*', // 5 optional optional-marker - name: '([a-zA-Z0-9\\:\\.\\/\\\\_-]+', // 6 + name: '([a-zA-Z0-9\\$\\:\\.\\/\\\\_-]+', // 6 withArray: '(?:\\[[a-zA-Z0-9\\.\\/\\\\_-]*\\])?)', // https://github.com/apidoc/apidoc-core/pull/4 oDefaultValue: { // optional defaultValue b: '(?:\\s*=\\s*(?:', // starting with '=', optional surrounding spaces diff --git a/test/parser_api_param_test.js b/test/parser_api_param_test.js index e57dfb0..4edaf57 100644 --- a/test/parser_api_param_test.js +++ b/test/parser_api_param_test.js @@ -42,6 +42,20 @@ describe('Parser: apiParam', function() { description: 'The users name.' } }, + { + title: '$Simple fieldname only', + content: '$simple', + expected: { + group: 'Parameter', + type: undefined, + size: undefined, + allowedValues: undefined, + optional: false, + field: '$simple', + defaultValue: undefined, + description: '' + } + }, { title: 'All options, with optional defaultValue', content: ' ( MyGroup ) { \\Object\\String.uni-code_char[] { 1..10 } = \'abc\', \'def\' } ' + From 0e28473afc5570775a4514752086d08a138baa6a Mon Sep 17 00:00:00 2001 From: Jozef Hartinger Date: Thu, 25 Aug 2016 20:49:55 +0200 Subject: [PATCH 02/98] @apiParam should not leak Unicode linebreaks Fixes https://github.com/apidoc/apidoc-core/issues/39 --- lib/parsers/api_param.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/parsers/api_param.js b/lib/parsers/api_param.js index 2dbcd34..7aab105 100644 --- a/lib/parsers/api_param.js +++ b/lib/parsers/api_param.js @@ -79,6 +79,13 @@ function parse(content, source, defaultGroup) { if ( ! matches) return null; + // reverse Unicode Linebreaks + matches.forEach(function (val, index, array) { + if (val) { + array[index] = val.replace(/\uffff/g, '\n'); + } + }); + var allowedValues = matches[4]; if (allowedValues) { var regExp; @@ -98,10 +105,6 @@ function parse(content, source, defaultGroup) { allowedValues = list; } - // Replace Unicode Linebreaks in description - if (matches[10]) - matches[10] = matches[10].replace(/\uffff/g, '\n'); - // Set global group variable group = matches[1] || defaultGroup || 'Parameter'; From a73fe21f4d57ec1b49f0166e42b49070ea4e560b Mon Sep 17 00:00:00 2001 From: Jozef Hartinger Date: Fri, 26 Aug 2016 13:56:56 +0200 Subject: [PATCH 03/98] Make "fallback" version configurable In situations where a block does not define a version explicitly apidocsjs falls back to '0.0.0'. With this patch the default version can be configured using 'defaultVersion' property in apidoc.json --- lib/index.js | 3 ++- lib/worker.js | 2 +- lib/workers/api_group.js | 6 +++--- lib/workers/api_param_title.js | 6 +++--- lib/workers/api_permission.js | 6 +++--- lib/workers/api_use.js | 6 +++--- 6 files changed, 15 insertions(+), 14 deletions(-) diff --git a/lib/index.js b/lib/index.js index cb38cdb..70f85fb 100644 --- a/lib/index.js +++ b/lib/index.js @@ -110,7 +110,8 @@ var defaultPackageInfos = { description: '', name : '', sampleUrl : false, - version : '0.0.0' + version : '0.0.0', + defaultVersion: '0.0.0' }; // Simple logger interace diff --git a/lib/worker.js b/lib/worker.js index 9c3c249..8b45ddf 100644 --- a/lib/worker.js +++ b/lib/worker.js @@ -72,7 +72,7 @@ Worker.prototype.process = function(parsedFiles, parsedFilenames, packageInfos) block.local.url = ''; if ( ! block.local.version) - block.local.version = '0.0.0'; + block.local.version = packageInfos.defaultVersion; if ( ! block.local.filename) block.local.filename = parsedFilenames[fileIndex]; diff --git a/lib/workers/api_group.js b/lib/workers/api_group.js index 6a55b71..31032c9 100644 --- a/lib/workers/api_group.js +++ b/lib/workers/api_group.js @@ -31,7 +31,7 @@ function preProcess(parsedFiles, filenames, packageInfos, target) { parsedFile.forEach(function(block) { if (block.global[source]) { var name = block.global[source].name; - var version = block.version || '0.0.0'; + var version = block.version || packageInfos.defaultVersion; if ( ! result[target][name]) result[target][name] = {}; @@ -94,7 +94,7 @@ function postProcess(parsedFiles, filenames, preProcess, packageInfos, source, t return; var name = block.local[target]; - var version = block.version || '0.0.0'; + var version = block.version || packageInfos.defaultVersion; var matchedData = {}; if ( ! preProcess[source] || ! preProcess[source][name]) { @@ -127,7 +127,7 @@ else { } else { // find nearest matching version var foundIndex = -1; - var lastVersion = '0.0.0'; + var lastVersion = packageInfos.defaultVersion; var versionKeys = Object.keys(preProcess[source][name]); versionKeys.forEach(function(currentVersion, versionIndex) { diff --git a/lib/workers/api_param_title.js b/lib/workers/api_param_title.js index 668644b..2257afa 100644 --- a/lib/workers/api_param_title.js +++ b/lib/workers/api_param_title.js @@ -30,7 +30,7 @@ function preProcess(parsedFiles, filenames, packageInfos, target) { parsedFile.forEach(function(block) { if (block.global[source]) { var name = block.global[source].name; - var version = block.version || '0.0.0'; + var version = block.version || packageInfos.defaultVersion; if ( ! result[target][name]) result[target][name] = {}; @@ -76,7 +76,7 @@ function postProcess(parsedFiles, filenames, preProcess, packageInfos, source, t params.forEach(function(definition) { var name = definition.group; - var version = block.version || '0.0.0'; + var version = block.version || packageInfos.defaultVersion; var matchedData = {}; if ( ! preProcess[source] || ! preProcess[source][name]) { @@ -109,7 +109,7 @@ else { } else { // find nearest matching version var foundIndex = -1; - var lastVersion = '0.0.0'; + var lastVersion = packageInfos.defaultVersion; var versionKeys = Object.keys(preProcess[source][name]); versionKeys.forEach(function(currentVersion, versionIndex) { diff --git a/lib/workers/api_permission.js b/lib/workers/api_permission.js index edcd593..9d52acc 100644 --- a/lib/workers/api_permission.js +++ b/lib/workers/api_permission.js @@ -30,7 +30,7 @@ function preProcess(parsedFiles, filenames, packageInfos, target) { parsedFile.forEach(function(block) { if (block.global[source]) { var name = block.global[source].name; - var version = block.version || '0.0.0'; + var version = block.version || packageInfos.defaultVersion; if ( ! result[target][name]) result[target][name] = {}; @@ -71,7 +71,7 @@ function postProcess(parsedFiles, filenames, preProcess, packageInfos, source, t var newPermissions = []; block.local[target].forEach(function(definition) { var name = definition.name; - var version = block.version || '0.0.0'; + var version = block.version || packageInfos.defaultVersion; var matchedData = {}; if ( ! preProcess[source] || ! preProcess[source][name]) { @@ -105,7 +105,7 @@ else { } else { // find nearest matching version var foundIndex = -1; - var lastVersion = '0.0.0'; + var lastVersion = packageInfos.defaultVersion; var versionKeys = Object.keys(preProcess[source][name]); versionKeys.forEach(function(currentVersion, versionIndex) { diff --git a/lib/workers/api_use.js b/lib/workers/api_use.js index 99ec461..ca206cd 100644 --- a/lib/workers/api_use.js +++ b/lib/workers/api_use.js @@ -31,7 +31,7 @@ function preProcess(parsedFiles, filenames, packageInfos, target) { parsedFile.forEach(function(block) { if (block.global[source]) { var name = block.global[source].name; - var version = block.version || '0.0.0'; + var version = block.version || packageInfos.defaultVersion; if ( ! result[target][name]) result[target][name] = {}; @@ -71,7 +71,7 @@ function postProcess(parsedFiles, filenames, preProcess, packageInfos, source, t block.local[target].forEach(function(definition) { var name = definition.name; - var version = block.version || '0.0.0'; + var version = block.version || packageInfos.defaultVersion; if ( ! preProcess[source] || ! preProcess[source][name]) { throw new WorkerError('Referenced groupname does not exist / it is not defined with @apiDefine.', @@ -93,7 +93,7 @@ function postProcess(parsedFiles, filenames, preProcess, packageInfos, source, t } else { // find nearest matching version var foundIndex = -1; - var lastVersion = '0.0.0'; + var lastVersion = packageInfos.defaultVersion; var versionKeys = Object.keys(preProcess[source][name]); versionKeys.forEach(function(currentVersion, versionIndex) { From 5f508aa1034ed883e95403ede340a816477e0d73 Mon Sep 17 00:00:00 2001 From: Justin Nichols Date: Mon, 19 Sep 2016 13:04:35 -0400 Subject: [PATCH 04/98] Added support for private APIs Added @apiPrivate to support the ability to specify if an API is a private API. apidoc now also has a --private false|true parameter on the command line that defaults to false. If false, it does not include any API block that contains @apiPrivate. If true, it will include the API (assuming the API is also not marked as @apiIgnore). --- lib/parser.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/parser.js b/lib/parser.js index e0243b5..5cd0ff4 100644 --- a/lib/parser.js +++ b/lib/parser.js @@ -410,12 +410,20 @@ Parser.prototype._findBlockWithApiGetIndex = function(blocks) { for (var i = 0; i < blocks.length; i += 1) { var found = false; for (var j = 0; j < blocks[i].length; j += 1) { + // check apiIgnore if (blocks[i][j].name.substr(0, 9) === 'apiignore') { app.log.debug('apiIgnore found in block: ' + i); found = false; break; } + // check app.options.apiprivate and apiPrivate + if (!app.options.apiprivate && blocks[i][j].name.substr(0, 10) === 'apiprivate') { + app.log.debug('private flag is set to false and apiPrivate found in block: ' + i); + found = false; + break; + } + if (blocks[i][j].name.substr(0, 3) === 'api') found = true; } From 059982c59498d3404a357660fb5cca2396b5412a Mon Sep 17 00:00:00 2001 From: marshalys Date: Tue, 18 Oct 2016 08:58:40 +0800 Subject: [PATCH 05/98] fix unit test error on macOS because line ending on macOS is '\r' --- test/apidoc_test.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/apidoc_test.js b/test/apidoc_test.js index 958590d..86640ab 100644 --- a/test/apidoc_test.js +++ b/test/apidoc_test.js @@ -94,7 +94,8 @@ describe('apiDoc full parse', function() { }); api = apidoc.parse({ - src: exampleBasePath + '/src/' + src: exampleBasePath + '/src/', + lineEnding: '\n' }); if (api === false) From c7411f9c14af0baf8c664a09aced8c5949f216d2 Mon Sep 17 00:00:00 2001 From: Michele Pini Date: Fri, 13 Jan 2017 09:05:39 +0100 Subject: [PATCH 06/98] Add @apiDeprecated support --- lib/index.js | 3 ++- lib/parsers/api_deprecated.js | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 lib/parsers/api_deprecated.js diff --git a/lib/index.js b/lib/index.js index cb38cdb..e92c838 100644 --- a/lib/index.js +++ b/lib/index.js @@ -76,7 +76,8 @@ var app = { apisuccessexample : './parsers/api_success_example.js', apiuse : './parsers/api_use.js', apiversion : './parsers/api_version.js', - apisamplerequest : './parsers/api_sample_request.js' + apisamplerequest : './parsers/api_sample_request.js', + apideprecated : './parsers/api_deprecated.js' }, workers: { apierrorstructure : './workers/api_error_structure.js', diff --git a/lib/parsers/api_deprecated.js b/lib/parsers/api_deprecated.js new file mode 100644 index 0000000..1ebb9dd --- /dev/null +++ b/lib/parsers/api_deprecated.js @@ -0,0 +1,35 @@ +var trim = require('../utils/trim'); +var unindent = require('../utils/unindent'); + +function parse(content) { + var deprecated = trim(content); + + if (deprecated.length > 0) { + var group = deprecated.split(' ')[0]; + group = group.charAt(0).toUpperCase() + group.slice(1); + var name = deprecated.substr(deprecated.indexOf(' ') + 1); + var url = name.replace(/(\s+)/g, '_').replace(/\'/g, '_'); + return { + deprecated: { + group: group, + name: name, + url: url + } + }; + } + + return { + deprecated: { + url: null + } + }; +} + +/** + * Exports + */ +module.exports = { + parse : parse, + path : 'local', + method : 'insert' +}; From 9d0c0a760630e07e1abb7e0ef28f93a6269c0a2e Mon Sep 17 00:00:00 2001 From: Michele Pini Date: Fri, 13 Jan 2017 09:21:40 +0100 Subject: [PATCH 07/98] fix unused variable error --- lib/parsers/api_deprecated.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/parsers/api_deprecated.js b/lib/parsers/api_deprecated.js index 1ebb9dd..51d3aeb 100644 --- a/lib/parsers/api_deprecated.js +++ b/lib/parsers/api_deprecated.js @@ -1,5 +1,4 @@ var trim = require('../utils/trim'); -var unindent = require('../utils/unindent'); function parse(content) { var deprecated = trim(content); From eb186e82048500d859d12b26b82279ec1ace8835 Mon Sep 17 00:00:00 2001 From: Peter Rottmann Date: Fri, 13 Jan 2017 11:35:04 +0100 Subject: [PATCH 08/98] Replace wrench with fs-extra. --- lib/utils/find_files.js | 180 ++++++++++++++++++++++------------------ 1 file changed, 99 insertions(+), 81 deletions(-) diff --git a/lib/utils/find_files.js b/lib/utils/find_files.js index 3dfecb9..b6f3703 100644 --- a/lib/utils/find_files.js +++ b/lib/utils/find_files.js @@ -1,7 +1,6 @@ -var fs = require('fs'); +var fs = require('fs-extra'); var os = require('os'); var path = require('path'); -var wrench = require('wrench'); var FileError = require('../errors/file_error'); @@ -9,9 +8,9 @@ var FileError = require('../errors/file_error'); * Search files recursivly and filter with include / exlude filters */ function FindFiles() { - this.path = './'; - this.excludeFilters = []; - this.includeFilters = []; + this.path = './'; + this.excludeFilters = []; + this.includeFilters = []; } /** @@ -25,9 +24,10 @@ module.exports = new FindFiles(); * @param {String} path */ FindFiles.prototype.setPath = function(path) { - if (path) - this.path = path; -}; + if (path) { + this.path = path; + } +} /** * Set exclude filters @@ -35,9 +35,10 @@ FindFiles.prototype.setPath = function(path) { * @param {string[]} excludeFilters */ FindFiles.prototype.setExcludeFilters = function(excludeFilters) { - if (excludeFilters) - this.excludeFilters = excludeFilters; -}; + if (excludeFilters) { + this.excludeFilters = excludeFilters; + } +} /** * Set include filters @@ -45,9 +46,10 @@ FindFiles.prototype.setExcludeFilters = function(excludeFilters) { * @param {string[]} isSilent */ FindFiles.prototype.setIncludeFilters = function(includeFilters) { - if (includeFilters) - this.includeFilters = includeFilters; -}; + if (includeFilters) { + this.includeFilters = includeFilters; + } +} /** * Search files recursivly and filter by include / exlude filters @@ -55,71 +57,87 @@ FindFiles.prototype.setIncludeFilters = function(includeFilters) { * @returns {String[]} */ FindFiles.prototype.search = function() { - var self = this; - var files = []; - try { - // find Files - files = wrench.readdirSyncRecursive(self.path); - - // create RegExp Include Filter List - var regExpIncludeFilters = []; - var filters = self.includeFilters; - if (typeof(filters) === 'string') - filters = [ filters ]; - - filters.forEach(function(filter) { - if (filter.length > 0) - regExpIncludeFilters.push( new RegExp(filter) ); - }); - - // RegExp Include Filter - var length = regExpIncludeFilters.length; - files = files.filter(function(filename) { - // Not include Directories like 'dirname.js' - var fullFilename = path.join(self.path, filename); - if (fs.statSync(fullFilename).isDirectory()) - return 0; - - if (os.platform() === 'win32') - filename = filename.replace(/\\/g, '/'); - - // apply every filter - for (var i = 0; i < length; i += 1) { - if(regExpIncludeFilters[i].test(filename)) - return 1; - } - return 0; - }); - - // create RegExp Exclude Filter List - var regExpExcludeFilters = []; - filters = self.excludeFilters; - if (typeof(filters) === 'string') - filters = [ filters ]; - - filters.forEach(function(filter) { - if (filter.length > 0) - regExpExcludeFilters.push( new RegExp(filter) ); - }); // forEach - - // RegExp Exclude Filter - length = regExpExcludeFilters.length; - files = files.filter(function(filename) { - if (os.platform() === 'win32') - filename = filename.replace(/\\/g, '/'); - - // apply every filter - for(var i = 0; i < length; i += 1) { - if(regExpExcludeFilters[i].test(filename)) - return 0; - } - return 1; - }); - } catch (e) { - throw e; - } finally { - if ( ! files || files.length === 0) - throw new FileError('No files found.', self.path); + var self = this; + var files = []; + try { + files = fs.walkSync(self.path) + + // create RegExp Include Filter List + var regExpIncludeFilters = []; + var filters = self.includeFilters; + if (typeof(filters) === 'string') { + filters = [ filters ]; + } + + filters.forEach(function(filter) { + if (filter.length > 0) { + regExpIncludeFilters.push( new RegExp(filter) ); + } + }); + + // RegExp Include Filter + var length = regExpIncludeFilters.length; + files = files.filter(function(filename) { + // not include Directories like 'dirname.js/' + if (fs.statSync(filename).isDirectory()) { + return 0; + } + + if (os.platform() === 'win32') { + filename = filename.replace(/\\/g, '/'); + } + + // apply every filter + for (var i = 0; i < length; i += 1) { + if(regExpIncludeFilters[i].test(filename)) { + return 1; + } + } + + return 0; + }); + + // create RegExp Exclude Filter List + var regExpExcludeFilters = []; + filters = self.excludeFilters; + if (typeof(filters) === 'string') { + filters = [ filters ]; } - return files; -}; + + filters.forEach(function(filter) { + if (filter.length > 0) { + regExpExcludeFilters.push( new RegExp(filter) ); + } + }); + + // RegExp Exclude Filter + length = regExpExcludeFilters.length; + files = files.filter(function(filename) { + if (os.platform() === 'win32') { + filename = filename.replace(/\\/g, '/'); + } + + // apply every filter + for(var i = 0; i < length; i += 1) { + if(regExpExcludeFilters[i].test(filename)) { + return 0; + } + } + + return 1; + }); + } catch (e) { + throw e; + } finally { + if ( ! files || files.length === 0) { + throw new FileError('No files found.', self.path); + } + + // remove source path prefix + files = files.map( function(filename) { + return filename.substr(self.path.length) + }) + } + + return files; +} From d23c73cdcf673d78c2f3db7c615a05bb50921bc9 Mon Sep 17 00:00:00 2001 From: Peter Rottmann Date: Fri, 13 Jan 2017 11:46:16 +0100 Subject: [PATCH 09/98] Update dependencies. --- package.json | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 0c5abd4..e3816af 100644 --- a/package.json +++ b/package.json @@ -33,19 +33,19 @@ "node": ">= 0.10.0" }, "dependencies": { - "glob": "^7.0.3", - "iconv-lite": "^0.4.13", - "lodash": "~4.11.1", - "semver": "~5.1.0", - "wrench": "~1.5.9" + "fs-extra": "^1.0.0", + "glob": "^7.1.1", + "iconv-lite": "^0.4.15", + "lodash": "~4.17.4", + "semver": "~5.3.0" }, "devDependencies": { "apidoc-example": "*", - "jshint": "~2.9.2", - "markdown-it": "^6.0.1", - "mocha": "~2.4.5", - "npm-check-updates": "^2.6.3", - "should": "~8.3.1" + "jshint": "~2.9.4", + "markdown-it": "^8.2.2", + "mocha": "~3.2.0", + "npm-check-updates": "^2.8.9", + "should": "~11.1.2" }, "jshintConfig": { "camelcase": true, From 592261d5a7d285e8e8ab48b290c60311840a0f7c Mon Sep 17 00:00:00 2001 From: Peter Rottmann Date: Fri, 13 Jan 2017 13:04:03 +0100 Subject: [PATCH 10/98] Adds support for Progress ABL / OpenEdge .p and .cls -files by default. #495 --- lib/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/index.js b/lib/index.js index cb38cdb..9a2b364 100644 --- a/lib/index.js +++ b/lib/index.js @@ -20,7 +20,7 @@ var SPECIFICATION_VERSION = '0.2.0'; var defaults = { excludeFilters: [], - includeFilters: [ '.*\\.(clj|coffee|cpp|cs|dart|erl|exs?|go|groovy|ino?|java|js|litcoffee|lua|php?|py|rb|scala|ts|pm)$' ], + includeFilters: [ '.*\\.(clj|cls|coffee|cpp|cs|dart|erl|exs?|go|groovy|ino?|java|js|litcoffee|lua|p|php?|py|rb|scala|ts|pm)$' ], src: path.join(__dirname, '../example/'), From e52de0a5f5e4fc7ab776509cf3245aadd0a885e7 Mon Sep 17 00:00:00 2001 From: Peter Rottmann Date: Fri, 13 Jan 2017 15:26:06 +0100 Subject: [PATCH 11/98] Add @apiDeprecated. --- lib/parser.js | 13 +++++++----- lib/parsers/api_deprecated.js | 37 +++++++++++++++-------------------- 2 files changed, 24 insertions(+), 26 deletions(-) diff --git a/lib/parser.js b/lib/parser.js index 5cd0ff4..c5f2448 100644 --- a/lib/parser.js +++ b/lib/parser.js @@ -245,12 +245,14 @@ Parser.prototype._parseBlockElements = function(indexApiBlocks, detectedElements ) { for (var markdownIndex = 0; markdownIndex < elementParser.markdownFields.length; markdownIndex += 1) { var field = elementParser.markdownFields[markdownIndex]; - if (values[field]) { - values[field] = app.markdownParser.render(values[field]); + var value = _.get(values, field); + if (value) { + value = app.markdownParser.render(value); // remove line breaks - values[field] = values[field].replace(/(\r\n|\n|\r)/g, ' '); + value = value.replace(/(\r\n|\n|\r)/g, ' '); - values[field] = values[field].trim(); + value = value.trim(); + _.set(values, field, value); // TODO: Little hacky, not sure to handle this here or in template if ( elementParser.markdownRemovePTags && @@ -258,7 +260,8 @@ Parser.prototype._parseBlockElements = function(indexApiBlocks, detectedElements elementParser.markdownRemovePTags.indexOf(field) !== -1 ) { // Remove p-Tags - values[field] = values[field].replace(/(

|<\/p>)/g, ''); + value = value.replace(/(

|<\/p>)/g, ''); + _.set(values, field, value); } } } diff --git a/lib/parsers/api_deprecated.js b/lib/parsers/api_deprecated.js index 51d3aeb..6e958a8 100644 --- a/lib/parsers/api_deprecated.js +++ b/lib/parsers/api_deprecated.js @@ -1,34 +1,29 @@ var trim = require('../utils/trim'); +var unindent = require('../utils/unindent'); function parse(content) { - var deprecated = trim(content); - - if (deprecated.length > 0) { - var group = deprecated.split(' ')[0]; - group = group.charAt(0).toUpperCase() + group.slice(1); - var name = deprecated.substr(deprecated.indexOf(' ') + 1); - var url = name.replace(/(\s+)/g, '_').replace(/\'/g, '_'); - return { - deprecated: { - group: group, - name: name, - url: url - } - }; - } + var deprecated = trim(content); + if (deprecated.length > 0) { return { - deprecated: { - url: null - } + deprecated: { + content: unindent(deprecated) + } }; + } + + return { + deprecated: true + }; } /** * Exports */ module.exports = { - parse : parse, - path : 'local', - method : 'insert' + parse : parse, + path : 'local', + method: 'insert', + markdownFields: [ 'deprecated.content' ], + markdownRemovePTags: [ 'deprecated.content' ] }; From b7a2f2a2ed5ff89a34458a227c2f36ee1a6001cd Mon Sep 17 00:00:00 2001 From: Peter Rottmann Date: Fri, 13 Jan 2017 16:24:52 +0100 Subject: [PATCH 12/98] Fix find files without source dir. --- lib/utils/find_files.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/utils/find_files.js b/lib/utils/find_files.js index b6f3703..84d5e94 100644 --- a/lib/utils/find_files.js +++ b/lib/utils/find_files.js @@ -134,9 +134,11 @@ FindFiles.prototype.search = function() { } // remove source path prefix - files = files.map( function(filename) { - return filename.substr(self.path.length) - }) + if (self.path !== './') { + files = files.map( function(filename) { + return filename.substr(self.path.length) + }) + } } return files; From cb75976259eb9b9ce659d4a894a4e7f6f3047e76 Mon Sep 17 00:00:00 2001 From: Peter Rottmann Date: Fri, 13 Jan 2017 16:30:53 +0100 Subject: [PATCH 13/98] Add .pl file extension. --- lib/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/index.js b/lib/index.js index a9357c8..4f53593 100644 --- a/lib/index.js +++ b/lib/index.js @@ -20,7 +20,7 @@ var SPECIFICATION_VERSION = '0.2.0'; var defaults = { excludeFilters: [], - includeFilters: [ '.*\\.(clj|cls|coffee|cpp|cs|dart|erl|exs?|go|groovy|ino?|java|js|litcoffee|lua|p|php?|py|rb|scala|ts|pm)$' ], + includeFilters: [ '.*\\.(clj|cls|coffee|cpp|cs|dart|erl|exs?|go|groovy|ino?|java|js|litcoffee|lua|p|php?|pl|pm|py|rb|scala|ts)$' ], src: path.join(__dirname, '../example/'), @@ -53,6 +53,7 @@ var app = { '.exs' : './languages/ex.js', '.litcoffee' : './languages/coffee.js', '.lua' : './languages/lua.js', + '.pl' : './languages/pm.js', '.pm' : './languages/pm.js', '.py' : './languages/py.js', '.rb' : './languages/rb.js', From a2ede4de5ebe60743606b892d2ab0ac474af9092 Mon Sep 17 00:00:00 2001 From: Peter Rottmann Date: Fri, 13 Jan 2017 16:34:55 +0100 Subject: [PATCH 14/98] Update SPDX license expression. --- package.json | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/package.json b/package.json index e3816af..1022575 100644 --- a/package.json +++ b/package.json @@ -3,10 +3,7 @@ "version": "0.7.1", "description": "Core parser library to generate apidoc result following the apidoc-spec", "author": "Peter Rottmann ", - "license": { - "type": "MIT", - "url": "https://github.com/apidoc/apidoc-core/blob/master/LICENSE" - }, + "license": "MIT", "main": "./lib/index.js", "homepage": "https://github.com/apidoc/apidoc-core", "repository": { From 43faf1090b5de9f2e247d286c67a4547eefde366 Mon Sep 17 00:00:00 2001 From: Peter Rottmann Date: Fri, 13 Jan 2017 16:54:49 +0100 Subject: [PATCH 15/98] Lint. --- lib/utils/find_files.js | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/lib/utils/find_files.js b/lib/utils/find_files.js index 84d5e94..db90417 100644 --- a/lib/utils/find_files.js +++ b/lib/utils/find_files.js @@ -1,6 +1,5 @@ -var fs = require('fs-extra'); -var os = require('os'); -var path = require('path'); +var fs = require('fs-extra'); +var os = require('os'); var FileError = require('../errors/file_error'); @@ -27,7 +26,7 @@ FindFiles.prototype.setPath = function(path) { if (path) { this.path = path; } -} +}; /** * Set exclude filters @@ -38,7 +37,7 @@ FindFiles.prototype.setExcludeFilters = function(excludeFilters) { if (excludeFilters) { this.excludeFilters = excludeFilters; } -} +}; /** * Set include filters @@ -49,7 +48,7 @@ FindFiles.prototype.setIncludeFilters = function(includeFilters) { if (includeFilters) { this.includeFilters = includeFilters; } -} +}; /** * Search files recursivly and filter by include / exlude filters @@ -60,7 +59,7 @@ FindFiles.prototype.search = function() { var self = this; var files = []; try { - files = fs.walkSync(self.path) + files = fs.walkSync(self.path); // create RegExp Include Filter List var regExpIncludeFilters = []; @@ -136,10 +135,10 @@ FindFiles.prototype.search = function() { // remove source path prefix if (self.path !== './') { files = files.map( function(filename) { - return filename.substr(self.path.length) - }) + return filename.substr(self.path.length); + }); } } return files; -} +}; From 91f9a1ec8062c93730b9f7b54cea88a9bef8a263 Mon Sep 17 00:00:00 2001 From: Peter Rottmann Date: Fri, 13 Jan 2017 17:09:04 +0100 Subject: [PATCH 16/98] Add .jsx and .vue support. --- lib/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/index.js b/lib/index.js index 4f53593..a5057c9 100644 --- a/lib/index.js +++ b/lib/index.js @@ -20,7 +20,7 @@ var SPECIFICATION_VERSION = '0.2.0'; var defaults = { excludeFilters: [], - includeFilters: [ '.*\\.(clj|cls|coffee|cpp|cs|dart|erl|exs?|go|groovy|ino?|java|js|litcoffee|lua|p|php?|pl|pm|py|rb|scala|ts)$' ], + includeFilters: [ '.*\\.(clj|cls|coffee|cpp|cs|dart|erl|exs?|go|groovy|ino?|java|js|jsx|litcoffee|lua|p|php?|pl|pm|py|rb|scala|ts|vue)$' ], src: path.join(__dirname, '../example/'), From 31f17cd39b8cca2b712e29be89d51228277818e3 Mon Sep 17 00:00:00 2001 From: Peter Rottmann Date: Fri, 13 Jan 2017 18:22:17 +0100 Subject: [PATCH 17/98] Add plugin loader access permission check. --- lib/plugin_loader.js | 104 ++++++++++++++++++++++++------------------- 1 file changed, 59 insertions(+), 45 deletions(-) diff --git a/lib/plugin_loader.js b/lib/plugin_loader.js index 9ece664..fd974af 100644 --- a/lib/plugin_loader.js +++ b/lib/plugin_loader.js @@ -1,4 +1,5 @@ var _ = require('lodash'); +var fs = require('fs'); var path = require('path'); var util = require('util'); var glob = require('glob'); @@ -6,24 +7,25 @@ var glob = require('glob'); var app = {}; function PluginLoader(_app) { - var self = this; + var self = this; - // global variables - app = _app; + // global variables + app = _app; - // class variables - self.plugins = {}; + // class variables + self.plugins = {}; - // Try to load global apidoc-plugins (if apidoc is installed locally it tries only local) - this.detectPugins(__dirname); + // Try to load global apidoc-plugins (if apidoc is installed locally it tries only local) + this.detectPugins(__dirname); - // Try to load local apidoc-plugins - this.detectPugins( path.join(process.cwd(), '/node_modules') ); + // Try to load local apidoc-plugins + this.detectPugins( path.join(process.cwd(), '/node_modules') ); - if (Object.keys(this.plugins).length === 0) - app.log.debug('No plugins found.'); + if (Object.keys(this.plugins).length === 0) { + app.log.debug('No plugins found.'); + } - this.loadPlugins(); + this.loadPlugins(); } /** * Inherit @@ -40,52 +42,64 @@ module.exports = PluginLoader; * Search up to root until found a plugin. */ PluginLoader.prototype.detectPugins = function(dir) { - var self = this; - - // Search from the given dir up to root. - // Every dir start with "apidoc-plugin-", because for the tests of apidoc-plugin-test. - var plugins = glob.sync(dir + '/apidoc-plugin-*'); - if (plugins.length === 0) { - dir = path.join(dir, '..'); - if (dir === '/' || dir.substr(1) === ':\\') - return; - return this.detectPugins(dir); + var self = this; + + try { + if (dir === '/') { + fs.accessSync(dir + '.') + } else { + fs.accessSync(dir + '/.') + } + } catch (e) { + app.log.warn(e); + return; + } + + // Every dir start with "apidoc-plugin-", because for the tests of apidoc-plugin-test. + var plugins = glob.sync(dir + '/apidoc-plugin-*'); + if (plugins.length === 0) { + dir = path.join(dir, '..'); + if (dir === '/' || dir.substr(1) === ':\\') { + return; } + return this.detectPugins(dir); + } - var offset = dir.length + 1; - plugins.forEach( function(plugin) { - var name = plugin.substr(offset); - var filename = path.relative(__dirname, plugin); - app.log.debug('add plugin: ' + name + ', ' + filename); - self.addPlugin(name, plugin); - }); + var offset = dir.length + 1; + plugins.forEach( function(plugin) { + var name = plugin.substr(offset); + var filename = path.relative(__dirname, plugin); + app.log.debug('add plugin: ' + name + ', ' + filename); + self.addPlugin(name, plugin); + }); }; /** * Add Plugin to plugin list. */ PluginLoader.prototype.addPlugin = function(name, filename) { - if (this.plugins[name]) - app.log.debug('overwrite plugin: ' + name + ', ' + this.plugins[name]); + if (this.plugins[name]) { + app.log.debug('overwrite plugin: ' + name + ', ' + this.plugins[name]); + } - this.plugins[name] = filename; + this.plugins[name] = filename; }; /** * Load and initialize Plugins. */ PluginLoader.prototype.loadPlugins = function() { - _.forEach(this.plugins, function(filename, name) { - app.log.debug('load plugin: ' + name + ', ' + filename); - var plugin; - try { - plugin = require(filename); - } catch(e) { - } - if (plugin && plugin.init) { - plugin.init(app); - } else { - app.log.debug('Ignored, no init function found.'); - } - }); + _.forEach(this.plugins, function(filename, name) { + app.log.debug('load plugin: ' + name + ', ' + filename); + var plugin; + try { + plugin = require(filename); + } catch(e) { + } + if (plugin && plugin.init) { + plugin.init(app); + } else { + app.log.debug('Ignored, no init function found.'); + } + }); }; From 919c592f1a1d95d02a153e5f03465736e2c0555a Mon Sep 17 00:00:00 2001 From: Peter Rottmann Date: Fri, 13 Jan 2017 18:36:20 +0100 Subject: [PATCH 18/98] Lint. --- lib/plugin_loader.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/plugin_loader.js b/lib/plugin_loader.js index fd974af..4263011 100644 --- a/lib/plugin_loader.js +++ b/lib/plugin_loader.js @@ -46,9 +46,9 @@ PluginLoader.prototype.detectPugins = function(dir) { try { if (dir === '/') { - fs.accessSync(dir + '.') + fs.accessSync(dir + '.'); } else { - fs.accessSync(dir + '/.') + fs.accessSync(dir + '/.'); } } catch (e) { app.log.warn(e); From 22bf305deafb7275ef87bee85a13c1fdc0d2ddae Mon Sep 17 00:00:00 2001 From: Peter Rottmann Date: Fri, 13 Jan 2017 19:01:49 +0100 Subject: [PATCH 19/98] Fix glob.sync throwing when it can't access a directory #43 --- lib/plugin_loader.js | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/lib/plugin_loader.js b/lib/plugin_loader.js index 4263011..99e1f3f 100644 --- a/lib/plugin_loader.js +++ b/lib/plugin_loader.js @@ -1,5 +1,4 @@ var _ = require('lodash'); -var fs = require('fs'); var path = require('path'); var util = require('util'); var glob = require('glob'); @@ -44,19 +43,15 @@ module.exports = PluginLoader; PluginLoader.prototype.detectPugins = function(dir) { var self = this; + // Every dir start with "apidoc-plugin-", because for the tests of apidoc-plugin-test. + var plugins; try { - if (dir === '/') { - fs.accessSync(dir + '.'); - } else { - fs.accessSync(dir + '/.'); - } + plugins = glob.sync(dir + '/apidoc-plugin-*'); } catch (e) { app.log.warn(e); return; } - // Every dir start with "apidoc-plugin-", because for the tests of apidoc-plugin-test. - var plugins = glob.sync(dir + '/apidoc-plugin-*'); if (plugins.length === 0) { dir = path.join(dir, '..'); if (dir === '/' || dir.substr(1) === ':\\') { From 6478bb68bdc79cedfd27d114941b07b098012457 Mon Sep 17 00:00:00 2001 From: Peter Rottmann Date: Fri, 13 Jan 2017 19:02:17 +0100 Subject: [PATCH 20/98] Change spec version for tests with v0.3.0. --- lib/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/index.js b/lib/index.js index d40d495..0fc0c33 100644 --- a/lib/index.js +++ b/lib/index.js @@ -16,7 +16,7 @@ var ParserError = require('./errors/parser_error'); var WorkerError = require('./errors/worker_error'); // const -var SPECIFICATION_VERSION = '0.2.0'; +var SPECIFICATION_VERSION = '0.3.0'; var defaults = { excludeFilters: [], From 9116028284ac13683215c81de51c835bbb9439d0 Mon Sep 17 00:00:00 2001 From: Peter Rottmann Date: Fri, 13 Jan 2017 19:04:32 +0100 Subject: [PATCH 21/98] Add support for plugins in scoped modules #51 --- lib/plugin_loader.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/plugin_loader.js b/lib/plugin_loader.js index 99e1f3f..6d1f8e6 100644 --- a/lib/plugin_loader.js +++ b/lib/plugin_loader.js @@ -46,7 +46,8 @@ PluginLoader.prototype.detectPugins = function(dir) { // Every dir start with "apidoc-plugin-", because for the tests of apidoc-plugin-test. var plugins; try { - plugins = glob.sync(dir + '/apidoc-plugin-*'); + plugins = glob.sync(dir + '/apidoc-plugin-*') + .concat( glob.sync(dir + '/@*/apidoc-plugin-*') ); } catch (e) { app.log.warn(e); return; From 0dc65f9000522c2dedde48de829f2d150ecf25a6 Mon Sep 17 00:00:00 2001 From: Peter Rottmann Date: Fri, 13 Jan 2017 19:08:48 +0100 Subject: [PATCH 22/98] Update license. --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index e70ffae..c7590f3 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2013-2016 inveris OHG +Copyright (c) 2013-2017 inveris OHG Author Peter Rottmann Licensed under the MIT license. From 539f2f16cd3c2491ce30a43256270595f28b7ae6 Mon Sep 17 00:00:00 2001 From: Peter Rottmann Date: Fri, 13 Jan 2017 19:08:55 +0100 Subject: [PATCH 23/98] Bump version. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1022575..545a420 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "apidoc-core", - "version": "0.7.1", + "version": "0.8.0", "description": "Core parser library to generate apidoc result following the apidoc-spec", "author": "Peter Rottmann ", "license": "MIT", From d9abcbe0541eb9fd86896411f1bc004a9b93112e Mon Sep 17 00:00:00 2001 From: alisinabh Date: Sun, 22 Jan 2017 03:19:51 +0330 Subject: [PATCH 24/98] Fix #55 missing 2 chars in root folder --- lib/utils/find_files.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/utils/find_files.js b/lib/utils/find_files.js index db90417..7007ef6 100644 --- a/lib/utils/find_files.js +++ b/lib/utils/find_files.js @@ -135,7 +135,11 @@ FindFiles.prototype.search = function() { // remove source path prefix if (self.path !== './') { files = files.map( function(filename) { - return filename.substr(self.path.length); + if (filename.startsWith(self.path)) { + return filename.substr(self.path.length); + } else { + return filename; + } }); } } From d4a9584b70ecdfc0bf99cd4348b4ab7de9e645ef Mon Sep 17 00:00:00 2001 From: Peter Rottmann Date: Mon, 23 Jan 2017 09:18:15 +0100 Subject: [PATCH 25/98] Add fix #55 --- lib/utils/find_files.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/utils/find_files.js b/lib/utils/find_files.js index 7007ef6..be193d0 100644 --- a/lib/utils/find_files.js +++ b/lib/utils/find_files.js @@ -136,10 +136,9 @@ FindFiles.prototype.search = function() { if (self.path !== './') { files = files.map( function(filename) { if (filename.startsWith(self.path)) { - return filename.substr(self.path.length); - } else { - return filename; + return filename.substr(self.path.length); } + return filename; }); } } From f061feb133af27f7c572addc2ee2ff8cd3808187 Mon Sep 17 00:00:00 2001 From: Peter Rottmann Date: Mon, 23 Jan 2017 09:42:43 +0100 Subject: [PATCH 26/98] Fix missing chars in root folder. --- lib/utils/find_files.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/utils/find_files.js b/lib/utils/find_files.js index be193d0..ac3ed99 100644 --- a/lib/utils/find_files.js +++ b/lib/utils/find_files.js @@ -1,5 +1,6 @@ -var fs = require('fs-extra'); -var os = require('os'); +var fs = require('fs-extra'); +var klawSync = require('klaw-sync'); +var os = require('os'); var FileError = require('../errors/file_error'); @@ -59,7 +60,9 @@ FindFiles.prototype.search = function() { var self = this; var files = []; try { - files = fs.walkSync(self.path); + files = klawSync(self.path).map( function(entry) { + return entry.path; + }); // create RegExp Include Filter List var regExpIncludeFilters = []; @@ -136,12 +139,11 @@ FindFiles.prototype.search = function() { if (self.path !== './') { files = files.map( function(filename) { if (filename.startsWith(self.path)) { - return filename.substr(self.path.length); + return filename.substr(self.path.length + 1); // + 1 / at the end } return filename; }); } } - return files; }; From 7b1fc8c0b97c8fd9a93b64a934c06b5f5aa80977 Mon Sep 17 00:00:00 2001 From: Peter Rottmann Date: Mon, 23 Jan 2017 09:42:54 +0100 Subject: [PATCH 27/98] Replace removed fs-extra.walkSync with klaw-sync. --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 545a420..e010bb6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "apidoc-core", - "version": "0.8.0", + "version": "0.8.1", "description": "Core parser library to generate apidoc result following the apidoc-spec", "author": "Peter Rottmann ", "license": "MIT", @@ -30,9 +30,10 @@ "node": ">= 0.10.0" }, "dependencies": { - "fs-extra": "^1.0.0", + "fs-extra": "^2.0.0", "glob": "^7.1.1", "iconv-lite": "^0.4.15", + "klaw-sync": "^1.0.2", "lodash": "~4.17.4", "semver": "~5.3.0" }, From 62c90c8cc0c03a48f65321764026770922b3ffd6 Mon Sep 17 00:00:00 2001 From: Peter Rottmann Date: Mon, 23 Jan 2017 10:01:12 +0100 Subject: [PATCH 28/98] Change node version to 6 --- .travis.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 784e99e..88a8dbe 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,3 @@ language: node_js node_js: - - 0.10 - - 0.12 + - 6 From f3a38e589b7737df73f58129d8edc548665d7b06 Mon Sep 17 00:00:00 2001 From: Peter Rottmann Date: Thu, 26 Jan 2017 11:14:58 +0100 Subject: [PATCH 29/98] Bugfix normalize directory handling (klaw-sync 1.1 update). --- lib/utils/find_files.js | 22 +++++++++++----------- package.json | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/lib/utils/find_files.js b/lib/utils/find_files.js index ac3ed99..7f0f21f 100644 --- a/lib/utils/find_files.js +++ b/lib/utils/find_files.js @@ -1,6 +1,7 @@ var fs = require('fs-extra'); var klawSync = require('klaw-sync'); var os = require('os'); +var path = require('path'); var FileError = require('../errors/file_error'); @@ -8,7 +9,7 @@ var FileError = require('../errors/file_error'); * Search files recursivly and filter with include / exlude filters */ function FindFiles() { - this.path = './'; + this.path = process.cwd(); this.excludeFilters = []; this.includeFilters = []; } @@ -23,9 +24,9 @@ module.exports = new FindFiles(); * * @param {String} path */ -FindFiles.prototype.setPath = function(path) { +FindFiles.prototype.setPath = function(newPath) { if (path) { - this.path = path; + this.path = path.resolve(newPath); } }; @@ -59,6 +60,7 @@ FindFiles.prototype.setIncludeFilters = function(includeFilters) { FindFiles.prototype.search = function() { var self = this; var files = []; + try { files = klawSync(self.path).map( function(entry) { return entry.path; @@ -136,14 +138,12 @@ FindFiles.prototype.search = function() { } // remove source path prefix - if (self.path !== './') { - files = files.map( function(filename) { - if (filename.startsWith(self.path)) { - return filename.substr(self.path.length + 1); // + 1 / at the end - } - return filename; - }); - } + files = files.map( function(filename) { + if (filename.startsWith(self.path)) { + return filename.substr(self.path.length + 1); + } + return filename; + }); } return files; }; diff --git a/package.json b/package.json index e010bb6..d3ea4c7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "apidoc-core", - "version": "0.8.1", + "version": "0.8.2", "description": "Core parser library to generate apidoc result following the apidoc-spec", "author": "Peter Rottmann ", "license": "MIT", From f538ed91d040bf626d7c648df50548bc128b48d0 Mon Sep 17 00:00:00 2001 From: Markus Hedlund Date: Wed, 29 Mar 2017 09:42:47 +0200 Subject: [PATCH 30/98] Support multiple param types with | --- lib/parsers/api_param.js | 2 +- test/parser_api_param_test.js | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/parsers/api_param.js b/lib/parsers/api_param.js index 7aab105..17bafa3 100644 --- a/lib/parsers/api_param.js +++ b/lib/parsers/api_param.js @@ -21,7 +21,7 @@ var regExp = { }, oType: { // optional type: {string} b: '\\s*(?:\\{\\s*', // starting with '{', optional surrounding spaces - type: '([a-zA-Z0-9\(\)#:\\.\\/\\\\\\[\\]_-]+)', // 2 + type: '([a-zA-Z0-9\(\)#:\\.\\/\\\\\\[\\]_\|-]+)', // 2 oSize: { // optional size within type: {string{1..4}} b: '\\s*(?:\\{\\s*', // starting with '{', optional surrounding spaces size: '(.+?)', // 3 diff --git a/test/parser_api_param_test.js b/test/parser_api_param_test.js index e57dfb0..9a07f75 100644 --- a/test/parser_api_param_test.js +++ b/test/parser_api_param_test.js @@ -42,6 +42,20 @@ describe('Parser: apiParam', function() { description: 'The users name.' } }, + { + title: 'Type, Fieldname, Description', + content: '{String|String[]} name The users name.', + expected: { + group: 'Parameter', + type: 'String|String[]', + size: undefined, + allowedValues: undefined, + optional: false, + field: 'name', + defaultValue: undefined, + description: 'The users name.' + } + }, { title: 'All options, with optional defaultValue', content: ' ( MyGroup ) { \\Object\\String.uni-code_char[] { 1..10 } = \'abc\', \'def\' } ' + From 6c828b5ae8074a6f42bbd112f90983cd399aefdc Mon Sep 17 00:00:00 2001 From: Peter Rottmann Date: Fri, 19 May 2017 11:39:34 +0200 Subject: [PATCH 31/98] Update deps. --- package.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index d3ea4c7..92e7c00 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "apidoc-core", - "version": "0.8.2", + "version": "0.8.3", "description": "Core parser library to generate apidoc result following the apidoc-spec", "author": "Peter Rottmann ", "license": "MIT", @@ -30,20 +30,20 @@ "node": ">= 0.10.0" }, "dependencies": { - "fs-extra": "^2.0.0", + "fs-extra": "^3.0.1", "glob": "^7.1.1", - "iconv-lite": "^0.4.15", - "klaw-sync": "^1.0.2", + "iconv-lite": "^0.4.17", + "klaw-sync": "^2.1.0", "lodash": "~4.17.4", "semver": "~5.3.0" }, "devDependencies": { "apidoc-example": "*", "jshint": "~2.9.4", - "markdown-it": "^8.2.2", - "mocha": "~3.2.0", - "npm-check-updates": "^2.8.9", - "should": "~11.1.2" + "markdown-it": "^8.3.1", + "mocha": "~3.4.1", + "npm-check-updates": "^2.11.1", + "should": "~11.2.1" }, "jshintConfig": { "camelcase": true, From 9032876ae630159f9dbbcd1707b51d036b231780 Mon Sep 17 00:00:00 2001 From: techgaun Date: Wed, 21 Jun 2017 22:50:48 -0500 Subject: [PATCH 32/98] update elixir syntax --- lib/languages/ex.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/lib/languages/ex.js b/lib/languages/ex.js index 353f77e..f12528a 100644 --- a/lib/languages/ex.js +++ b/lib/languages/ex.js @@ -2,10 +2,8 @@ * Elixir */ module.exports = { - // Find document blocks in heredocs that are arguments of the @apidoc - // module attribute. Elixir heredocs can be enclosed between """ and """ or - // between ''' and '''. Heredocs in ~s and ~S sigils are also supported. - docBlocksRegExp: /@apidoc\s*(~[sS])?"""\uffff?(.+?)\uffff?(?:\s*)?"""|@apidoc\s*(~[sS])?'''\uffff?(.+?)\uffff?(?:\s*)?'''/g, - // Remove not needed tabs at the beginning - inlineRegExp: /^(\t*)?/gm + // Find document blocks between '#{' and '#}' + docBlocksRegExp: /\#*\{\uffff?(.+?)\uffff?(?:\s*)?\#+\}/g, + // Remove not needed '#' and tabs at the beginning + inlineRegExp: /^(\s*)?(\#*)[ ]?/gm }; From 481842dfef55fdfc9278ccf535a0d974c0c4bffb Mon Sep 17 00:00:00 2001 From: Rodrigo Alviani Date: Thu, 27 Jul 2017 10:50:18 -0300 Subject: [PATCH 33/98] Fix @apiVersion error message --- lib/parsers/api_version.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/parsers/api_version.js b/lib/parsers/api_version.js index 8135781..220bf18 100644 --- a/lib/parsers/api_version.js +++ b/lib/parsers/api_version.js @@ -12,7 +12,7 @@ function parse(content) { if ( ! semver.valid(content)) throw new ParameterError('Version format not valid.', - 'apiVersion', '@apiVersion major.minor.patch', '@apiDefine 1.2.3'); + 'apiVersion', '@apiVersion major.minor.patch', '@apiVersion 1.2.3'); return { version: content From 5e6ad42980737576e52d9fa86b0683a4940fd749 Mon Sep 17 00:00:00 2001 From: techgaun Date: Mon, 21 Aug 2017 22:33:06 -0500 Subject: [PATCH 34/98] fix syntax for elixir to be little more relaxing --- lib/languages/ex.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/languages/ex.js b/lib/languages/ex.js index f12528a..5714a99 100644 --- a/lib/languages/ex.js +++ b/lib/languages/ex.js @@ -3,7 +3,7 @@ */ module.exports = { // Find document blocks between '#{' and '#}' - docBlocksRegExp: /\#*\{\uffff?(.+?)\uffff?(?:\s*)?\#+\}/g, + docBlocksRegExp: /#*\s?\{\uffff?(.+?)\uffff?(?:\s*)?#+\s?\}/g, // Remove not needed '#' and tabs at the beginning - inlineRegExp: /^(\s*)?(\#*)[ ]?/gm + inlineRegExp: /^(\s*)?(#*)[ ]?/gm }; From 451ae732b54c2de39b8f4c1a4b737fc5c16f5eed Mon Sep 17 00:00:00 2001 From: techgaun Date: Mon, 25 Sep 2017 16:11:22 -0500 Subject: [PATCH 35/98] revert back to stricter enforcement to avoid bad json issues --- lib/languages/ex.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/languages/ex.js b/lib/languages/ex.js index 5714a99..f12528a 100644 --- a/lib/languages/ex.js +++ b/lib/languages/ex.js @@ -3,7 +3,7 @@ */ module.exports = { // Find document blocks between '#{' and '#}' - docBlocksRegExp: /#*\s?\{\uffff?(.+?)\uffff?(?:\s*)?#+\s?\}/g, + docBlocksRegExp: /\#*\{\uffff?(.+?)\uffff?(?:\s*)?\#+\}/g, // Remove not needed '#' and tabs at the beginning - inlineRegExp: /^(\s*)?(#*)[ ]?/gm + inlineRegExp: /^(\s*)?(\#*)[ ]?/gm }; From ec941a9f1721bcb310ea47bef988138cb604c86d Mon Sep 17 00:00:00 2001 From: Henrik Gemal Date: Thu, 4 Jan 2018 13:24:23 +0100 Subject: [PATCH 36/98] fixes #69 --- lib/parser.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/parser.js b/lib/parser.js index c5f2448..b452b7b 100644 --- a/lib/parser.js +++ b/lib/parser.js @@ -177,7 +177,7 @@ Parser.prototype._parseBlockElements = function(indexApiBlocks, detectedElements var elementParser = self.parsers[element.name]; if ( ! elementParser) { - app.log.warn('parser plugin \'' + element.name + '\' not found in block: ' + blockIndex); + app.log.warn('parser plugin \'' + element.name + '\' not found in block: ' + blockIndex + ' in file: ' + filename); } else { app.log.debug('found @' + element.sourceName + ' in block: ' + blockIndex); From c9c7cc7bc4ae745d0e3e2724e0872cc94e610371 Mon Sep 17 00:00:00 2001 From: Jonny Bylsma Date: Wed, 24 Jan 2018 17:41:33 -0500 Subject: [PATCH 37/98] Fix the regex parsing for valueless parameters The @apiPrivate parameter does not take any value, and the @apiDeprecated parameter has an optional value. However, the regular expression in Parser.prototype.findElements expects that every parameter has a value. This may lead to the subsequent apiDoc parameter getting matched into the valueless parameter, removing it from the final generated apiDocs. Switching the regular expression from (.+?) to (.*?) allows the parameter's value to be optional. --- lib/parser.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/parser.js b/lib/parser.js index c5f2448..db30650 100644 --- a/lib/parser.js +++ b/lib/parser.js @@ -448,7 +448,7 @@ Parser.prototype.findElements = function(block, filename) { block = block.replace(/\n/g, '\uffff'); // Elements start with @ - var elementsRegExp = /(@(\w*)\s?(.+?)(?=\uffff[\s\*]*@|$))/gm; + var elementsRegExp = /(@(\w*)\s?(.*?)(?=\uffff[\s\*]*@|$))/gm; var matches = elementsRegExp.exec(block); while (matches) { var element = { From 3abf0636e8f6ade066a81355fc425b6dd802a0b1 Mon Sep 17 00:00:00 2001 From: Thiago Santos Date: Sun, 18 Mar 2018 22:52:59 -0300 Subject: [PATCH 38/98] Allow blank space before brackets (#1) * expect space * Update ex.js * Update ex.js * Update ex.js --- lib/languages/ex.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/languages/ex.js b/lib/languages/ex.js index f12528a..d0263a4 100644 --- a/lib/languages/ex.js +++ b/lib/languages/ex.js @@ -3,7 +3,7 @@ */ module.exports = { // Find document blocks between '#{' and '#}' - docBlocksRegExp: /\#*\{\uffff?(.+?)\uffff?(?:\s*)?\#+\}/g, + docBlocksRegExp: /\#*\s?\{\uffff?(.+?)\uffff?(?:\s*)?\#+\s?\}/g, // Remove not needed '#' and tabs at the beginning inlineRegExp: /^(\s*)?(\#*)[ ]?/gm }; From 0c5363785f082f6c51c1d96c058d08439370354a Mon Sep 17 00:00:00 2001 From: Gabriel Castro Date: Fri, 8 Jun 2018 17:41:10 -0400 Subject: [PATCH 39/98] Use os.EOL instead of own logic for line endings --- lib/index.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/lib/index.js b/lib/index.js index 0fc0c33..76b992d 100644 --- a/lib/index.js +++ b/lib/index.js @@ -140,11 +140,7 @@ function getSpecificationVersion() { * @returns {String} */ function detectLineEnding() { - if ( os.platform() === 'win32' ) - return '\r\n'; - if ( os.platform() === 'darwin' ) - return '\r'; - return '\n'; + return os.EOL; } /** From 68311200ed77789b72ee490fdad135599b7d556e Mon Sep 17 00:00:00 2001 From: Gabriel Castro Date: Fri, 8 Jun 2018 17:43:28 -0400 Subject: [PATCH 40/98] use os.EOL directly --- lib/index.js | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/lib/index.js b/lib/index.js index 76b992d..c209cb3 100644 --- a/lib/index.js +++ b/lib/index.js @@ -29,7 +29,7 @@ var defaults = { parsers: {}, workers: {}, - lineEnding: detectLineEnding(), + lineEnding: os.EOL, encoding: 'utf8' }; @@ -134,15 +134,6 @@ function getSpecificationVersion() { return SPECIFICATION_VERSION; } -/** - * Detect and return OS specific line ending. - * - * @returns {String} - */ -function detectLineEnding() { - return os.EOL; -} - /** * Parser * From 9df46b3e23e304c7e211ada9ab8f787948639fd0 Mon Sep 17 00:00:00 2001 From: jason-gao <3048789891@qq.com> Date: Tue, 11 Sep 2018 19:43:16 -0700 Subject: [PATCH 41/98] fix:warn: parser plugin 'apiprivate' not found in block: 1 --- lib/index.js | 3 ++- lib/parsers/api_private.js | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 lib/parsers/api_private.js diff --git a/lib/index.js b/lib/index.js index 0fc0c33..bc7b6e9 100644 --- a/lib/index.js +++ b/lib/index.js @@ -78,7 +78,8 @@ var app = { apiuse : './parsers/api_use.js', apiversion : './parsers/api_version.js', apisamplerequest : './parsers/api_sample_request.js', - apideprecated : './parsers/api_deprecated.js' + apideprecated : './parsers/api_deprecated.js', + apiprivate : './parsers/api_private.js', }, workers: { apierrorstructure : './workers/api_error_structure.js', diff --git a/lib/parsers/api_private.js b/lib/parsers/api_private.js new file mode 100644 index 0000000..864ff1b --- /dev/null +++ b/lib/parsers/api_private.js @@ -0,0 +1,16 @@ +var trim = require('../utils/trim'); + +function parse(content) { + content = trim(content); + + return content; +} + +/** + * Exports + */ +module.exports = { + parse : parse, + path : 'local', + method: 'insert' +}; From 1b8240d15041bf010498a280a2dae97043e45882 Mon Sep 17 00:00:00 2001 From: Nicolas CARPi Date: Wed, 16 Oct 2019 23:58:36 +0200 Subject: [PATCH 42/98] Allow more special characters in name and group See #17 See http://stackoverflow.com/a/22075070 --- lib/workers/api_group.js | 2 +- lib/workers/api_name.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/workers/api_group.js b/lib/workers/api_group.js index 31032c9..ef4e289 100644 --- a/lib/workers/api_group.js +++ b/lib/workers/api_group.js @@ -80,7 +80,7 @@ function postProcess(parsedFiles, filenames, preProcess, packageInfos, source, t } // replace special chars - group = group.replace(/[^\w]/g, '_'); + group.replace(/[^\u0041-\u005A\u0061-\u007A\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/g, '_') block.local[target] = group; } diff --git a/lib/workers/api_name.js b/lib/workers/api_name.js index bfbdd93..ed2d1f5 100644 --- a/lib/workers/api_name.js +++ b/lib/workers/api_name.js @@ -36,7 +36,7 @@ function postProcess(parsedFiles/*, filenames, preProcess, packageInfos*/) { } // replace special chars - name = name.replace(/[^\w]/g, '_'); + name.replace(/[^\u0041-\u005A\u0061-\u007A\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/g, '_') block.local[target] = name; } From c7271f6ec4ed8f6ee87372a4bd239045fddd8f8c Mon Sep 17 00:00:00 2001 From: Nicolas CARPi Date: Thu, 17 Oct 2019 00:23:21 +0200 Subject: [PATCH 43/98] Add missing semicolons --- lib/workers/api_group.js | 2 +- lib/workers/api_name.js | 2 +- package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/workers/api_group.js b/lib/workers/api_group.js index ef4e289..de43802 100644 --- a/lib/workers/api_group.js +++ b/lib/workers/api_group.js @@ -80,7 +80,7 @@ function postProcess(parsedFiles, filenames, preProcess, packageInfos, source, t } // replace special chars - group.replace(/[^\u0041-\u005A\u0061-\u007A\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/g, '_') + group.replace(/[^\u0041-\u005A\u0061-\u007A\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/g, '_'); block.local[target] = group; } diff --git a/lib/workers/api_name.js b/lib/workers/api_name.js index ed2d1f5..b039c5b 100644 --- a/lib/workers/api_name.js +++ b/lib/workers/api_name.js @@ -36,7 +36,7 @@ function postProcess(parsedFiles/*, filenames, preProcess, packageInfos*/) { } // replace special chars - name.replace(/[^\u0041-\u005A\u0061-\u007A\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/g, '_') + name.replace(/[^\u0041-\u005A\u0061-\u007A\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/g, '_'); block.local[target] = name; } diff --git a/package.json b/package.json index 92e7c00..60284d7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "apidoc-core", - "version": "0.8.3", + "version": "0.9.0", "description": "Core parser library to generate apidoc result following the apidoc-spec", "author": "Peter Rottmann ", "license": "MIT", From 46c9d5e87a4c3e6a4367eb7108de7385666056ca Mon Sep 17 00:00:00 2001 From: Nicolas CARPi Date: Thu, 17 Oct 2019 00:33:17 +0200 Subject: [PATCH 44/98] Update dependencies --- package.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 60284d7..8b2ba1f 100644 --- a/package.json +++ b/package.json @@ -30,12 +30,12 @@ "node": ">= 0.10.0" }, "dependencies": { - "fs-extra": "^3.0.1", - "glob": "^7.1.1", - "iconv-lite": "^0.4.17", - "klaw-sync": "^2.1.0", - "lodash": "~4.17.4", - "semver": "~5.3.0" + "fs-extra": "^8.1.0", + "glob": "^7.1.4", + "iconv-lite": "^0.5.0", + "klaw-sync": "^6.0.0", + "lodash": "~4.17.15", + "semver": "~6.3.0" }, "devDependencies": { "apidoc-example": "*", From 71b706e97b6f4798cd19426f8b5a3a057ce5c756 Mon Sep 17 00:00:00 2001 From: Nicolas CARPi Date: Thu, 17 Oct 2019 00:38:44 +0200 Subject: [PATCH 45/98] Update devDependencies and remove npm-check-updates as there is now dependabot for that on github. --- package.json | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 8b2ba1f..587c802 100644 --- a/package.json +++ b/package.json @@ -15,8 +15,7 @@ }, "scripts": { "test": "npm run jshint && mocha test/**/*_test.js", - "jshint": "jshint lib/ test/", - "check-updates": "npm-check-updates" + "jshint": "jshint lib/ test/" }, "keywords": [ "api", @@ -39,11 +38,10 @@ }, "devDependencies": { "apidoc-example": "*", - "jshint": "~2.9.4", - "markdown-it": "^8.3.1", - "mocha": "~3.4.1", - "npm-check-updates": "^2.11.1", - "should": "~11.2.1" + "jshint": "~2.10.2", + "markdown-it": "^10.0.0", + "mocha": "~6.2.1", + "should": "~13.2.3" }, "jshintConfig": { "camelcase": true, From 431b556708fbf96c701afc6efd8331348315fae1 Mon Sep 17 00:00:00 2001 From: Nicolas CARPi Date: Thu, 17 Oct 2019 00:48:17 +0200 Subject: [PATCH 46/98] Add CHANGELOG.md and commit package-lock.json --- CHANGELOG.md | 18 + package-lock.json | 1126 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1144 insertions(+) create mode 100644 CHANGELOG.md create mode 100644 package-lock.json diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..579ed33 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,18 @@ +# Changelog for apidoc-core + +## Unreleased + +### Added + +* Allow the use of | to specify different types: {String|Number} (#62) +* Allow the use of $ in the param name (#36) +* Allow special characters in name and group + +### Changed + +* Update dependencies +* Use os.EOL instead of own logic for line endings + +### Fixed + +* Update elixir's syntax (#65) diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..91df93e --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1126 @@ +{ + "name": "apidoc-core", + "version": "0.9.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", + "dev": true + }, + "apidoc-example": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/apidoc-example/-/apidoc-example-0.2.1.tgz", + "integrity": "sha1-ay0RNZnjSwhkOEFfraDtXeiqR8o=", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "cli": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", + "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=", + "dev": true, + "requires": { + "exit": "0.1.2", + "glob": "^7.1.1" + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, + "requires": { + "date-now": "^0.1.4" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, + "dom-serializer": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.1.tgz", + "integrity": "sha512-sK3ujri04WyjwQXVoK4PU3y8ula1stq10GJZpqHIUgoGZdsGzAGu65BnU3d08aTVSvO7mGPZUc0wTEDL+qGE0Q==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", + "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", + "dev": true + }, + "entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", + "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==", + "dev": true + } + } + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domhandler": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", + "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "entities": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", + "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", + "dev": true + }, + "es-abstract": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.15.0.tgz", + "integrity": "sha512-bhkEqWJ2t2lMeaJDuk7okMkJWI/yqgH/EoGwpcvv0XW9RWQsRspI4wt6xuyuvMvvQE3gg/D9HXppgk21w78GyQ==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.0", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-inspect": "^1.6.0", + "object-keys": "^1.1.1", + "string.prototype.trimleft": "^2.1.0", + "string.prototype.trimright": "^2.1.0" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "flat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", + "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", + "dev": true, + "requires": { + "is-buffer": "~2.0.3" + } + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", + "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==" + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "htmlparser2": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", + "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", + "dev": true, + "requires": { + "domelementtype": "1", + "domhandler": "2.3", + "domutils": "1.5", + "entities": "1.0", + "readable-stream": "1.1" + } + }, + "iconv-lite": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.0.tgz", + "integrity": "sha512-NnEhI9hIEKHOzJ4f697DMz9IQEXr/MMJ5w64vN2/4Ai+wRnvV7SBrL0KLoRlwaKVghOc7LQ5YkPLuX146b6Ydw==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "is-buffer": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", + "dev": true + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "^1.0.1" + } + }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.0" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jshint": { + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.10.2.tgz", + "integrity": "sha512-e7KZgCSXMJxznE/4WULzybCMNXNAd/bf5TSrvVEq78Q/K8ZwFpmBqQeDtNiHc3l49nV4E/+YeHU/JZjSUIrLAA==", + "dev": true, + "requires": { + "cli": "~1.0.0", + "console-browserify": "1.1.x", + "exit": "0.1.x", + "htmlparser2": "3.8.x", + "lodash": "~4.17.11", + "minimatch": "~3.0.2", + "shelljs": "0.3.x", + "strip-json-comments": "1.0.x" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "klaw-sync": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", + "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "requires": { + "graceful-fs": "^4.1.11" + } + }, + "linkify-it": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", + "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", + "dev": true, + "requires": { + "uc.micro": "^1.0.1" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "dependencies": { + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "markdown-it": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz", + "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "entities": "~2.0.0", + "linkify-it": "^2.0.0", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "dependencies": { + "entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", + "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==", + "dev": true + } + } + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "mocha": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.1.tgz", + "integrity": "sha512-VCcWkLHwk79NYQc8cxhkmI8IigTIhsCwZ6RTxQsqK6go4UvEhzJkYuHm8B2YtlSxcYq2fY+ucr4JBwoD6ci80A==", + "dev": true, + "requires": { + "ansi-colors": "3.2.3", + "browser-stdout": "1.3.1", + "debug": "3.2.6", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "find-up": "3.0.0", + "glob": "7.1.3", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.13.1", + "log-symbols": "2.2.0", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "ms": "2.1.1", + "node-environment-flags": "1.0.5", + "object.assign": "4.1.0", + "strip-json-comments": "2.0.1", + "supports-color": "6.0.0", + "which": "1.3.1", + "wide-align": "1.1.3", + "yargs": "13.3.0", + "yargs-parser": "13.1.1", + "yargs-unparser": "1.6.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + } + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "node-environment-flags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", + "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", + "dev": true, + "requires": { + "object.getownpropertydescriptors": "^2.0.3", + "semver": "^5.7.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "object-inspect": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", + "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "p-limit": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "shelljs": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", + "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=", + "dev": true + }, + "should": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", + "integrity": "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==", + "dev": true, + "requires": { + "should-equal": "^2.0.0", + "should-format": "^3.0.3", + "should-type": "^1.4.0", + "should-type-adaptors": "^1.0.1", + "should-util": "^1.0.0" + } + }, + "should-equal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", + "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", + "dev": true, + "requires": { + "should-type": "^1.4.0" + } + }, + "should-format": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", + "integrity": "sha1-m/yPdPo5IFxT04w01xcwPidxJPE=", + "dev": true, + "requires": { + "should-type": "^1.3.0", + "should-type-adaptors": "^1.0.1" + } + }, + "should-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", + "integrity": "sha1-B1bYzoRt/QmEOmlHcZ36DUz/XPM=", + "dev": true + }, + "should-type-adaptors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", + "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", + "dev": true, + "requires": { + "should-type": "^1.3.0", + "should-util": "^1.0.0" + } + }, + "should-util": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz", + "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string.prototype.trimleft": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", + "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", + "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "strip-json-comments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", + "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", + "dev": true + }, + "supports-color": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yargs": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + } + } + }, + "yargs-unparser": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", + "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", + "dev": true, + "requires": { + "flat": "^4.1.0", + "lodash": "^4.17.15", + "yargs": "^13.3.0" + } + } + } +} From 1146db614be5989cd803456ef3c5a25881a3fa4e Mon Sep 17 00:00:00 2001 From: Nicolas CARPi Date: Thu, 17 Oct 2019 00:53:07 +0200 Subject: [PATCH 47/98] Add CONTRIBUTING.md file, remove changelog link in README and bump node version for travis --- .travis.yml | 2 +- CONTRIBUTING.md | 5 +++++ README.md | 4 +--- 3 files changed, 7 insertions(+), 4 deletions(-) create mode 100644 CONTRIBUTING.md diff --git a/.travis.yml b/.travis.yml index 88a8dbe..c7b016c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,3 +1,3 @@ language: node_js node_js: - - 6 + - 12 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..e14dcfd --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,5 @@ +# Contributing to apidoc-core + +* Target the `dev` branch for your PR +* Add a test if possible +* Use `npm test` diff --git a/README.md b/README.md index 454e6cf..d66a3a2 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,9 @@ # apidoc-core -Core parser library to generate apidoc result following the [apidoc-spec](https://github.com/apidoc/apidoc-spec) +Core parser library to generate apidoc result following the [apidoc-spec](https://github.com/apidoc/apidoc-spec). [![Build Status](https://travis-ci.org/apidoc/apidoc-core.svg?branch=master)](https://travis-ci.org/apidoc/apidoc-core) [![Dependency Status](https://david-dm.org/apidoc/apidoc-core.svg)](https://david-dm.org/apidoc/apidoc-core) [![NPM version](https://badge.fury.io/js/apidoc-core.svg)](http://badge.fury.io/js/apidoc-core) If you are an end user, please proceed to [apidoc](https://github.com/apidoc/apidoc) or [apidoc-documentation](http://apidocjs.com). - -[Changelog](https://github.com/apidoc/apidoc/blob/master/CHANGELOG.md). From 1e30ce037d3d63134cb63d7818079b72904bbee7 Mon Sep 17 00:00:00 2001 From: Nicolas CARPi Date: Sat, 19 Oct 2019 22:28:33 +0200 Subject: [PATCH 48/98] Fix lua parsing. (#63) --- lib/languages/lua.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/languages/lua.js b/lib/languages/lua.js index 4b8d339..8b7fb7e 100644 --- a/lib/languages/lua.js +++ b/lib/languages/lua.js @@ -3,7 +3,7 @@ */ module.exports = { // find document blocks between '--[[' and '--]]' - docBlocksRegExp: /--\[\[\uffff?(.+?)\uffff?(?:\s*)?--\]\]/g, + docBlocksRegExp: /--\[\[\uffff?(.+?)\uffff?(?:\s*)?\]\]/g, // remove not needed ' * ' and tabs at the beginning inlineRegExp: /^(\s*)?(\*)[ ]?/gm }; From 5cf12fd107fb748fd9a040a56d0d7f7baa90a58a Mon Sep 17 00:00:00 2001 From: BELGHITI ALAOUI Omar Date: Thu, 31 Oct 2019 12:19:38 +0100 Subject: [PATCH 49/98] add possibility to filter by tag --- lib/parser.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/lib/parser.js b/lib/parser.js index c651080..7de34e3 100644 --- a/lib/parser.js +++ b/lib/parser.js @@ -10,6 +10,7 @@ var ParameterError = require('./errors/parameter_error'); var ParserError = require('./errors/parser_error'); var app = {}; +var filterTag = null; function Parser(_app) { var self = this; @@ -49,6 +50,11 @@ function Parser(_app) { self.addParser(parser, require(filename)); } }); + + if (app.options.filterBy) { + var tag = app.options.filterBy.split('=')[0]; + filterTag = (tag.indexOf('api') != -1) ? tag : null; + } } /** @@ -410,8 +416,11 @@ Parser.prototype._findBlocks = function() { */ Parser.prototype._findBlockWithApiGetIndex = function(blocks) { var foundIndexes = []; + const valueTofilter = (filterTag) ? app.options.filterBy.split('=')[1] : null; for (var i = 0; i < blocks.length; i += 1) { var found = false; + let isToFilterBy = false; + let isDefine = false; for (var j = 0; j < blocks[i].length; j += 1) { // check apiIgnore if (blocks[i][j].name.substr(0, 9) === 'apiignore') { @@ -426,10 +435,24 @@ Parser.prototype._findBlockWithApiGetIndex = function(blocks) { found = false; break; } + // if (filterTag && blocks[i][j].name.substr(0, 10) === filterTag && blocks[i][j].content !== valueTofilter) { + if (filterTag) { + if (blocks[i][j].name.substr(0, 9) === 'apidefine') { + isDefine = true; + } + if (blocks[i][j].name.substr(0, filterTag.length) === filterTag && blocks[i][j].content === valueTofilter) { + isToFilterBy = true; + } + } if (blocks[i][j].name.substr(0, 3) === 'api') found = true; } + + if (filterTag) { + found = found && (isToFilterBy || isDefine); + } + if (found) { foundIndexes.push(i); app.log.debug('api found in block: ' + i); From 2a3c09fa1c9ba5ed177180422959d25ce52a16c3 Mon Sep 17 00:00:00 2001 From: BELGHITI ALAOUI Omar Date: Mon, 4 Nov 2019 14:07:27 +0100 Subject: [PATCH 50/98] fix jshint --- lib/parser.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/parser.js b/lib/parser.js index 7de34e3..00b06c8 100644 --- a/lib/parser.js +++ b/lib/parser.js @@ -53,7 +53,7 @@ function Parser(_app) { if (app.options.filterBy) { var tag = app.options.filterBy.split('=')[0]; - filterTag = (tag.indexOf('api') != -1) ? tag : null; + filterTag = (tag.indexOf('api') !== -1) ? tag : null; } } @@ -416,11 +416,11 @@ Parser.prototype._findBlocks = function() { */ Parser.prototype._findBlockWithApiGetIndex = function(blocks) { var foundIndexes = []; - const valueTofilter = (filterTag) ? app.options.filterBy.split('=')[1] : null; + var valueTofilter = (filterTag) ? app.options.filterBy.split('=')[1] : null; for (var i = 0; i < blocks.length; i += 1) { var found = false; - let isToFilterBy = false; - let isDefine = false; + var isToFilterBy = false; + var isDefine = false; for (var j = 0; j < blocks[i].length; j += 1) { // check apiIgnore if (blocks[i][j].name.substr(0, 9) === 'apiignore') { From 3b82b5e77ea3baf2f58dc570a7527c6530e6ce44 Mon Sep 17 00:00:00 2001 From: Nicolas CARPi Date: Wed, 13 Nov 2019 17:31:02 +0100 Subject: [PATCH 51/98] 0.10.0 --- CHANGELOG.md | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 579ed33..53b513a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog for apidoc-core -## Unreleased +## 0.10.0 ### Added diff --git a/package.json b/package.json index 587c802..426308b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "apidoc-core", - "version": "0.9.0", + "version": "0.10.0", "description": "Core parser library to generate apidoc result following the apidoc-spec", "author": "Peter Rottmann ", "license": "MIT", From e8d55c81e28c7e8a0e6809eed15c11f17474a577 Mon Sep 17 00:00:00 2001 From: Nicolas CARPi Date: Sun, 17 Nov 2019 01:37:34 +0100 Subject: [PATCH 52/98] Don't append the url to sampleUrl if it's absolute See apidoc/apidoc#201 --- lib/parsers/api_sample_request.js | 42 ++++++------ lib/workers/api_sample_request.js | 102 ++++++++++++++++-------------- 2 files changed, 76 insertions(+), 68 deletions(-) diff --git a/lib/parsers/api_sample_request.js b/lib/parsers/api_sample_request.js index 2eb5112..79c99e6 100644 --- a/lib/parsers/api_sample_request.js +++ b/lib/parsers/api_sample_request.js @@ -1,21 +1,21 @@ -var trim = require('../utils/trim'); - -function parse(content) { - var url = trim(content); - - if(url.length === 0) - return null; - - return { - url: url - }; -} - -/** - * Exports - */ -module.exports = { - parse : parse, - path : 'local.sampleRequest', - method: 'push' -}; +var trim = require('../utils/trim'); + +function parse(content) { + var url = trim(content); + + if(url.length === 0) + return null; + + return { + url: url + }; +} + +/** + * Exports + */ +module.exports = { + parse : parse, + path : 'local.sampleRequest', + method: 'push' +}; diff --git a/lib/workers/api_sample_request.js b/lib/workers/api_sample_request.js index ecbb8bd..d28eb16 100644 --- a/lib/workers/api_sample_request.js +++ b/lib/workers/api_sample_request.js @@ -1,47 +1,55 @@ -/** - * PostProcess - * - * @param {Object[]} parsedFiles - * @param {String[]} filenames - * @param {Object[]} preProcess - * @param {Object} packageInfos - */ -function postProcess(parsedFiles, filenames, preProcess, packageInfos) { - var targetName = 'sampleRequest'; - - parsedFiles.forEach(function(parsedFile) { - parsedFile.forEach(function(block) { - if (block.local[targetName]) { - var newBlock = []; - block.local[targetName].forEach(function(entry) { - if (entry.url !== 'off') { - // Check if is an internal url - if (packageInfos.sampleUrl && entry.url.length >= 4 && entry.url.substr(0, 4).toLowerCase() !== 'http') { - // Prepend sampleUrl - entry.url = packageInfos.sampleUrl + entry.url; - } - newBlock.push(entry); - } - }); // forEach - - if (newBlock.length === 0) - delete block.local[targetName]; - else - block.local[targetName] = newBlock; - } else { - if (packageInfos.sampleUrl && block.local && block.local.url) { - block.local[targetName] = [{ - 'url': packageInfos.sampleUrl + block.local.url - }]; - } - } - }); - }); -} - -/** - * Exports - */ -module.exports = { - postProcess: postProcess -}; +/** + * PostProcess + * + * @param {Object[]} parsedFiles + * @param {String[]} filenames + * @param {Object[]} preProcess + * @param {Object} packageInfos + */ +function postProcess(parsedFiles, filenames, preProcess, packageInfos) { + var targetName = 'sampleRequest'; + + parsedFiles.forEach(function(parsedFile) { + parsedFile.forEach(function(block) { + if (block.local[targetName]) { + var newBlock = []; + block.local[targetName].forEach(function(entry) { + if (entry.url !== 'off') { + // Check if is an internal url + if (packageInfos.sampleUrl && entry.url.length >= 4 && entry.url.substr(0, 4).toLowerCase() !== 'http') { + // Prepend sampleUrl + entry.url = packageInfos.sampleUrl + entry.url; + } + newBlock.push(entry); + } + }); // forEach + + if (newBlock.length === 0) + delete block.local[targetName]; + else + block.local[targetName] = newBlock; + } else { + var url; + if (packageInfos.sampleUrl && block.local && block.local.url) { + // if the block local url is absolute, just use this don't append to the sampleUrl + if (block.local.url.length >= 4 && block.local.url.substr(0, 4).toLowerCase() !== 'http') { + url = packageInfos.sampleUrl + block.local.url; + } else { + url = block.local.url + } + + block.local[targetName] = [{ + 'url': url + }]; + } + } + }); + }); +} + +/** + * Exports + */ +module.exports = { + postProcess: postProcess +}; From 0a3bf39fa4b0c6a2b89225f4b6c5f139f77b210d Mon Sep 17 00:00:00 2001 From: obelghitialaoui Date: Mon, 18 Nov 2019 10:08:04 +0100 Subject: [PATCH 53/98] remove unused comment --- lib/parser.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/parser.js b/lib/parser.js index 00b06c8..c71ca6b 100644 --- a/lib/parser.js +++ b/lib/parser.js @@ -435,7 +435,7 @@ Parser.prototype._findBlockWithApiGetIndex = function(blocks) { found = false; break; } - // if (filterTag && blocks[i][j].name.substr(0, 10) === filterTag && blocks[i][j].content !== valueTofilter) { + if (filterTag) { if (blocks[i][j].name.substr(0, 9) === 'apidefine') { isDefine = true; From 60daf87f280552f7a16492066d6d63c8a549b8ae Mon Sep 17 00:00:00 2001 From: obelghitialaoui Date: Mon, 18 Nov 2019 10:11:04 +0100 Subject: [PATCH 54/98] add explanation comment --- lib/parser.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/parser.js b/lib/parser.js index c71ca6b..8b4ea03 100644 --- a/lib/parser.js +++ b/lib/parser.js @@ -51,6 +51,7 @@ function Parser(_app) { } }); + // check app.options.filterBy and define the tag to filer by if (app.options.filterBy) { var tag = app.options.filterBy.split('=')[0]; filterTag = (tag.indexOf('api') !== -1) ? tag : null; @@ -416,6 +417,7 @@ Parser.prototype._findBlocks = function() { */ Parser.prototype._findBlockWithApiGetIndex = function(blocks) { var foundIndexes = []; + // get value to filter by var valueTofilter = (filterTag) ? app.options.filterBy.split('=')[1] : null; for (var i = 0; i < blocks.length; i += 1) { var found = false; @@ -435,8 +437,10 @@ Parser.prototype._findBlockWithApiGetIndex = function(blocks) { found = false; break; } - + + // check if the user want to filter by some specifique tag if (filterTag) { + // we need to add all apidefine if (blocks[i][j].name.substr(0, 9) === 'apidefine') { isDefine = true; } From 3e506a2c874672acedfeb619e8c56bf6137dde1d Mon Sep 17 00:00:00 2001 From: belghi_o Date: Mon, 18 Nov 2019 12:48:50 +0100 Subject: [PATCH 55/98] add comment --- lib/parser.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/parser.js b/lib/parser.js index 8b4ea03..b727180 100644 --- a/lib/parser.js +++ b/lib/parser.js @@ -10,7 +10,7 @@ var ParameterError = require('./errors/parameter_error'); var ParserError = require('./errors/parser_error'); var app = {}; -var filterTag = null; +var filterTag = null; // define the tag to filter by function Parser(_app) { var self = this; @@ -453,6 +453,7 @@ Parser.prototype._findBlockWithApiGetIndex = function(blocks) { found = true; } + // add block if it's apidefine or the tag is equale to the value defined in options. if (filterTag) { found = found && (isToFilterBy || isDefine); } From a6e49dd0df6a28f9962c331349ca8b9796f72a18 Mon Sep 17 00:00:00 2001 From: belghi_o Date: Thu, 21 Nov 2019 12:18:57 +0100 Subject: [PATCH 56/98] fix comments --- lib/parser.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/parser.js b/lib/parser.js index b727180..974e416 100644 --- a/lib/parser.js +++ b/lib/parser.js @@ -51,7 +51,7 @@ function Parser(_app) { } }); - // check app.options.filterBy and define the tag to filer by + // check app.options.filterBy and define the tag to filter by if (app.options.filterBy) { var tag = app.options.filterBy.split('=')[0]; filterTag = (tag.indexOf('api') !== -1) ? tag : null; @@ -438,7 +438,7 @@ Parser.prototype._findBlockWithApiGetIndex = function(blocks) { break; } - // check if the user want to filter by some specifique tag + // check if the user want to filter by some specific tag if (filterTag) { // we need to add all apidefine if (blocks[i][j].name.substr(0, 9) === 'apidefine') { @@ -453,7 +453,7 @@ Parser.prototype._findBlockWithApiGetIndex = function(blocks) { found = true; } - // add block if it's apidefine or the tag is equale to the value defined in options. + // add block if it's apidefine or the tag is equal to the value defined in options if (filterTag) { found = found && (isToFilterBy || isDefine); } From d0a89b1a78592605ebd76641816a2774160e5334 Mon Sep 17 00:00:00 2001 From: Nicolas CARPi Date: Fri, 22 Nov 2019 15:37:20 +0100 Subject: [PATCH 57/98] version bump and changelog --- CHANGELOG.md | 6 ++++++ package-lock.json | 2 +- package.json | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 53b513a..33209b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog for apidoc-core +## 0.11.0 + +### Added + +* Allow filtering by tag (PR #91 by @omaretna) + ## 0.10.0 ### Added diff --git a/package-lock.json b/package-lock.json index 91df93e..5d3d2e9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "apidoc-core", - "version": "0.9.0", + "version": "0.11.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 426308b..4c01d4a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "apidoc-core", - "version": "0.10.0", + "version": "0.11.0", "description": "Core parser library to generate apidoc result following the apidoc-spec", "author": "Peter Rottmann ", "license": "MIT", From a67d4d568da19d47268a97577a2fcb1842245982 Mon Sep 17 00:00:00 2001 From: Nicolas CARPi Date: Fri, 22 Nov 2019 15:39:01 +0100 Subject: [PATCH 58/98] remove apidoc-example from devDependencies See: https://github.com/apidoc/apidoc/issues/809#issuecomment-557554261 --- package-lock.json | 6 ------ package.json | 1 - 2 files changed, 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5d3d2e9..96debf7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,12 +10,6 @@ "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", "dev": true }, - "apidoc-example": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/apidoc-example/-/apidoc-example-0.2.1.tgz", - "integrity": "sha1-ay0RNZnjSwhkOEFfraDtXeiqR8o=", - "dev": true - }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", diff --git a/package.json b/package.json index 4c01d4a..36cdc84 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,6 @@ "semver": "~6.3.0" }, "devDependencies": { - "apidoc-example": "*", "jshint": "~2.10.2", "markdown-it": "^10.0.0", "mocha": "~6.2.1", From 8ba8f8205a42601ae94a841719a7ecbe1cedf4b4 Mon Sep 17 00:00:00 2001 From: Nicolas CARPi Date: Sat, 23 Nov 2019 01:45:26 +0100 Subject: [PATCH 59/98] Add missing ; --- lib/workers/api_sample_request.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/workers/api_sample_request.js b/lib/workers/api_sample_request.js index d28eb16..0d15e81 100644 --- a/lib/workers/api_sample_request.js +++ b/lib/workers/api_sample_request.js @@ -35,7 +35,7 @@ function postProcess(parsedFiles, filenames, preProcess, packageInfos) { if (block.local.url.length >= 4 && block.local.url.substr(0, 4).toLowerCase() !== 'http') { url = packageInfos.sampleUrl + block.local.url; } else { - url = block.local.url + url = block.local.url; } block.local[targetName] = [{ From efabd29dabe5522baa0df173841bdcba7e09fdb0 Mon Sep 17 00:00:00 2001 From: Nicolas CARPi Date: Mon, 2 Dec 2019 17:38:49 +0100 Subject: [PATCH 60/98] Changelog for 0.11.0 --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 33209b2..6d0066c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,10 @@ * Allow filtering by tag (PR #91 by @omaretna) +### Fixed + +* Fix apiprivate parser issue (PR #81 by @jason-gao) + ## 0.10.0 ### Added From 8c2798cbc528f1c66e8efdc6b7f0051929d1d8bd Mon Sep 17 00:00:00 2001 From: Peter Rottmann Date: Mon, 2 Dec 2019 17:49:51 +0100 Subject: [PATCH 61/98] fix: Added apidoc-example dependency. --- package-lock.json | 6 ++++++ package.json | 1 + 2 files changed, 7 insertions(+) diff --git a/package-lock.json b/package-lock.json index 96debf7..22572c1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,12 @@ "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", "dev": true }, + "apidoc-example": { + "version": "0.2.1", + "resolved": "https://npm.immonex.de/apidoc-example/-/apidoc-example-0.2.1.tgz", + "integrity": "sha1-ay0RNZnjSwhkOEFfraDtXeiqR8o=", + "dev": true + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", diff --git a/package.json b/package.json index 36cdc84..6ce54f6 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ "semver": "~6.3.0" }, "devDependencies": { + "apidoc-example": "^0.2.1", "jshint": "~2.10.2", "markdown-it": "^10.0.0", "mocha": "~6.2.1", From 99f9becb86179974e9f87a797e5d84f74908631f Mon Sep 17 00:00:00 2001 From: omargho Date: Thu, 2 Jan 2020 04:00:57 +0100 Subject: [PATCH 62/98] fix "Empty parser result" for apiPrivate tag --- lib/parsers/api_private.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/lib/parsers/api_private.js b/lib/parsers/api_private.js index 864ff1b..cce67d1 100644 --- a/lib/parsers/api_private.js +++ b/lib/parsers/api_private.js @@ -1,9 +1,5 @@ -var trim = require('../utils/trim'); - function parse(content) { - content = trim(content); - - return content; + return 'private'; } /** From bb397bf38a543ce86aacf8de1faa69353141ea60 Mon Sep 17 00:00:00 2001 From: Nicolas CARPi Date: Mon, 3 Feb 2020 20:29:07 +0100 Subject: [PATCH 63/98] 0.11.1 --- CHANGELOG.md | 4 ++++ package.json | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d0066c..9227f50 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog for apidoc-core +## 0.11.1 + +* Correctly merge the dev branch + ## 0.11.0 ### Added diff --git a/package.json b/package.json index 36cdc84..96660ac 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "apidoc-core", - "version": "0.11.0", + "version": "0.11.1", "description": "Core parser library to generate apidoc result following the apidoc-spec", "author": "Peter Rottmann ", "license": "MIT", From 933aa580a1aef3e03f622dcf824450f2258e7c03 Mon Sep 17 00:00:00 2001 From: Peter Rottmann Date: Tue, 4 Feb 2020 09:09:13 +0100 Subject: [PATCH 64/98] feat: Add npm registry. --- .npmrc | 1 + 1 file changed, 1 insertion(+) create mode 100644 .npmrc diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..38f11c6 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +registry=https://registry.npmjs.org From e81b9c6d33027e4545f6c828fc45c1342fb5d008 Mon Sep 17 00:00:00 2001 From: tkrause Date: Mon, 18 May 2020 16:30:51 +0200 Subject: [PATCH 65/98] enable the use of an apiUse block in an apiDefine block --- lib/parser.js | 3 +- lib/workers/api_use.js | 113 +++++++++++++++++++++++------------------ 2 files changed, 65 insertions(+), 51 deletions(-) diff --git a/lib/parser.js b/lib/parser.js index 974e416..e041db6 100644 --- a/lib/parser.js +++ b/lib/parser.js @@ -222,7 +222,8 @@ Parser.prototype._parseBlockElements = function(indexApiBlocks, detectedElements preventGlobal = elementParser.preventGlobal === true; // allow multiple inserts into pathTo - allowMultiple = elementParser.allowMultiple === true; + //allowMultiple = elementParser.allowMultiple === true; + allowMultiple = true; // path to an array, where the values should be attached diff --git a/lib/workers/api_use.js b/lib/workers/api_use.js index ca206cd..80307bb 100644 --- a/lib/workers/api_use.js +++ b/lib/workers/api_use.js @@ -66,70 +66,83 @@ function postProcess(parsedFiles, filenames, preProcess, packageInfos, source, t parsedFiles.forEach(function(parsedFile, parsedFileIndex) { parsedFile.forEach(function(block) { - if ( ! block.local[target]) - return; - - block.local[target].forEach(function(definition) { - var name = definition.name; - var version = block.version || packageInfos.defaultVersion; - - if ( ! preProcess[source] || ! preProcess[source][name]) { - throw new WorkerError('Referenced groupname does not exist / it is not defined with @apiDefine.', - filenames[parsedFileIndex], - block.index, - messages.common.element, - messages.common.usage, - messages.common.example, - [ - { 'Groupname': name } - ] + var loopCounter = 0; //add a loop counter to have a break condition when the recursion depth exceed a predifined limit + while (block.local[target]) { + if (loopCounter > 10) { + throw new WorkerError('recursion depth exceeds limit with @apiUse', + filenames[parsedFileIndex], + block.index, + messages.common.element, + messages.common.usage, + messages.common.example, + [ + { 'Groupname': name } + ] ); - } - - var matchedData = {}; - if (preProcess[source][name][version]) { - // found the version - matchedData = preProcess[source][name][version]; - } else { - // find nearest matching version - var foundIndex = -1; - var lastVersion = packageInfos.defaultVersion; - - var versionKeys = Object.keys(preProcess[source][name]); - versionKeys.forEach(function(currentVersion, versionIndex) { - if (semver.gte(version, currentVersion) && semver.gte(currentVersion, lastVersion)) { - lastVersion = currentVersion; - foundIndex = versionIndex; - } - }); + } + + block.local[target].forEach(function(definition) { + var name = definition.name; + var version = block.version || packageInfos.defaultVersion; - if (foundIndex === -1) { - throw new WorkerError('Referenced definition has no matching or a higher version. ' + - 'Check version number in referenced define block.', + if ( ! preProcess[source] || ! preProcess[source][name]) { + throw new WorkerError('Referenced groupname does not exist / it is not defined with @apiDefine.', filenames[parsedFileIndex], block.index, messages.common.element, messages.common.usage, messages.common.example, [ - { 'Groupname': name }, - { 'Version': version }, - { 'Defined versions': versionKeys }, + { 'Groupname': name } ] ); } - var versionName = versionKeys[foundIndex]; - matchedData = preProcess[source][name][versionName]; - } + var matchedData = {}; + if (preProcess[source][name][version]) { + // found the version + matchedData = preProcess[source][name][version]; + } else { + // find nearest matching version + var foundIndex = -1; + var lastVersion = packageInfos.defaultVersion; + + var versionKeys = Object.keys(preProcess[source][name]); + versionKeys.forEach(function(currentVersion, versionIndex) { + if (semver.gte(version, currentVersion) && semver.gte(currentVersion, lastVersion)) { + lastVersion = currentVersion; + foundIndex = versionIndex; + } + }); + + if (foundIndex === -1) { + throw new WorkerError('Referenced definition has no matching or a higher version. ' + + 'Check version number in referenced define block.', + filenames[parsedFileIndex], + block.index, + messages.common.element, + messages.common.usage, + messages.common.example, + [ + { 'Groupname': name }, + { 'Version': version }, + { 'Defined versions': versionKeys }, + ] + ); + } + + var versionName = versionKeys[foundIndex]; + matchedData = preProcess[source][name][versionName]; + } - // remove target, not needed anymore - // TODO: create a cleanup filter - delete block.local[target]; + // remove target, not needed anymore + // TODO: create a cleanup filter + delete block.local[target]; - // copy matched elements into parsed block - _recursiveMerge(block.local, matchedData); - }); + // copy matched elements into parsed block + _recursiveMerge(block.local, matchedData); + }); + } }); }); } From ad4d02bedf1af62c09d9eafe28ccc1205488a5d4 Mon Sep 17 00:00:00 2001 From: tkrause Date: Tue, 19 May 2020 15:52:36 +0200 Subject: [PATCH 66/98] bugfix: the array was modified while iterating --- lib/workers/api_use.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/lib/workers/api_use.js b/lib/workers/api_use.js index 80307bb..43ff2d6 100644 --- a/lib/workers/api_use.js +++ b/lib/workers/api_use.js @@ -80,8 +80,15 @@ function postProcess(parsedFiles, filenames, preProcess, packageInfos, source, t ] ); } + + //create a copy of the elements for save iterating of the elements + const blockClone = [...block.local[target]]; - block.local[target].forEach(function(definition) { + // remove unneeded target before starting the loop, to allow a save insertion of new elements + // TODO: create a cleanup filter + delete block.local[target]; + + blockClone.forEach(function(definition) { var name = definition.name; var version = block.version || packageInfos.defaultVersion; @@ -135,10 +142,6 @@ function postProcess(parsedFiles, filenames, preProcess, packageInfos, source, t matchedData = preProcess[source][name][versionName]; } - // remove target, not needed anymore - // TODO: create a cleanup filter - delete block.local[target]; - // copy matched elements into parsed block _recursiveMerge(block.local, matchedData); }); From 1877ac77de838dc6ddbb1b77a0f3771f0e211df1 Mon Sep 17 00:00:00 2001 From: Henrik Gemal Date: Fri, 22 May 2020 21:00:05 +0200 Subject: [PATCH 67/98] Update index.js --- lib/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/index.js b/lib/index.js index 7416bf9..6c11842 100644 --- a/lib/index.js +++ b/lib/index.js @@ -104,7 +104,7 @@ var app = { var defaultGenerator = { name : 'apidoc', time : new Date(), - url : 'http://apidocjs.com/', + url : 'https://apidocjs.com/', version: '0.0.0' }; @@ -343,7 +343,7 @@ function setMarkdownParser(markdownParser) { * @param {String} [packageInfos.name] Project name. * @param {String} [packageInfos.version] Version (semver) of the project, e.g. 1.0.27 * @param {String} [packageInfos.description] A short description. - * @param {String} [packageInfos.sampleUrl] @see http://apidocjs.com/#param-api-sample-request + * @param {String} [packageInfos.sampleUrl] @see https://apidocjs.com/#param-api-sample-request */ function setPackageInfos(packageInfos) { app.packageInfos = packageInfos; From c895764527df6aeb52d584bbe4d11c352d6f54ca Mon Sep 17 00:00:00 2001 From: Nicolas CARPi Date: Wed, 27 May 2020 14:15:46 +0200 Subject: [PATCH 68/98] Add .editorconfig --- .editorconfig | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..33941e9 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,19 @@ +# https://editorconfig.org + +root = true + +[*] +charset = utf-8 +indent_style = space +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[*.js,*.json] +indent_size = 4 + +[*.html] +indent_size = 2 + +[*.css] +indent_size = 2 From e1fb8d1c4a53048468b6575d6c1239503eeb45d6 Mon Sep 17 00:00:00 2001 From: tommy87 Date: Thu, 28 May 2020 14:42:12 +0200 Subject: [PATCH 69/98] remove old commented code --- lib/parser.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/parser.js b/lib/parser.js index e041db6..4234293 100644 --- a/lib/parser.js +++ b/lib/parser.js @@ -222,7 +222,6 @@ Parser.prototype._parseBlockElements = function(indexApiBlocks, detectedElements preventGlobal = elementParser.preventGlobal === true; // allow multiple inserts into pathTo - //allowMultiple = elementParser.allowMultiple === true; allowMultiple = true; From be8ed6db6f104bde3802611f2c067599fc03d7a2 Mon Sep 17 00:00:00 2001 From: tommy87 Date: Thu, 28 May 2020 14:54:33 +0200 Subject: [PATCH 70/98] replaced tabs by 4 spaces indent --- lib/workers/api_use.js | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/lib/workers/api_use.js b/lib/workers/api_use.js index 43ff2d6..63c2161 100644 --- a/lib/workers/api_use.js +++ b/lib/workers/api_use.js @@ -67,19 +67,19 @@ function postProcess(parsedFiles, filenames, preProcess, packageInfos, source, t parsedFiles.forEach(function(parsedFile, parsedFileIndex) { parsedFile.forEach(function(block) { var loopCounter = 0; //add a loop counter to have a break condition when the recursion depth exceed a predifined limit - while (block.local[target]) { - if (loopCounter > 10) { - throw new WorkerError('recursion depth exceeds limit with @apiUse', - filenames[parsedFileIndex], - block.index, - messages.common.element, - messages.common.usage, - messages.common.example, - [ - { 'Groupname': name } - ] + while (block.local[target]) { + if (loopCounter > 10) { + throw new WorkerError('recursion depth exceeds limit with @apiUse', + filenames[parsedFileIndex], + block.index, + messages.common.element, + messages.common.usage, + messages.common.example, + [ + { 'Groupname': name } + ] ); - } + } //create a copy of the elements for save iterating of the elements const blockClone = [...block.local[target]]; From 65d07df7f256f748a0d8337f1a2915c7ba56e688 Mon Sep 17 00:00:00 2001 From: tkrause Date: Sat, 13 Jun 2020 10:44:41 +0200 Subject: [PATCH 71/98] - fix jshint errors - replace tabs by spaces --- lib/workers/api_use.js | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/lib/workers/api_use.js b/lib/workers/api_use.js index 43ff2d6..3f2c595 100644 --- a/lib/workers/api_use.js +++ b/lib/workers/api_use.js @@ -67,28 +67,29 @@ function postProcess(parsedFiles, filenames, preProcess, packageInfos, source, t parsedFiles.forEach(function(parsedFile, parsedFileIndex) { parsedFile.forEach(function(block) { var loopCounter = 0; //add a loop counter to have a break condition when the recursion depth exceed a predifined limit - while (block.local[target]) { - if (loopCounter > 10) { - throw new WorkerError('recursion depth exceeds limit with @apiUse', - filenames[parsedFileIndex], - block.index, - messages.common.element, - messages.common.usage, - messages.common.example, - [ - { 'Groupname': name } - ] + while (block.local[target]) { + if (loopCounter > 10) { + throw new WorkerError('recursion depth exceeds limit with @apiUse', + filenames[parsedFileIndex], + block.index, + messages.common.element, + messages.common.usage, + messages.common.example, + [ + { 'Groupname': block.name } + ] ); - } + } //create a copy of the elements for save iterating of the elements - const blockClone = [...block.local[target]]; + var blockClone = block.local[target].slice(); // remove unneeded target before starting the loop, to allow a save insertion of new elements // TODO: create a cleanup filter delete block.local[target]; - blockClone.forEach(function(definition) { + for (var blockIndex = 0; blockIndex < blockClone.length; ++blockIndex) { + var definition = blockClone[blockIndex]; var name = definition.name; var version = block.version || packageInfos.defaultVersion; @@ -115,12 +116,13 @@ function postProcess(parsedFiles, filenames, preProcess, packageInfos, source, t var lastVersion = packageInfos.defaultVersion; var versionKeys = Object.keys(preProcess[source][name]); - versionKeys.forEach(function(currentVersion, versionIndex) { + for (var versionIndex = 0; versionIndex < versionKeys.length; ++versionIndex) { + var currentVersion = versionKeys[versionIndex]; if (semver.gte(version, currentVersion) && semver.gte(currentVersion, lastVersion)) { lastVersion = currentVersion; foundIndex = versionIndex; } - }); + } if (foundIndex === -1) { throw new WorkerError('Referenced definition has no matching or a higher version. ' + @@ -144,7 +146,7 @@ function postProcess(parsedFiles, filenames, preProcess, packageInfos, source, t // copy matched elements into parsed block _recursiveMerge(block.local, matchedData); - }); + } } }); }); From b624a23d1d5855756c56df7b1ef642c486b46d60 Mon Sep 17 00:00:00 2001 From: tkrause Date: Sat, 13 Jun 2020 10:55:29 +0200 Subject: [PATCH 72/98] fix previous existing jshint error --- lib/parsers/api_private.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/parsers/api_private.js b/lib/parsers/api_private.js index cce67d1..71e540b 100644 --- a/lib/parsers/api_private.js +++ b/lib/parsers/api_private.js @@ -1,4 +1,4 @@ -function parse(content) { +function parse() { return 'private'; } From 3a9d2f7e8bca084ef76f7e53873e87519b0e591a Mon Sep 17 00:00:00 2001 From: tkrause Date: Sat, 13 Jun 2020 15:31:43 +0200 Subject: [PATCH 73/98] add simple test --- test/worker_api_use_test.js | 78 +++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 test/worker_api_use_test.js diff --git a/test/worker_api_use_test.js b/test/worker_api_use_test.js new file mode 100644 index 0000000..a9908cc --- /dev/null +++ b/test/worker_api_use_test.js @@ -0,0 +1,78 @@ +/*jshint unused:false*/ + +/** + * Test: Parser apiParam + */ + +// node modules +var should = require('should'); + +// lib modules +var worker = require('../lib/workers/api_use'); + +describe('Worker: apiUse', function() { + + var packageInfos = { + name: 'Test recursive apiUse', + version: '0.0.1', + description: 'i am a dummy description', + title: 'Test recursive apiUse', + url: 'http://localhost:18080/', + order: [ 'GetUser', 'PostUser' ], + template: { withCompare: false, withGenerator: true }, + sampleUrl: false, + defaultVersion: '0.0.0' + }; + + var filenames = [ 'fileA', 'fileB', 'fileC' ]; + + // TODO: Add 1.000 more possible cases ;-) + var parsedFilesSimpleTest = [ + //file + [ + { + global: { }, + local: { + use: [ + { name: 'leaf_l' } + ], + name: 'root', + test: ['root'] + }, + expected: 'root', + index: 2 + }, + { + global: { + define: { + name: 'leaf_l', + title: '', + description: '', + } + }, + local: { + test: ['l'] + }, + index: 1, + expected: 'l' + } + ] + ]; + + // create + it('case 1: simple test', function(done) { + var preProcess = worker.preProcess(parsedFilesSimpleTest, filenames, packageInfos); + worker.postProcess(parsedFilesSimpleTest, filenames, preProcess, packageInfos); + + var rootBlock = parsedFilesSimpleTest[0][0]; + rootBlock.local.name.should.eql('root'); + + parsedFilesSimpleTest.forEach(function(parsedFile, parsedFileIndex) { + parsedFile.forEach(function(block) { + rootBlock.local.test.should.containEql(block.expected); + }); + }); + done(); + }); + +}); From 8623dc74e7526f33e80b0a9074a611b90e2c1680 Mon Sep 17 00:00:00 2001 From: tkrause Date: Sat, 13 Jun 2020 15:47:19 +0200 Subject: [PATCH 74/98] add complex recursiv test --- test/worker_api_use_test.js | 139 +++++++++++++++++++++++++++++++++++- 1 file changed, 137 insertions(+), 2 deletions(-) diff --git a/test/worker_api_use_test.js b/test/worker_api_use_test.js index a9908cc..8bf5366 100644 --- a/test/worker_api_use_test.js +++ b/test/worker_api_use_test.js @@ -27,6 +27,9 @@ describe('Worker: apiUse', function() { var filenames = [ 'fileA', 'fileB', 'fileC' ]; // TODO: Add 1.000 more possible cases ;-) + // the tree is build like + // root + // l var parsedFilesSimpleTest = [ //file [ @@ -40,7 +43,6 @@ describe('Worker: apiUse', function() { test: ['root'] }, expected: 'root', - index: 2 }, { global: { @@ -53,12 +55,126 @@ describe('Worker: apiUse', function() { local: { test: ['l'] }, - index: 1, expected: 'l' } ] ]; + // the tree is build like + // root + // l, r + // ll, rr + // rrl, rrr + var parsedFilesRecursiveTest = [ + //file + [ + { + global: { }, + local: { + use: [ + { name: 'leaf_l' }, + { name: 'leaf_r' }, + ], + name: 'root', + test: ['root'] + }, + expected: 'root', + } + ], + [ + { + global: { + define: { + name: 'leaf_l', + title: '', + description: '', + } + }, + local: { + test: ['l'], + use: [ + { name: 'leaf_ll' } + ], + }, + expected: 'l' + }, + { + global: { + define: { + name: 'leaf_rr', + title: '', + description: '', + } + }, + local: { + test: ['rr'], + use: [ + { name: 'leaf_rrr' }, + { name: 'leaf_rrl' } + ], + }, + expected: 'rr' + } + ], + [ + { + global: { + define: { + name: 'leaf_ll', + title: '', + description: '', + } + }, + local: { + test: ['ll'] + }, + expected: 'll' + }, + { + global: { + define: { + name: 'leaf_r', + title: '', + description: '', + } + }, + local: { + test: ['r'], + use: [ + { name: 'leaf_rr' } + ], + }, + expected: 'r' + }, + { + global: { + define: { + name: 'leaf_rrr', + title: '', + description: '', + } + }, + local: { + test: ['rrr'] + }, + expected: 'rrr' + }, + { + global: { + define: { + name: 'leaf_rrl', + title: '', + description: '', + } + }, + local: { + test: ['rrl'] + }, + expected: 'rrl' + } + ] + ]; + // create it('case 1: simple test', function(done) { var preProcess = worker.preProcess(parsedFilesSimpleTest, filenames, packageInfos); @@ -67,6 +183,7 @@ describe('Worker: apiUse', function() { var rootBlock = parsedFilesSimpleTest[0][0]; rootBlock.local.name.should.eql('root'); + //check if the root block contains the expected value from every other block parsedFilesSimpleTest.forEach(function(parsedFile, parsedFileIndex) { parsedFile.forEach(function(block) { rootBlock.local.test.should.containEql(block.expected); @@ -75,4 +192,22 @@ describe('Worker: apiUse', function() { done(); }); + it('case 2: recursive test', function(done) { + var preProcess = worker.preProcess(parsedFilesRecursiveTest, filenames, packageInfos); + worker.postProcess(parsedFilesRecursiveTest, filenames, preProcess, packageInfos); + + var rootBlock = parsedFilesRecursiveTest[0][0]; + rootBlock.local.name.should.eql('root'); + + //console.log(rootBlock); + + //check if the root block contains the expected value from every other block + parsedFilesRecursiveTest.forEach(function(parsedFile, parsedFileIndex) { + parsedFile.forEach(function(block) { + rootBlock.local.test.should.containEql(block.expected); + }); + }); + done(); + }); + }); From 987723d35477d96bcd2a690119a394e845c3493f Mon Sep 17 00:00:00 2001 From: Nicolas CARPi Date: Sat, 18 Jul 2020 19:06:03 +0200 Subject: [PATCH 75/98] npm upgrade --- package-lock.json | 341 +++++++++++++++++++++------------------------- package.json | 10 +- 2 files changed, 164 insertions(+), 187 deletions(-) diff --git a/package-lock.json b/package-lock.json index 22572c1..f240586 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "apidoc-core", - "version": "0.11.0", + "version": "0.11.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -10,9 +10,24 @@ "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", "dev": true }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, "apidoc-example": { "version": "0.2.1", - "resolved": "https://npm.immonex.de/apidoc-example/-/apidoc-example-0.2.1.tgz", + "resolved": "https://registry.npmjs.org/apidoc-example/-/apidoc-example-0.2.1.tgz", "integrity": "sha1-ay0RNZnjSwhkOEFfraDtXeiqR8o=", "dev": true }, @@ -45,6 +60,34 @@ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "cli": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", @@ -166,9 +209,9 @@ "dev": true }, "dom-serializer": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.1.tgz", - "integrity": "sha512-sK3ujri04WyjwQXVoK4PU3y8ula1stq10GJZpqHIUgoGZdsGzAGu65BnU3d08aTVSvO7mGPZUc0wTEDL+qGE0Q==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", "dev": true, "requires": { "domelementtype": "^2.0.1", @@ -182,9 +225,9 @@ "dev": true }, "entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", - "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", + "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==", "dev": true } } @@ -227,27 +270,28 @@ "dev": true }, "es-abstract": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.15.0.tgz", - "integrity": "sha512-bhkEqWJ2t2lMeaJDuk7okMkJWI/yqgH/EoGwpcvv0XW9RWQsRspI4wt6xuyuvMvvQE3gg/D9HXppgk21w78GyQ==", + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", + "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", "dev": true, "requires": { - "es-to-primitive": "^1.2.0", + "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.0", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-inspect": "^1.6.0", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", + "object-inspect": "^1.7.0", "object-keys": "^1.1.1", - "string.prototype.trimleft": "^2.1.0", - "string.prototype.trimright": "^2.1.0" + "object.assign": "^4.1.0", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" } }, "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "requires": { "is-callable": "^1.1.4", @@ -273,6 +317,15 @@ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", "dev": true }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, "flat": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", @@ -310,9 +363,9 @@ "dev": true }, "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -349,9 +402,9 @@ "dev": true }, "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", "dev": true }, "he": { @@ -374,9 +427,9 @@ } }, "iconv-lite": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.0.tgz", - "integrity": "sha512-NnEhI9hIEKHOzJ4f697DMz9IQEXr/MMJ5w64vN2/4Ai+wRnvV7SBrL0KLoRlwaKVghOc7LQ5YkPLuX146b6Ydw==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.2.tgz", + "integrity": "sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==", "requires": { "safer-buffer": ">= 2.1.2 < 3" } @@ -402,15 +455,15 @@ "dev": true }, "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", + "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", "dev": true }, "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", "dev": true }, "is-fullwidth-code-point": { @@ -420,21 +473,21 @@ "dev": true }, "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", + "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==", "dev": true, "requires": { - "has": "^1.0.1" + "has-symbols": "^1.0.1" } }, "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", "dev": true, "requires": { - "has-symbols": "^1.0.0" + "has-symbols": "^1.0.1" } }, "isarray": { @@ -460,9 +513,9 @@ } }, "jshint": { - "version": "2.10.2", - "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.10.2.tgz", - "integrity": "sha512-e7KZgCSXMJxznE/4WULzybCMNXNAd/bf5TSrvVEq78Q/K8ZwFpmBqQeDtNiHc3l49nV4E/+YeHU/JZjSUIrLAA==", + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.10.3.tgz", + "integrity": "sha512-d8AoXcNNYzmm7cdmulQ3dQApbrPYArtVBO6n4xOICe4QsXGNHCAKDcFORzqP52LhK61KX0VhY39yYzCsNq+bxQ==", "dev": true, "requires": { "cli": "~1.0.0", @@ -508,20 +561,12 @@ "requires": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" - }, - "dependencies": { - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } } }, "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" }, "log-symbols": { "version": "2.2.0", @@ -530,37 +575,6 @@ "dev": true, "requires": { "chalk": "^2.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "markdown-it": { @@ -599,24 +613,24 @@ } }, "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", + "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", "dev": true, "requires": { - "minimist": "0.0.8" + "minimist": "^1.2.5" } }, "mocha": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.1.tgz", - "integrity": "sha512-VCcWkLHwk79NYQc8cxhkmI8IigTIhsCwZ6RTxQsqK6go4UvEhzJkYuHm8B2YtlSxcYq2fY+ucr4JBwoD6ci80A==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.3.tgz", + "integrity": "sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg==", "dev": true, "requires": { "ansi-colors": "3.2.3", @@ -631,7 +645,7 @@ "js-yaml": "3.13.1", "log-symbols": "2.2.0", "minimatch": "3.0.4", - "mkdirp": "0.5.1", + "mkdirp": "0.5.4", "ms": "2.1.1", "node-environment-flags": "1.0.5", "object.assign": "4.1.0", @@ -639,20 +653,11 @@ "supports-color": "6.0.0", "which": "1.3.1", "wide-align": "1.1.3", - "yargs": "13.3.0", - "yargs-parser": "13.1.1", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", "yargs-unparser": "1.6.0" }, "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, "glob": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", @@ -700,9 +705,9 @@ } }, "object-inspect": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", - "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", "dev": true }, "object-keys": { @@ -724,13 +729,13 @@ } }, "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" } }, "once": { @@ -742,9 +747,9 @@ } }, "p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -765,6 +770,12 @@ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -884,43 +895,26 @@ "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } } }, - "string.prototype.trimleft": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", - "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", + "string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", "dev": true, "requires": { "define-properties": "^1.1.3", - "function-bind": "^1.1.1" + "es-abstract": "^1.17.5" } }, - "string.prototype.trimright": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", - "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", "dev": true, "requires": { "define-properties": "^1.1.3", - "function-bind": "^1.1.1" + "es-abstract": "^1.17.5" } }, "string_decoder": { @@ -929,6 +923,15 @@ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, "strip-json-comments": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", @@ -996,15 +999,6 @@ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -1039,9 +1033,9 @@ "dev": true }, "yargs": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", - "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "dev": true, "requires": { "cliui": "^5.0.0", @@ -1053,7 +1047,7 @@ "string-width": "^3.0.0", "which-module": "^2.0.0", "y18n": "^4.0.0", - "yargs-parser": "^13.1.1" + "yargs-parser": "^13.1.2" }, "dependencies": { "ansi-regex": { @@ -1062,15 +1056,6 @@ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -1094,21 +1079,13 @@ } }, "yargs-parser": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", - "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - } } }, "yargs-unparser": { diff --git a/package.json b/package.json index a3d6c4b..5eea178 100644 --- a/package.json +++ b/package.json @@ -30,17 +30,17 @@ }, "dependencies": { "fs-extra": "^8.1.0", - "glob": "^7.1.4", - "iconv-lite": "^0.5.0", + "glob": "^7.1.6", + "iconv-lite": "^0.5.2", "klaw-sync": "^6.0.0", - "lodash": "~4.17.15", + "lodash": "^4.17.19", "semver": "~6.3.0" }, "devDependencies": { "apidoc-example": "^0.2.1", - "jshint": "~2.10.2", + "jshint": "^2.10.3", "markdown-it": "^10.0.0", - "mocha": "~6.2.1", + "mocha": "^6.2.3", "should": "~13.2.3" }, "jshintConfig": { From 7cc84e4996d929de6f9bd61b9f262f789e84d41d Mon Sep 17 00:00:00 2001 From: Fulvio Gentile Date: Mon, 3 Aug 2020 22:32:08 +0200 Subject: [PATCH 76/98] fix: Allow `#` and `@` in api param names --- lib/parsers/api_param.js | 2 +- lib/parsers/api_private.js | 2 +- package-lock.json | 209 +++++++++++++++++++++++++++++++++++++ package.json | 1 + test/parsers/api_param.js | 87 +++++++++++++++ 5 files changed, 299 insertions(+), 2 deletions(-) create mode 100644 test/parsers/api_param.js diff --git a/lib/parsers/api_param.js b/lib/parsers/api_param.js index 39628eb..aa2140b 100644 --- a/lib/parsers/api_param.js +++ b/lib/parsers/api_param.js @@ -36,7 +36,7 @@ var regExp = { }, wName: { b: '(\\[?\\s*', // 5 optional optional-marker - name: '([a-zA-Z0-9\\$\\:\\.\\/\\\\_-]+', // 6 + name: '([#@a-zA-Z0-9\\$\\:\\.\\/\\\\_-]+', // 6 withArray: '(?:\\[[a-zA-Z0-9\\.\\/\\\\_-]*\\])?)', // https://github.com/apidoc/apidoc-core/pull/4 oDefaultValue: { // optional defaultValue b: '(?:\\s*=\\s*(?:', // starting with '=', optional surrounding spaces diff --git a/lib/parsers/api_private.js b/lib/parsers/api_private.js index cce67d1..71e540b 100644 --- a/lib/parsers/api_private.js +++ b/lib/parsers/api_private.js @@ -1,4 +1,4 @@ -function parse(content) { +function parse() { return 'private'; } diff --git a/package-lock.json b/package-lock.json index f240586..a47073e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -40,6 +40,21 @@ "sprintf-js": "~1.0.2" } }, + "array-filter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", + "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=", + "dev": true + }, + "available-typed-arrays": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz", + "integrity": "sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ==", + "dev": true, + "requires": { + "array-filter": "^1.0.0" + } + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -193,6 +208,36 @@ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, + "deep-equal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.0.3.tgz", + "integrity": "sha512-Spqdl4H+ky45I9ByyJtXteOm9CaIrPmnIPmOhrkKGNYWeDgCvJ8jNYVCTjChxW4FqGuZnLHADc8EKRMX6+CgvA==", + "dev": true, + "requires": { + "es-abstract": "^1.17.5", + "es-get-iterator": "^1.1.0", + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.2", + "is-regex": "^1.0.5", + "isarray": "^2.0.5", + "object-is": "^1.1.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "regexp.prototype.flags": "^1.3.0", + "side-channel": "^1.0.2", + "which-boxed-primitive": "^1.0.1", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.2" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -288,6 +333,29 @@ "string.prototype.trimstart": "^1.0.1" } }, + "es-get-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.0.tgz", + "integrity": "sha512-UfrmHuWQlNMTs35e1ypnvikg6jCz3SK8v8ImvmDsh36fCVUR1MqoFDiyn0/k52C8NqO3YsO8Oe0azeesNuqSsQ==", + "dev": true, + "requires": { + "es-abstract": "^1.17.4", + "has-symbols": "^1.0.1", + "is-arguments": "^1.0.4", + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-string": "^1.0.5", + "isarray": "^2.0.5" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, "es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -335,6 +403,12 @@ "is-buffer": "~2.0.3" } }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true + }, "fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", @@ -448,6 +522,24 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", + "dev": true + }, + "is-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.0.tgz", + "integrity": "sha512-t5mGUXC/xRheCK431ylNiSkGGpBp8bHENBcENTkDT6ppwPzEVxNGZRvgvmOEfbWkFhA7D2GEuE2mmQTr78sl2g==", + "dev": true + }, + "is-boolean-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.1.tgz", + "integrity": "sha512-TqZuVwa/sppcrhUCAYkGBk7w0yxfQQnxq28fjkO53tnK9FQXmdwz2JS5+GjsWQ6RByES1K40nI+yDic5c9/aAQ==", + "dev": true + }, "is-buffer": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", @@ -472,6 +564,18 @@ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, + "is-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.1.tgz", + "integrity": "sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw==", + "dev": true + }, + "is-number-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", + "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", + "dev": true + }, "is-regex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", @@ -481,6 +585,18 @@ "has-symbols": "^1.0.1" } }, + "is-set": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.1.tgz", + "integrity": "sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA==", + "dev": true + }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true + }, "is-symbol": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", @@ -490,6 +606,30 @@ "has-symbols": "^1.0.1" } }, + "is-typed-array": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.3.tgz", + "integrity": "sha512-BSYUBOK/HJibQ30wWkWold5txYwMUXQct9YHAQJr8fSwvZoiglcqB0pd7vEN23+Tsi9IUEjztdOSzl4qLVYGTQ==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.0", + "es-abstract": "^1.17.4", + "foreach": "^2.0.5", + "has-symbols": "^1.0.1" + } + }, + "is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true + }, + "is-weakset": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.1.tgz", + "integrity": "sha512-pi4vhbhVHGLxohUw7PhGsueT4vRGFoXhP7+RGN0jKIv9+8PWYCQTqtADngrxOm2g46hoH0+g8uZZBzMrvVGDmw==", + "dev": true + }, "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", @@ -710,6 +850,16 @@ "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", "dev": true }, + "object-is": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz", + "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", @@ -793,6 +943,16 @@ "string_decoder": "~0.10.x" } }, + "regexp.prototype.flags": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", + "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -881,6 +1041,16 @@ "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==", "dev": true }, + "side-channel": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.2.tgz", + "integrity": "sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA==", + "dev": true, + "requires": { + "es-abstract": "^1.17.0-next.1", + "object-inspect": "^1.7.0" + } + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -967,12 +1137,51 @@ "isexe": "^2.0.0" } }, + "which-boxed-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.1.tgz", + "integrity": "sha512-7BT4TwISdDGBgaemWU0N0OU7FeAEJ9Oo2P1PHRm/FCWoEi2VLWC9b6xvxAA3C/NMpxg3HXVgi0sMmGbNUbNepQ==", + "dev": true, + "requires": { + "is-bigint": "^1.0.0", + "is-boolean-object": "^1.0.0", + "is-number-object": "^1.0.3", + "is-string": "^1.0.4", + "is-symbol": "^1.0.2" + } + }, + "which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "requires": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + } + }, "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, + "which-typed-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.2.tgz", + "integrity": "sha512-KT6okrd1tE6JdZAy3o2VhMoYPh3+J6EMZLyrxBQsZflI1QCZIxMrIYLkosd8Twf+YfknVIHmYQPgJt238p8dnQ==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.2", + "es-abstract": "^1.17.5", + "foreach": "^2.0.5", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.1", + "is-typed-array": "^1.1.3" + } + }, "wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", diff --git a/package.json b/package.json index 5eea178..548aaa3 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ }, "devDependencies": { "apidoc-example": "^0.2.1", + "deep-equal": "^2.0.3", "jshint": "^2.10.3", "markdown-it": "^10.0.0", "mocha": "^6.2.3", diff --git a/test/parsers/api_param.js b/test/parsers/api_param.js new file mode 100644 index 0000000..4aa5d38 --- /dev/null +++ b/test/parsers/api_param.js @@ -0,0 +1,87 @@ +var deepEqual = require('deep-equal'); +var parser = require('../../lib/parsers/api_param'); + +var supportedSpecialCharacters = [ + '#', + '@', + '.' +]; + +function getTestDataForCharacter(character) { + return [ + { + input: '(params) {String} [' + character + 'id] Id of the product', + expected: { + group: 'params', + type: 'String', + size: undefined, + allowedValues: undefined, + optional: true, + field: character + 'id', + defaultValue: undefined, + description: 'Id of the product' + } + }, + { + input: '(params) {String} [' + character + 'i' + character+ 'd] Id of the product', + expected: { + group: 'params', + type: 'String', + size: undefined, + allowedValues: undefined, + optional: true, + field: character + 'i' + character+ 'd', + defaultValue: undefined, + description: 'Id of the product' + } + }, + { + input: '(params) {String} ' + character + 'id Id of the product', + expected: { + group: 'params', + type: 'String', + size: undefined, + allowedValues: undefined, + optional: false, + field: character + 'id', + defaultValue: undefined, + description: 'Id of the product' + } + }, + { + input: '(params) {String=foo,bar} ' + character + 'id="foo" Id of the product', + expected: { + group: 'params', + type: 'String', + size: undefined, + allowedValues: [ + 'foo', + 'bar' + ], + optional: false, + field: character + 'id', + defaultValue: 'foo', + description: 'Id of the product' + } + } + ]; +} + +describe('api param parser', function() { + supportedSpecialCharacters.forEach(function(character) { + it('Should be able to correctly parse params with special character ' + character, function(done) { + var dataObjects = getTestDataForCharacter(character); + + dataObjects.forEach(function(data) { + var result = parser.parse(data.input); + + if (!deepEqual(result, data.expected)) { + done(new Error('Expected result to be:\n' + JSON.stringify(data.expected, undefined, '\t') + '\n got:\n ' + JSON.stringify(result, undefined, '\t'))); + return; + } + }); + + done(); + }); + }); +}); From d29a20fec7fefb0b96a0a47f1864fccd328e52a4 Mon Sep 17 00:00:00 2001 From: Nicolas CARPi Date: Fri, 14 Aug 2020 04:27:07 +0200 Subject: [PATCH 77/98] 0.12.0 changelog --- CHANGELOG.md | 6 ++++++ package-lock.json | 2 +- package.json | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9227f50..ed2fc1d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog for apidoc-core +## 0.12.0 + +### Changed + +* Allow '#' and '@' in apiParam names (#102 by Fulvio Gentile) + ## 0.11.1 * Correctly merge the dev branch diff --git a/package-lock.json b/package-lock.json index a47073e..1a75304 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "apidoc-core", - "version": "0.11.1", + "version": "0.12.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 548aaa3..287fe72 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "apidoc-core", - "version": "0.11.1", + "version": "0.12.0", "description": "Core parser library to generate apidoc result following the apidoc-spec", "author": "Peter Rottmann ", "license": "MIT", From eae82b602955702f3fdc57cee27c73c853390b60 Mon Sep 17 00:00:00 2001 From: Peter Rottmann Date: Fri, 14 Aug 2020 11:21:02 +0200 Subject: [PATCH 78/98] fix: Update deps. --- package-lock.json | 604 ++++++++++++++++++++++++++++++++++------------ package.json | 16 +- 2 files changed, 458 insertions(+), 162 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1a75304..105df84 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,9 +5,9 @@ "requires": true, "dependencies": { "ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true }, "ansi-regex": { @@ -25,10 +25,20 @@ "color-convert": "^1.9.0" } }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, "apidoc-example": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/apidoc-example/-/apidoc-example-0.2.1.tgz", - "integrity": "sha1-ay0RNZnjSwhkOEFfraDtXeiqR8o=", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/apidoc-example/-/apidoc-example-0.2.3.tgz", + "integrity": "sha512-etjWc6fyRcGKbAc+osoNdE/4nLHU6KiXWX5n4L9McyeuqjcKqyjCreSPwFgGpfX/qnvMHk+jyIFaXlP4++5A3A==", "dev": true }, "argparse": { @@ -46,6 +56,23 @@ "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=", "dev": true }, + "array.prototype.map": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.2.tgz", + "integrity": "sha512-Az3OYxgsa1g7xDYp86l0nnN4bcmuEITGe1rbdEBVkrqkzMgDcbdQ2R7r41pNzti+4NMces3H8gMmuioZUilLgw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.4" + } + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" + }, "available-typed-arrays": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz", @@ -60,6 +87,12 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, + "binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "dev": true + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -69,6 +102,15 @@ "concat-map": "0.0.1" } }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, "browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", @@ -103,6 +145,22 @@ } } }, + "chokidar": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz", + "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.3.0" + } + }, "cli": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", @@ -248,9 +306,9 @@ } }, "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true }, "dom-serializer": { @@ -333,6 +391,12 @@ "string.prototype.trimstart": "^1.0.1" } }, + "es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "dev": true + }, "es-get-iterator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.0.tgz", @@ -385,13 +449,23 @@ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", "dev": true }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { - "locate-path": "^3.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, "flat": { @@ -410,13 +484,14 @@ "dev": true }, "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", + "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", "requires": { + "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" } }, "fs.realpath": { @@ -424,6 +499,13 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -449,6 +531,15 @@ "path-is-absolute": "^1.0.0" } }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, "graceful-fs": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", @@ -501,11 +592,11 @@ } }, "iconv-lite": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.2.tgz", - "integrity": "sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", + "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "inflight": { @@ -534,6 +625,15 @@ "integrity": "sha512-t5mGUXC/xRheCK431ylNiSkGGpBp8bHENBcENTkDT6ppwPzEVxNGZRvgvmOEfbWkFhA7D2GEuE2mmQTr78sl2g==", "dev": true }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, "is-boolean-object": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.1.tgz", @@ -558,24 +658,51 @@ "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", "dev": true }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, "is-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.1.tgz", "integrity": "sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw==", "dev": true }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, "is-number-object": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", "dev": true }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, "is-regex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", @@ -642,6 +769,22 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, + "iterate-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.1.tgz", + "integrity": "sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw==", + "dev": true + }, + "iterate-value": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz", + "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==", + "dev": true, + "requires": { + "es-get-iterator": "^1.0.2", + "iterate-iterator": "^1.0.1" + } + }, "js-yaml": { "version": "3.13.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", @@ -653,27 +796,28 @@ } }, "jshint": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.10.3.tgz", - "integrity": "sha512-d8AoXcNNYzmm7cdmulQ3dQApbrPYArtVBO6n4xOICe4QsXGNHCAKDcFORzqP52LhK61KX0VhY39yYzCsNq+bxQ==", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.12.0.tgz", + "integrity": "sha512-TwuuaUDmra0JMkuqvqy+WGo2xGHSNjv1BA1nTIgtH2K5z1jHuAEeAgp7laaR+hLRmajRjcrM71+vByBDanCyYA==", "dev": true, "requires": { "cli": "~1.0.0", "console-browserify": "1.1.x", "exit": "0.1.x", "htmlparser2": "3.8.x", - "lodash": "~4.17.11", + "lodash": "~4.17.19", "minimatch": "~3.0.2", "shelljs": "0.3.x", "strip-json-comments": "1.0.x" } }, "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", + "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", "requires": { - "graceful-fs": "^4.1.6" + "graceful-fs": "^4.1.6", + "universalify": "^1.0.0" } }, "klaw-sync": { @@ -685,55 +829,54 @@ } }, "linkify-it": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", - "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.2.tgz", + "integrity": "sha512-gDBO4aHNZS6coiZCKVhSNh43F9ioIL4JwRjLZPkoLIY4yZFwg264Y5lu2x6rb1Js42Gh6Yqm2f6L2AJcnkzinQ==", "dev": true, "requires": { "uc.micro": "^1.0.1" } }, "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "^4.1.0" } }, "lodash": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" }, "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", "dev": true, "requires": { - "chalk": "^2.0.1" + "chalk": "^2.4.2" } }, "markdown-it": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz", - "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-11.0.0.tgz", + "integrity": "sha512-+CvOnmbSubmQFSA9dKz1BRiaSMV7rhexl3sngKqFyXSagoA3fBdJQ8oZWtRy2knXdpDXaBw44euz37DeJQ9asg==", "dev": true, "requires": { "argparse": "^1.0.7", "entities": "~2.0.0", - "linkify-it": "^2.0.0", + "linkify-it": "^3.0.1", "mdurl": "^1.0.1", "uc.micro": "^1.0.5" }, "dependencies": { "entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", - "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", + "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==", "dev": true } } @@ -752,97 +895,58 @@ "brace-expansion": "^1.1.7" } }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mkdirp": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", - "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, "mocha": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.3.tgz", - "integrity": "sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.1.1.tgz", + "integrity": "sha512-p7FuGlYH8t7gaiodlFreseLxEmxTgvyG9RgPHODFPySNhwUehu8NIb0vdSt3WFckSneswZ0Un5typYcWElk7HQ==", "dev": true, "requires": { - "ansi-colors": "3.2.3", + "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", + "chokidar": "3.3.1", "debug": "3.2.6", - "diff": "3.5.0", + "diff": "4.0.2", "escape-string-regexp": "1.0.5", - "find-up": "3.0.0", - "glob": "7.1.3", + "find-up": "4.1.0", + "glob": "7.1.6", "growl": "1.10.5", "he": "1.2.0", "js-yaml": "3.13.1", - "log-symbols": "2.2.0", + "log-symbols": "3.0.0", "minimatch": "3.0.4", - "mkdirp": "0.5.4", - "ms": "2.1.1", - "node-environment-flags": "1.0.5", + "ms": "2.1.2", "object.assign": "4.1.0", - "strip-json-comments": "2.0.1", - "supports-color": "6.0.0", - "which": "1.3.1", + "promise.allsettled": "1.0.2", + "serialize-javascript": "4.0.0", + "strip-json-comments": "3.0.1", + "supports-color": "7.1.0", + "which": "2.0.2", "wide-align": "1.1.3", + "workerpool": "6.0.0", "yargs": "13.3.2", "yargs-parser": "13.1.2", - "yargs-unparser": "1.6.0" + "yargs-unparser": "1.6.1" }, "dependencies": { - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", "dev": true } } }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "node-environment-flags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", - "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", - "dev": true, - "requires": { - "object.getownpropertydescriptors": "^2.0.3", - "semver": "^5.7.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true }, "object-inspect": { "version": "1.8.0", @@ -878,16 +982,6 @@ "object-keys": "^1.0.11" } }, - "object.getownpropertydescriptors": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", - "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -906,12 +1000,12 @@ } }, "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "^2.2.0" } }, "p-try": { @@ -921,9 +1015,9 @@ "dev": true }, "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, "path-is-absolute": { @@ -931,6 +1025,34 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true + }, + "promise.allsettled": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.2.tgz", + "integrity": "sha512-UpcYW5S1RaNKT6pd+s9jp9K9rlQge1UXKskec0j6Mmuq7UJCvlS2J2/s/yuPN8ehftf9HXMxWlKiPbGGUzpoRg==", + "dev": true, + "requires": { + "array.prototype.map": "^1.0.1", + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "iterate-value": "^1.0.0" + } + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, "readable-stream": { "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", @@ -943,6 +1065,15 @@ "string_decoder": "~0.10.x" } }, + "readdirp": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz", + "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==", + "dev": true, + "requires": { + "picomatch": "^2.0.7" + } + }, "regexp.prototype.flags": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", @@ -965,15 +1096,30 @@ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } }, "set-blocking": { "version": "2.0.0", @@ -1109,12 +1255,29 @@ "dev": true }, "supports-color": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", - "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + } + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" } }, "uc.micro": { @@ -1124,14 +1287,14 @@ "dev": true }, "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" }, "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { "isexe": "^2.0.0" @@ -1191,6 +1354,12 @@ "string-width": "^1.0.2 || 2" } }, + "workerpool": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.0.tgz", + "integrity": "sha512-fU2OcNA/GVAJLLyKUoHkAgIhKb0JoCpSjLC/G2vYKxUjVmQwGbRVeoPJ1a8U4pnVofz4AQV5Y/NEw8oKqxEBtA==", + "dev": true + }, "wrap-ansi": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", @@ -1265,6 +1434,40 @@ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -1298,14 +1501,107 @@ } }, "yargs-unparser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", - "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.1.tgz", + "integrity": "sha512-qZV14lK9MWsGCmcr7u5oXGH0dbGqZAIxTDrWXZDo5zUr6b6iUmelNKO6x6R1dQT24AH3LgRxJpr8meWy2unolA==", "dev": true, "requires": { + "camelcase": "^5.3.1", + "decamelize": "^1.2.0", "flat": "^4.1.0", - "lodash": "^4.17.15", - "yargs": "^13.3.0" + "is-plain-obj": "^1.1.0", + "yargs": "^14.2.3" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "yargs": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", + "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^15.0.1" + } + }, + "yargs-parser": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz", + "integrity": "sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } } } } diff --git a/package.json b/package.json index 287fe72..c9b7ca6 100644 --- a/package.json +++ b/package.json @@ -29,19 +29,19 @@ "node": ">= 0.10.0" }, "dependencies": { - "fs-extra": "^8.1.0", + "fs-extra": "^9.0.1", "glob": "^7.1.6", - "iconv-lite": "^0.5.2", + "iconv-lite": "^0.6.2", "klaw-sync": "^6.0.0", - "lodash": "^4.17.19", - "semver": "~6.3.0" + "lodash": "^4.17.20", + "semver": "~7.3.2" }, "devDependencies": { - "apidoc-example": "^0.2.1", + "apidoc-example": "^0.2.3", "deep-equal": "^2.0.3", - "jshint": "^2.10.3", - "markdown-it": "^10.0.0", - "mocha": "^6.2.3", + "jshint": "^2.12.0", + "markdown-it": "^11.0.0", + "mocha": "^8.1.1", "should": "~13.2.3" }, "jshintConfig": { From fd3777f77600debb7399b17fda4aa7eecb01f17f Mon Sep 17 00:00:00 2001 From: tkrause Date: Sat, 15 Aug 2020 10:32:58 +0200 Subject: [PATCH 79/98] remove commented code --- test/worker_api_use_test.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/test/worker_api_use_test.js b/test/worker_api_use_test.js index 8bf5366..4418028 100644 --- a/test/worker_api_use_test.js +++ b/test/worker_api_use_test.js @@ -199,8 +199,6 @@ describe('Worker: apiUse', function() { var rootBlock = parsedFilesRecursiveTest[0][0]; rootBlock.local.name.should.eql('root'); - //console.log(rootBlock); - //check if the root block contains the expected value from every other block parsedFilesRecursiveTest.forEach(function(parsedFile, parsedFileIndex) { parsedFile.forEach(function(block) { From c67ce169b4ba50faee952076048fd79992c24ff5 Mon Sep 17 00:00:00 2001 From: Nicolas CARPi Date: Wed, 23 Sep 2020 18:06:38 +0200 Subject: [PATCH 80/98] remove whitespace --- lib/workers/api_use.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/workers/api_use.js b/lib/workers/api_use.js index 3f2c595..6e4dfce 100644 --- a/lib/workers/api_use.js +++ b/lib/workers/api_use.js @@ -80,7 +80,7 @@ function postProcess(parsedFiles, filenames, preProcess, packageInfos, source, t ] ); } - + //create a copy of the elements for save iterating of the elements var blockClone = block.local[target].slice(); From 8ead7e7ed9faa13c4f870a82ab22e0d17bc76561 Mon Sep 17 00:00:00 2001 From: Nicolas CARPi Date: Wed, 23 Sep 2020 18:08:36 +0200 Subject: [PATCH 81/98] version 0.13.0 --- CHANGELOG.md | 6 ++++++ package-lock.json | 2 +- package.json | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ed2fc1d..618f04b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog for apidoc-core +## 0.13.0 + +### Added + +* Enable the use of an apiUse block in an apiDefine block (#99 by tommy87) + ## 0.12.0 ### Changed diff --git a/package-lock.json b/package-lock.json index 105df84..7899002 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "apidoc-core", - "version": "0.12.0", + "version": "0.13.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index c9b7ca6..5e4f629 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "apidoc-core", - "version": "0.12.0", + "version": "0.13.0", "description": "Core parser library to generate apidoc result following the apidoc-spec", "author": "Peter Rottmann ", "license": "MIT", From 27849563c7b1369a8f211f6556eb1182177e7362 Mon Sep 17 00:00:00 2001 From: "Seth Wheeler (Student)" Date: Thu, 24 Sep 2020 12:23:48 -0700 Subject: [PATCH 82/98] implement apiBody and apiQuery --- lib/index.js | 2 + lib/parsers/api_body.js | 141 ++++++++++++++++++++++++++++ lib/parsers/api_query.js | 141 ++++++++++++++++++++++++++++ lib/workers/api_body_title.js | 165 +++++++++++++++++++++++++++++++++ lib/workers/api_query_title.js | 165 +++++++++++++++++++++++++++++++++ 5 files changed, 614 insertions(+) create mode 100644 lib/parsers/api_body.js create mode 100644 lib/parsers/api_query.js create mode 100644 lib/workers/api_body_title.js create mode 100644 lib/workers/api_query_title.js diff --git a/lib/index.js b/lib/index.js index 6c11842..ee23d50 100644 --- a/lib/index.js +++ b/lib/index.js @@ -61,6 +61,8 @@ var app = { }, parsers: { api : './parsers/api.js', + apibody : './parsers/api_body.js', + apiquery : './parsers/api_query.js', apidefine : './parsers/api_define.js', apidescription : './parsers/api_description.js', apierror : './parsers/api_error.js', diff --git a/lib/parsers/api_body.js b/lib/parsers/api_body.js new file mode 100644 index 0000000..5e05db2 --- /dev/null +++ b/lib/parsers/api_body.js @@ -0,0 +1,141 @@ +var trim = require('../utils/trim'); +var unindent = require('../utils/unindent'); + +var group = ''; + +// Search: group, type, optional, fieldname, defaultValue, size, description +// Example: {String{1..4}} [user.name='John Doe'] Users fullname. +// +// Naming convention: +// b -> begin +// e -> end +// name -> the field value +// oName -> wrapper for optional field +// wName -> wrapper for field +var regExp = { + b: '^', // start + oGroup: { // optional group: (404) + b: '\\s*(?:\\(\\s*', // starting with '(', optional surrounding spaces + group: '(.+?)', // 1 + e: '\\s*\\)\\s*)?' // ending with ')', optional surrounding spaces + }, + oType: { // optional type: {string} + b: '\\s*(?:\\{\\s*', // starting with '{', optional surrounding spaces + type: '([a-zA-Z0-9\(\)#:\\.\\/\\\\\\[\\]_\|-]+)', // 2 + oSize: { // optional size within type: {string{1..4}} + b: '\\s*(?:\\{\\s*', // starting with '{', optional surrounding spaces + size: '(.+?)', // 3 + e: '\\s*\\}\\s*)?' // ending with '}', optional surrounding spaces + }, + oAllowedValues: { // optional allowed values within type: {string='abc','def'} + b: '\\s*(?:=\\s*', // starting with '=', optional surrounding spaces + possibleValues: '(.+?)', // 4 + e: '(?=\\s*\\}\\s*))?' // ending with '}', optional surrounding spaces + }, + e: '\\s*\\}\\s*)?' // ending with '}', optional surrounding spaces + }, + wName: { + b: '(\\[?\\s*', // 5 optional optional-marker + name: '([a-zA-Z0-9\\$\\:\\.\\/\\\\_-]+', // 6 + withArray: '(?:\\[[a-zA-Z0-9\\.\\/\\\\_-]*\\])?)', // https://github.com/apidoc/apidoc-core/pull/4 + oDefaultValue: { // optional defaultValue + b: '(?:\\s*=\\s*(?:', // starting with '=', optional surrounding spaces + withDoubleQuote: '"([^"]*)"', // 7 + withQuote: '|\'([^\']*)\'', // 8 + withoutQuote: '|(.*?)(?:\\s|\\]|$)', // 9 + e: '))?' + }, + e: '\\s*\\]?\\s*)' + }, + description: '(.*)?', // 10 + e: '$|@' +}; + +function _objectValuesToString(obj) { + var str = ''; + for (var el in obj) { + if (typeof obj[el] === 'string') + str += obj[el]; + else + str += _objectValuesToString(obj[el]); + } + return str; +} + +var parseRegExp = new RegExp(_objectValuesToString(regExp)); + +var allowedValuesWithDoubleQuoteRegExp = new RegExp(/\"[^\"]*[^\"]\"/g); +var allowedValuesWithQuoteRegExp = new RegExp(/\'[^\']*[^\']\'/g); +var allowedValuesRegExp = new RegExp(/[^,\s]+/g); + +function parse(content, source, defaultGroup) { + content = trim(content); + + // replace Linebreak with Unicode + content = content.replace(/\n/g, '\uffff'); + + var matches = parseRegExp.exec(content); + + if ( ! matches) + return null; + + // reverse Unicode Linebreaks + matches.forEach(function (val, index, array) { + if (val) { + array[index] = val.replace(/\uffff/g, '\n'); + } + }); + + var allowedValues = matches[4]; + if (allowedValues) { + var regExp; + if (allowedValues.charAt(0) === '"') + regExp = allowedValuesWithDoubleQuoteRegExp; + else if (allowedValues.charAt(0) === '\'') + regExp = allowedValuesWithQuoteRegExp; + else + regExp = allowedValuesRegExp; + + var allowedValuesMatch; + var list = []; + + while ( (allowedValuesMatch = regExp.exec(allowedValues)) ) { + list.push(allowedValuesMatch[0]); + } + allowedValues = list; + } + + // Set global group variable + group = matches[1] || defaultGroup || 'Body'; + + return { + group : group, + type : matches[2], + size : matches[3], + allowedValues: allowedValues, + optional : (matches[5] && matches[5][0] === '[') ? true : false, + field : matches[6], + defaultValue : matches[7] || matches[8] || matches[9], + description : unindent(matches[10] || '') + }; +} + +function path() { + return 'local.body.fields.' + getGroup(); +} + +function getGroup() { + return group; +} + +/** + * Exports + */ +module.exports = { + parse : parse, + path : path, + method : 'push', + getGroup : getGroup, + markdownFields: [ 'description', 'type' ], + markdownRemovePTags: [ 'type' ] +}; diff --git a/lib/parsers/api_query.js b/lib/parsers/api_query.js new file mode 100644 index 0000000..9ab526f --- /dev/null +++ b/lib/parsers/api_query.js @@ -0,0 +1,141 @@ +var trim = require('../utils/trim'); +var unindent = require('../utils/unindent'); + +var group = ''; + +// Search: group, type, optional, fieldname, defaultValue, size, description +// Example: {String{1..4}} [user.name='John Doe'] Users fullname. +// +// Naming convention: +// b -> begin +// e -> end +// name -> the field value +// oName -> wrapper for optional field +// wName -> wrapper for field +var regExp = { + b: '^', // start + oGroup: { // optional group: (404) + b: '\\s*(?:\\(\\s*', // starting with '(', optional surrounding spaces + group: '(.+?)', // 1 + e: '\\s*\\)\\s*)?' // ending with ')', optional surrounding spaces + }, + oType: { // optional type: {string} + b: '\\s*(?:\\{\\s*', // starting with '{', optional surrounding spaces + type: '([a-zA-Z0-9\(\)#:\\.\\/\\\\\\[\\]_\|-]+)', // 2 + oSize: { // optional size within type: {string{1..4}} + b: '\\s*(?:\\{\\s*', // starting with '{', optional surrounding spaces + size: '(.+?)', // 3 + e: '\\s*\\}\\s*)?' // ending with '}', optional surrounding spaces + }, + oAllowedValues: { // optional allowed values within type: {string='abc','def'} + b: '\\s*(?:=\\s*', // starting with '=', optional surrounding spaces + possibleValues: '(.+?)', // 4 + e: '(?=\\s*\\}\\s*))?' // ending with '}', optional surrounding spaces + }, + e: '\\s*\\}\\s*)?' // ending with '}', optional surrounding spaces + }, + wName: { + b: '(\\[?\\s*', // 5 optional optional-marker + name: '([a-zA-Z0-9\\$\\:\\.\\/\\\\_-]+', // 6 + withArray: '(?:\\[[a-zA-Z0-9\\.\\/\\\\_-]*\\])?)', // https://github.com/apidoc/apidoc-core/pull/4 + oDefaultValue: { // optional defaultValue + b: '(?:\\s*=\\s*(?:', // starting with '=', optional surrounding spaces + withDoubleQuote: '"([^"]*)"', // 7 + withQuote: '|\'([^\']*)\'', // 8 + withoutQuote: '|(.*?)(?:\\s|\\]|$)', // 9 + e: '))?' + }, + e: '\\s*\\]?\\s*)' + }, + description: '(.*)?', // 10 + e: '$|@' +}; + +function _objectValuesToString(obj) { + var str = ''; + for (var el in obj) { + if (typeof obj[el] === 'string') + str += obj[el]; + else + str += _objectValuesToString(obj[el]); + } + return str; +} + +var parseRegExp = new RegExp(_objectValuesToString(regExp)); + +var allowedValuesWithDoubleQuoteRegExp = new RegExp(/\"[^\"]*[^\"]\"/g); +var allowedValuesWithQuoteRegExp = new RegExp(/\'[^\']*[^\']\'/g); +var allowedValuesRegExp = new RegExp(/[^,\s]+/g); + +function parse(content, source, defaultGroup) { + content = trim(content); + + // replace Linebreak with Unicode + content = content.replace(/\n/g, '\uffff'); + + var matches = parseRegExp.exec(content); + + if ( ! matches) + return null; + + // reverse Unicode Linebreaks + matches.forEach(function (val, index, array) { + if (val) { + array[index] = val.replace(/\uffff/g, '\n'); + } + }); + + var allowedValues = matches[4]; + if (allowedValues) { + var regExp; + if (allowedValues.charAt(0) === '"') + regExp = allowedValuesWithDoubleQuoteRegExp; + else if (allowedValues.charAt(0) === '\'') + regExp = allowedValuesWithQuoteRegExp; + else + regExp = allowedValuesRegExp; + + var allowedValuesMatch; + var list = []; + + while ( (allowedValuesMatch = regExp.exec(allowedValues)) ) { + list.push(allowedValuesMatch[0]); + } + allowedValues = list; + } + + // Set global group variable + group = matches[1] || defaultGroup || 'Query'; + + return { + group : group, + type : matches[2], + size : matches[3], + allowedValues: allowedValues, + optional : (matches[5] && matches[5][0] === '[') ? true : false, + field : matches[6], + defaultValue : matches[7] || matches[8] || matches[9], + description : unindent(matches[10] || '') + }; +} + +function path() { + return 'local.query.fields.' + getGroup(); +} + +function getGroup() { + return group; +} + +/** + * Exports + */ +module.exports = { + parse : parse, + path : path, + method : 'push', + getGroup : getGroup, + markdownFields: [ 'description', 'type' ], + markdownRemovePTags: [ 'type' ] +}; diff --git a/lib/workers/api_body_title.js b/lib/workers/api_body_title.js new file mode 100644 index 0000000..bb7efb4 --- /dev/null +++ b/lib/workers/api_body_title.js @@ -0,0 +1,165 @@ +var semver = require('semver'); +var WorkerError = require('../errors/worker_error'); + +// Additional information for error log +var _messages = { + common: { + element: 'apiBody', + usage : '@apiBody (group) varname', + example: '@apiDefine MyValidParamGroup Some title\n@apiBody (MyValidParamGroup) username' + } +}; + +/** + * PreProcess + * + * @param {Object[]} parsedFiles + * @param {String[]} filenames + * @param {Object} packageInfos + * @param {String} target Target path in preProcess-Object (returned result), where the data should be set. + * @returns {Object} + */ +function preProcess(parsedFiles, filenames, packageInfos, target) { + target = target || 'defineParamTitle'; + var source = 'define'; // relative path to the tree (global.), from where the data should be fetched. + + var result = {}; + result[target] = {}; + + parsedFiles.forEach(function(parsedFile) { + parsedFile.forEach(function(block) { + if (block.global[source]) { + var name = block.global[source].name; + var version = block.version || packageInfos.defaultVersion; + + if ( ! result[target][name]) + result[target][name] = {}; + + // fetch from global + result[target][name][version] = block.global[source]; + } + }); + }); + + // remove empty target + if (result[target].length === 0) + delete result[target]; + + return result; +} + +/** + * PostProcess + * + * @param {Object[]} parsedFiles + * @param {String[]} filenames + * @param {Object[]} preProcess + * @param {Object} packageInfos + * @param {String} source Source path in preProcess-Object + * @param {String} target Relative path to the tree (local.), where the data should be modified. + * @param {String} messages + */ +function postProcess(parsedFiles, filenames, preProcess, packageInfos, source, target, messages) { + source = source || 'defineParamTitle'; + target = target || 'parameter'; + messages = messages || _messages; + + parsedFiles.forEach(function(parsedFile, parsedFileIndex) { + parsedFile.forEach(function(block) { + if ( ! block.local[target] || ! block.local[target].fields) + return; + + var newFields = {}; + var fields = block.local[target].fields; + Object.keys(fields).forEach(function(fieldGroup) { + var params = block.local[target].fields[fieldGroup]; + + params.forEach(function(definition) { + var name = definition.group; + var version = block.version || packageInfos.defaultVersion; + var matchedData = {}; + + if ( ! preProcess[source] || ! preProcess[source][name]) { +// TODO: Enable in the next version +// At the moment the (groupname) is optional and must not be defined. +/* + var extra = [ + { 'Groupname': name } + ]; + throw new WorkerError('Referenced groupname does not exist / it is not defined with @apiDefine.', + filenames[parsedFileIndex], + block.index, + messages.common.element, + messages.common.usage, + messages.common.example, + extra); +*/ +// TODO: Remove in the next version +matchedData.name = name; +matchedData.title = name; + + } + +// TODO: Remove in the next version +else { + + if (preProcess[source][name][version]) { + // found the version + matchedData = preProcess[source][name][version]; + } else { + // find nearest matching version + var foundIndex = -1; + var lastVersion = packageInfos.defaultVersion; + + var versionKeys = Object.keys(preProcess[source][name]); + versionKeys.forEach(function(currentVersion, versionIndex) { + if (semver.gte(version, currentVersion) && semver.gte(currentVersion, lastVersion)) { + lastVersion = currentVersion; + foundIndex = versionIndex; + } + }); + + if (foundIndex === -1) { + var extra = [ + { 'Groupname': name }, + { 'Version': version }, + { 'Defined versions': versionKeys }, + ]; + throw new WorkerError('Referenced definition has no matching or a higher version. ' + + 'Check version number in referenced define block.', + filenames[parsedFileIndex], + block.index, + messages.common.element, + messages.common.usage, + messages.common.example, + extra); + } + + var versionName = versionKeys[foundIndex]; + matchedData = preProcess[source][name][versionName]; + } + +// TODO: Remove in the next version +} + + if ( ! newFields[matchedData.title]) + newFields[matchedData.title] = []; + + newFields[matchedData.title].push(definition); + }); + }); + + // replace fields with new field header + // TODO: reduce complexity and remove group + block.local[target].fields = newFields; + }); + }); +} + +/** + * Exports + */ +module.exports = { + preProcess : preProcess, + postProcess: postProcess +}; diff --git a/lib/workers/api_query_title.js b/lib/workers/api_query_title.js new file mode 100644 index 0000000..190f856 --- /dev/null +++ b/lib/workers/api_query_title.js @@ -0,0 +1,165 @@ +var semver = require('semver'); +var WorkerError = require('../errors/worker_error'); + +// Additional information for error log +var _messages = { + common: { + element: 'apiQuery', + usage : '@apiQuery (group) varname', + example: '@apiDefine MyValidParamGroup Some title\n@apiQuery (MyValidParamGroup) username' + } +}; + +/** + * PreProcess + * + * @param {Object[]} parsedFiles + * @param {String[]} filenames + * @param {Object} packageInfos + * @param {String} target Target path in preProcess-Object (returned result), where the data should be set. + * @returns {Object} + */ +function preProcess(parsedFiles, filenames, packageInfos, target) { + target = target || 'defineParamTitle'; + var source = 'define'; // relative path to the tree (global.), from where the data should be fetched. + + var result = {}; + result[target] = {}; + + parsedFiles.forEach(function(parsedFile) { + parsedFile.forEach(function(block) { + if (block.global[source]) { + var name = block.global[source].name; + var version = block.version || packageInfos.defaultVersion; + + if ( ! result[target][name]) + result[target][name] = {}; + + // fetch from global + result[target][name][version] = block.global[source]; + } + }); + }); + + // remove empty target + if (result[target].length === 0) + delete result[target]; + + return result; +} + +/** + * PostProcess + * + * @param {Object[]} parsedFiles + * @param {String[]} filenames + * @param {Object[]} preProcess + * @param {Object} packageInfos + * @param {String} source Source path in preProcess-Object + * @param {String} target Relative path to the tree (local.), where the data should be modified. + * @param {String} messages + */ +function postProcess(parsedFiles, filenames, preProcess, packageInfos, source, target, messages) { + source = source || 'defineParamTitle'; + target = target || 'parameter'; + messages = messages || _messages; + + parsedFiles.forEach(function(parsedFile, parsedFileIndex) { + parsedFile.forEach(function(block) { + if ( ! block.local[target] || ! block.local[target].fields) + return; + + var newFields = {}; + var fields = block.local[target].fields; + Object.keys(fields).forEach(function(fieldGroup) { + var params = block.local[target].fields[fieldGroup]; + + params.forEach(function(definition) { + var name = definition.group; + var version = block.version || packageInfos.defaultVersion; + var matchedData = {}; + + if ( ! preProcess[source] || ! preProcess[source][name]) { +// TODO: Enable in the next version +// At the moment the (groupname) is optional and must not be defined. +/* + var extra = [ + { 'Groupname': name } + ]; + throw new WorkerError('Referenced groupname does not exist / it is not defined with @apiDefine.', + filenames[parsedFileIndex], + block.index, + messages.common.element, + messages.common.usage, + messages.common.example, + extra); +*/ +// TODO: Remove in the next version +matchedData.name = name; +matchedData.title = name; + + } + +// TODO: Remove in the next version +else { + + if (preProcess[source][name][version]) { + // found the version + matchedData = preProcess[source][name][version]; + } else { + // find nearest matching version + var foundIndex = -1; + var lastVersion = packageInfos.defaultVersion; + + var versionKeys = Object.keys(preProcess[source][name]); + versionKeys.forEach(function(currentVersion, versionIndex) { + if (semver.gte(version, currentVersion) && semver.gte(currentVersion, lastVersion)) { + lastVersion = currentVersion; + foundIndex = versionIndex; + } + }); + + if (foundIndex === -1) { + var extra = [ + { 'Groupname': name }, + { 'Version': version }, + { 'Defined versions': versionKeys }, + ]; + throw new WorkerError('Referenced definition has no matching or a higher version. ' + + 'Check version number in referenced define block.', + filenames[parsedFileIndex], + block.index, + messages.common.element, + messages.common.usage, + messages.common.example, + extra); + } + + var versionName = versionKeys[foundIndex]; + matchedData = preProcess[source][name][versionName]; + } + +// TODO: Remove in the next version +} + + if ( ! newFields[matchedData.title]) + newFields[matchedData.title] = []; + + newFields[matchedData.title].push(definition); + }); + }); + + // replace fields with new field header + // TODO: reduce complexity and remove group + block.local[target].fields = newFields; + }); + }); +} + +/** + * Exports + */ +module.exports = { + preProcess : preProcess, + postProcess: postProcess +}; From a02eefd048caa67901d92b5cab7e0f90488a0489 Mon Sep 17 00:00:00 2001 From: "Seth Wheeler (Student)" Date: Mon, 28 Sep 2020 16:56:11 -0700 Subject: [PATCH 83/98] Update tests, reduce reused code --- lib/parsers/api_body.js | 139 ++-------------------------------- lib/parsers/api_query.js | 139 ++-------------------------------- test/parser_api_body_test.js | 130 +++++++++++++++++++++++++++++++ test/parser_api_query_test.js | 86 +++++++++++++++++++++ 4 files changed, 230 insertions(+), 264 deletions(-) create mode 100644 test/parser_api_body_test.js create mode 100644 test/parser_api_query_test.js diff --git a/lib/parsers/api_body.js b/lib/parsers/api_body.js index 5e05db2..0d86ef1 100644 --- a/lib/parsers/api_body.js +++ b/lib/parsers/api_body.js @@ -1,131 +1,8 @@ -var trim = require('../utils/trim'); -var unindent = require('../utils/unindent'); +// Same as @apiParam +var apiParser = require('./api_param.js'); -var group = ''; - -// Search: group, type, optional, fieldname, defaultValue, size, description -// Example: {String{1..4}} [user.name='John Doe'] Users fullname. -// -// Naming convention: -// b -> begin -// e -> end -// name -> the field value -// oName -> wrapper for optional field -// wName -> wrapper for field -var regExp = { - b: '^', // start - oGroup: { // optional group: (404) - b: '\\s*(?:\\(\\s*', // starting with '(', optional surrounding spaces - group: '(.+?)', // 1 - e: '\\s*\\)\\s*)?' // ending with ')', optional surrounding spaces - }, - oType: { // optional type: {string} - b: '\\s*(?:\\{\\s*', // starting with '{', optional surrounding spaces - type: '([a-zA-Z0-9\(\)#:\\.\\/\\\\\\[\\]_\|-]+)', // 2 - oSize: { // optional size within type: {string{1..4}} - b: '\\s*(?:\\{\\s*', // starting with '{', optional surrounding spaces - size: '(.+?)', // 3 - e: '\\s*\\}\\s*)?' // ending with '}', optional surrounding spaces - }, - oAllowedValues: { // optional allowed values within type: {string='abc','def'} - b: '\\s*(?:=\\s*', // starting with '=', optional surrounding spaces - possibleValues: '(.+?)', // 4 - e: '(?=\\s*\\}\\s*))?' // ending with '}', optional surrounding spaces - }, - e: '\\s*\\}\\s*)?' // ending with '}', optional surrounding spaces - }, - wName: { - b: '(\\[?\\s*', // 5 optional optional-marker - name: '([a-zA-Z0-9\\$\\:\\.\\/\\\\_-]+', // 6 - withArray: '(?:\\[[a-zA-Z0-9\\.\\/\\\\_-]*\\])?)', // https://github.com/apidoc/apidoc-core/pull/4 - oDefaultValue: { // optional defaultValue - b: '(?:\\s*=\\s*(?:', // starting with '=', optional surrounding spaces - withDoubleQuote: '"([^"]*)"', // 7 - withQuote: '|\'([^\']*)\'', // 8 - withoutQuote: '|(.*?)(?:\\s|\\]|$)', // 9 - e: '))?' - }, - e: '\\s*\\]?\\s*)' - }, - description: '(.*)?', // 10 - e: '$|@' -}; - -function _objectValuesToString(obj) { - var str = ''; - for (var el in obj) { - if (typeof obj[el] === 'string') - str += obj[el]; - else - str += _objectValuesToString(obj[el]); - } - return str; -} - -var parseRegExp = new RegExp(_objectValuesToString(regExp)); - -var allowedValuesWithDoubleQuoteRegExp = new RegExp(/\"[^\"]*[^\"]\"/g); -var allowedValuesWithQuoteRegExp = new RegExp(/\'[^\']*[^\']\'/g); -var allowedValuesRegExp = new RegExp(/[^,\s]+/g); - -function parse(content, source, defaultGroup) { - content = trim(content); - - // replace Linebreak with Unicode - content = content.replace(/\n/g, '\uffff'); - - var matches = parseRegExp.exec(content); - - if ( ! matches) - return null; - - // reverse Unicode Linebreaks - matches.forEach(function (val, index, array) { - if (val) { - array[index] = val.replace(/\uffff/g, '\n'); - } - }); - - var allowedValues = matches[4]; - if (allowedValues) { - var regExp; - if (allowedValues.charAt(0) === '"') - regExp = allowedValuesWithDoubleQuoteRegExp; - else if (allowedValues.charAt(0) === '\'') - regExp = allowedValuesWithQuoteRegExp; - else - regExp = allowedValuesRegExp; - - var allowedValuesMatch; - var list = []; - - while ( (allowedValuesMatch = regExp.exec(allowedValues)) ) { - list.push(allowedValuesMatch[0]); - } - allowedValues = list; - } - - // Set global group variable - group = matches[1] || defaultGroup || 'Body'; - - return { - group : group, - type : matches[2], - size : matches[3], - allowedValues: allowedValues, - optional : (matches[5] && matches[5][0] === '[') ? true : false, - field : matches[6], - defaultValue : matches[7] || matches[8] || matches[9], - description : unindent(matches[10] || '') - }; -} - -function path() { - return 'local.body.fields.' + getGroup(); -} - -function getGroup() { - return group; +function parse(content, source) { + return apiParser.parse(content, source, 'Body'); } /** @@ -133,9 +10,7 @@ function getGroup() { */ module.exports = { parse : parse, - path : path, - method : 'push', - getGroup : getGroup, - markdownFields: [ 'description', 'type' ], - markdownRemovePTags: [ 'type' ] + path : 'local.body', + method : apiParser.method, + markdownFields: [ 'description' ] }; diff --git a/lib/parsers/api_query.js b/lib/parsers/api_query.js index 9ab526f..686da5b 100644 --- a/lib/parsers/api_query.js +++ b/lib/parsers/api_query.js @@ -1,131 +1,8 @@ -var trim = require('../utils/trim'); -var unindent = require('../utils/unindent'); +// Same as @apiParam +var apiParser = require('./api_param.js'); -var group = ''; - -// Search: group, type, optional, fieldname, defaultValue, size, description -// Example: {String{1..4}} [user.name='John Doe'] Users fullname. -// -// Naming convention: -// b -> begin -// e -> end -// name -> the field value -// oName -> wrapper for optional field -// wName -> wrapper for field -var regExp = { - b: '^', // start - oGroup: { // optional group: (404) - b: '\\s*(?:\\(\\s*', // starting with '(', optional surrounding spaces - group: '(.+?)', // 1 - e: '\\s*\\)\\s*)?' // ending with ')', optional surrounding spaces - }, - oType: { // optional type: {string} - b: '\\s*(?:\\{\\s*', // starting with '{', optional surrounding spaces - type: '([a-zA-Z0-9\(\)#:\\.\\/\\\\\\[\\]_\|-]+)', // 2 - oSize: { // optional size within type: {string{1..4}} - b: '\\s*(?:\\{\\s*', // starting with '{', optional surrounding spaces - size: '(.+?)', // 3 - e: '\\s*\\}\\s*)?' // ending with '}', optional surrounding spaces - }, - oAllowedValues: { // optional allowed values within type: {string='abc','def'} - b: '\\s*(?:=\\s*', // starting with '=', optional surrounding spaces - possibleValues: '(.+?)', // 4 - e: '(?=\\s*\\}\\s*))?' // ending with '}', optional surrounding spaces - }, - e: '\\s*\\}\\s*)?' // ending with '}', optional surrounding spaces - }, - wName: { - b: '(\\[?\\s*', // 5 optional optional-marker - name: '([a-zA-Z0-9\\$\\:\\.\\/\\\\_-]+', // 6 - withArray: '(?:\\[[a-zA-Z0-9\\.\\/\\\\_-]*\\])?)', // https://github.com/apidoc/apidoc-core/pull/4 - oDefaultValue: { // optional defaultValue - b: '(?:\\s*=\\s*(?:', // starting with '=', optional surrounding spaces - withDoubleQuote: '"([^"]*)"', // 7 - withQuote: '|\'([^\']*)\'', // 8 - withoutQuote: '|(.*?)(?:\\s|\\]|$)', // 9 - e: '))?' - }, - e: '\\s*\\]?\\s*)' - }, - description: '(.*)?', // 10 - e: '$|@' -}; - -function _objectValuesToString(obj) { - var str = ''; - for (var el in obj) { - if (typeof obj[el] === 'string') - str += obj[el]; - else - str += _objectValuesToString(obj[el]); - } - return str; -} - -var parseRegExp = new RegExp(_objectValuesToString(regExp)); - -var allowedValuesWithDoubleQuoteRegExp = new RegExp(/\"[^\"]*[^\"]\"/g); -var allowedValuesWithQuoteRegExp = new RegExp(/\'[^\']*[^\']\'/g); -var allowedValuesRegExp = new RegExp(/[^,\s]+/g); - -function parse(content, source, defaultGroup) { - content = trim(content); - - // replace Linebreak with Unicode - content = content.replace(/\n/g, '\uffff'); - - var matches = parseRegExp.exec(content); - - if ( ! matches) - return null; - - // reverse Unicode Linebreaks - matches.forEach(function (val, index, array) { - if (val) { - array[index] = val.replace(/\uffff/g, '\n'); - } - }); - - var allowedValues = matches[4]; - if (allowedValues) { - var regExp; - if (allowedValues.charAt(0) === '"') - regExp = allowedValuesWithDoubleQuoteRegExp; - else if (allowedValues.charAt(0) === '\'') - regExp = allowedValuesWithQuoteRegExp; - else - regExp = allowedValuesRegExp; - - var allowedValuesMatch; - var list = []; - - while ( (allowedValuesMatch = regExp.exec(allowedValues)) ) { - list.push(allowedValuesMatch[0]); - } - allowedValues = list; - } - - // Set global group variable - group = matches[1] || defaultGroup || 'Query'; - - return { - group : group, - type : matches[2], - size : matches[3], - allowedValues: allowedValues, - optional : (matches[5] && matches[5][0] === '[') ? true : false, - field : matches[6], - defaultValue : matches[7] || matches[8] || matches[9], - description : unindent(matches[10] || '') - }; -} - -function path() { - return 'local.query.fields.' + getGroup(); -} - -function getGroup() { - return group; +function parse(content, source) { + return apiParser.parse(content, source, 'Query'); } /** @@ -133,9 +10,7 @@ function getGroup() { */ module.exports = { parse : parse, - path : path, - method : 'push', - getGroup : getGroup, - markdownFields: [ 'description', 'type' ], - markdownRemovePTags: [ 'type' ] + path : 'local.query', + method : apiParser.method, + markdownFields: [ 'description' ] }; diff --git a/test/parser_api_body_test.js b/test/parser_api_body_test.js new file mode 100644 index 0000000..451209f --- /dev/null +++ b/test/parser_api_body_test.js @@ -0,0 +1,130 @@ +/*jshint unused:false*/ + +/** + * Test: Parser apiParam + */ + +// node modules +var should = require('should'); + +// lib modules +var parser = require('../lib/parsers/api_body'); + +describe('Parser: apiParam', function() { + + // TODO: Add 1.000 more possible cases ;-) + var testCases = [ + { + title: 'Simple fieldname only', + content: 'simple', + expected: { + group: 'Body', + type: undefined, + size: undefined, + allowedValues: undefined, + optional: false, + field: 'simple', + defaultValue: undefined, + description: '' + } + }, + { + title: 'Type, Fieldname, Description', + content: '{String} name The users name.', + expected: { + group: 'Body', + type: 'String', + size: undefined, + allowedValues: undefined, + optional: false, + field: 'name', + defaultValue: undefined, + description: 'The users name.' + } + }, + { + title: 'Type, Fieldname, Description', + content: '{String|String[]} name The users name.', + expected: { + group: 'Body', + type: 'String|String[]', + size: undefined, + allowedValues: undefined, + optional: false, + field: 'name', + defaultValue: undefined, + description: 'The users name.' + } + }, + { + title: '$Simple fieldname only', + content: '$simple', + expected: { + group: 'Body', + type: undefined, + size: undefined, + allowedValues: undefined, + optional: false, + field: '$simple', + defaultValue: undefined, + description: '' + } + }, + { + title: 'All options, with optional defaultValue', + content: ' ( MyGroup ) { \\Object\\String.uni-code_char[] { 1..10 } = \'abc\', \'def\' } ' + + '[ \\MyClass\\field.user_first-name = \'John Doe\' ] Some description.', + expected: { + group: 'MyGroup', + type: '\\Object\\String.uni-code_char[]', + size: '1..10', + allowedValues: [ '\'abc\'', '\'def\'' ], + optional: true, + field: '\\MyClass\\field.user_first-name', + defaultValue: 'John Doe', + description: 'Some description.' + } + }, + { + title: 'All options, without optional-marker', + content: ' ( MyGroup ) { \\Object\\String.uni-code_char[] { 1..10 } = \'abc\', \'def\' } ' + + '\\MyClass\\field.user_first-name = \'John Doe\' Some description.', + expected: { + group: 'MyGroup', + type: '\\Object\\String.uni-code_char[]', + size: '1..10', + allowedValues: [ '\'abc\'', '\'def\'' ], + optional: false, + field: '\\MyClass\\field.user_first-name', + defaultValue: 'John Doe', + description: 'Some description.' + } + }, + { + title: 'All options, without optional-marker, without default value quotes', + content: ' ( MyGroup ) { \\Object\\String.uni-code_char[] { 1..10 } = \'abc\', \'def\' } ' + + '\\MyClass\\field.user_first-name = John_Doe Some description.', + expected: { + group: 'MyGroup', + type: '\\Object\\String.uni-code_char[]', + size: '1..10', + allowedValues: [ '\'abc\'', '\'def\'' ], + optional: false, + field: '\\MyClass\\field.user_first-name', + defaultValue: 'John_Doe', + description: 'Some description.' + } + }, + ]; + + // create + it('case 1: should pass all regexp test cases', function(done) { + testCases.forEach(function(testCase) { + var parsed = parser.parse(testCase.content); + (parsed !== null).should.equal(true, 'Title: ' + testCase.title + ', Source: ' + testCase.content); + parsed.should.eql(testCase.expected); + }); + done(); + }); + +}); diff --git a/test/parser_api_query_test.js b/test/parser_api_query_test.js new file mode 100644 index 0000000..b104942 --- /dev/null +++ b/test/parser_api_query_test.js @@ -0,0 +1,86 @@ +/*jshint unused:false*/ + +/** + * Test: Parser apiParam + */ + +// node modules +var should = require('should'); + +// lib modules +var parser = require('../lib/parsers/api_query'); + +describe('Parser: apiQuery', function() { + + // TODO: Add 1.000 more possible cases ;-) + var testCases = [ + { + title: 'Type, Fieldname, Description', + content: '{String} name The users name.', + expected: { + group: 'Query', + type: 'String', + size: undefined, + allowedValues: undefined, + optional: false, + field: 'name', + defaultValue: undefined, + description: 'The users name.' + } + }, + { + title: 'Type, Fieldname, Description', + content: '{String|String[]} name The users name.', + expected: { + group: 'Query', + type: 'String|String[]', + size: undefined, + allowedValues: undefined, + optional: false, + field: 'name', + defaultValue: undefined, + description: 'The users name.' + } + }, + { + title: '$Simple fieldname only', + content: '$simple', + expected: { + group: 'Query', + type: undefined, + size: undefined, + allowedValues: undefined, + optional: false, + field: '$simple', + defaultValue: undefined, + description: '' + } + }, + { + title: 'All options, with optional defaultValue', + content: ' ( MyGroup ) { \\Object\\String.uni-code_char[] { 1..10 } = \'abc\', \'def\' } ' + + '[ \\MyClass\\field.user_first-name = \'John Doe\' ] Some description.', + expected: { + group: 'MyGroup', + type: '\\Object\\String.uni-code_char[]', + size: '1..10', + allowedValues: [ '\'abc\'', '\'def\'' ], + optional: true, + field: '\\MyClass\\field.user_first-name', + defaultValue: 'John Doe', + description: 'Some description.' + } + }, + ]; + + // create + it('case 1: should pass all regexp test cases', function(done) { + testCases.forEach(function(testCase) { + var parsed = parser.parse(testCase.content); + (parsed !== null).should.equal(true, 'Title: ' + testCase.title + ', Source: ' + testCase.content); + parsed.should.eql(testCase.expected); + }); + done(); + }); + +}); From 79528b7479f3bd468b43f894bc304b065e33b12f Mon Sep 17 00:00:00 2001 From: "Seth Wheeler (Student)" Date: Wed, 21 Oct 2020 14:27:51 -0700 Subject: [PATCH 84/98] refactor worker code --- lib/workers/api_body_title.js | 133 ++------------------------------- lib/workers/api_query_title.js | 133 ++------------------------------- 2 files changed, 10 insertions(+), 256 deletions(-) diff --git a/lib/workers/api_body_title.js b/lib/workers/api_body_title.js index bb7efb4..d7005cd 100644 --- a/lib/workers/api_body_title.js +++ b/lib/workers/api_body_title.js @@ -1,5 +1,4 @@ -var semver = require('semver'); -var WorkerError = require('../errors/worker_error'); +var apiWorker = require('./api_param_title.js'); // Additional information for error log var _messages = { @@ -16,36 +15,10 @@ var _messages = { * @param {Object[]} parsedFiles * @param {String[]} filenames * @param {Object} packageInfos - * @param {String} target Target path in preProcess-Object (returned result), where the data should be set. * @returns {Object} */ -function preProcess(parsedFiles, filenames, packageInfos, target) { - target = target || 'defineParamTitle'; - var source = 'define'; // relative path to the tree (global.), from where the data should be fetched. - - var result = {}; - result[target] = {}; - - parsedFiles.forEach(function(parsedFile) { - parsedFile.forEach(function(block) { - if (block.global[source]) { - var name = block.global[source].name; - var version = block.version || packageInfos.defaultVersion; - - if ( ! result[target][name]) - result[target][name] = {}; - - // fetch from global - result[target][name][version] = block.global[source]; - } - }); - }); - - // remove empty target - if (result[target].length === 0) - delete result[target]; - - return result; +function preProcess(parsedFiles, filenames, packageInfos) { + return apiWorker.preProcess(parsedFiles, filenames, packageInfos, 'defineBodyTitle'); } /** @@ -55,105 +28,9 @@ function preProcess(parsedFiles, filenames, packageInfos, target) { * @param {String[]} filenames * @param {Object[]} preProcess * @param {Object} packageInfos - * @param {String} source Source path in preProcess-Object - * @param {String} target Relative path to the tree (local.), where the data should be modified. - * @param {String} messages */ -function postProcess(parsedFiles, filenames, preProcess, packageInfos, source, target, messages) { - source = source || 'defineParamTitle'; - target = target || 'parameter'; - messages = messages || _messages; - - parsedFiles.forEach(function(parsedFile, parsedFileIndex) { - parsedFile.forEach(function(block) { - if ( ! block.local[target] || ! block.local[target].fields) - return; - - var newFields = {}; - var fields = block.local[target].fields; - Object.keys(fields).forEach(function(fieldGroup) { - var params = block.local[target].fields[fieldGroup]; - - params.forEach(function(definition) { - var name = definition.group; - var version = block.version || packageInfos.defaultVersion; - var matchedData = {}; - - if ( ! preProcess[source] || ! preProcess[source][name]) { -// TODO: Enable in the next version -// At the moment the (groupname) is optional and must not be defined. -/* - var extra = [ - { 'Groupname': name } - ]; - throw new WorkerError('Referenced groupname does not exist / it is not defined with @apiDefine.', - filenames[parsedFileIndex], - block.index, - messages.common.element, - messages.common.usage, - messages.common.example, - extra); -*/ -// TODO: Remove in the next version -matchedData.name = name; -matchedData.title = name; - - } - -// TODO: Remove in the next version -else { - - if (preProcess[source][name][version]) { - // found the version - matchedData = preProcess[source][name][version]; - } else { - // find nearest matching version - var foundIndex = -1; - var lastVersion = packageInfos.defaultVersion; - - var versionKeys = Object.keys(preProcess[source][name]); - versionKeys.forEach(function(currentVersion, versionIndex) { - if (semver.gte(version, currentVersion) && semver.gte(currentVersion, lastVersion)) { - lastVersion = currentVersion; - foundIndex = versionIndex; - } - }); - - if (foundIndex === -1) { - var extra = [ - { 'Groupname': name }, - { 'Version': version }, - { 'Defined versions': versionKeys }, - ]; - throw new WorkerError('Referenced definition has no matching or a higher version. ' + - 'Check version number in referenced define block.', - filenames[parsedFileIndex], - block.index, - messages.common.element, - messages.common.usage, - messages.common.example, - extra); - } - - var versionName = versionKeys[foundIndex]; - matchedData = preProcess[source][name][versionName]; - } - -// TODO: Remove in the next version -} - - if ( ! newFields[matchedData.title]) - newFields[matchedData.title] = []; - - newFields[matchedData.title].push(definition); - }); - }); - - // replace fields with new field header - // TODO: reduce complexity and remove group - block.local[target].fields = newFields; - }); - }); +function postProcess(parsedFiles, filenames, preProcess, packageInfos) { + apiWorker.postProcess(parsedFiles, filenames, preProcess, packageInfos, 'defineBodyTitle', 'body', _messages); } /** diff --git a/lib/workers/api_query_title.js b/lib/workers/api_query_title.js index 190f856..0b72b17 100644 --- a/lib/workers/api_query_title.js +++ b/lib/workers/api_query_title.js @@ -1,5 +1,4 @@ -var semver = require('semver'); -var WorkerError = require('../errors/worker_error'); +var apiWorker = require('./api_param_title.js'); // Additional information for error log var _messages = { @@ -16,36 +15,10 @@ var _messages = { * @param {Object[]} parsedFiles * @param {String[]} filenames * @param {Object} packageInfos - * @param {String} target Target path in preProcess-Object (returned result), where the data should be set. * @returns {Object} */ -function preProcess(parsedFiles, filenames, packageInfos, target) { - target = target || 'defineParamTitle'; - var source = 'define'; // relative path to the tree (global.), from where the data should be fetched. - - var result = {}; - result[target] = {}; - - parsedFiles.forEach(function(parsedFile) { - parsedFile.forEach(function(block) { - if (block.global[source]) { - var name = block.global[source].name; - var version = block.version || packageInfos.defaultVersion; - - if ( ! result[target][name]) - result[target][name] = {}; - - // fetch from global - result[target][name][version] = block.global[source]; - } - }); - }); - - // remove empty target - if (result[target].length === 0) - delete result[target]; - - return result; +function preProcess(parsedFiles, filenames, packageInfos) { + return apiWorker.preProcess(parsedFiles, filenames, packageInfos, 'defineQueryTitle'); } /** @@ -55,105 +28,9 @@ function preProcess(parsedFiles, filenames, packageInfos, target) { * @param {String[]} filenames * @param {Object[]} preProcess * @param {Object} packageInfos - * @param {String} source Source path in preProcess-Object - * @param {String} target Relative path to the tree (local.), where the data should be modified. - * @param {String} messages */ -function postProcess(parsedFiles, filenames, preProcess, packageInfos, source, target, messages) { - source = source || 'defineParamTitle'; - target = target || 'parameter'; - messages = messages || _messages; - - parsedFiles.forEach(function(parsedFile, parsedFileIndex) { - parsedFile.forEach(function(block) { - if ( ! block.local[target] || ! block.local[target].fields) - return; - - var newFields = {}; - var fields = block.local[target].fields; - Object.keys(fields).forEach(function(fieldGroup) { - var params = block.local[target].fields[fieldGroup]; - - params.forEach(function(definition) { - var name = definition.group; - var version = block.version || packageInfos.defaultVersion; - var matchedData = {}; - - if ( ! preProcess[source] || ! preProcess[source][name]) { -// TODO: Enable in the next version -// At the moment the (groupname) is optional and must not be defined. -/* - var extra = [ - { 'Groupname': name } - ]; - throw new WorkerError('Referenced groupname does not exist / it is not defined with @apiDefine.', - filenames[parsedFileIndex], - block.index, - messages.common.element, - messages.common.usage, - messages.common.example, - extra); -*/ -// TODO: Remove in the next version -matchedData.name = name; -matchedData.title = name; - - } - -// TODO: Remove in the next version -else { - - if (preProcess[source][name][version]) { - // found the version - matchedData = preProcess[source][name][version]; - } else { - // find nearest matching version - var foundIndex = -1; - var lastVersion = packageInfos.defaultVersion; - - var versionKeys = Object.keys(preProcess[source][name]); - versionKeys.forEach(function(currentVersion, versionIndex) { - if (semver.gte(version, currentVersion) && semver.gte(currentVersion, lastVersion)) { - lastVersion = currentVersion; - foundIndex = versionIndex; - } - }); - - if (foundIndex === -1) { - var extra = [ - { 'Groupname': name }, - { 'Version': version }, - { 'Defined versions': versionKeys }, - ]; - throw new WorkerError('Referenced definition has no matching or a higher version. ' + - 'Check version number in referenced define block.', - filenames[parsedFileIndex], - block.index, - messages.common.element, - messages.common.usage, - messages.common.example, - extra); - } - - var versionName = versionKeys[foundIndex]; - matchedData = preProcess[source][name][versionName]; - } - -// TODO: Remove in the next version -} - - if ( ! newFields[matchedData.title]) - newFields[matchedData.title] = []; - - newFields[matchedData.title].push(definition); - }); - }); - - // replace fields with new field header - // TODO: reduce complexity and remove group - block.local[target].fields = newFields; - }); - }); +function postProcess(parsedFiles, filenames, preProcess, packageInfos) { + apiWorker.postProcess(parsedFiles, filenames, preProcess, packageInfos, 'defineQueryTitle', 'query', _messages); } /** From d0b6ab223107f0f54b508a617c2fe4c616693868 Mon Sep 17 00:00:00 2001 From: Tom Krause Date: Thu, 22 Oct 2020 22:14:54 +0200 Subject: [PATCH 85/98] add test action for validation --- .github/workflows/validating.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 .github/workflows/validating.yml diff --git a/.github/workflows/validating.yml b/.github/workflows/validating.yml new file mode 100644 index 0000000..3f3b3b7 --- /dev/null +++ b/.github/workflows/validating.yml @@ -0,0 +1,17 @@ +name: action-validate +on: [push] +jobs: + run-test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 + - run: npm i + - run: npm run test + run-jshint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 + - run: npm i + - run: npm run jshint From aedff05361780fe9b4bfc64607fb461d468e832a Mon Sep 17 00:00:00 2001 From: Tom Krause Date: Thu, 22 Oct 2020 22:22:13 +0200 Subject: [PATCH 86/98] add push request to condition --- .github/workflows/validating.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/validating.yml b/.github/workflows/validating.yml index 3f3b3b7..bba9668 100644 --- a/.github/workflows/validating.yml +++ b/.github/workflows/validating.yml @@ -1,5 +1,5 @@ name: action-validate -on: [push] +on: [push, pull_request] jobs: run-test: runs-on: ubuntu-latest From 948363da7606f23a93a13b525c2abbc6a8a9f764 Mon Sep 17 00:00:00 2001 From: Tom Krause Date: Thu, 22 Oct 2020 22:47:50 +0200 Subject: [PATCH 87/98] change action name --- .github/workflows/validating.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/validating.yml b/.github/workflows/validating.yml index bba9668..d6132b6 100644 --- a/.github/workflows/validating.yml +++ b/.github/workflows/validating.yml @@ -1,4 +1,4 @@ -name: action-validate +name: validate on: [push, pull_request] jobs: run-test: From 869c55ad31543eb68cb55e77cfc5c25a40e3d1c5 Mon Sep 17 00:00:00 2001 From: "Seth Wheeler (Student)" Date: Fri, 23 Oct 2020 22:15:31 -0700 Subject: [PATCH 88/98] Fix naming issue --- test/parser_api_body_test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/parser_api_body_test.js b/test/parser_api_body_test.js index 451209f..9263660 100644 --- a/test/parser_api_body_test.js +++ b/test/parser_api_body_test.js @@ -10,7 +10,7 @@ var should = require('should'); // lib modules var parser = require('../lib/parsers/api_body'); -describe('Parser: apiParam', function() { +describe('Parser: apiBody', function() { // TODO: Add 1.000 more possible cases ;-) var testCases = [ From 9fc11a71a663a3e1182effca4b39982cb2a7ffdc Mon Sep 17 00:00:00 2001 From: wucong <1875486458@qq.com> Date: Tue, 20 Oct 2020 23:48:25 +0800 Subject: [PATCH 89/98] expose parseSource --- lib/index.js | 112 +++++++++++++++++++++++--------------- lib/parser.js | 8 +++ test/parse_source_test.js | 88 ++++++++++++++++++++++++++++++ 3 files changed, 164 insertions(+), 44 deletions(-) create mode 100644 test/parse_source_test.js diff --git a/lib/index.js b/lib/index.js index 6c11842..b8ff444 100644 --- a/lib/index.js +++ b/lib/index.js @@ -148,47 +148,11 @@ function getSpecificationVersion() { * } */ function parse(options) { - options = _.defaults({}, options, defaults); - - // extend with custom functions - app.filters = _.defaults({}, options.filters, app.filters); - app.languages = _.defaults({}, options.languages, app.languages); - app.parsers = _.defaults({}, options.parsers, app.parsers); - app.workers = _.defaults({}, options.workers, app.workers); - app.hooks = _.defaults({}, options.hooks, app.hooks); - - // options - app.options = options; - - // generator - app.generator = _.defaults({}, app.generator, defaultGenerator); - - // packageInfos - app.packageInfos = _.defaults({}, app.packageInfos, defaultPackageInfos); - - var parsedFiles = []; - var parsedFilenames = []; - try { - // Log version information - var filename = path.join(__dirname, '../', './package.json'); - var packageJson = JSON.parse( fs.readFileSync( filename , 'utf8') ); - app.log.verbose('apidoc-generator name: ' + app.generator.name); - app.log.verbose('apidoc-generator version: ' + app.generator.version); - app.log.verbose('apidoc-core version: ' + packageJson.version); - app.log.verbose('apidoc-spec version: ' + getSpecificationVersion()); - - new PluginLoader(app); - - var parser = new Parser(app); - var worker = new Worker(app); - var filter = new Filter(app); - - // Make them available for plugins - app.parser = parser; - app.worker = worker; - app.filter = filter; - + initApp(options); + options = app.options; + var parsedFiles = []; + var parsedFilenames = []; // if input option for source is an array of folders, // parse each folder in the order provided. app.log.verbose('run parser'); @@ -198,23 +162,23 @@ function parse(options) { // is the folder currently being processed. var folderOptions = options; folderOptions.src = path.join(folder, './'); - parser.parseFiles(folderOptions, parsedFiles, parsedFilenames); + app.parser.parseFiles(folderOptions, parsedFiles, parsedFilenames); }); } else { // if the input option for source is a single folder, parse as usual. options.src = path.join(options.src, './'); - parser.parseFiles(options, parsedFiles, parsedFilenames); + app.parser.parseFiles(options, parsedFiles, parsedFilenames); } if (parsedFiles.length > 0) { // process transformations and assignments app.log.verbose('run worker'); - worker.process(parsedFiles, parsedFilenames, app.packageInfos); + app.worker.process(parsedFiles, parsedFilenames, app.packageInfos); // cleanup app.log.verbose('run filter'); - var blocks = filter.process(parsedFiles, parsedFilenames); + var blocks = app.filter.process(parsedFiles, parsedFilenames); // sort by group ASC, name ASC, version DESC blocks.sort(function(a, b) { @@ -299,6 +263,65 @@ function parse(options) { } } +/** + * parseSource + * + * @param {string} source the source code string. + * @param {Object} options Overwrite default options. + */ +function parseSource(source, options) { + try { + initApp(options); + return app.parser.parseSource(source, app.options.encoding, app.options.filename); + } catch (e) { + app.log.error(e.message); + } +} + +/** + * initApp + * + * @param {Object} options Overwrite default options. + */ +function initApp(options) { + + options = _.defaults({}, options, defaults); + // extend with custom functions + app.filters = _.defaults({}, options.filters, app.filters); + app.languages = _.defaults({}, options.languages, app.languages); + app.parsers = _.defaults({}, options.parsers, app.parsers); + app.workers = _.defaults({}, options.workers, app.workers); + app.hooks = _.defaults({}, options.hooks, app.hooks); + + // options + app.options = options; + + // generator + app.generator = _.defaults({}, app.generator, defaultGenerator); + + // packageInfos + app.packageInfos = _.defaults({}, app.packageInfos, defaultPackageInfos); + + // Log version information + var filename = path.join(__dirname, '../', './package.json'); + var packageJson = JSON.parse( fs.readFileSync( filename , 'utf8') ); + app.log.verbose('apidoc-generator name: ' + app.generator.name); + app.log.verbose('apidoc-generator version: ' + app.generator.version); + app.log.verbose('apidoc-core version: ' + packageJson.version); + app.log.verbose('apidoc-spec version: ' + getSpecificationVersion()); + + new PluginLoader(app); + + var parser = new Parser(app); + var worker = new Worker(app); + var filter = new Filter(app); + + // Make them available for plugins + app.parser = parser; + app.worker = worker; + app.filter = filter; +} + /** * Set generator informations. * @@ -401,6 +424,7 @@ function applyHook(name /* , ...args */) { module.exports = { getSpecificationVersion: getSpecificationVersion, parse : parse, + parseSource : parseSource, setGeneratorInfos : setGeneratorInfos, setLogger : setLogger, setMarkdownParser : setMarkdownParser, diff --git a/lib/parser.js b/lib/parser.js index 4234293..eaed367 100644 --- a/lib/parser.js +++ b/lib/parser.js @@ -125,6 +125,14 @@ Parser.prototype.parseFile = function(filename, encoding) { // TODO: Not sure if this is correct. Without skipDecodeWarning we got string errors // https://github.com/apidoc/apidoc-core/pull/25 var fileContent = fs.readFileSync(filename, { encoding: 'binary' }); + return self.parseSource(fileContent,encoding,filename); +}; + +/** + * Execute Sourceparsing + */ +Parser.prototype.parseSource = function(fileContent,encoding,filename) { + var self = this; iconv.skipDecodeWarning = true; self.src = iconv.decode(fileContent, encoding); app.log.debug('size: ' + self.src.length); diff --git a/test/parse_source_test.js b/test/parse_source_test.js new file mode 100644 index 0000000..ad736e5 --- /dev/null +++ b/test/parse_source_test.js @@ -0,0 +1,88 @@ +/** + * Test: parseSource + */ +var deepEqual = require('deep-equal'); +var apidoc = require("../lib/index"); + +function log() { +// console.log(arguments); +} + +var logger = { + debug: log, + verbose: log, + info: log, + warn: log, + error: log, +}; + +describe("parseSource", function () { + var testCases = [ + { + source: + "/**" + + "\n * @api {post} /api/school/students/:studentId/cloth " + + "\n * @apiName createCloth " + + "\n * @apiGroup cloth " + + "\n * @apiParam (body) {String} [name] " + + "\n * @apiSuccess {Number} code 200 " + + "\n * @apiSuccessExample {json} Success-Response: " + + "\n * { " + + "\n * status: 200 " + + "\n * } " + + "\n*/ ", + expected: { + global: {}, + local: { + type: "post", + url: "/api/school/students/:studentId/cloth", + title: "", + name: "createCloth", + group: "cloth", + parameter: { + fields: { + body: [ + { + group: "body", + type: "String", + field: "name", + optional: true, + description: "", + }, + ], + }, + }, + success: { + fields: { + "Success 200": [ + { + group: "Success 200", + type: "Number", + optional: false, + field: "code", + description: "200", + }, + ], + }, + examples: [ + { + title: "Success-Response: ", + content: "{ \n status: 200 \n}", + type: "json", + }, + ], + }, + }, + index: 1, + }, + }, + ]; + it("case 1: should pass all test cases", function (done) { + testCases.forEach(function (testCase) { + apidoc.setLogger(logger); + var parsed = apidoc.parseSource(Buffer.from(testCase.source)); + deepEqual(parsed, testCase.expected); + }); + done(); + }); +}); From ffd99c9a9ddf9cd86fac7b12183e845b6c16a1a1 Mon Sep 17 00:00:00 2001 From: wucong Date: Wed, 28 Oct 2020 23:48:12 +0800 Subject: [PATCH 90/98] remove unused commented line --- test/parse_source_test.js | 1 - 1 file changed, 1 deletion(-) diff --git a/test/parse_source_test.js b/test/parse_source_test.js index ad736e5..2887994 100644 --- a/test/parse_source_test.js +++ b/test/parse_source_test.js @@ -5,7 +5,6 @@ var deepEqual = require('deep-equal'); var apidoc = require("../lib/index"); function log() { -// console.log(arguments); } var logger = { From c32ada3e585f81d985ffc4148d3e6060c3cf1c93 Mon Sep 17 00:00:00 2001 From: Nicolas CARPi Date: Sat, 28 Nov 2020 20:56:45 +0100 Subject: [PATCH 91/98] changelog for 0.14.0 --- CHANGELOG.md | 8 ++++++++ package-lock.json | 2 +- package.json | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 618f04b..d6938c8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog for apidoc-core +## 0.14.0 + +### Added + +* Implement apiBody and apiQuery tags by @SWheeler17 #104 +* Expose parseSource function by @woodgear #109 +* Add GitHub actions by @tommy87 #107 + ## 0.13.0 ### Added diff --git a/package-lock.json b/package-lock.json index 7899002..1ec6bbf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "apidoc-core", - "version": "0.13.0", + "version": "0.14.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 5e4f629..af20f5d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "apidoc-core", - "version": "0.13.0", + "version": "0.14.0", "description": "Core parser library to generate apidoc result following the apidoc-spec", "author": "Peter Rottmann ", "license": "MIT", From a243837007be87458199f8c100f0ff1ea6cb7efc Mon Sep 17 00:00:00 2001 From: Tim Bellefleur Date: Wed, 2 Dec 2020 17:41:47 -0800 Subject: [PATCH 92/98] Fix incorrect return type in @apiPrivate parser Fixes #111 --- lib/parsers/api_private.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/parsers/api_private.js b/lib/parsers/api_private.js index 71e540b..f360286 100644 --- a/lib/parsers/api_private.js +++ b/lib/parsers/api_private.js @@ -1,5 +1,7 @@ function parse() { - return 'private'; + return { + private: true + }; } /** From 1392a8bb2e546515bc867f51219eaf74c819abc9 Mon Sep 17 00:00:00 2001 From: Peter Rottmann Date: Wed, 27 Jan 2021 17:19:32 +0100 Subject: [PATCH 93/98] build: Replace travis-ci badge with github actions. --- .travis.yml | 3 --- README.md | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) delete mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index c7b016c..0000000 --- a/.travis.yml +++ /dev/null @@ -1,3 +0,0 @@ -language: node_js -node_js: - - 12 diff --git a/README.md b/README.md index d66a3a2..4107038 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Core parser library to generate apidoc result following the [apidoc-spec](https://github.com/apidoc/apidoc-spec). -[![Build Status](https://travis-ci.org/apidoc/apidoc-core.svg?branch=master)](https://travis-ci.org/apidoc/apidoc-core) +![Build Status](https://github.com/apidoc/apidoc-core/workflows/validate/badge.svg) [![Dependency Status](https://david-dm.org/apidoc/apidoc-core.svg)](https://david-dm.org/apidoc/apidoc-core) [![NPM version](https://badge.fury.io/js/apidoc-core.svg)](http://badge.fury.io/js/apidoc-core) From dc7cff96e2fd09d4954d802840bcd687ddf9e739 Mon Sep 17 00:00:00 2001 From: Nicolas CARPi Date: Wed, 17 Mar 2021 09:32:01 +0100 Subject: [PATCH 94/98] changelog for 0.15.0 and npm upgrade --- CHANGELOG.md | 5 + package-lock.json | 3086 ++++++++++++++++++++++++++++++++++++--------- package.json | 2 +- 3 files changed, 2508 insertions(+), 585 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d6938c8..6655c55 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog for apidoc-core +## 0.15.0 + +### Fixed +* Fix incorrect return type in @apiPrivate parser (PR #112 from nomoon) + ## 0.14.0 ### Added diff --git a/package-lock.json b/package-lock.json index 1ec6bbf..40dc6ac 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,9 +1,2034 @@ { "name": "apidoc-core", - "version": "0.14.0", - "lockfileVersion": 1, + "version": "0.15.0", + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "version": "0.15.0", + "license": "MIT", + "dependencies": { + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "iconv-lite": "^0.6.2", + "klaw-sync": "^6.0.0", + "lodash": "^4.17.20", + "semver": "~7.3.2" + }, + "devDependencies": { + "apidoc-example": "^0.2.3", + "deep-equal": "^2.0.3", + "jshint": "^2.12.0", + "markdown-it": "^11.0.0", + "mocha": "^8.1.1", + "should": "~13.2.3" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/apidoc-example": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/apidoc-example/-/apidoc-example-0.2.3.tgz", + "integrity": "sha512-etjWc6fyRcGKbAc+osoNdE/4nLHU6KiXWX5n4L9McyeuqjcKqyjCreSPwFgGpfX/qnvMHk+jyIFaXlP4++5A3A==", + "dev": true + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-filter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", + "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=", + "dev": true + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz", + "integrity": "sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ==", + "dev": true, + "dependencies": { + "array-filter": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.1" + } + }, + "node_modules/cli": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", + "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=", + "dev": true, + "dependencies": { + "exit": "0.1.2", + "glob": "^7.1.1" + }, + "engines": { + "node": ">=0.2.5" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, + "dependencies": { + "date-now": "^0.1.4" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "node_modules/date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-equal": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.0.5.tgz", + "integrity": "sha512-nPiRgmbAtm1a3JsnLCf6/SLfXcjyN5v8L1TXzdCmHrXJ4hx+gW/w1YCcn7z8gJtSiDArZCgYtbao3QqLm/N1Sw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "es-get-iterator": "^1.1.1", + "get-intrinsic": "^1.0.1", + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.2", + "is-regex": "^1.1.1", + "isarray": "^2.0.5", + "object-is": "^1.1.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.3.0", + "side-channel": "^1.0.3", + "which-boxed-primitive": "^1.0.1", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/dom-serializer/node_modules/domelementtype": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", + "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "node_modules/domhandler": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", + "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", + "dev": true, + "dependencies": { + "domelementtype": "1" + } + }, + "node_modules/domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/entities": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", + "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", + "dev": true + }, + "node_modules/es-abstract": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", + "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.2", + "is-string": "^1.0.5", + "object-inspect": "^1.9.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-get-iterator": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", + "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.0", + "has-symbols": "^1.0.1", + "is-arguments": "^1.1.0", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.5", + "isarray": "^2.0.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + }, + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true, + "engines": { + "node": ">=4.x" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/htmlparser2": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", + "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", + "dev": true, + "dependencies": { + "domelementtype": "1", + "domhandler": "2.3", + "domutils": "1.5", + "entities": "1.0", + "readable-stream": "1.1" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", + "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/is-arguments": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", + "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz", + "integrity": "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", + "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", + "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.5.tgz", + "integrity": "sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.2", + "call-bind": "^1.0.2", + "es-abstract": "^1.18.0-next.2", + "foreach": "^2.0.5", + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.1.tgz", + "integrity": "sha512-pi4vhbhVHGLxohUw7PhGsueT4vRGFoXhP7+RGN0jKIv9+8PWYCQTqtADngrxOm2g46hoH0+g8uZZBzMrvVGDmw==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", + "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/js-yaml/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/jshint": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.12.0.tgz", + "integrity": "sha512-TwuuaUDmra0JMkuqvqy+WGo2xGHSNjv1BA1nTIgtH2K5z1jHuAEeAgp7laaR+hLRmajRjcrM71+vByBDanCyYA==", + "dev": true, + "dependencies": { + "cli": "~1.0.0", + "console-browserify": "1.1.x", + "exit": "0.1.x", + "htmlparser2": "3.8.x", + "lodash": "~4.17.19", + "minimatch": "~3.0.2", + "shelljs": "0.3.x", + "strip-json-comments": "1.0.x" + }, + "bin": { + "jshint": "bin/jshint" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/klaw-sync": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", + "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "dependencies": { + "graceful-fs": "^4.1.11" + } + }, + "node_modules/linkify-it": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.2.tgz", + "integrity": "sha512-gDBO4aHNZS6coiZCKVhSNh43F9ioIL4JwRjLZPkoLIY4yZFwg264Y5lu2x6rb1Js42Gh6Yqm2f6L2AJcnkzinQ==", + "dev": true, + "dependencies": { + "uc.micro": "^1.0.1" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/markdown-it": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-11.0.1.tgz", + "integrity": "sha512-aU1TzmBKcWNNYvH9pjq6u92BML+Hz3h5S/QpfTFwiQF852pLT+9qHsrhM9JYipkOXZxGn+sGH8oyJE9FD9WezQ==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "entities": "~2.0.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } + }, + "node_modules/markdown-it/node_modules/entities": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", + "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==", + "dev": true + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mocha": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.2.tgz", + "integrity": "sha512-UdmISwr/5w+uXLPKspgoV7/RXZwKRTiTjJ2/AC5ZiEztIoOYdfKb19+9jNmEInzx5pBsCyJQzarAxqIGBNYJhg==", + "dev": true, + "dependencies": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.1", + "debug": "4.3.1", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.6", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.0.0", + "log-symbols": "4.0.0", + "minimatch": "3.0.4", + "ms": "2.1.3", + "nanoid": "3.1.20", + "serialize-javascript": "5.0.1", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "wide-align": "1.1.3", + "workerpool": "6.1.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 10.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.1.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", + "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", + "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/readable-stream/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "node_modules/readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/shelljs": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", + "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=", + "dev": true, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/should": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", + "integrity": "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==", + "dev": true, + "dependencies": { + "should-equal": "^2.0.0", + "should-format": "^3.0.3", + "should-type": "^1.4.0", + "should-type-adaptors": "^1.0.1", + "should-util": "^1.0.0" + } + }, + "node_modules/should-equal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", + "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", + "dev": true, + "dependencies": { + "should-type": "^1.4.0" + } + }, + "node_modules/should-format": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", + "integrity": "sha1-m/yPdPo5IFxT04w01xcwPidxJPE=", + "dev": true, + "dependencies": { + "should-type": "^1.3.0", + "should-type-adaptors": "^1.0.1" + } + }, + "node_modules/should-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", + "integrity": "sha1-B1bYzoRt/QmEOmlHcZ36DUz/XPM=", + "dev": true + }, + "node_modules/should-type-adaptors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", + "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", + "dev": true, + "dependencies": { + "should-type": "^1.3.0", + "should-util": "^1.0.0" + } + }, + "node_modules/should-util": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz", + "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==", + "dev": true + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", + "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", + "dev": true, + "bin": { + "strip-json-comments": "cli.js" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true + }, + "node_modules/unbox-primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.0.tgz", + "integrity": "sha512-P/51NX+JXyxK/aigg1/ZgyccdAxm5K1+n8+tvqSntjOivPt19gvm1VC49RWYetsiub8WViUchdxl/KWHHB0kzA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.0", + "has-symbols": "^1.0.0", + "which-boxed-primitive": "^1.0.1" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.4.tgz", + "integrity": "sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.2", + "call-bind": "^1.0.0", + "es-abstract": "^1.18.0-next.1", + "foreach": "^2.0.5", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.1", + "is-typed-array": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2" + } + }, + "node_modules/workerpool": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", + "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/y18n": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", + "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, "dependencies": { + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, "ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", @@ -17,12 +2042,12 @@ "dev": true }, "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" } }, "anymatch": { @@ -56,18 +2081,6 @@ "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=", "dev": true }, - "array.prototype.map": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.2.tgz", - "integrity": "sha512-Az3OYxgsa1g7xDYp86l0nnN4bcmuEITGe1rbdEBVkrqkzMgDcbdQ2R7r41pNzti+4NMces3H8gMmuioZUilLgw==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.4" - } - }, "at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", @@ -88,9 +2101,9 @@ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, "brace-expansion": { @@ -117,48 +2130,57 @@ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", "dev": true }, "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "dependencies": { "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" } } } }, "chokidar": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz", - "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==", + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", "dev": true, "requires": { "anymatch": "~3.1.1", "braces": "~3.0.2", - "fsevents": "~2.1.2", + "fsevents": "~2.3.1", "glob-parent": "~5.1.0", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", - "readdirp": "~3.3.0" + "readdirp": "~3.5.0" } }, "cli": { @@ -172,57 +2194,63 @@ } }, "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" }, "dependencies": { "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dev": true, "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" } }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^5.0.0" } } } }, "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "color-name": "1.1.3" + "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "concat-map": { @@ -252,48 +2280,49 @@ "dev": true }, "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } } }, "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true }, "deep-equal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.0.3.tgz", - "integrity": "sha512-Spqdl4H+ky45I9ByyJtXteOm9CaIrPmnIPmOhrkKGNYWeDgCvJ8jNYVCTjChxW4FqGuZnLHADc8EKRMX6+CgvA==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.0.5.tgz", + "integrity": "sha512-nPiRgmbAtm1a3JsnLCf6/SLfXcjyN5v8L1TXzdCmHrXJ4hx+gW/w1YCcn7z8gJtSiDArZCgYtbao3QqLm/N1Sw==", "dev": true, "requires": { - "es-abstract": "^1.17.5", - "es-get-iterator": "^1.1.0", + "call-bind": "^1.0.0", + "es-get-iterator": "^1.1.1", + "get-intrinsic": "^1.0.1", "is-arguments": "^1.0.4", "is-date-object": "^1.0.2", - "is-regex": "^1.0.5", + "is-regex": "^1.1.1", "isarray": "^2.0.5", - "object-is": "^1.1.2", + "object-is": "^1.1.4", "object-keys": "^1.1.1", - "object.assign": "^4.1.0", + "object.assign": "^4.1.2", "regexp.prototype.flags": "^1.3.0", - "side-channel": "^1.0.2", + "side-channel": "^1.0.3", "which-boxed-primitive": "^1.0.1", "which-collection": "^1.0.1", "which-typed-array": "^1.1.2" - }, - "dependencies": { - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - } } }, "define-properties": { @@ -306,9 +2335,9 @@ } }, "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true }, "dom-serializer": { @@ -322,15 +2351,15 @@ }, "dependencies": { "domelementtype": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", - "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", + "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==", "dev": true }, "entities": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", - "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true } } @@ -361,9 +2390,9 @@ } }, "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, "entities": { @@ -373,51 +2402,43 @@ "dev": true }, "es-abstract": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", - "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", + "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", "dev": true, "requires": { + "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.0", - "is-regex": "^1.1.0", - "object-inspect": "^1.7.0", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.2", + "is-string": "^1.0.5", + "object-inspect": "^1.9.0", "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.0" } }, - "es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true - }, "es-get-iterator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.0.tgz", - "integrity": "sha512-UfrmHuWQlNMTs35e1ypnvikg6jCz3SK8v8ImvmDsh36fCVUR1MqoFDiyn0/k52C8NqO3YsO8Oe0azeesNuqSsQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", + "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", "dev": true, "requires": { - "es-abstract": "^1.17.4", + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.0", "has-symbols": "^1.0.1", - "is-arguments": "^1.0.4", - "is-map": "^2.0.1", - "is-set": "^2.0.1", + "is-arguments": "^1.1.0", + "is-map": "^2.0.2", + "is-set": "^2.0.2", "is-string": "^1.0.5", "isarray": "^2.0.5" - }, - "dependencies": { - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - } } }, "es-to-primitive": { @@ -431,16 +2452,16 @@ "is-symbol": "^1.0.2" } }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, "exit": { @@ -459,23 +2480,20 @@ } }, "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "requires": { - "locate-path": "^5.0.0", + "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "flat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", - "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", - "dev": true, - "requires": { - "is-buffer": "~2.0.3" - } + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true }, "foreach": { "version": "2.0.5", @@ -484,14 +2502,14 @@ "dev": true }, "fs-extra": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", - "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "requires": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", - "universalify": "^1.0.0" + "universalify": "^2.0.0" } }, "fs.realpath": { @@ -500,9 +2518,9 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "optional": true }, @@ -518,6 +2536,17 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, "glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", @@ -532,18 +2561,18 @@ } }, "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { "is-glob": "^4.0.1" } }, "graceful-fs": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", - "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==" + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" }, "growl": { "version": "1.10.5", @@ -560,16 +2589,22 @@ "function-bind": "^1.1.1" } }, + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true + }, "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true }, "he": { @@ -614,15 +2649,18 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "is-arguments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", - "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", - "dev": true + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", + "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0" + } }, "is-bigint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.0.tgz", - "integrity": "sha512-t5mGUXC/xRheCK431ylNiSkGGpBp8bHENBcENTkDT6ppwPzEVxNGZRvgvmOEfbWkFhA7D2GEuE2mmQTr78sl2g==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz", + "integrity": "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==", "dev": true }, "is-binary-path": { @@ -635,21 +2673,18 @@ } }, "is-boolean-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.1.tgz", - "integrity": "sha512-TqZuVwa/sppcrhUCAYkGBk7w0yxfQQnxq28fjkO53tnK9FQXmdwz2JS5+GjsWQ6RByES1K40nI+yDic5c9/aAQ==", - "dev": true - }, - "is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", - "dev": true + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", + "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", + "dev": true, + "requires": { + "call-bind": "^1.0.0" + } }, "is-callable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", - "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", "dev": true }, "is-date-object": { @@ -680,9 +2715,15 @@ } }, "is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true + }, + "is-negative-zero": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.1.tgz", - "integrity": "sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw==", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", "dev": true }, "is-number": { @@ -698,24 +2739,25 @@ "dev": true }, "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true }, "is-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", - "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", "dev": true, "requires": { + "call-bind": "^1.0.2", "has-symbols": "^1.0.1" } }, "is-set": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.1.tgz", - "integrity": "sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", "dev": true }, "is-string": { @@ -734,13 +2776,14 @@ } }, "is-typed-array": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.3.tgz", - "integrity": "sha512-BSYUBOK/HJibQ30wWkWold5txYwMUXQct9YHAQJr8fSwvZoiglcqB0pd7vEN23+Tsi9IUEjztdOSzl4qLVYGTQ==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.5.tgz", + "integrity": "sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug==", "dev": true, "requires": { - "available-typed-arrays": "^1.0.0", - "es-abstract": "^1.17.4", + "available-typed-arrays": "^1.0.2", + "call-bind": "^1.0.2", + "es-abstract": "^1.18.0-next.2", "foreach": "^2.0.5", "has-symbols": "^1.0.1" } @@ -758,9 +2801,9 @@ "dev": true }, "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true }, "isexe": { @@ -769,30 +2812,21 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "iterate-iterator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.1.tgz", - "integrity": "sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw==", - "dev": true - }, - "iterate-value": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz", - "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==", - "dev": true, - "requires": { - "es-get-iterator": "^1.0.2", - "iterate-iterator": "^1.0.1" - } - }, "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", + "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + } } }, "jshint": { @@ -812,12 +2846,12 @@ } }, "jsonfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", - "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "requires": { "graceful-fs": "^4.1.6", - "universalify": "^1.0.0" + "universalify": "^2.0.0" } }, "klaw-sync": { @@ -838,32 +2872,40 @@ } }, "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "requires": { - "p-locate": "^4.1.0" + "p-locate": "^5.0.0" } }, "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "log-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", "dev": true, "requires": { - "chalk": "^2.4.2" + "chalk": "^4.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" } }, "markdown-it": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-11.0.0.tgz", - "integrity": "sha512-+CvOnmbSubmQFSA9dKz1BRiaSMV7rhexl3sngKqFyXSagoA3fBdJQ8oZWtRy2knXdpDXaBw44euz37DeJQ9asg==", + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-11.0.1.tgz", + "integrity": "sha512-aU1TzmBKcWNNYvH9pjq6u92BML+Hz3h5S/QpfTFwiQF852pLT+9qHsrhM9JYipkOXZxGn+sGH8oyJE9FD9WezQ==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -896,50 +2938,56 @@ } }, "mocha": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.1.1.tgz", - "integrity": "sha512-p7FuGlYH8t7gaiodlFreseLxEmxTgvyG9RgPHODFPySNhwUehu8NIb0vdSt3WFckSneswZ0Un5typYcWElk7HQ==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.2.tgz", + "integrity": "sha512-UdmISwr/5w+uXLPKspgoV7/RXZwKRTiTjJ2/AC5ZiEztIoOYdfKb19+9jNmEInzx5pBsCyJQzarAxqIGBNYJhg==", "dev": true, "requires": { + "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", - "chokidar": "3.3.1", - "debug": "3.2.6", - "diff": "4.0.2", - "escape-string-regexp": "1.0.5", - "find-up": "4.1.0", + "chokidar": "3.5.1", + "debug": "4.3.1", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", "glob": "7.1.6", "growl": "1.10.5", "he": "1.2.0", - "js-yaml": "3.13.1", - "log-symbols": "3.0.0", + "js-yaml": "4.0.0", + "log-symbols": "4.0.0", "minimatch": "3.0.4", - "ms": "2.1.2", - "object.assign": "4.1.0", - "promise.allsettled": "1.0.2", - "serialize-javascript": "4.0.0", - "strip-json-comments": "3.0.1", - "supports-color": "7.1.0", + "ms": "2.1.3", + "nanoid": "3.1.20", + "serialize-javascript": "5.0.1", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", "which": "2.0.2", "wide-align": "1.1.3", - "workerpool": "6.0.0", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", - "yargs-unparser": "1.6.1" + "workerpool": "6.1.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" }, "dependencies": { "strip-json-comments": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", - "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true } } }, "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "nanoid": { + "version": "3.1.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", + "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", "dev": true }, "normalize-path": { @@ -949,19 +2997,19 @@ "dev": true }, "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", + "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", "dev": true }, "object-is": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz", - "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, "object-keys": { @@ -971,15 +3019,15 @@ "dev": true }, "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" } }, "once": { @@ -991,29 +3039,23 @@ } }, "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "requires": { - "p-try": "^2.0.0" + "yocto-queue": "^0.1.0" } }, "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "requires": { - "p-limit": "^2.2.0" + "p-limit": "^3.0.2" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -1031,19 +3073,6 @@ "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", "dev": true }, - "promise.allsettled": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.2.tgz", - "integrity": "sha512-UpcYW5S1RaNKT6pd+s9jp9K9rlQge1UXKskec0j6Mmuq7UJCvlS2J2/s/yuPN8ehftf9HXMxWlKiPbGGUzpoRg==", - "dev": true, - "requires": { - "array.prototype.map": "^1.0.1", - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", - "iterate-value": "^1.0.0" - } - }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -1063,25 +3092,33 @@ "inherits": "~2.0.1", "isarray": "0.0.1", "string_decoder": "~0.10.x" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + } } }, "readdirp": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz", - "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", "dev": true, "requires": { - "picomatch": "^2.0.7" + "picomatch": "^2.2.1" } }, "regexp.prototype.flags": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", - "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, "require-directory": { @@ -1090,12 +3127,6 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -1108,25 +3139,22 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "requires": { + "lru-cache": "^6.0.0" + } }, "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", "dev": true, "requires": { "randombytes": "^2.1.0" } }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, "shelljs": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", @@ -1188,13 +3216,14 @@ "dev": true }, "side-channel": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.2.tgz", - "integrity": "sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, "requires": { - "es-abstract": "^1.17.0-next.1", - "object-inspect": "^1.7.0" + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" } }, "sprintf-js": { @@ -1203,6 +3232,12 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -1214,31 +3249,25 @@ } }, "string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, "string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -1255,20 +3284,12 @@ "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { "has-flag": "^4.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - } } }, "to-regex-range": { @@ -1286,10 +3307,22 @@ "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", "dev": true }, - "universalify": { + "unbox-primitive": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.0.tgz", + "integrity": "sha512-P/51NX+JXyxK/aigg1/ZgyccdAxm5K1+n8+tvqSntjOivPt19gvm1VC49RWYetsiub8WViUchdxl/KWHHB0kzA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.0", + "has-symbols": "^1.0.0", + "which-boxed-primitive": "^1.0.1" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" }, "which": { "version": "2.0.2", @@ -1301,16 +3334,16 @@ } }, "which-boxed-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.1.tgz", - "integrity": "sha512-7BT4TwISdDGBgaemWU0N0OU7FeAEJ9Oo2P1PHRm/FCWoEi2VLWC9b6xvxAA3C/NMpxg3HXVgi0sMmGbNUbNepQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, "requires": { - "is-bigint": "^1.0.0", - "is-boolean-object": "^1.0.0", - "is-number-object": "^1.0.3", - "is-string": "^1.0.4", - "is-symbol": "^1.0.2" + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" } }, "which-collection": { @@ -1325,20 +3358,15 @@ "is-weakset": "^2.0.1" } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, "which-typed-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.2.tgz", - "integrity": "sha512-KT6okrd1tE6JdZAy3o2VhMoYPh3+J6EMZLyrxBQsZflI1QCZIxMrIYLkosd8Twf+YfknVIHmYQPgJt238p8dnQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.4.tgz", + "integrity": "sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA==", "dev": true, "requires": { "available-typed-arrays": "^1.0.2", - "es-abstract": "^1.17.5", + "call-bind": "^1.0.0", + "es-abstract": "^1.18.0-next.1", "foreach": "^2.0.5", "function-bind": "^1.1.1", "has-symbols": "^1.0.1", @@ -1355,46 +3383,52 @@ } }, "workerpool": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.0.tgz", - "integrity": "sha512-fU2OcNA/GVAJLLyKUoHkAgIhKb0JoCpSjLC/G2vYKxUjVmQwGbRVeoPJ1a8U4pnVofz4AQV5Y/NEw8oKqxEBtA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", + "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", "dev": true }, "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "dependencies": { "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dev": true, "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" } }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^5.0.0" } } } @@ -1405,204 +3439,88 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", + "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", "dev": true }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, "dependencies": { "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { + "is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dev": true, "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" } }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^5.0.0" } } } }, "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true }, "yargs-unparser": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.1.tgz", - "integrity": "sha512-qZV14lK9MWsGCmcr7u5oXGH0dbGqZAIxTDrWXZDo5zUr6b6iUmelNKO6x6R1dQT24AH3LgRxJpr8meWy2unolA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, "requires": { - "camelcase": "^5.3.1", - "decamelize": "^1.2.0", - "flat": "^4.1.0", - "is-plain-obj": "^1.1.0", - "yargs": "^14.2.3" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "yargs": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", - "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^15.0.1" - } - }, - "yargs-parser": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz", - "integrity": "sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" } + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true } } } diff --git a/package.json b/package.json index af20f5d..6ed1a24 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "apidoc-core", - "version": "0.14.0", + "version": "0.15.0", "description": "Core parser library to generate apidoc result following the apidoc-spec", "author": "Peter Rottmann ", "license": "MIT", From 5869ff484734c744ad55ee270bc16b08a5694562 Mon Sep 17 00:00:00 2001 From: Peter Rottmann Date: Fri, 16 Jul 2021 17:47:08 +0200 Subject: [PATCH 95/98] docs: Created security.md --- SECURITY.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 SECURITY.md diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..e323d08 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,7 @@ +# Security Policy + +## Reporting a Vulnerability + +To report a vulnerability please send an email with the details to info@apidocjs.com but ONLY in case it is a real problem. apiDoc generates static files, which should be used and hosted on a separate webspace, so it could not harm anything else. + +For normal issues or problems with dependent libraries use the [Issue tracker](https://github.com/apidoc/apidoc/issues). From 9fa822a961d15972215a3991b10f812731d42f0e Mon Sep 17 00:00:00 2001 From: ready-research <72916209+ready-research@users.noreply.github.com> Date: Fri, 3 Sep 2021 23:02:03 +0530 Subject: [PATCH 96/98] Security fix for ReDoS (#1) --- lib/parsers/api.js | 4 +--- lib/parsers/api_define.js | 3 +-- lib/parsers/api_deprecated.js | 3 +-- lib/parsers/api_description.js | 3 +-- lib/parsers/api_example.js | 3 +-- lib/parsers/api_group.js | 4 +--- lib/parsers/api_name.js | 4 +--- lib/parsers/api_param.js | 3 +-- lib/parsers/api_sample_request.js | 4 +--- lib/parsers/api_use.js | 4 +--- lib/parsers/api_version.js | 4 +--- lib/utils/trim.js | 9 --------- 12 files changed, 11 insertions(+), 37 deletions(-) delete mode 100644 lib/utils/trim.js diff --git a/lib/parsers/api.js b/lib/parsers/api.js index 82bc871..5efa363 100644 --- a/lib/parsers/api.js +++ b/lib/parsers/api.js @@ -1,7 +1,5 @@ -var trim = require('../utils/trim'); - function parse(content) { - content = trim(content); + content = content.trim(); // Search: type, url and title // Example: {get} /user/:id Get User by ID. diff --git a/lib/parsers/api_define.js b/lib/parsers/api_define.js index ccb5b39..76f866b 100644 --- a/lib/parsers/api_define.js +++ b/lib/parsers/api_define.js @@ -1,4 +1,3 @@ -var trim = require('../utils/trim'); var unindent = require('../utils/unindent'); var ParameterError = require('../errors/parameter_error'); @@ -15,7 +14,7 @@ var _messages = { function parse(content, source, messages) { messages = messages || _messages; - content = trim(content); + content = content.trim(); var parseRegExp = /^(\w*)(.*?)(?:\s+|$)(.*)$/gm; var matches = parseRegExp.exec(content); diff --git a/lib/parsers/api_deprecated.js b/lib/parsers/api_deprecated.js index 6e958a8..b5a43c4 100644 --- a/lib/parsers/api_deprecated.js +++ b/lib/parsers/api_deprecated.js @@ -1,8 +1,7 @@ -var trim = require('../utils/trim'); var unindent = require('../utils/unindent'); function parse(content) { - var deprecated = trim(content); + var deprecated = content.trim(); if (deprecated.length > 0) { return { diff --git a/lib/parsers/api_description.js b/lib/parsers/api_description.js index 8a06537..c64e47f 100644 --- a/lib/parsers/api_description.js +++ b/lib/parsers/api_description.js @@ -1,8 +1,7 @@ -var trim = require('../utils/trim'); var unindent = require('../utils/unindent'); function parse(content) { - var description = trim(content); + var description = content.trim(); if (description.length === 0) return null; diff --git a/lib/parsers/api_example.js b/lib/parsers/api_example.js index 1da3fa1..622845c 100644 --- a/lib/parsers/api_example.js +++ b/lib/parsers/api_example.js @@ -1,8 +1,7 @@ -var trim = require('../utils/trim'); var unindent = require('../utils/unindent'); function parse(content, source) { - source = trim(source); + source = source.trim(); var title = ''; var text = ''; diff --git a/lib/parsers/api_group.js b/lib/parsers/api_group.js index a53661f..6a04ec4 100644 --- a/lib/parsers/api_group.js +++ b/lib/parsers/api_group.js @@ -1,7 +1,5 @@ -var trim = require('../utils/trim'); - function parse(content) { - var group = trim(content); + var group = content.trim(); if (group.length === 0) return null; diff --git a/lib/parsers/api_name.js b/lib/parsers/api_name.js index f0f9085..1fc8292 100644 --- a/lib/parsers/api_name.js +++ b/lib/parsers/api_name.js @@ -1,7 +1,5 @@ -var trim = require('../utils/trim'); - function parse(content) { - var name = trim(content); + var name = content.trim(); if(name.length === 0) return null; diff --git a/lib/parsers/api_param.js b/lib/parsers/api_param.js index aa2140b..032cf67 100644 --- a/lib/parsers/api_param.js +++ b/lib/parsers/api_param.js @@ -1,4 +1,3 @@ -var trim = require('../utils/trim'); var unindent = require('../utils/unindent'); var group = ''; @@ -69,7 +68,7 @@ var allowedValuesWithQuoteRegExp = new RegExp(/\'[^\']*[^\']\'/g); var allowedValuesRegExp = new RegExp(/[^,\s]+/g); function parse(content, source, defaultGroup) { - content = trim(content); + content = content.trim(); // replace Linebreak with Unicode content = content.replace(/\n/g, '\uffff'); diff --git a/lib/parsers/api_sample_request.js b/lib/parsers/api_sample_request.js index 79c99e6..e75f50d 100644 --- a/lib/parsers/api_sample_request.js +++ b/lib/parsers/api_sample_request.js @@ -1,7 +1,5 @@ -var trim = require('../utils/trim'); - function parse(content) { - var url = trim(content); + var url = content.trim(); if(url.length === 0) return null; diff --git a/lib/parsers/api_use.js b/lib/parsers/api_use.js index b430dd4..9a63415 100644 --- a/lib/parsers/api_use.js +++ b/lib/parsers/api_use.js @@ -1,7 +1,5 @@ -var trim = require('../utils/trim'); - function parse(content) { - var name = trim(content); + var name = content.trim(); if (name.length === 0) return null; diff --git a/lib/parsers/api_version.js b/lib/parsers/api_version.js index 220bf18..1be0f5b 100644 --- a/lib/parsers/api_version.js +++ b/lib/parsers/api_version.js @@ -1,11 +1,9 @@ var semver = require('semver'); -var trim = require('../utils/trim'); - var ParameterError = require('../errors/parameter_error'); function parse(content) { - content = trim(content); + content = content.trim(); if (content.length === 0) return null; diff --git a/lib/utils/trim.js b/lib/utils/trim.js deleted file mode 100644 index 8b2ca28..0000000 --- a/lib/utils/trim.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Strip whitespace from the beginning and end of a string - * - * @param str string - * @returns string - */ -module.exports = function trim(str) { - return str.replace(/^\s*|\s*$/g, ''); -}; From cc2d615acaa72ccff016cb4f5d1db0d23ea6065c Mon Sep 17 00:00:00 2001 From: Nicolas CARPi Date: Fri, 3 Sep 2021 21:26:11 +0200 Subject: [PATCH 97/98] bump version to 0.15.1 --- CHANGELOG.md | 5 +++++ package-lock.json | 5 +++-- package.json | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6655c55..dac3e0a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog for apidoc-core +## 0.15.1 +* Use str.trim() instead of own regex vulnerable to ReDOS. +Note that this vulnerability is not impacting this project as an attacker would need to control your source code from which you generate the documentation. +Done in #120 by @ready-research. + ## 0.15.0 ### Fixed diff --git a/package-lock.json b/package-lock.json index 40dc6ac..ba1bdfb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,12 @@ { "name": "apidoc-core", - "version": "0.15.0", + "version": "0.15.1", "lockfileVersion": 2, "requires": true, "packages": { "": { - "version": "0.15.0", + "name": "apidoc-core", + "version": "0.15.1", "license": "MIT", "dependencies": { "fs-extra": "^9.0.1", diff --git a/package.json b/package.json index 6ed1a24..2276033 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "apidoc-core", - "version": "0.15.0", + "version": "0.15.1", "description": "Core parser library to generate apidoc result following the apidoc-spec", "author": "Peter Rottmann ", "license": "MIT", From 14a0e950219ac8a77faa809677c5115e14384cc2 Mon Sep 17 00:00:00 2001 From: Nicolas CARPi Date: Sun, 5 Sep 2021 01:34:19 +0200 Subject: [PATCH 98/98] add archive reason in readme --- README.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 4107038..129537c 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,7 @@ # apidoc-core -Core parser library to generate apidoc result following the [apidoc-spec](https://github.com/apidoc/apidoc-spec). +## ARCHIVED: this repository has been archived because it is now part of the apidoc main repository -![Build Status](https://github.com/apidoc/apidoc-core/workflows/validate/badge.svg) -[![Dependency Status](https://david-dm.org/apidoc/apidoc-core.svg)](https://david-dm.org/apidoc/apidoc-core) -[![NPM version](https://badge.fury.io/js/apidoc-core.svg)](http://badge.fury.io/js/apidoc-core) +Core parser library to generate apidoc result following the [apidoc-spec](https://github.com/apidoc/apidoc-spec). -If you are an end user, please proceed to [apidoc](https://github.com/apidoc/apidoc) or [apidoc-documentation](http://apidocjs.com). +If you are an end user, please proceed to [apidoc](https://github.com/apidoc/apidoc) or [apidoc-documentation](https://apidocjs.com).