diff --git a/jsdoc/file-readers/jsdoc.js b/jsdoc/file-readers/jsdoc.js index 63989d5d..ed6f1543 100644 --- a/jsdoc/file-readers/jsdoc.js +++ b/jsdoc/file-readers/jsdoc.js @@ -13,9 +13,8 @@ module.exports = function jsdocFileReader(log, jsParser) { try { fileInfo.ast = jsParser(fileInfo.content); } catch(ex) { - ex.file = fileInfo.filePath; - throw new Error( - `JavaScript error in file "${ex.file}"" [line ${ex.lineNumber}, column ${ex.column}]: "${ex.description}"`); + ex.file = fileInfo.filePath; + throw new Error(`JavaScript error in file "${ex.file}" [line ${ex.lineNumber}, column ${ex.column}]`); } return [{ diff --git a/jsdoc/file-readers/jsdoc.spec.js b/jsdoc/file-readers/jsdoc.spec.js index a42bea3b..1dd9c914 100644 --- a/jsdoc/file-readers/jsdoc.spec.js +++ b/jsdoc/file-readers/jsdoc.spec.js @@ -88,7 +88,7 @@ describe("jsdoc fileReader", () => { " sync:true\n" + "}\n", '.'); - expect(() => fileReader.getDocs(fileInfo)).toThrowError('JavaScript error in file "some/file.js"" [line 13, column 3]: "Unexpected identifier"'); + expect(() => fileReader.getDocs(fileInfo)).toThrowError('JavaScript error in file "some/file.js" [line 13, column 3]'); }); }); diff --git a/jsdoc/index.js b/jsdoc/index.js index c8a58574..a93f73a1 100644 --- a/jsdoc/index.js +++ b/jsdoc/index.js @@ -22,6 +22,7 @@ module.exports = new Package('jsdoc', [require('../base')]) .factory(require('./services/code-name-map')) .factory(require('./services/code-name')) +.factory(require('./services/transforms/boolean-tag')) .factory(require('./services/transforms/extract-access')) .factory(require('./services/transforms/extract-name')) .factory(require('./services/transforms/extract-type')) @@ -31,6 +32,7 @@ module.exports = new Package('jsdoc', [require('../base')]) .factory(require('./services/parser-adapters/backtick-parser-adapter')) .factory(require('./services/parser-adapters/html-block-parser-adapter')) +.factory(require('./services/jsParser-config')) .factory(require('./services/jsParser')) .factory(require('./file-readers/jsdoc')) diff --git a/jsdoc/processors/extractJSDocComments.js b/jsdoc/processors/extractJSDocComments.js index 5e11ab55..8303df30 100644 --- a/jsdoc/processors/extractJSDocComments.js +++ b/jsdoc/processors/extractJSDocComments.js @@ -4,7 +4,7 @@ const LEADING_STAR = /^[^\S\r\n]*\*[^\S\n\r]?/gm; /** * @dgProcessor extractJSDocCommentsProcessor * @description - * This processor will create an doc for each jsdoc style comment in each jsFile + * This processor will create a doc for each jsdoc style comment in each jsFile * doc in the docs collection. * * It will optionaly remove those jsFile docs from the collection by setting the diff --git a/jsdoc/services/code-name.js b/jsdoc/services/code-name.js index aaa25c48..cf37578a 100644 --- a/jsdoc/services/code-name.js +++ b/jsdoc/services/code-name.js @@ -1,5 +1,5 @@ /** - * @dgProcessor codeNameService + * @dgService codeNameService * @description Infer the name of the document from name of the following code */ module.exports = function codeNameService(log, codeNameMap, getInjectables) { diff --git a/jsdoc/services/jsParser-config.js b/jsdoc/services/jsParser-config.js new file mode 100644 index 00000000..9040eda3 --- /dev/null +++ b/jsdoc/services/jsParser-config.js @@ -0,0 +1,36 @@ +module.exports = function jsParserConfig() { + return { + + // attach range information to each node + range: true, + + // attach line/column location information to each node + loc: true, + + // create a top-level comments array containing all comments + comment: true, + + // create a top-level tokens array containing all tokens + tokens: true, + + // Set to 3, 5 (default), 6, 7, 8, 9, 10, 11, or 12 to specify the version of ECMAScript syntax you want to use. + // You can also set to 2015 (same as 6), 2016 (same as 7), 2017 (same as 8), 2018 (same as 9), 2019 (same as 10), 2020 (same as 11), or 2021 (same as 12) to use the year-based naming. + ecmaVersion: 6, + + // specify which type of script you're parsing ("script" or "module") + sourceType: "script", + + // specify additional language features + ecmaFeatures: { + + // enable React JSX parsing + jsx: true, + + // enable return in global scope + globalReturn: true, + + // enable implied strict mode (if ecmaVersion >= 5) + impliedStrict: false + } + }; +}; diff --git a/jsdoc/services/jsParser-config.spec.js b/jsdoc/services/jsParser-config.spec.js new file mode 100644 index 00000000..a400f522 --- /dev/null +++ b/jsdoc/services/jsParser-config.spec.js @@ -0,0 +1,21 @@ +var Dgeni = require('dgeni'); +var mockPackage = require('../mocks/mockPackage'); + +describe('jsParserConfig service', function() { + + var jsParserConfig; + + beforeEach(function() { + var dgeni = new Dgeni([mockPackage()]) + var injector = dgeni.configureInjector(); + jsParserConfig = injector.get('jsParserConfig'); + }); + + it("checks options required by this implementaion", function() { + expect(jsParserConfig.comment).toBe(true); + expect(jsParserConfig.loc).toBe(true); + expect(jsParserConfig.range).toBe(true); + expect(jsParserConfig.tokens).toBe(true); + expect(jsParserConfig.ecmaVersion).toBe(6); + }); +}); diff --git a/jsdoc/services/jsParser.js b/jsdoc/services/jsParser.js index f4107c24..68a46f6f 100644 --- a/jsdoc/services/jsParser.js +++ b/jsdoc/services/jsParser.js @@ -1,102 +1,5 @@ -const jsParserImpl = require('espree'); +var jsParserImpl = require('espree'); -module.exports = function jsParser() { - return code => { - return jsParserImpl.parse(code, { - - // attach range information to each node - range: true, - - // attach line/column location information to each node - loc: true, - - // create a top-level comments array containing all comments - comments: true, - - // attach comments to the closest relevant node as leadingComments and - // trailingComments - attachComment: true, - - // create a top-level tokens array containing all tokens - tokens: true, - - // try to continue parsing if an error is encountered, store errors in a - // top-level errors array - tolerant: true, - - // specify parsing features (default only has blockBindings: true) - // setting this option replaces the default values - ecmaFeatures: { - - // enable parsing of arrow functions - arrowFunctions: true, - - // enable parsing of let/const - blockBindings: true, - - // enable parsing of destructured arrays and objects - destructuring: true, - - // enable parsing of regular expression y flag - regexYFlag: true, - - // enable parsing of regular expression u flag - regexUFlag: true, - - // enable parsing of template strings - templateStrings: true, - - // enable parsing of binary literals - binaryLiterals: true, - - // enable parsing of ES6 octal literals - octalLiterals: true, - - // enable parsing unicode code point escape sequences - unicodeCodePointEscapes: true, - - // enable parsing of default parameters - defaultParams: true, - - // enable parsing of rest parameters - restParams: true, - - // enable parsing of for-of statement - forOf: true, - - // enable parsing computed object literal properties - objectLiteralComputedProperties: true, - - // enable parsing of shorthand object literal methods - objectLiteralShorthandMethods: true, - - // enable parsing of shorthand object literal properties - objectLiteralShorthandProperties: true, - - // Allow duplicate object literal properties (except '__proto__') - objectLiteralDuplicateProperties: true, - - // enable parsing of generators/yield - generators: true, - - // enable parsing spread operator - spread: true, - - // enable super in functions - superInFunctions: true, - - // enable parsing classes - classes: true, - - // enable parsing of modules - modules: true, - - // enable React JSX parsing - jsx: true, - - // enable return in global scope - globalReturn: true - } - }); - }; -}; \ No newline at end of file +module.exports = function jsParser(jsParserConfig) { + return code => jsParserImpl.parse(code, jsParserConfig); +}; diff --git a/jsdoc/services/transforms/boolean-tag.js b/jsdoc/services/transforms/boolean-tag.js new file mode 100644 index 00000000..28556cf6 --- /dev/null +++ b/jsdoc/services/transforms/boolean-tag.js @@ -0,0 +1,9 @@ +/** + * Change the value of a tag to a boolean value (used by jsdoc tags like `@async`). + * @param {Tag} tag The tag to process + */ +module.exports = function booleanTagTransform() { + return function(doc, tag, value) { + return value !== null && value !== undefined; + }; +}; diff --git a/jsdoc/services/transforms/boolean-tag.spec.js b/jsdoc/services/transforms/boolean-tag.spec.js new file mode 100644 index 00000000..1643d1a7 --- /dev/null +++ b/jsdoc/services/transforms/boolean-tag.spec.js @@ -0,0 +1,32 @@ +var transformFactory = require('./boolean-tag'); + +describe("boolean-tag transform", function() { + var transform; + + beforeEach(function() { + transform = transformFactory(); + }); + + it("should transform non-null and non-undefined values to `true`", function() { + var doc = {}, tag = {}; + + var value = '', newValue = transform(doc, tag, value); + expect(newValue).toEqual(true); + + var value = 'some text', newValue = transform(doc, tag, value); + expect(newValue).toEqual(true); + + var value = {}, newValue = transform(doc, tag, value); + expect(newValue).toEqual(true); + }); + + it("should transform null and undefined values to `false`", function() { + var doc = {}, tag = {}; + + var value = null, newValue = transform(doc, tag, value); + expect(newValue).toEqual(false); + + var value = undefined, newValue = transform(doc, tag, value); + expect(newValue).toEqual(false); + }); +}); diff --git a/jsdoc/tag-defs/async.js b/jsdoc/tag-defs/async.js new file mode 100644 index 00000000..c5799dee --- /dev/null +++ b/jsdoc/tag-defs/async.js @@ -0,0 +1,6 @@ +module.exports = function(booleanTagTransform) { + return { + name: 'async', + transforms: [ booleanTagTransform ] + }; +}; diff --git a/jsdoc/tag-defs/constant.js b/jsdoc/tag-defs/constant.js new file mode 100644 index 00000000..325ac959 --- /dev/null +++ b/jsdoc/tag-defs/constant.js @@ -0,0 +1,7 @@ +module.exports = function(extractTypeTransform, extractNameTransform, wholeTagTransform) { + return { + name: 'constant', + aliases: ['const'], + transforms: [ extractTypeTransform, extractNameTransform, wholeTagTransform ] + }; +}; diff --git a/jsdoc/tag-defs/enum.js b/jsdoc/tag-defs/enum.js new file mode 100644 index 00000000..185059be --- /dev/null +++ b/jsdoc/tag-defs/enum.js @@ -0,0 +1,6 @@ +module.exports = function(extractTypeTransform) { + return { + name: 'enum', + transforms: [ extractTypeTransform ] + }; +}; diff --git a/jsdoc/tag-defs/index.js b/jsdoc/tag-defs/index.js index 99822fed..310c865f 100644 --- a/jsdoc/tag-defs/index.js +++ b/jsdoc/tag-defs/index.js @@ -1,30 +1,34 @@ module.exports = [ require('./access'), - require('./private'), - require('./protected'), - require('./public'), - require('./name'), - require('./memberof'), - require('./param'), - require('./property'), - require('./propertyof'), - require('./returns'), - require('./type'), - require('./requires'), - require('./module'), - require('./description'), - require('./deprecated'), - require('./see'), - require('./usage'), require('./animations'), - require('./constructor'), + require('./async'), require('./class'), require('./classdesc'), + require('./constant'), + require('./constructor'), + require('./deprecated'), + require('./description'), + require('./enum'), + require('./function'), require('./global'), - require('./namespace'), require('./kind'), - require('./function'), + require('./license'), + require('./memberof'), require('./method'), - require('./license') + require('./module'), + require('./name'), + require('./namespace'), + require('./param'), + require('./private'), + require('./property'), + require('./propertyof'), + require('./protected'), + require('./public'), + require('./requires'), + require('./returns'), + require('./see'), + require('./since'), + require('./type'), + require('./usage') ]; diff --git a/jsdoc/tag-defs/index.spec.js b/jsdoc/tag-defs/index.spec.js index 7b8e5d99..b2395fb2 100644 --- a/jsdoc/tag-defs/index.spec.js +++ b/jsdoc/tag-defs/index.spec.js @@ -3,7 +3,7 @@ const tagDefFactories = require('./'); describe("jsdoc tagdefs", () => { it("should contain an array of tagDef factory functions", () => { expect(tagDefFactories).toEqual(jasmine.any(Array)); - expect(tagDefFactories.length).toEqual(27); + expect(tagDefFactories.length).toEqual(31); tagDefFactories.forEach(factory => expect(factory).toEqual(jasmine.any(Function))); }); }); \ No newline at end of file diff --git a/jsdoc/tag-defs/since.js b/jsdoc/tag-defs/since.js new file mode 100644 index 00000000..fe9a6b82 --- /dev/null +++ b/jsdoc/tag-defs/since.js @@ -0,0 +1,3 @@ +module.exports = function() { + return { name: 'since' }; +}; diff --git a/nunjucks/services/nunjucks-template-engine.js b/nunjucks/services/nunjucks-template-engine.js index 22494ccf..9816248c 100644 --- a/nunjucks/services/nunjucks-template-engine.js +++ b/nunjucks/services/nunjucks-template-engine.js @@ -12,13 +12,13 @@ module.exports = function templateEngine(templateFinder) { * Nunjucks specific options, such as using `{$ $}` for nunjucks interpolation * rather than `{{ }}`, which conflicts with AngularJS */ - config: {autoescape: false}, + config: {autoescape: false, throwOnUndefined: true}, filters: [], tags: [], getRenderer() { - const loader = new nunjucks.FileSystemLoader(templateFinder.templateFolders, {throwOnUndefined: true, watch: false, noCache: false}); + const loader = new nunjucks.FileSystemLoader(templateFinder.templateFolders, {watch: false, noCache: false}); const engine = new nunjucks.Environment(loader, this.config); // Configure nunjucks with the custom filters diff --git a/package.json b/package.json index 9a91d530..6fc34796 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "change-case": "3.0.0", "dgeni": "^0.4.13", "eslint": "^7.17.0", - "espree": "^2.2.3", + "espree": "^7.3.1", "estraverse": "^4.1.0", "glob": "^7.0.5", "htmlencode": "^0.0.4", @@ -53,7 +53,7 @@ "marked": "^0.7.0", "minimatch": "^3.0.2", "mkdirp": "^1.0.3", - "nunjucks": "^3.1.6", + "nunjucks": "^3.2.2", "rehype": "^8.0.0", "semver": "^5.2.0", "source-map-support": "^0.4.15", @@ -116,6 +116,7 @@ "Christoffer Hasselberg ", "David Herges ", "Greg Magolan ", - "Livio Brunner " + "Livio Brunner ", + "Lorenzo Moreschini " ] } diff --git a/yarn.lock b/yarn.lock index 09625dd2..27921dfa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -201,6 +201,14 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + aproba@^1.0.3: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" @@ -304,6 +312,11 @@ binary-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -328,6 +341,13 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -472,6 +492,21 @@ chokidar@^2.0.0: optionalDependencies: fsevents "^1.2.7" +chokidar@^3.3.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.0.tgz#458a4816a415e9d3b3caa4faec2b96a6935a9e65" + integrity sha512-JgQM9JS92ZbFR4P90EvmzNpSGhpPBGBSj10PILeDyYFwp4h2/D9OM03wsJ4zW1fEp4ka2DGrnUeD7FuvQ2aZ2Q== + 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" + optionalDependencies: + fsevents "~2.3.1" + chownr@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6" @@ -553,6 +588,11 @@ commander@^2.19.0, commander@~2.20.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== +commander@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== + component-emitter@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" @@ -842,11 +882,6 @@ eslint@^7.17.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" -espree@^2.2.3: - version "2.2.5" - resolved "https://registry.yarnpkg.com/espree/-/espree-2.2.5.tgz#df691b9310889402aeb29cc066708c56690b854b" - integrity sha1-32kbkxCIlAKuspzAZnCMVmkLhUs= - espree@^7.3.0, espree@^7.3.1: version "7.3.1" resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" @@ -994,6 +1029,13 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + find-package@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/find-package/-/find-package-1.0.0.tgz#d7738da67e3c5f055c24d3e19aa1aeed063c3e83" @@ -1046,6 +1088,11 @@ fsevents@^1.2.7: nan "^2.12.1" node-pre-gyp "^0.12.0" +fsevents@~2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.1.tgz#b209ab14c61012636c8863507edf7fb68cc54e9f" + integrity sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw== + functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" @@ -1078,7 +1125,7 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@^5.0.0: +glob-parent@^5.0.0, glob-parent@~5.1.0: version "5.1.1" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== @@ -1358,6 +1405,13 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -1446,7 +1500,7 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" -is-glob@^4.0.0, is-glob@^4.0.1: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== @@ -1472,6 +1526,11 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" @@ -1880,7 +1939,7 @@ normalize-path@^2.1.1: dependencies: remove-trailing-separator "^1.0.1" -normalize-path@^3.0.0: +normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== @@ -1920,7 +1979,7 @@ nunjucks-date@^1.2.0: dependencies: moment "*" -nunjucks@^3.1.6, nunjucks@^3.2.0: +nunjucks@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/nunjucks/-/nunjucks-3.2.0.tgz#53e95f43c9555e822e8950008a201b1002d49933" integrity sha512-YS/qEQ6N7qCnUdm6EoYRBfJUdWNT0PpKbbRnogV2XyXbBm2STIP1O6yrdZHgwMVK7fIYUx7i8+yatEixnXSB1w== @@ -1931,6 +1990,17 @@ nunjucks@^3.1.6, nunjucks@^3.2.0: optionalDependencies: chokidar "^2.0.0" +nunjucks@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/nunjucks/-/nunjucks-3.2.2.tgz#45f915fef0f89fbab38c489dc85025f64859f466" + integrity sha512-KUi85OoF2NMygwODAy28Lh9qHmq5hO3rBlbkYoC8v377h4l8Pt5qFjILl0LWpMbOrZ18CzfVVUvIHUIrtED3sA== + dependencies: + a-sync-waterfall "^1.0.0" + asap "^2.0.3" + commander "^5.1.0" + optionalDependencies: + chokidar "^3.3.0" + object-assign@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -2099,6 +2169,11 @@ path-platform@~0.11.15: resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2" integrity sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I= +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" @@ -2177,6 +2252,13 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + dependencies: + picomatch "^2.2.1" + rechoir@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" @@ -2678,6 +2760,13 @@ to-regex-range@^2.1.0: is-number "^3.0.0" repeat-string "^1.6.1" +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"