diff --git a/.babelrc b/.babelrc index 83640a47..30db389c 100644 --- a/.babelrc +++ b/.babelrc @@ -1,5 +1,6 @@ { "plugins": [ + ["@babel/plugin-proposal-unicode-property-regex", { "useUnicodeFlag": false }], [ "@babel/plugin-transform-runtime", { diff --git a/.eslintrc.js b/.eslintrc.js index 8f49f081..1d51d8b1 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -7,6 +7,7 @@ module.exports = { }, "extends": "eslint:recommended", "parserOptions": { + "ecmaVersion": 9, "sourceType": "module" }, "rules": { diff --git a/.gitignore b/.gitignore index f15a6b12..1a7d3330 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ lib xregexp-all.js +.nyc_output +coverage # Compiled Python files *.pyc diff --git a/README.md b/README.md index 0d2dd7f0..b6c36e69 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,37 @@ -# XRegExp 4.4.1 +# XRegExp 5.0.0-next [![Build Status](https://github.com/slevithan/xregexp/workflows/Node.js%20CI/badge.svg)](https://github.com/slevithan/xregexp/actions) XRegExp provides augmented (and extensible) JavaScript regular expressions. You get modern syntax and flags beyond what browsers support natively. XRegExp is also a regex utility belt with tools to make your grepping and parsing easier, while freeing you from regex cross-browser inconsistencies and other annoyances. -XRegExp supports all native ES6 regular expression syntax. It supports ES5+ browsers, and you can use it with Node.js or as a RequireJS module. +XRegExp supports all native ES6 regular expression syntax. It supports ES5+ browsers, and you can use it with Node.js or as a RequireJS module. Over the years, many of XRegExp's features have been adopted by new JavaScript standards (named capturing, Unicode properties/scripts/categories, flag `s`, sticky matching, etc.), so using XRegExp can be a way to extend these features into older browsers. ## Performance XRegExp compiles to native `RegExp` objects. Therefore regexes built with XRegExp perform just as fast as native regular expressions. There is a tiny extra cost when compiling a pattern for the first time. +## Named Capture Breaking Change in XRegExp 5 + +XRegExp 5 introduced a breaking change where named backreference properties now appear on the result's `groups` object (following ES2018), rather than directly on the result. To restore the old handling so you don't need to update old code, run the following line after importing XRegExp: + +```js +XRegExp.uninstall('namespacing'); +``` + +XRegExp 4.1.0 and later allow introducing the new behavior without upgrading to XRegExp 5 by running `XRegExp.install('namespacing')`. + +Following is the most commonly needed change to update code for the new behavior: + +```js +// Change this +const name = XRegExp.exec(str, regexWithNamedCapture).name; + +// To this +const name = XRegExp.exec(str, regexWithNamedCapture).groups.name; +``` + +See below for more examples of using named capture with `XRegExp.exec` and `XRegExp.replace`. + ## Usage examples ```js @@ -19,9 +41,9 @@ const date = XRegExp( (? [0-9]{2} ) -? # month (? [0-9]{2} ) # day`, 'x'); -// XRegExp.exec gives you named backreferences on the match result -let match = XRegExp.exec('2017-02-22', date); -match.year; // -> '2017' +// XRegExp.exec provides named backreferences on the result's groups property +let match = XRegExp.exec('2021-02-22', date); +match.groups.year; // -> '2021' // It also includes optional pos and sticky arguments let pos = 3; @@ -33,21 +55,22 @@ while (match = XRegExp.exec('<1><2><3>4<5>', /<(\d+)>/, pos, 'sticky')) { // result -> ['2', '3'] // XRegExp.replace allows named backreferences in replacements -XRegExp.replace('2017-02-22', date, '$/$/$'); -// -> '02/22/2017' -XRegExp.replace('2017-02-22', date, (match) => { - return `${match.month}/${match.day}/${match.year}`; +XRegExp.replace('2021-02-22', date, '$/$/$'); +// -> '02/22/2021' +XRegExp.replace('2021-02-22', date, (...args) => { + // Named backreferences are on the last argument + const groups = args.pop(); + return `${groups.month}/${groups.day}/${groups.year}`; }); -// -> '02/22/2017' +// -> '02/22/2021' -// XRegExps compile to RegExps and work perfectly with native methods -date.test('2017-02-22'); +// XRegExps compile to RegExps and work with native methods +date.test('2021-02-22'); // -> true - -// The only caveat is that named captures must be referenced using -// numbered backreferences if used with native methods -'2017-02-22'.replace(date, '$2/$3/$1'); -// -> '02/22/2017' +// However, named captures must be referenced using numbered backreferences +// if used with native methods +'2021-02-22'.replace(date, '$2/$3/$1'); +// -> '02/22/2021' // Use XRegExp.forEach to extract every other digit from a string const evens = []; @@ -58,7 +81,7 @@ XRegExp.forEach('1a2345', /\d/, (match, i) => { // Use XRegExp.matchChain to get numbers within tags XRegExp.matchChain('1 2 3 4 \n 56', [ - XRegExp('(?is).*?'), + XRegExp('.*?', 'is'), /\d+/ ]); // -> ['2', '4', '56'] @@ -86,35 +109,36 @@ You can either load addons individually, or bundle all addons with XRegExp by lo ### Unicode -If not using `xregexp-all.js`, first include the Unicode Base script and then one or more of the addons for Unicode blocks, categories, properties, or scripts. +If not using `xregexp-all.js`, first include the Unicode Base script and then one or more of the addons for Unicode categories, properties, or scripts. Then you can do this: ```js -// Test the Unicode category L (Letter) -const unicodeWord = XRegExp('^\\pL+$'); -unicodeWord.test('Русский'); // -> true -unicodeWord.test('日本語'); // -> true -unicodeWord.test('العربية'); // -> true - // Test some Unicode scripts +// Can also use the Script= prefix to match ES2018: \p{Script=Hiragana} XRegExp('^\\p{Hiragana}+$').test('ひらがな'); // -> true XRegExp('^[\\p{Latin}\\p{Common}]+$').test('Über Café.'); // -> true + +// Test the Unicode categories Letter and Mark +// Can also use the short names \p{L} and \p{M} +const unicodeWord = XRegExp.tag()`^\p{Letter}[\p{Letter}\p{Mark}]*$`; +unicodeWord.test('Русский'); // -> true +unicodeWord.test('日本語'); // -> true +unicodeWord.test('العربية'); // -> true ``` By default, `\p{…}` and `\P{…}` support the Basic Multilingual Plane (i.e. code points up to `U+FFFF`). You can opt-in to full 21-bit Unicode support (with code points up to `U+10FFFF`) on a per-regex basis by using flag `A`. This is called *astral mode*. You can automatically add flag `A` for all new regexes by running `XRegExp.install('astral')`. When in astral mode, `\p{…}` and `\P{…}` always match a full code point rather than a code unit, using surrogate pairs for code points above `U+FFFF`. ```js // Using flag A to match astral code points -XRegExp('^\\pS$').test('💩'); // -> false -XRegExp('^\\pS$', 'A').test('💩'); // -> true -XRegExp('(?A)^\\pS$').test('💩'); // -> true +XRegExp('^\\p{S}$').test('💩'); // -> false +XRegExp('^\\p{S}$', 'A').test('💩'); // -> true // Using surrogate pair U+D83D U+DCA9 to represent U+1F4A9 (pile of poo) -XRegExp('(?A)^\\pS$').test('\uD83D\uDCA9'); // -> true +XRegExp('^\\p{S}$', 'A').test('\uD83D\uDCA9'); // -> true // Implicit flag A XRegExp.install('astral'); -XRegExp('^\\pS$').test('💩'); // -> true +XRegExp('^\\p{S}$').test('💩'); // -> true ``` Opting in to astral mode disables the use of `\p{…}` and `\P{…}` within character classes. In astral mode, use e.g. `(\pL|[0-9_])+` instead of `[\pL0-9_]+`. @@ -135,7 +159,7 @@ const time = XRegExp.build('(?x)^ {{hours}} ({{minutes}}) $', { }); time.test('10:59'); // -> true -XRegExp.exec('10:59', time).minutes; // -> '59' +XRegExp.exec('10:59', time).groups.minutes; // -> '59' ``` Named subpatterns can be provided as strings or regex objects. A leading `^` and trailing unescaped `$` are stripped from subpatterns if both are present, which allows embedding independently-useful anchored patterns. `{{…}}` tokens can be quantified as a single unit. Any backreferences in the outer pattern or provided subpatterns are automatically renumbered to work correctly within the larger combined pattern. The syntax `({{name}})` works as shorthand for named capture via `(?{{name}})`. Named subpatterns cannot be embedded within character classes. @@ -145,17 +169,20 @@ Named subpatterns can be provided as strings or regex objects. A leading `^` and Provides tagged template literals that create regexes with XRegExp syntax and flags: ```js -const h12 = /1[0-2]|0?[1-9]/; -const h24 = /2[0-3]|[01][0-9]/; -const hours = XRegExp.tag('x')`${h12} : | ${h24}`; -const minutes = /^[0-5][0-9]$/; -// Note that explicitly naming the 'minutes' group is required for named backreferences -const time = XRegExp.tag('x')`^ ${hours} (?${minutes}) $`; +XRegExp.tag()`\b\w+\b`.test('word'); // -> true + +const hours = /1[0-2]|0?[1-9]/; +const minutes = /(?[0-5][0-9])/; +const time = XRegExp.tag('x')`\b ${hours} : ${minutes} \b`; time.test('10:59'); // -> true -XRegExp.exec('10:59', time).minutes; // -> '59' +XRegExp.exec('10:59', time).groups.minutes; // -> '59' + +const backref1 = /(a)\1/; +const backref2 = /(b)\1/; +XRegExp.tag()`${backref1}${backref2}`.test('aabb'); // -> true ``` -XRegExp.tag does more than just basic interpolation. For starters, you get all the XRegExp syntax and flags. Even better, since `XRegExp.tag` uses your pattern as a raw string, you no longer need to escape all your backslashes. And since it relies on `XRegExp.build` under the hood, you get all of its extras for free. Leading `^` and trailing unescaped `$` are stripped from interpolated patterns if both are present (to allow embedding independently useful anchored regexes), interpolating into a character class is an error (to avoid unintended meaning in edge cases), interpolated patterns are treated as atomic units when quantified, interpolated strings have their special characters escaped, and any backreferences within an interpolated regex are rewritten to work within the overall pattern. +`XRegExp.tag` does more than just interpolation. You get all the XRegExp syntax and flags, and since it reads patterns as raw strings, you no longer need to escape all your backslashes. `XRegExp.tag` also uses `XRegExp.build` under the hood, so you get all of its extras for free. Leading `^` and trailing unescaped `$` are stripped from interpolated patterns if both are present (to allow embedding independently useful anchored regexes), interpolating into a character class is an error (to avoid unintended meaning in edge cases), interpolated patterns are treated as atomic units when quantified, interpolated strings have their special characters escaped, and any backreferences within an interpolated regex are rewritten to work within the overall pattern. ### XRegExp.matchRecursive @@ -220,14 +247,6 @@ In [Node.js](http://nodejs.org/): const XRegExp = require('xregexp'); ``` -In an AMD loader like [RequireJS](http://requirejs.org/): - -```js -require({paths: {xregexp: 'xregexp-all'}}, ['xregexp'], (XRegExp) => { - console.log(XRegExp.version); -}); -``` - ## Credits XRegExp project collaborators are: diff --git a/package-lock.json b/package-lock.json index dc784f08..5b76587c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { "name": "xregexp", - "version": "4.4.1", + "version": "5.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { - "version": "4.4.1", + "version": "5.0.0", "license": "MIT", "dependencies": { "@babel/runtime-corejs3": "^7.12.1" @@ -13,6 +13,7 @@ "devDependencies": { "@babel/cli": "^7.12.1", "@babel/core": "^7.12.3", + "@babel/plugin-proposal-unicode-property-regex": "^7.12.1", "@babel/plugin-transform-runtime": "^7.12.1", "@babel/preset-env": "^7.12.1", "@unicode/unicode-13.0.0": "^1.0.2", @@ -24,6 +25,7 @@ "eslint": "^7.12.1", "jasmine": "^3.6.2", "jsesc": "^3.0.1", + "nyc": "^15.1.0", "unicode-property-value-aliases": "^3.5.0", "zuul": "^3.12.0" } @@ -1633,6 +1635,95 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/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==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/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/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", + "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/@nicolo-ribaudo/chokidar-2": { "version": "2.1.8", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8.tgz", @@ -2120,6 +2211,9 @@ "dependencies": { "mime-types": "~2.1.6", "negotiator": "0.5.3" + }, + "engines": { + "node": ">= 0.6" } }, "node_modules/acorn": { @@ -2158,7 +2252,23 @@ "version": "0.4.7", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.7.tgz", "integrity": "sha1-hgbCy/HEJs6MjsABdER/1Jtur8E=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.3.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, "node_modules/ajv": { "version": "6.12.6", @@ -2186,13 +2296,19 @@ "kind-of": "^3.0.2", "longest": "^1.0.1", "repeat-string": "^1.5.2" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/amdefine": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4.2" + } }, "node_modules/ansi-colors": { "version": "4.1.1", @@ -2207,13 +2323,19 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/anymatch": { "version": "1.3.2", @@ -2225,6 +2347,18 @@ "normalize-path": "^2.0.0" } }, + "node_modules/append-transform": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "dev": true, + "dependencies": { + "default-require-extensions": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/archiver": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/archiver/-/archiver-0.7.1.tgz", @@ -2236,6 +2370,9 @@ "lodash": "~2.4.1", "readable-stream": "~1.0.24", "zip-stream": "~0.2.0" + }, + "engines": { + "node": ">= 0.8.0" } }, "node_modules/archiver/node_modules/isarray": { @@ -2248,7 +2385,11 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", - "dev": true + "dev": true, + "engines": [ + "node", + "rhino" + ] }, "node_modules/archiver/node_modules/readable-stream": { "version": "1.0.34", @@ -2268,6 +2409,12 @@ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true }, + "node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -2284,13 +2431,19 @@ "dev": true, "dependencies": { "arr-flatten": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/arr-union": { "version": "3.1.0", @@ -2329,19 +2482,28 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/array-unique": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/asn1": { "version": "0.1.11", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz", "integrity": "sha1-VZvhg3bQik7E2+gId9J4GGObLfc=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4.9" + } }, "node_modules/asn1.js": { "version": "4.10.1", @@ -2367,7 +2529,10 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz", "integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8" + } }, "node_modules/assign-symbols": { "version": "1.0.0", @@ -2445,7 +2610,10 @@ "version": "0.5.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz", "integrity": "sha1-xXED96F/wDfwLXwuZLYC6iI/fWM=", - "dev": true + "dev": true, + "engines": { + "node": "*" + } }, "node_modules/babel-code-frame": { "version": "6.26.0", @@ -2607,7 +2775,10 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/bindings": { "version": "1.5.0", @@ -2673,6 +2844,9 @@ "qs": "2.4.2", "raw-body": "~2.0.1", "type-is": "~1.6.2" + }, + "engines": { + "node": ">= 0.8" } }, "node_modules/body-parser/node_modules/bytes": { @@ -2694,7 +2868,10 @@ "version": "0.4.8", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.8.tgz", "integrity": "sha1-xgGadZXyzvynAuq2lKAQvNkpjSA=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8.0" + } }, "node_modules/body-parser/node_modules/ms": { "version": "0.7.1", @@ -2716,6 +2893,9 @@ "dependencies": { "bytes": "2.1.0", "iconv-lite": "0.4.8" + }, + "engines": { + "node": ">= 0.8" } }, "node_modules/body-parser/node_modules/raw-body/node_modules/bytes": { @@ -2731,6 +2911,9 @@ "dev": true, "dependencies": { "hoek": "0.9.x" + }, + "engines": { + "node": ">=0.8.0" } }, "node_modules/brace-expansion": { @@ -2752,6 +2935,9 @@ "expand-range": "^1.8.1", "preserve": "^0.2.0", "repeat-element": "^1.1.2" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/brorand": { @@ -2772,6 +2958,9 @@ "safe-buffer": "^5.1.1", "through2": "^2.0.0", "umd": "^3.0.0" + }, + "bin": { + "browser-pack": "bin/cmd.js" } }, "node_modules/browser-resolve": { @@ -2906,6 +3095,9 @@ "dependencies": { "lru-cache": "2", "sigmund": "~1.0.0" + }, + "engines": { + "node": "*" } }, "node_modules/browserify-rsa": { @@ -3005,7 +3197,11 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4", + "npm": ">=1.2" + } }, "node_modules/browserify/node_modules/events": { "version": "3.2.0", @@ -3207,7 +3403,10 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.1.tgz", "integrity": "sha1-vj5TgvwCttYySVasGvmKqYsIU0w=", - "dev": true + "dev": true, + "engines": { + "node": "*" + } }, "node_modules/buffer-from": { "version": "1.0.0", @@ -3225,7 +3424,10 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/builtin-status-codes": { "version": "3.0.0", @@ -3274,6 +3476,45 @@ "integrity": "sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==", "dev": true }, + "node_modules/caching-transform": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "dev": true, + "dependencies": { + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/caching-transform/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caching-transform/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -3288,7 +3529,10 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", "dev": true, - "optional": true + "optional": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/caniuse-lite": { "version": "1.0.30001151", @@ -3311,6 +3555,9 @@ "dependencies": { "align-text": "^0.1.3", "lazy-cache": "^1.0.3" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/chalk": { @@ -3324,6 +3571,9 @@ "has-ansi": "^2.0.0", "strip-ansi": "^3.0.0", "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/char-split": { @@ -3395,6 +3645,15 @@ "node": ">=0.10.0" } }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/cliui": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", @@ -3412,13 +3671,19 @@ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", "dev": true, - "optional": true + "optional": true, + "engines": { + "node": ">=0.4.0" + } }, "node_modules/code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/collection-visit": { "version": "1.0.0", @@ -3452,7 +3717,10 @@ "version": "0.6.2", "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.1.90" + } }, "node_modules/combine-source-map": { "version": "0.8.0", @@ -3479,6 +3747,9 @@ "dev": true, "dependencies": { "delayed-stream": "0.0.5" + }, + "engines": { + "node": ">= 0.8" } }, "node_modules/command-exists": { @@ -3493,6 +3764,12 @@ "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", "dev": true }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, "node_modules/component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", @@ -3509,6 +3786,9 @@ "crc32-stream": "~0.3.1", "node-int64": "~0.3.0", "readable-stream": "~1.0.26" + }, + "engines": { + "node": ">= 0.8.0" } }, "node_modules/compress-commons/node_modules/isarray": { @@ -3542,6 +3822,9 @@ "dev": true, "dependencies": { "mime-db": ">= 1.33.0 < 2" + }, + "engines": { + "node": ">= 0.6" } }, "node_modules/compression": { @@ -3556,8 +3839,11 @@ "debug": "~2.2.0", "on-headers": "~1.0.0", "vary": "~1.0.0" - } - }, + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/compression/node_modules/debug": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", @@ -3584,6 +3870,9 @@ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", "dev": true, + "engines": [ + "node >= 0.8" + ], "dependencies": { "inherits": "~2.0.1", "readable-stream": "~2.0.0", @@ -3637,6 +3926,9 @@ "raw-body": "1.1.2", "send": "0.1.4", "uid2": "0.0.3" + }, + "engines": { + "node": ">= 0.8.0" } }, "node_modules/connect/node_modules/bytes": { @@ -3649,13 +3941,19 @@ "version": "0.8.1", "resolved": "https://registry.npmjs.org/debug/-/debug-0.8.1.tgz", "integrity": "sha1-IP9NJvXkIstoobrLu2EDmtjBwTA=", - "dev": true + "dev": true, + "engines": { + "node": "*" + } }, "node_modules/connect/node_modules/negotiator": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.3.0.tgz", "integrity": "sha1-cG1pLv7d9XTVfqn7GriaT6fuj2A=", - "dev": true + "dev": true, + "engines": { + "node": "*" + } }, "node_modules/console-browserify": { "version": "1.1.0", @@ -3676,13 +3974,19 @@ "version": "0.5.2", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6" + } }, "node_modules/content-type": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6" + } }, "node_modules/convert-source-map": { "version": "1.7.0", @@ -3697,7 +4001,10 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.0.tgz", "integrity": "sha1-kOtGndzpBchm3mh+/EMTHYgB+dA=", - "dev": true + "dev": true, + "engines": { + "node": "*" + } }, "node_modules/cookie-signature": { "version": "1.0.1", @@ -3757,8 +4064,7 @@ "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 + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "node_modules/crc32-stream": { "version": "0.3.4", @@ -3768,6 +4074,9 @@ "dependencies": { "buffer-crc32": "~0.2.1", "readable-stream": "~1.0.24" + }, + "engines": { + "node": ">= 0.8.0" } }, "node_modules/crc32-stream/node_modules/isarray": { @@ -3897,6 +4206,9 @@ "dev": true, "dependencies": { "boom": "0.4.x" + }, + "engines": { + "node": ">=0.8.0" } }, "node_modules/crypto-browserify": { @@ -3916,13 +4228,19 @@ "public-encrypt": "^4.0.0", "randombytes": "^2.0.0", "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" } }, "node_modules/ctype": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz", "integrity": "sha1-gsGMJGH3QRTvFsE1IkrQuRRMoS8=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4" + } }, "node_modules/dash-ast": { "version": "1.0.0", @@ -3949,7 +4267,10 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/decode-uri-component": { "version": "0.2.0", @@ -3966,6 +4287,18 @@ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, + "node_modules/default-require-extensions": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", + "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", + "dev": true, + "dependencies": { + "strip-bom": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -4019,13 +4352,19 @@ "version": "0.0.5", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz", "integrity": "sha1-1LH0OpPoKW3+AmlPRoC8N6MTxz8=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4.0" + } }, "node_modules/depd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/depd/-/depd-1.0.1.tgz", "integrity": "sha1-gK7GTJ1tl+ZcwqnKqTwKpqv3Oqo=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6" + } }, "node_modules/deps-sort": { "version": "2.0.1", @@ -4072,13 +4411,22 @@ "version": "5.5.3", "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==", - "dev": true + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } }, "node_modules/diff": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.3.1" + } }, "node_modules/diffie-hellman": { "version": "5.0.3", @@ -4107,7 +4455,11 @@ "version": "1.1.7", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4", + "npm": ">=1.2" + } }, "node_modules/dts-critic": { "version": "2.2.4", @@ -4125,7 +4477,10 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, "node_modules/dts-critic/node_modules/cliui": { "version": "4.1.0", @@ -4142,7 +4497,10 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "dev": true, + "bin": { + "semver": "bin/semver.js" + } }, "node_modules/dts-critic/node_modules/strip-ansi": { "version": "4.0.0", @@ -4151,6 +4509,9 @@ "dev": true, "dependencies": { "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, "node_modules/dts-critic/node_modules/yargs": { @@ -4249,6 +4610,11 @@ "minimalistic-crypto-utils": "^1.0.0" } }, + "node_modules/emit-function": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/emit-function/-/emit-function-0.0.2.tgz", + "integrity": "sha1-46ULPWG+G/jKiLkkv3ExV6W+wSQ=" + }, "node_modules/emitter-component": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/emitter-component/-/emitter-component-1.0.0.tgz", @@ -4265,7 +4631,10 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8" + } }, "node_modules/end-of-stream": { "version": "1.4.1", @@ -4349,6 +4718,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -4368,7 +4743,10 @@ "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 + "dev": true, + "engines": { + "node": ">=0.8.0" + } }, "node_modules/escodegen": { "version": "1.3.3", @@ -4381,6 +4759,13 @@ "esutils": "~1.0.0", "source-map": "~0.1.33" }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=0.10.0" + }, "optionalDependencies": { "source-map": "~0.1.33" } @@ -4389,19 +4774,32 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.1.1.tgz", "integrity": "sha1-W28VR/TRAuZw4UDFCb5ncdautUk=", - "dev": true + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.4.0" + } }, "node_modules/escodegen/node_modules/estraverse": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.5.1.tgz", "integrity": "sha1-hno+jlip+EYYr7bC3bzZFrfLr3E=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4.0" + } }, "node_modules/escodegen/node_modules/esutils": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.0.0.tgz", "integrity": "sha1-gVHTWOIMisx/t0XnRywAJf5JZXA=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/escodegen/node_modules/source-map": { "version": "0.1.43", @@ -4411,6 +4809,9 @@ "optional": true, "dependencies": { "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" } }, "node_modules/eslint": { @@ -4780,7 +5181,14 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", - "dev": true + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } }, "node_modules/esquery": { "version": "1.3.1", @@ -4837,13 +5245,19 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6" + } }, "node_modules/eventemitter3": { "version": "1.2.0", @@ -4855,7 +5269,10 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4.x" + } }, "node_modules/evp_bytestokey": { "version": "1.0.3", @@ -4880,6 +5297,9 @@ "p-finally": "^1.0.0", "signal-exit": "^3.0.0", "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" } }, "node_modules/execa/node_modules/cross-spawn": { @@ -4893,6 +5313,9 @@ "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" } }, "node_modules/execa/node_modules/which": { @@ -4902,6 +5325,9 @@ "dev": true, "dependencies": { "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" } }, "node_modules/expand-brackets": { @@ -4911,6 +5337,9 @@ "dev": true, "dependencies": { "is-posix-bracket": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/expand-range": { @@ -4920,6 +5349,9 @@ "dev": true, "dependencies": { "fill-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/express": { @@ -4940,13 +5372,23 @@ "mkdirp": "0.3.5", "range-parser": "0.0.4", "send": "0.1.4" + }, + "bin": { + "express": "bin/express" + }, + "engines": { + "node": ">= 0.8.0" } }, "node_modules/express-state": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/express-state/-/express-state-1.0.3.tgz", "integrity": "sha1-tvNodDqV2KkbdoOt9ZPQKxV37AI=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8.x", + "npm": ">=1.2.10" + } }, "node_modules/express/node_modules/commander": { "version": "1.3.2", @@ -4955,13 +5397,19 @@ "dev": true, "dependencies": { "keypress": "0.1.x" + }, + "engines": { + "node": ">= 0.6.x" } }, "node_modules/express/node_modules/debug": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/debug/-/debug-0.8.1.tgz", "integrity": "sha1-IP9NJvXkIstoobrLu2EDmtjBwTA=", - "dev": true + "dev": true, + "engines": { + "node": "*" + } }, "node_modules/express/node_modules/mkdirp": { "version": "0.3.5", @@ -4988,6 +5436,9 @@ "dev": true, "dependencies": { "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/fast-deep-equal": { @@ -5056,6 +5507,9 @@ "dependencies": { "inherits": "2", "minimatch": "0.3" + }, + "engines": { + "node": "*" } }, "node_modules/file-utils/node_modules/glob/node_modules/minimatch": { @@ -5066,13 +5520,20 @@ "dependencies": { "lru-cache": "2", "sigmund": "~1.0.0" + }, + "engines": { + "node": "*" } }, "node_modules/file-utils/node_modules/lodash": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.1.0.tgz", "integrity": "sha1-Bjfqqjaooc/IZcOt+5Qhib+wmY0=", - "dev": true + "dev": true, + "engines": [ + "node", + "rhino" + ] }, "node_modules/file-utils/node_modules/minimatch": { "version": "0.2.14", @@ -5082,19 +5543,28 @@ "dependencies": { "lru-cache": "2", "sigmund": "~1.0.0" + }, + "engines": { + "node": "*" } }, "node_modules/file-utils/node_modules/rimraf": { "version": "2.2.8", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", - "dev": true + "dev": true, + "bin": { + "rimraf": "bin.js" + } }, "node_modules/filename-regex": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/fileset": { "version": "0.1.8", @@ -5114,6 +5584,9 @@ "dependencies": { "inherits": "2", "minimatch": "0.3" + }, + "engines": { + "node": "*" } }, "node_modules/fileset/node_modules/glob/node_modules/minimatch": { @@ -5124,6 +5597,9 @@ "dependencies": { "lru-cache": "2", "sigmund": "~1.0.0" + }, + "engines": { + "node": "*" } }, "node_modules/fileset/node_modules/minimatch": { @@ -5134,6 +5610,9 @@ "dependencies": { "lru-cache": "2", "sigmund": "~1.0.0" + }, + "engines": { + "node": "*" } }, "node_modules/fill-range": { @@ -5147,6 +5626,9 @@ "randomatic": "^1.1.3", "repeat-element": "^1.1.2", "repeat-string": "^1.5.2" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/finalhandler": { @@ -5162,6 +5644,9 @@ "parseurl": "~1.3.2", "statuses": "~1.4.0", "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, "node_modules/finalhandler/node_modules/ee-first": { @@ -5177,31 +5662,81 @@ "dev": true, "dependencies": { "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" } }, - "node_modules/find-nearest-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/find-nearest-file/-/find-nearest-file-1.0.0.tgz", - "integrity": "sha1-v1OdfQ8CmWYx+iGWaA9ndnYrn3A=", - "dev": true - }, - "node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "node_modules/find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", "dev": true, "dependencies": { - "locate-path": "^3.0.0" + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, - "node_modules/findup-sync": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz", + "node_modules/find-cache-dir/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-cache-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/find-nearest-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-nearest-file/-/find-nearest-file-1.0.0.tgz", + "integrity": "sha1-v1OdfQ8CmWYx+iGWaA9ndnYrn3A=", + "dev": true + }, + "node_modules/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, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/findup-sync": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz", "integrity": "sha1-fz56l7gjksZTvwZYm9hRkOk8NoM=", "dev": true, "dependencies": { "glob": "~3.2.9", "lodash": "~2.4.1" + }, + "engines": { + "node": ">= 0.6.0" } }, "node_modules/findup-sync/node_modules/glob": { @@ -5212,13 +5747,20 @@ "dependencies": { "inherits": "2", "minimatch": "0.3" + }, + "engines": { + "node": "*" } }, "node_modules/findup-sync/node_modules/lodash": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", - "dev": true + "dev": true, + "engines": [ + "node", + "rhino" + ] }, "node_modules/findup-sync/node_modules/minimatch": { "version": "0.3.0", @@ -5228,6 +5770,9 @@ "dependencies": { "lru-cache": "2", "sigmund": "~1.0.0" + }, + "engines": { + "node": "*" } }, "node_modules/firefox-profile": { @@ -5276,7 +5821,10 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/for-own": { "version": "0.1.5", @@ -5285,6 +5833,9 @@ "dev": true, "dependencies": { "for-in": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/foreach": { @@ -5306,13 +5857,33 @@ "dev": true, "dependencies": { "sequence": "2.x" + }, + "engines": { + "ender": ">= 0.5.0", + "node": "*" + } + }, + "node_modules/foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8.0.0" } }, "node_modules/forever-agent": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz", "integrity": "sha1-bQ4JxJIflKJ/Y9O0nF/v8epMUTA=", - "dev": true + "dev": true, + "engines": { + "node": "*" + } }, "node_modules/form-data": { "version": "0.1.4", @@ -5323,19 +5894,28 @@ "async": "~0.9.0", "combined-stream": "~0.0.4", "mime": "~1.2.11" + }, + "engines": { + "node": ">= 0.8" } }, "node_modules/formidable": { "version": "1.0.14", "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.0.14.tgz", "integrity": "sha1-Kz9MQRy7X91pXESEPiojUUpDIxo=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8.0" + } }, "node_modules/forwarded": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6" + } }, "node_modules/fragment-cache": { "version": "0.2.1", @@ -5355,6 +5935,26 @@ "integrity": "sha1-v9lALPPfEsSkwxDHn5mj3eE9NKc=", "dev": true }, + "node_modules/fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "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/fs-extra": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.8.1.tgz", @@ -5377,7 +5977,10 @@ "version": "2.2.8", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", - "dev": true + "dev": true, + "bin": { + "rimraf": "bin.js" + } }, "node_modules/fs-readdir-recursive": { "version": "1.1.0", @@ -5443,6 +6046,15 @@ "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", "dev": true }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -5450,6 +6062,9 @@ "dev": true, "dependencies": { "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, "node_modules/get-value": { @@ -5489,6 +6104,9 @@ "dependencies": { "glob-parent": "^2.0.0", "is-glob": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/glob-parent": { @@ -5504,7 +6122,10 @@ "version": "11.9.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.9.0.tgz", "integrity": "sha512-5cJVtyXWH8PiJPVLZzzoIizXx944O4OmRro5MWKx5fT4MgcN7OfaMutPeaTdJCCURwbWdhhcCWcKIffPnmTzBg==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, "node_modules/globs-to-files": { "version": "1.0.0", @@ -5529,6 +6150,9 @@ "minimatch": "2 || 3", "once": "^1.3.0", "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" } }, "node_modules/graceful-fs": { @@ -5545,6 +6169,12 @@ "dependencies": { "optimist": "~0.3", "uglify-js": "~2.3" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" } }, "node_modules/has": { @@ -5566,13 +6196,19 @@ "dev": true, "dependencies": { "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/has-symbols": { "version": "1.0.1", @@ -5666,6 +6302,9 @@ "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" + }, + "engines": { + "node": ">=4" } }, "node_modules/hash.js": { @@ -5678,6 +6317,31 @@ "minimalistic-assert": "^1.0.0" } }, + "node_modules/hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, + "dependencies": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hasha/node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/hawk": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/hawk/-/hawk-1.1.1.tgz", @@ -5688,6 +6352,9 @@ "cryptiles": "0.2.x", "hoek": "0.9.x", "sntp": "0.2.x" + }, + "engines": { + "node": ">=0.8.0" } }, "node_modules/hbs": { @@ -5698,6 +6365,9 @@ "dependencies": { "handlebars": "1.0.12", "walk": "2.2.1" + }, + "engines": { + "node": ">= 0.4.0" } }, "node_modules/hbs/node_modules/handlebars": { @@ -5708,13 +6378,22 @@ "dependencies": { "optimist": "~0.3", "uglify-js": "~2.3" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" } }, "node_modules/highlight.js": { "version": "7.5.0", "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-7.5.0.tgz", "integrity": "sha1-AFJZXu8VhF2ELgKgMxOvrcPr1sw=", - "dev": true + "dev": true, + "engines": { + "node": "*" + } }, "node_modules/hmac-drbg": { "version": "1.0.1", @@ -5731,13 +6410,25 @@ "version": "0.9.1", "resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz", "integrity": "sha1-PTIkYrrfB3Fup+uFuviAec3c5QU=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, "node_modules/htmlescape": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10" + } }, "node_modules/http-errors": { "version": "1.6.3", @@ -5749,13 +6440,19 @@ "inherits": "2.0.3", "setprototypeof": "1.1.0", "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" } }, "node_modules/http-errors/node_modules/depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6" + } }, "node_modules/http-proxy": { "version": "1.11.2", @@ -5765,6 +6462,9 @@ "dependencies": { "eventemitter3": "1.x.x", "requires-port": "0.x.x" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/http-signature": { @@ -5776,6 +6476,9 @@ "asn1": "0.1.11", "assert-plus": "^0.1.5", "ctype": "0.5.3" + }, + "engines": { + "node": ">=0.8" } }, "node_modules/https-browserify": { @@ -5794,7 +6497,10 @@ "version": "0.2.11", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz", "integrity": "sha1-HOYKOleGSiktEyH/RgnKS7llrcg=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4.0" + } }, "node_modules/ieee754": { "version": "1.1.11", @@ -5828,7 +6534,19 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } }, "node_modules/indexof": { "version": "0.0.1", @@ -5849,8 +6567,7 @@ "node_modules/inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "node_modules/inline-source-map": { "version": "0.6.2", @@ -5887,6 +6604,9 @@ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, + "engines": [ + "node >= 0.8" + ], "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -5898,13 +6618,19 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, "node_modules/ipaddr.js": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.10" + } }, "node_modules/is-accessor-descriptor": { "version": "0.1.6", @@ -5934,6 +6660,9 @@ "dev": true, "dependencies": { "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/is-buffer": { @@ -6017,7 +6746,10 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/is-equal-shallow": { "version": "0.1.3", @@ -6026,25 +6758,37 @@ "dev": true, "dependencies": { "is-primitive": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/is-extglob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true + "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 + "dev": true, + "engines": { + "node": ">=4" + } }, "node_modules/is-generator-function": { "version": "1.0.7", @@ -6062,6 +6806,9 @@ "dev": true, "dependencies": { "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/is-negative-zero": { @@ -6080,6 +6827,9 @@ "dev": true, "dependencies": { "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/is-plain-object": { @@ -6107,13 +6857,19 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/is-primitive": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/is-regex": { "version": "1.1.1", @@ -6134,7 +6890,10 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/is-symbol": { "version": "1.0.3", @@ -6203,6 +6962,12 @@ "node": ">= 0.4" } }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, "node_modules/is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -6215,14 +6980,16 @@ "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "node_modules/isbinaryfile": { "version": "0.1.9", "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-0.1.9.tgz", "integrity": "sha1-Fe7ONcSrcI2JJNqZ+4dPK1zAtsQ=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.6.0" + } }, "node_modules/isexe": { "version": "2.0.0", @@ -6237,6 +7004,9 @@ "dev": true, "dependencies": { "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/istanbul": { @@ -6257,6 +7027,216 @@ "resolve": "0.7.x", "which": "1.0.x", "wordwrap": "0.0.x" + }, + "bin": { + "istanbul": "lib/cli.js" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", + "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-hook": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", + "dev": true, + "dependencies": { + "append-transform": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-processinfo": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz", + "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", + "dev": true, + "dependencies": { + "archy": "^1.0.0", + "cross-spawn": "^7.0.0", + "istanbul-lib-coverage": "^3.0.0-alpha.1", + "make-dir": "^3.0.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^3.3.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/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/istanbul-lib-report/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-lib-report/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report/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/istanbul-lib-source-maps": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", + "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps/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/istanbul-lib-source-maps/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/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, "node_modules/istanbul-middleware": { @@ -6269,6 +7249,9 @@ "body-parser": "~1.12.3", "express": "4.x", "istanbul": "0.4.x" + }, + "engines": { + "node": ">=0.6.x" } }, "node_modules/istanbul-middleware/node_modules/accepts": { @@ -6279,6 +7262,9 @@ "dependencies": { "mime-types": "~2.1.18", "negotiator": "0.6.1" + }, + "engines": { + "node": ">= 0.6" } }, "node_modules/istanbul-middleware/node_modules/archiver": { @@ -6295,19 +7281,28 @@ "readable-stream": "~1.0.26", "tar-stream": "~1.1.0", "zip-stream": "~0.5.0" + }, + "engines": { + "node": ">= 0.10.0" } }, "node_modules/istanbul-middleware/node_modules/bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8" + } }, "node_modules/istanbul-middleware/node_modules/cookie": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6" + } }, "node_modules/istanbul-middleware/node_modules/cookie-signature": { "version": "1.0.6", @@ -6319,7 +7314,10 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6" + } }, "node_modules/istanbul-middleware/node_modules/ee-first": { "version": "1.1.1", @@ -6339,6 +7337,13 @@ "optionator": "^0.8.1", "source-map": "~0.2.0" }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=0.12.0" + }, "optionalDependencies": { "source-map": "~0.2.0" } @@ -6347,13 +7352,23 @@ "version": "2.7.3", "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/istanbul-middleware/node_modules/estraverse": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/istanbul-middleware/node_modules/express": { "version": "4.16.3", @@ -6391,6 +7406,9 @@ "type-is": "~1.6.16", "utils-merge": "1.0.1", "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" } }, "node_modules/istanbul-middleware/node_modules/express/node_modules/body-parser": { @@ -6409,13 +7427,19 @@ "qs": "6.5.1", "raw-body": "2.3.2", "type-is": "~1.6.15" + }, + "engines": { + "node": ">= 0.8" } }, "node_modules/istanbul-middleware/node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6" + } }, "node_modules/istanbul-middleware/node_modules/glob": { "version": "4.3.5", @@ -6427,6 +7451,9 @@ "inherits": "2", "minimatch": "^2.0.1", "once": "^1.3.0" + }, + "engines": { + "node": "*" } }, "node_modules/istanbul-middleware/node_modules/handlebars": { @@ -6440,6 +7467,12 @@ "source-map": "^0.4.4", "uglify-js": "^2.6" }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, "optionalDependencies": { "uglify-js": "^2.6" } @@ -6457,13 +7490,19 @@ "dev": true, "dependencies": { "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" } }, "node_modules/istanbul-middleware/node_modules/iconv-lite": { "version": "0.4.19", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/istanbul-middleware/node_modules/isarray": { "version": "0.0.1", @@ -6491,6 +7530,9 @@ "supports-color": "^3.1.0", "which": "^1.1.1", "wordwrap": "^1.0.0" + }, + "bin": { + "istanbul": "lib/cli.js" } }, "node_modules/istanbul-middleware/node_modules/istanbul/node_modules/async": { @@ -6510,6 +7552,9 @@ "minimatch": "2 || 3", "once": "^1.3.0", "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" } }, "node_modules/istanbul-middleware/node_modules/lodash": { @@ -6528,13 +7573,19 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true - }, - "node_modules/istanbul-middleware/node_modules/mime": { - "version": "1.4.1", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/istanbul-middleware/node_modules/mime": { + "version": "1.4.1", "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", - "dev": true + "dev": true, + "bin": { + "mime": "cli.js" + } }, "node_modules/istanbul-middleware/node_modules/minimatch": { "version": "2.0.10", @@ -6543,13 +7594,19 @@ "dev": true, "dependencies": { "brace-expansion": "^1.0.0" + }, + "engines": { + "node": "*" } }, "node_modules/istanbul-middleware/node_modules/negotiator": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6" + } }, "node_modules/istanbul-middleware/node_modules/on-finished": { "version": "2.3.0", @@ -6558,6 +7615,9 @@ "dev": true, "dependencies": { "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" } }, "node_modules/istanbul-middleware/node_modules/optimist": { @@ -6574,19 +7634,28 @@ "version": "0.0.3", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4.0" + } }, "node_modules/istanbul-middleware/node_modules/qs": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.6" + } }, "node_modules/istanbul-middleware/node_modules/range-parser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6" + } }, "node_modules/istanbul-middleware/node_modules/raw-body": { "version": "2.3.2", @@ -6598,13 +7667,19 @@ "http-errors": "1.6.2", "iconv-lite": "0.4.19", "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, "node_modules/istanbul-middleware/node_modules/raw-body/node_modules/depd": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6" + } }, "node_modules/istanbul-middleware/node_modules/raw-body/node_modules/http-errors": { "version": "1.6.2", @@ -6616,6 +7691,9 @@ "inherits": "2.0.3", "setprototypeof": "1.0.3", "statuses": ">= 1.3.1 < 2" + }, + "engines": { + "node": ">= 0.6" } }, "node_modules/istanbul-middleware/node_modules/raw-body/node_modules/setprototypeof": { @@ -6661,6 +7739,9 @@ "on-finished": "~2.3.0", "range-parser": "~1.2.0", "statuses": "~1.4.0" + }, + "engines": { + "node": ">= 0.8.0" } }, "node_modules/istanbul-middleware/node_modules/source-map": { @@ -6671,6 +7752,9 @@ "optional": true, "dependencies": { "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" } }, "node_modules/istanbul-middleware/node_modules/string_decoder": { @@ -6686,6 +7770,9 @@ "dev": true, "dependencies": { "has-flag": "^1.0.0" + }, + "engines": { + "node": ">=0.8.0" } }, "node_modules/istanbul-middleware/node_modules/uglify-js": { @@ -6698,6 +7785,12 @@ "source-map": "~0.5.1", "uglify-to-browserify": "~1.0.0", "yargs": "~3.10.0" + }, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" } }, "node_modules/istanbul-middleware/node_modules/uglify-js/node_modules/source-map": { @@ -6705,13 +7798,19 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true, - "optional": true + "optional": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/istanbul-middleware/node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8" + } }, "node_modules/istanbul-middleware/node_modules/which": { "version": "1.3.0", @@ -6720,6 +7819,9 @@ "dev": true, "dependencies": { "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" } }, "node_modules/istanbul-middleware/node_modules/zip-stream": { @@ -6731,13 +7833,36 @@ "compress-commons": "~0.2.0", "lodash": "~3.2.0", "readable-stream": "~1.0.26" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", + "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/istanbul/node_modules/esprima": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.5.tgz", "integrity": "sha1-CZNQL+r2aBODJXVvMPmlH+7sEek=", - "dev": true + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.4.0" + } }, "node_modules/istanbul/node_modules/resolve": { "version": "0.7.4", @@ -6749,7 +7874,10 @@ "version": "0.0.3", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4.0" + } }, "node_modules/jasmine": { "version": "3.6.2", @@ -6871,16 +7999,23 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "dev": true + "engines": [ + "node >= 0.2.0" + ] }, "node_modules/JSONStream": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz", "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=", - "dev": true, "dependencies": { "jsonparse": "^1.2.0", "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" } }, "node_modules/keypress": { @@ -6896,6 +8031,9 @@ "dev": true, "dependencies": { "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/labeled-stream-splicer": { @@ -6920,7 +8058,10 @@ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", "dev": true, - "optional": true + "optional": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/lazystream": { "version": "0.1.0", @@ -6929,6 +8070,9 @@ "dev": true, "dependencies": { "readable-stream": "~1.0.2" + }, + "engines": { + "node": ">= 0.6.3" } }, "node_modules/lazystream/node_modules/isarray": { @@ -6962,6 +8106,9 @@ "dev": true, "dependencies": { "invert-kv": "^2.0.0" + }, + "engines": { + "node": ">=6" } }, "node_modules/levn": { @@ -6972,6 +8119,9 @@ "dependencies": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" } }, "node_modules/load-script": { @@ -6989,6 +8139,9 @@ "debug": "0.7.4", "optimist": "0.3.4", "request": "2.11.4" + }, + "bin": { + "lt": "bin/client" } }, "node_modules/localtunnel/node_modules/async": { @@ -7004,13 +8157,19 @@ "dev": true, "dependencies": { "delayed-stream": "0.0.5" + }, + "engines": { + "node": "*" } }, "node_modules/localtunnel/node_modules/debug": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz", "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=", - "dev": true + "dev": true, + "engines": { + "node": "*" + } }, "node_modules/localtunnel/node_modules/form-data": { "version": "0.0.3", @@ -7021,6 +8180,9 @@ "async": "0.1.9", "combined-stream": "0.0.3", "mime": "1.2.2" + }, + "engines": { + "node": "*" } }, "node_modules/localtunnel/node_modules/form-data/node_modules/mime": { @@ -7049,6 +8211,9 @@ "resolved": "https://registry.npmjs.org/request/-/request-2.11.4.tgz", "integrity": "sha1-Y0fX1E5S3FiBCMwc5c7pdfyJJt4=", "dev": true, + "engines": [ + "node >= 0.3.6" + ], "dependencies": { "form-data": "~0.0.3", "mime": "~1.2.7" @@ -7058,7 +8223,10 @@ "version": "0.0.3", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4.0" + } }, "node_modules/locate-path": { "version": "3.0.0", @@ -7068,6 +8236,9 @@ "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, "node_modules/lodash": { @@ -7107,6 +8278,12 @@ "lodash.keys": "~2.4.1" } }, + "node_modules/lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", + "dev": true + }, "node_modules/lodash.isobject": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz", @@ -7138,7 +8315,10 @@ "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", "dev": true, - "optional": true + "optional": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/lru-cache": { "version": "2.7.3", @@ -7166,6 +8346,9 @@ "dev": true, "dependencies": { "p-defer": "^1.0.0" + }, + "engines": { + "node": ">=6" } }, "node_modules/map-cache": { @@ -7203,7 +8386,10 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6" + } }, "node_modules/mem": { "version": "4.3.0", @@ -7214,13 +8400,19 @@ "map-age-cleaner": "^0.1.1", "mimic-fn": "^2.0.0", "p-is-promise": "^2.0.0" + }, + "engines": { + "node": ">=6" } }, "node_modules/mem/node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, "node_modules/merge-descriptors": { "version": "0.0.1", @@ -7253,6 +8445,9 @@ "object.omit": "^2.0.0", "parse-glob": "^3.0.4", "regex-cache": "^0.4.2" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/miller-rabin": { @@ -7263,6 +8458,9 @@ "dependencies": { "bn.js": "^4.0.0", "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" } }, "node_modules/mime": { @@ -7311,6 +8509,9 @@ "dev": true, "dependencies": { "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, "node_modules/minimist": { @@ -7351,6 +8552,9 @@ "dev": true, "dependencies": { "minimist": "0.0.8" + }, + "bin": { + "mkdirp": "bin/cmd.js" } }, "node_modules/mkdirp-classic": { @@ -7380,6 +8584,12 @@ "subarg": "^1.0.0", "through2": "^2.0.0", "xtend": "^4.0.0" + }, + "bin": { + "module-deps": "bin/cmd.js" + }, + "engines": { + "node": ">= 0.6" } }, "node_modules/ms": { @@ -7396,6 +8606,9 @@ "dependencies": { "readable-stream": "~1.1.9", "stream-counter": "~0.2.0" + }, + "engines": { + "node": ">=0.8.0" } }, "node_modules/multiparty/node_modules/isarray": { @@ -7579,13 +8792,19 @@ "version": "0.4.2", "resolved": "https://registry.npmjs.org/ncp/-/ncp-0.4.2.tgz", "integrity": "sha1-q8xsvT7C7Spyn/bnwfqPAXhKhXQ=", - "dev": true + "dev": true, + "bin": { + "ncp": "bin/ncp" + } }, "node_modules/negotiator": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.5.3.tgz", "integrity": "sha1-Jp1cR2gQ7JLtvntsLygxY4T5p+g=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6" + } }, "node_modules/nice-try": { "version": "1.0.5", @@ -7599,6 +8818,18 @@ "integrity": "sha1-LW5rLs5d6FiLQ9iNG8QbJs0fqE0=", "dev": true }, + "node_modules/node-preload": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", + "dev": true, + "dependencies": { + "process-on-spawn": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/node-releases": { "version": "1.1.64", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.64.tgz", @@ -7609,7 +8840,10 @@ "version": "1.4.8", "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=", - "dev": true + "dev": true, + "bin": { + "uuid": "bin/uuid" + } }, "node_modules/nopt": { "version": "3.0.6", @@ -7618,6 +8852,9 @@ "dev": true, "dependencies": { "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" } }, "node_modules/normalize-path": { @@ -7627,6 +8864,54 @@ "dev": true, "dependencies": { "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-get-dependents": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-get-dependents/-/npm-get-dependents-1.0.1.tgz", + "integrity": "sha1-71pZCab6xL2+IFuSXUr9k6vupbo=", + "dependencies": { + "emit-function": "0.0.2", + "JSONStream": "^0.10.0", + "once": "^1.3.1" + } + }, + "node_modules/npm-get-dependents/node_modules/jsonparse": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-0.0.5.tgz", + "integrity": "sha1-MwVCrT8KZUZlt3jz6y2an6UHrGQ=", + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/npm-get-dependents/node_modules/JSONStream": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.10.0.tgz", + "integrity": "sha1-dDSdDYlSK3HzDwoD/5vSDKbxKsA=", + "dependencies": { + "jsonparse": "0.0.5", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "index.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/npm-get-top-dependents": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/npm-get-top-dependents/-/npm-get-top-dependents-1.0.2.tgz", + "integrity": "sha1-rWzfRtGkBE1BzIm9MNZPE4Dus4E=", + "dependencies": { + "JSONStream": "^1.1.1", + "npm-get-dependents": "^1.0.1", + "object-chunker": "^1.0.0", + "readable-stream": "^2.1.2", + "stream-sort": "^1.1.0" } }, "node_modules/npm-run-path": { @@ -7636,36 +8921,346 @@ "dev": true, "dependencies": { "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" } }, "node_modules/number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "node_modules/oauth-sign": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.4.0.tgz", - "integrity": "sha1-8ilW8x6nFRqCHl8vsywRPK2Ln2k=", - "dev": true - }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/object-inspect": { - "version": "1.8.0", + "node_modules/nyc": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", + "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", + "dev": true, + "dependencies": { + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^2.0.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" + }, + "bin": { + "nyc": "bin/nyc.js" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/nyc/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/nyc/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/nyc/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/nyc/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/nyc/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/nyc/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/nyc/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/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/nyc/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/nyc/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nyc/node_modules/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==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/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/nyc/node_modules/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 + }, + "node_modules/nyc/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/nyc/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/nyc/node_modules/string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "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/nyc/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/nyc/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.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": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/oauth-sign": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.4.0.tgz", + "integrity": "sha1-8ilW8x6nFRqCHl8vsywRPK2Ln2k=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/object-chunker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-chunker/-/object-chunker-1.0.1.tgz", + "integrity": "sha512-NZWrtBQUq2RKTDCdtWaZw3aXrHq5PVzaRkkxPW6u8/0Gq1wwzPEOvhpx6mSWpojGz6TN4i4+ho061IV60yrO4A==" + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.8.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", "dev": true, @@ -7735,6 +9330,9 @@ "dependencies": { "for-own": "^0.1.4", "is-extendable": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/object.pick": { @@ -7765,19 +9363,24 @@ "dev": true, "dependencies": { "ee-first": "1.1.0" + }, + "engines": { + "node": ">= 0.8" } }, "node_modules/on-headers": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8" + } }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "dependencies": { "wrappy": "1" } @@ -7786,7 +9389,10 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/opener/-/opener-1.4.0.tgz", "integrity": "sha1-0R+G7usHaINzXJ1Qn1OP6C0QuUE=", - "dev": true + "dev": true, + "bin": { + "opener": "opener.js" + } }, "node_modules/optimist": { "version": "0.3.7", @@ -7801,7 +9407,10 @@ "version": "0.0.3", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4.0" + } }, "node_modules/optionator": { "version": "0.8.2", @@ -7815,6 +9424,9 @@ "prelude-ls": "~1.1.2", "type-check": "~0.3.2", "wordwrap": "~1.0.0" + }, + "engines": { + "node": ">= 0.8.0" } }, "node_modules/os-browserify": { @@ -7832,6 +9444,9 @@ "execa": "^1.0.0", "lcid": "^2.0.0", "mem": "^4.0.0" + }, + "engines": { + "node": ">=6" } }, "node_modules/osenv": { @@ -7853,19 +9468,28 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, "node_modules/p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, "node_modules/p-is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, "node_modules/p-limit": { "version": "2.2.2", @@ -7874,6 +9498,9 @@ "dev": true, "dependencies": { "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" } }, "node_modules/p-locate": { @@ -7883,13 +9510,46 @@ "dev": true, "dependencies": { "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/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 + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-hash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + }, + "engines": { + "node": ">=8" + } }, "node_modules/pako": { "version": "0.2.9", @@ -7941,13 +9601,19 @@ "is-dotfile": "^1.0.0", "is-extglob": "^1.0.0", "is-glob": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/parseurl": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8" + } }, "node_modules/parsimmon": { "version": "1.13.0", @@ -7981,19 +9647,28 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, "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=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, "node_modules/path-parse": { "version": "1.0.6", @@ -8005,7 +9680,10 @@ "version": "0.11.15", "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8.0" + } }, "node_modules/path-to-regexp": { "version": "0.1.7", @@ -8025,33 +9703,94 @@ "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", "dev": true, "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "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, + "optional": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "node_modules/pkg-dir/node_modules/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==", "dev": true, - "optional": true, - "engines": { - "node": ">=8.6" + "dependencies": { + "p-limit": "^2.2.0" }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "engines": { + "node": ">=8" } }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "node_modules/pkg-dir/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": ">=6" + "node": ">=8" } }, "node_modules/posix-character-classes": { @@ -8067,31 +9806,54 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8.0" + } }, "node_modules/preserve": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6.0" + } }, "node_modules/process-nextick-args": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + }, + "node_modules/process-on-spawn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", + "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", + "dev": true, + "dependencies": { + "fromentries": "^1.2.0" + }, + "engines": { + "node": ">=8" + } }, "node_modules/progress": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4.0" + } }, "node_modules/proxy-addr": { "version": "2.0.3", @@ -8101,6 +9863,9 @@ "dependencies": { "forwarded": "~0.1.2", "ipaddr.js": "1.6.0" + }, + "engines": { + "node": ">= 0.10" } }, "node_modules/psl": { @@ -8142,25 +9907,38 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/q/-/q-1.0.1.tgz", "integrity": "sha1-EYcq7t7okmgRCxCnGESP+xARKhQ=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } }, "node_modules/qs": { "version": "0.6.6", "resolved": "https://registry.npmjs.org/qs/-/qs-0.6.6.tgz", "integrity": "sha1-bgFQmP9RlouKPIGQAdXyyJvEsQc=", - "dev": true + "dev": true, + "engines": { + "node": "*" + } }, "node_modules/querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4.x" + } }, "node_modules/querystring-es3": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4.x" + } }, "node_modules/randomatic": { "version": "1.1.7", @@ -8170,6 +9948,9 @@ "dependencies": { "is-number": "^3.0.0", "kind-of": "^4.0.0" + }, + "engines": { + "node": ">= 0.10.0" } }, "node_modules/randomatic/node_modules/is-number": { @@ -8179,6 +9960,9 @@ "dev": true, "dependencies": { "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/randomatic/node_modules/is-number/node_modules/kind-of": { @@ -8188,6 +9972,9 @@ "dev": true, "dependencies": { "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/randomatic/node_modules/kind-of": { @@ -8197,6 +9984,9 @@ "dev": true, "dependencies": { "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/randombytes": { @@ -8231,6 +10021,9 @@ "dev": true, "dependencies": { "bytes": "~0.2.1" + }, + "engines": { + "node": ">= 0.8.0" } }, "node_modules/raw-body/node_modules/bytes": { @@ -8252,7 +10045,6 @@ "version": "2.3.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -8664,6 +10456,9 @@ "dev": true, "dependencies": { "is-equal-shallow": "^0.1.3" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/regex-not": { @@ -8760,6 +10555,18 @@ "jsesc": "bin/jsesc" } }, + "node_modules/release-zalgo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", + "dev": true, + "dependencies": { + "es6-error": "^4.0.1" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", @@ -8770,13 +10577,19 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10" + } }, "node_modules/request": { "version": "2.46.0", @@ -8799,13 +10612,19 @@ "stringstream": "~0.0.4", "tough-cookie": ">=0.12.0", "tunnel-agent": "~0.4.0" + }, + "engines": { + "node": ">=0.8.0" } }, "node_modules/request/node_modules/mime-types": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-1.0.2.tgz", "integrity": "sha1-mVrhOSq4r/y/yyZB3QVOlDwNXc4=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8.0" + } }, "node_modules/request/node_modules/qs": { "version": "1.2.2", @@ -8817,7 +10636,10 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/require-main-filename": { "version": "1.0.1", @@ -8877,6 +10699,9 @@ "optional": true, "dependencies": { "align-text": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/rimraf": { @@ -8914,13 +10739,15 @@ "version": "0.5.3", "resolved": "https://registry.npmjs.org/runnel/-/runnel-0.5.3.tgz", "integrity": "sha1-+TYrFloF/G9eRuRY93offs3A2uw=", - "dev": true + "dev": true, + "engines": { + "node": "*" + } }, "node_modules/safe-buffer": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" }, "node_modules/safe-regex": { "version": "1.1.0", @@ -8962,7 +10789,11 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/sequence/-/sequence-2.2.1.tgz", "integrity": "sha1-f1YXiV1ENRwKBH52RGdpBJChawM=", - "dev": true + "dev": true, + "engines": { + "ender": ">= 0.5.0", + "node": "*" + } }, "node_modules/serve-static": { "version": "1.13.2", @@ -8974,13 +10805,19 @@ "escape-html": "~1.0.3", "parseurl": "~1.3.2", "send": "0.16.2" + }, + "engines": { + "node": ">= 0.8.0" } }, "node_modules/serve-static/node_modules/depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6" + } }, "node_modules/serve-static/node_modules/ee-first": { "version": "1.1.1", @@ -8992,13 +10829,19 @@ "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6" + } }, "node_modules/serve-static/node_modules/mime": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", - "dev": true + "dev": true, + "bin": { + "mime": "cli.js" + } }, "node_modules/serve-static/node_modules/on-finished": { "version": "2.3.0", @@ -9007,13 +10850,19 @@ "dev": true, "dependencies": { "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" } }, "node_modules/serve-static/node_modules/range-parser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6" + } }, "node_modules/serve-static/node_modules/send": { "version": "0.16.2", @@ -9034,6 +10883,9 @@ "on-finished": "~2.3.0", "range-parser": "~1.2.0", "statuses": "~1.4.0" + }, + "engines": { + "node": ">= 0.8.0" } }, "node_modules/set-blocking": { @@ -9071,6 +10923,9 @@ "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" } }, "node_modules/shallow-copy": { @@ -9105,13 +10960,19 @@ "dev": true, "dependencies": { "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/shell-quote": { "version": "1.6.1", @@ -9161,7 +11022,10 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, "node_modules/slice-ansi": { "version": "2.1.0", @@ -9309,19 +11173,28 @@ "dev": true, "dependencies": { "hoek": "0.9.x" + }, + "engines": { + "node": ">=0.8.0" } }, "node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/source-map-cjs": { "version": "0.1.32", "resolved": "https://registry.npmjs.org/source-map-cjs/-/source-map-cjs-0.1.32.tgz", "integrity": "sha1-sRPwAGW0hPTToRI+8IQEalYijOc=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8.0" + } }, "node_modules/source-map-resolve": { "version": "0.5.3", @@ -9342,6 +11215,77 @@ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", "dev": true }, + "node_modules/spawn-wrap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", + "dev": true, + "dependencies": { + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/spawn-wrap/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/spawn-wrap/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/spawn-wrap/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/spawn-wrap/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/split": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/split/-/split-0.1.2.tgz", @@ -9349,6 +11293,9 @@ "dev": true, "dependencies": { "through": "1" + }, + "engines": { + "node": "*" } }, "node_modules/split-string": { @@ -9486,7 +11433,10 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6" + } }, "node_modules/stream-browserify": { "version": "2.0.1", @@ -9515,6 +11465,9 @@ "dev": true, "dependencies": { "readable-stream": "~1.1.8" + }, + "engines": { + "node": ">=0.8.0" } }, "node_modules/stream-counter/node_modules/isarray": { @@ -9554,6 +11507,11 @@ "xtend": "^4.0.0" } }, + "node_modules/stream-sort": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stream-sort/-/stream-sort-1.1.0.tgz", + "integrity": "sha1-/NCu4JxKLa5uY95xhxBfXBN94Fk=" + }, "node_modules/stream-splicer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz", @@ -9568,7 +11526,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "dependencies": { "safe-buffer": "~5.1.0" } @@ -9581,13 +11538,19 @@ "dependencies": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" } }, "node_modules/string-width/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 + "dev": true, + "engines": { + "node": ">=4" + } }, "node_modules/string-width/node_modules/strip-ansi": { "version": "4.0.0", @@ -9596,6 +11559,9 @@ "dev": true, "dependencies": { "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, "node_modules/string.prototype.trimend": { @@ -9637,19 +11603,37 @@ "dev": true, "dependencies": { "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" } }, "node_modules/strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/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 + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/subarg": { "version": "1.0.0", @@ -9680,13 +11664,19 @@ "mime": "1.2.5", "qs": "0.6.5", "reduce-component": "1.0.1" + }, + "engines": { + "node": "*" } }, "node_modules/superagent/node_modules/debug": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz", "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=", - "dev": true + "dev": true, + "engines": { + "node": "*" + } }, "node_modules/superagent/node_modules/methods": { "version": "0.0.1", @@ -9704,13 +11694,19 @@ "version": "0.6.5", "resolved": "https://registry.npmjs.org/qs/-/qs-0.6.5.tgz", "integrity": "sha1-KUsmjksNQlD23eGbO4s0k13/FO8=", - "dev": true + "dev": true, + "engines": { + "node": "*" + } }, "node_modules/supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8.0" + } }, "node_modules/syntax-error": { "version": "1.4.0", @@ -9799,6 +11795,9 @@ "inherits": "~2.0.1", "minimist": "^0.2.0", "readable-stream": "~1.1.11" + }, + "bin": { + "tap-parser": "bin/cmd.js" } }, "node_modules/tap-parser/node_modules/isarray": { @@ -9841,6 +11840,9 @@ "end-of-stream": "^1.0.0", "readable-stream": "~1.0.33", "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 0.8.0" } }, "node_modules/tar-stream/node_modules/isarray": { @@ -9867,6 +11869,20 @@ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -9876,8 +11892,7 @@ "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "node_modules/through2": { "version": "2.0.3", @@ -9896,6 +11911,9 @@ "dev": true, "dependencies": { "process": "~0.11.0" + }, + "engines": { + "node": ">=0.6.0" } }, "node_modules/to-arraybuffer": { @@ -9908,7 +11926,10 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, "node_modules/to-object-path": { "version": "0.3.0", @@ -10101,6 +12122,12 @@ "semver": "^5.3.0", "tslib": "^1.8.0", "tsutils": "^2.29.0" + }, + "bin": { + "tslint": "bin/tslint" + }, + "engines": { + "node": ">=4.8.0" } }, "node_modules/tslint/node_modules/ansi-styles": { @@ -10110,6 +12137,9 @@ "dev": true, "dependencies": { "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, "node_modules/tslint/node_modules/chalk": { @@ -10121,13 +12151,19 @@ "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" } }, "node_modules/tslint/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, "node_modules/tslint/node_modules/supports-color": { "version": "5.5.0", @@ -10136,6 +12172,9 @@ "dev": true, "dependencies": { "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, "node_modules/tsutils": { @@ -10157,7 +12196,10 @@ "version": "0.4.3", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", - "dev": true + "dev": true, + "engines": { + "node": "*" + } }, "node_modules/type-check": { "version": "0.3.2", @@ -10166,6 +12208,9 @@ "dev": true, "dependencies": { "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" } }, "node_modules/type-fest": { @@ -10185,6 +12230,9 @@ "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.18" + }, + "engines": { + "node": ">= 0.6" } }, "node_modules/typedarray": { @@ -10193,11 +12241,27 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, "node_modules/typescript": { "version": "3.8.0-dev.20200211", "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.0-dev.20200211.tgz", "integrity": "sha512-1LnADJbATvC2XSPcn7NwrhidLA03jXUx1x1ZfPNaceC8SCe5KtZwihzMe7PPmP5Sy2JiXD0pYp/X4MVogV57qQ==", - "dev": true + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } }, "node_modules/uglify-js": { "version": "2.3.6", @@ -10208,6 +12272,12 @@ "async": "~0.2.6", "optimist": "~0.3.5", "source-map": "~0.1.7" + }, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.4.0" } }, "node_modules/uglify-js/node_modules/async": { @@ -10223,6 +12293,9 @@ "dev": true, "dependencies": { "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" } }, "node_modules/uglify-to-browserify": { @@ -10242,7 +12315,10 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", - "dev": true + "dev": true, + "bin": { + "umd": "bin/cli.js" + } }, "node_modules/undeclared-identifiers": { "version": "1.1.3", @@ -10264,7 +12340,10 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=", - "dev": true + "dev": true, + "engines": { + "node": "*" + } }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "1.0.4", @@ -10334,13 +12413,19 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true + "dev": true, + "engines": { + "node": ">= 4.0.0" + } }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8" + } }, "node_modules/unset-value": { "version": "1.0.0", @@ -10423,7 +12508,10 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, "node_modules/urix": { "version": "0.1.0", @@ -10469,8 +12557,7 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "node_modules/util/node_modules/inherits": { "version": "2.0.1", @@ -10482,7 +12569,19 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } }, "node_modules/v8-compile-cache": { "version": "2.1.1", @@ -10494,13 +12593,19 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/vargs/-/vargs-0.1.0.tgz", "integrity": "sha1-a2GE2mUgzDIEzhtAfKwm2SYJ6/8=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.1.93" + } }, "node_modules/vary": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/vary/-/vary-1.0.1.tgz", "integrity": "sha1-meSYFWaihhGN+yuBc1ffeZM3bRA=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8" + } }, "node_modules/vm-browserify": { "version": "0.0.4", @@ -10533,6 +12638,9 @@ "outpipe": "^1.1.0", "through2": "^2.0.0", "xtend": "^4.0.0" + }, + "bin": { + "watchify": "bin/cmd.js" } }, "node_modules/watchify/node_modules/assert": { @@ -10597,6 +12705,9 @@ "util": "~0.10.1", "vm-browserify": "~0.0.1", "xtend": "^4.0.0" + }, + "bin": { + "browserify": "bin/cmd.js" } }, "node_modules/watchify/node_modules/buffer": { @@ -10621,6 +12732,9 @@ "resolved": "https://registry.npmjs.org/wd/-/wd-0.3.11.tgz", "integrity": "sha1-UicWx5p6EOeBrLssbK/liPcB/MA=", "dev": true, + "engines": [ + "node" + ], "dependencies": { "archiver": "~0.12.0", "async": "~0.9.0", @@ -10629,6 +12743,9 @@ "request": "~2.46.0", "underscore.string": "~2.3.3", "vargs": "~0.1.0" + }, + "bin": { + "wd": "lib/bin.js" } }, "node_modules/wd/node_modules/archiver": { @@ -10645,6 +12762,9 @@ "readable-stream": "~1.0.26", "tar-stream": "~1.0.0", "zip-stream": "~0.4.0" + }, + "engines": { + "node": ">= 0.10.0" } }, "node_modules/wd/node_modules/compress-commons": { @@ -10656,6 +12776,9 @@ "buffer-crc32": "~0.2.1", "crc32-stream": "~0.3.1", "readable-stream": "~1.0.26" + }, + "engines": { + "node": ">= 0.8.0" } }, "node_modules/wd/node_modules/glob": { @@ -10668,6 +12791,9 @@ "inherits": "2", "minimatch": "^1.0.0", "once": "^1.3.0" + }, + "engines": { + "node": "*" } }, "node_modules/wd/node_modules/graceful-fs": { @@ -10677,6 +12803,9 @@ "dev": true, "dependencies": { "natives": "^1.1.0" + }, + "engines": { + "node": ">=0.4.0" } }, "node_modules/wd/node_modules/isarray": { @@ -10689,7 +12818,11 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", - "dev": true + "dev": true, + "engines": [ + "node", + "rhino" + ] }, "node_modules/wd/node_modules/minimatch": { "version": "1.0.0", @@ -10699,6 +12832,9 @@ "dependencies": { "lru-cache": "2", "sigmund": "~1.0.0" + }, + "engines": { + "node": "*" } }, "node_modules/wd/node_modules/readable-stream": { @@ -10729,6 +12865,9 @@ "end-of-stream": "^1.0.0", "readable-stream": "^1.0.27-1", "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 0.8.0" } }, "node_modules/wd/node_modules/zip-stream": { @@ -10740,13 +12879,19 @@ "compress-commons": "~0.1.0", "lodash": "~2.4.1", "readable-stream": "~1.0.26" + }, + "engines": { + "node": ">= 0.8.0" } }, "node_modules/which": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz", "integrity": "sha1-RgwdoPgQED0DIam2M6+eV15kSG8=", - "dev": true + "dev": true, + "bin": { + "which": "bin/which" + } }, "node_modules/which-module": { "version": "2.0.0", @@ -10813,7 +12958,10 @@ "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", "dev": true, - "optional": true + "optional": true, + "engines": { + "node": ">= 0.8.0" + } }, "node_modules/word-wrap": { "version": "1.2.3", @@ -10838,6 +12986,9 @@ "dependencies": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { @@ -10847,6 +12998,9 @@ "dev": true, "dependencies": { "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/wrap-ansi/node_modules/string-width": { @@ -10858,19 +13012,24 @@ "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "node_modules/wrench": { "version": "1.5.9", "resolved": "https://registry.npmjs.org/wrench/-/wrench-1.5.9.tgz", "integrity": "sha1-QRaRxjqbJTGxcAJnJ5veyiOyFCo=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.1.97" + } }, "node_modules/write": { "version": "1.0.3", @@ -10884,6 +13043,18 @@ "node": ">=4" } }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, "node_modules/xml2js": { "version": "0.4.19", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", @@ -10898,7 +13069,10 @@ "version": "9.0.7", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", - "dev": true + "dev": true, + "engines": { + "node": ">=4.0" + } }, "node_modules/xregexp": { "version": "4.3.0", @@ -10965,7 +13139,10 @@ "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, "node_modules/zip-stream": { "version": "0.2.3", @@ -10976,13 +13153,19 @@ "debug": "~0.7.4", "lodash.defaults": "~2.4.1", "readable-stream": "~1.0.24" + }, + "engines": { + "node": ">= 0.8.0" } }, "node_modules/zip-stream/node_modules/debug": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz", "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=", - "dev": true + "dev": true, + "engines": { + "node": "*" + } }, "node_modules/zip-stream/node_modules/isarray": { "version": "0.0.1", @@ -11117,6 +13300,9 @@ "util": "~0.10.1", "vm-browserify": "~0.0.1", "xtend": "^4.0.0" + }, + "bin": { + "browserify": "bin/cmd.js" } }, "node_modules/zuul/node_modules/browserify/node_modules/shell-quote": { @@ -11135,7 +13321,10 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4" + } }, "node_modules/zuul/node_modules/buffer": { "version": "4.9.1", @@ -11158,7 +13347,10 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.1.0.tgz", "integrity": "sha1-0SG7roYNmZKj1Re6lvVliOR8Z4E=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6.x" + } }, "node_modules/zuul/node_modules/convert-source-map": { "version": "1.0.0", @@ -11186,6 +13378,9 @@ "minimatch": "2 || 3", "once": "^1.3.0", "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" } }, "node_modules/zuul/node_modules/isarray": { @@ -11231,6 +13426,9 @@ "dev": true, "dependencies": { "object-keys": "~0.4.0" + }, + "engines": { + "node": ">=0.4" } } }, @@ -12553,6 +14751,73 @@ } } }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.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 + }, + "find-up": { + "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": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "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": "^4.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==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "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 + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", + "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", + "dev": true + }, "@nicolo-ribaudo/chokidar-2": { "version": "2.1.8", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8.tgz", @@ -12997,6 +15262,16 @@ "integrity": "sha1-hgbCy/HEJs6MjsABdER/1Jtur8E=", "dev": true }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -13055,6 +15330,15 @@ "normalize-path": "^2.0.0" } }, + "append-transform": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "dev": true, + "requires": { + "default-require-extensions": "^3.0.0" + } + }, "archiver": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/archiver/-/archiver-0.7.1.tgz", @@ -13100,6 +15384,12 @@ } } }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -14026,6 +16316,35 @@ "integrity": "sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==", "dev": true }, + "caching-transform": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "dev": true, + "requires": { + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" + }, + "dependencies": { + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -14139,6 +16458,12 @@ } } }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, "cliui": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", @@ -14238,6 +16563,12 @@ "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", "dev": true }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", @@ -14502,8 +16833,7 @@ "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 + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "crc32-stream": { "version": "0.3.4", @@ -14694,6 +17024,15 @@ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, + "default-require-extensions": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", + "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", + "dev": true, + "requires": { + "strip-bom": "^4.0.0" + } + }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -14964,6 +17303,11 @@ "minimalistic-crypto-utils": "^1.0.0" } }, + "emit-function": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/emit-function/-/emit-function-0.0.2.tgz", + "integrity": "sha1-46ULPWG+G/jKiLkkv3ExV6W+wSQ=" + }, "emitter-component": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/emitter-component/-/emitter-component-1.0.0.tgz", @@ -15048,6 +17392,12 @@ "is-symbol": "^1.0.2" } }, + "es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -15771,6 +18121,34 @@ } } }, + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "dependencies": { + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, "find-nearest-file": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/find-nearest-file/-/find-nearest-file-1.0.0.tgz", @@ -15901,6 +18279,16 @@ "sequence": "2.x" } }, + "foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + } + }, "forever-agent": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz", @@ -15945,6 +18333,12 @@ "integrity": "sha1-v9lALPPfEsSkwxDHn5mj3eE9NKc=", "dev": true }, + "fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "dev": true + }, "fs-extra": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.8.1.tgz", @@ -16024,6 +18418,12 @@ "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", "dev": true }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -16231,6 +18631,24 @@ "minimalistic-assert": "^1.0.0" } }, + "hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, + "requires": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "dependencies": { + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + } + } + }, "hawk": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/hawk/-/hawk-1.1.1.tgz", @@ -16288,6 +18706,12 @@ "integrity": "sha1-PTIkYrrfB3Fup+uFuviAec3c5QU=", "dev": true }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, "htmlescape": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", @@ -16381,6 +18805,12 @@ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, "indexof": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", @@ -16400,8 +18830,7 @@ "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "inline-source-map": { "version": "0.6.2", @@ -16690,6 +19119,12 @@ } } }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -16699,8 +19134,7 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isbinaryfile": { "version": "0.1.9", @@ -16763,6 +19197,159 @@ } } }, + "istanbul-lib-coverage": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", + "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", + "dev": true + }, + "istanbul-lib-hook": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", + "dev": true, + "requires": { + "append-transform": "^2.0.0" + } + }, + "istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "requires": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "istanbul-lib-processinfo": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz", + "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", + "dev": true, + "requires": { + "archy": "^1.0.0", + "cross-spawn": "^7.0.0", + "istanbul-lib-coverage": "^3.0.0-alpha.1", + "make-dir": "^3.0.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^3.3.3" + }, + "dependencies": { + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.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 + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "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, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", + "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "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 + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, "istanbul-middleware": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/istanbul-middleware/-/istanbul-middleware-0.2.2.tgz", @@ -17245,6 +19832,16 @@ } } }, + "istanbul-reports": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", + "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, "jasmine": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-3.6.2.tgz", @@ -17348,14 +19945,12 @@ "jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "dev": true + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=" }, "JSONStream": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz", "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=", - "dev": true, "requires": { "jsonparse": "^1.2.0", "through": ">=2.2.7 <3" @@ -17593,6 +20188,12 @@ "lodash.keys": "~2.4.1" } }, + "lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", + "dev": true + }, "lodash.isobject": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz", @@ -18039,6 +20640,15 @@ "integrity": "sha1-LW5rLs5d6FiLQ9iNG8QbJs0fqE0=", "dev": true }, + "node-preload": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", + "dev": true, + "requires": { + "process-on-spawn": "^1.0.0" + } + }, "node-releases": { "version": "1.1.64", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.64.tgz", @@ -18069,6 +20679,43 @@ "remove-trailing-separator": "^1.0.1" } }, + "npm-get-dependents": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-get-dependents/-/npm-get-dependents-1.0.1.tgz", + "integrity": "sha1-71pZCab6xL2+IFuSXUr9k6vupbo=", + "requires": { + "emit-function": "0.0.2", + "JSONStream": "^0.10.0", + "once": "^1.3.1" + }, + "dependencies": { + "jsonparse": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-0.0.5.tgz", + "integrity": "sha1-MwVCrT8KZUZlt3jz6y2an6UHrGQ=" + }, + "JSONStream": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.10.0.tgz", + "integrity": "sha1-dDSdDYlSK3HzDwoD/5vSDKbxKsA=", + "requires": { + "jsonparse": "0.0.5", + "through": ">=2.2.7 <3" + } + } + } + }, + "npm-get-top-dependents": { + "version": "https://registry.npmjs.org/npm-get-top-dependents/-/npm-get-top-dependents-1.0.2.tgz", + "integrity": "sha1-rWzfRtGkBE1BzIm9MNZPE4Dus4E=", + "requires": { + "JSONStream": "^1.1.1", + "npm-get-dependents": "^1.0.1", + "object-chunker": "^1.0.0", + "readable-stream": "^2.1.2", + "stream-sort": "^1.1.0" + } + }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -18084,12 +20731,243 @@ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, + "nyc": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", + "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", + "dev": true, + "requires": { + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^2.0.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" + }, + "dependencies": { + "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 + }, + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "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, + "requires": { + "color-name": "~1.1.4" + } + }, + "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 + }, + "find-up": { + "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": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "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 + }, + "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 + }, + "locate-path": { + "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": "^4.1.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.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==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "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 + }, + "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 + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "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, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.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": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, "oauth-sign": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.4.0.tgz", "integrity": "sha1-8ilW8x6nFRqCHl8vsywRPK2Ln2k=", "dev": true }, + "object-chunker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-chunker/-/object-chunker-1.0.1.tgz", + "integrity": "sha512-NZWrtBQUq2RKTDCdtWaZw3aXrHq5PVzaRkkxPW6u8/0Gq1wwzPEOvhpx6mSWpojGz6TN4i4+ho061IV60yrO4A==" + }, "object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", @@ -18196,7 +21074,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "requires": { "wrappy": "1" } @@ -18306,12 +21183,33 @@ "p-limit": "^2.0.0" } }, + "p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.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 }, + "package-hash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + } + }, "pako": { "version": "0.2.9", "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", @@ -18460,6 +21358,51 @@ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "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": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "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": "^4.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==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "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 + } + } + }, "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -18487,8 +21430,16 @@ "process-nextick-args": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + }, + "process-on-spawn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", + "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", + "dev": true, + "requires": { + "fromentries": "^1.2.0" + } }, "progress": { "version": "2.0.0", @@ -18661,7 +21612,6 @@ "version": "2.3.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -19079,6 +22029,15 @@ } } }, + "release-zalgo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", + "dev": true, + "requires": { + "es6-error": "^4.0.1" + } + }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", @@ -19229,8 +22188,7 @@ "safe-buffer": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" }, "safe-regex": { "version": "1.1.0", @@ -19605,6 +22563,55 @@ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", "dev": true }, + "spawn-wrap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", + "dev": true, + "requires": { + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" + }, + "dependencies": { + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "which": { + "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" + } + } + } + }, "split": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/split/-/split-0.1.2.tgz", @@ -19814,6 +22821,11 @@ "xtend": "^4.0.0" } }, + "stream-sort": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stream-sort/-/stream-sort-1.1.0.tgz", + "integrity": "sha1-/NCu4JxKLa5uY95xhxBfXBN94Fk=" + }, "stream-splicer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz", @@ -19828,7 +22840,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -19895,6 +22906,12 @@ "ansi-regex": "^2.0.0" } }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + }, "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", @@ -20123,6 +23140,17 @@ } } }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -20132,8 +23160,7 @@ "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "through2": { "version": "2.0.3", @@ -20412,6 +23439,15 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, "typescript": { "version": "3.8.0-dev.20200211", "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.0-dev.20200211.tgz", @@ -20662,8 +23698,7 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "utils-merge": { "version": "1.0.1", @@ -20671,6 +23706,12 @@ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", "dev": true }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, "v8-compile-cache": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", @@ -21040,8 +24081,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "wrench": { "version": "1.5.9", @@ -21058,6 +24098,18 @@ "mkdirp": "^0.5.1" } }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, "xml2js": { "version": "0.4.19", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", diff --git a/package.json b/package.json index 1474e667..3d012844 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "xregexp", - "version": "4.4.1", + "version": "5.0.0", "description": "Extended regular expressions", "homepage": "http://xregexp.com/", "author": "Steven Levithan ", @@ -29,11 +29,11 @@ "lint": "eslint . && npm run dtslint", "dtslint": "dtslint types", "babel": "babel src -d lib", - "build-unicode-data": "node tools/scripts/block-regex.js && node tools/scripts/category-regex.js && node tools/scripts/property-regex.js && node tools/scripts/script-regex.js", + "build-unicode-data": "node tools/scripts/category-regex.js && node tools/scripts/property-regex.js && node tools/scripts/script-regex.js", "prebuild": "npm run build-unicode-data && npm run lint && npm run babel", "build": "browserify lib/index.js --standalone XRegExp > xregexp-all.js", "pretest": "npm run build", - "test": "jasmine JASMINE_CONFIG_PATH=tests/jasmine.json", + "test": "nyc --reporter=lcov --reporter=text-summary jasmine JASMINE_CONFIG_PATH=tests/jasmine.json", "test-saucelabs": "npm run pretest && zuul tests/spec/*.js", "test-browser": "npm run test-saucelabs -- --local --open", "prepublish": "npm test" @@ -42,6 +42,7 @@ "devDependencies": { "@babel/cli": "^7.12.1", "@babel/core": "^7.12.3", + "@babel/plugin-proposal-unicode-property-regex": "^7.12.1", "@babel/plugin-transform-runtime": "^7.12.1", "@babel/preset-env": "^7.12.1", "@unicode/unicode-13.0.0": "^1.0.2", @@ -53,6 +54,7 @@ "eslint": "^7.12.1", "jasmine": "^3.6.2", "jsesc": "^3.0.1", + "nyc": "^15.1.0", "unicode-property-value-aliases": "^3.5.0", "zuul": "^3.12.0" }, diff --git a/src/addons/build.js b/src/addons/build.js index 3259662e..ad175078 100644 --- a/src/addons/build.js +++ b/src/addons/build.js @@ -1,5 +1,5 @@ /*! - * XRegExp.build 4.4.1 + * XRegExp.build 5.0.0 * * Steven Levithan (c) 2012-present MIT License */ @@ -87,14 +87,17 @@ export default (XRegExp) => { * @returns {Function} Handler for template literals that construct regexes with XRegExp syntax. * @example * - * const h12 = /1[0-2]|0?[1-9]/; - * const h24 = /2[0-3]|[01][0-9]/; - * const hours = XRegExp.tag('x')`${h12} : | ${h24}`; - * const minutes = /^[0-5][0-9]$/; - * // Note that explicitly naming the 'minutes' group is required for named backreferences - * const time = XRegExp.tag('x')`^ ${hours} (?${minutes}) $`; + * XRegExp.tag()`\b\w+\b`.test('word'); // -> true + * + * const hours = /1[0-2]|0?[1-9]/; + * const minutes = /(?[0-5][0-9])/; + * const time = XRegExp.tag('x')`\b ${hours} : ${minutes} \b`; * time.test('10:59'); // -> true - * XRegExp.exec('10:59', time).minutes; // -> '59' + * XRegExp.exec('10:59', time).groups.minutes; // -> '59' + * + * const backref1 = /(a)\1/; + * const backref2 = /(b)\1/; + * XRegExp.tag()`${backref1}${backref2}`.test('aabb'); // -> true */ XRegExp.tag = (flags) => (literals, ...substitutions) => { const subpatterns = substitutions.map(interpolate).reduce(reduceToSubpatternsObject, {}); @@ -125,7 +128,7 @@ export default (XRegExp) => { * minutes: /^[0-5][0-9]$/ * }); * time.test('10:59'); // -> true - * XRegExp.exec('10:59', time).minutes; // -> '59' + * XRegExp.exec('10:59', time).groups.minutes; // -> '59' */ XRegExp.build = (pattern, subs, flags) => { flags = flags || ''; diff --git a/src/addons/matchrecursive.js b/src/addons/matchrecursive.js index faf51460..c459227c 100644 --- a/src/addons/matchrecursive.js +++ b/src/addons/matchrecursive.js @@ -1,5 +1,5 @@ /*! - * XRegExp.matchRecursive 4.4.1 + * XRegExp.matchRecursive 5.0.0 * * Steven Levithan (c) 2009-present MIT License */ @@ -29,7 +29,7 @@ export default (XRegExp) => { * @param {String} str String to search. * @param {String} left Left delimiter as an XRegExp pattern. * @param {String} right Right delimiter as an XRegExp pattern. - * @param {String} [flags] Any native or XRegExp flags, used for the left and right delimiters. + * @param {String} [flags] Any combination of XRegExp flags, used for the left and right delimiters. * @param {Object} [options] Lets you specify `valueNames` and `escapeChar` options. * @returns {!Array} Array of matches, or an empty array. * @example @@ -111,7 +111,7 @@ export default (XRegExp) => { XRegExp.union([left, right], '', {conjunction: 'or'}).source })[^${escapeChar}])+)+`, // Flags `gy` not needed here - flags.replace(/[^imu]+/g, '') + flags.replace(XRegExp._hasNativeFlag('s') ? /[^imsu]/g : /[^imu]/g, '') ); } @@ -180,7 +180,9 @@ export default (XRegExp) => { } } } else { - throw new Error('Unbalanced delimiter found in string'); + const delimSide = rightMatch ? 'right' : 'left'; + const errorPos = rightMatch ? delimStart : outerStart; + throw new Error(`Unbalanced ${delimSide} delimiter found in string at position ${errorPos}`); } // If the delimiter matched an empty string, avoid an infinite loop if (delimStart === delimEnd) { diff --git a/src/addons/unicode-base.js b/src/addons/unicode-base.js index 0d2186bc..b40aebb6 100644 --- a/src/addons/unicode-base.js +++ b/src/addons/unicode-base.js @@ -1,5 +1,5 @@ /*! - * XRegExp Unicode Base 4.4.1 + * XRegExp Unicode Base 5.0.0 * * Steven Levithan (c) 2008-present MIT License */ @@ -26,6 +26,7 @@ export default (XRegExp) => { // Storage for Unicode data const unicode = {}; + const unicodeTypes = {}; // Reuse utils const dec = XRegExp._dec; @@ -123,41 +124,56 @@ export default (XRegExp) => { */ XRegExp.addToken( // Use `*` instead of `+` to avoid capturing `^` as the token name in `\p{^}` - /\\([pP])(?:{(\^?)([^}]*)}|([A-Za-z]))/, + /\\([pP])(?:{(\^?)(?:(\w+)=)?([^}]*)}|([A-Za-z]))/, (match, scope, flags) => { const ERR_DOUBLE_NEG = 'Invalid double negation '; const ERR_UNKNOWN_NAME = 'Unknown Unicode token '; const ERR_UNKNOWN_REF = 'Unicode token missing data '; const ERR_ASTRAL_ONLY = 'Astral mode required for Unicode token '; const ERR_ASTRAL_IN_CLASS = 'Astral mode does not support Unicode tokens within character classes'; + const [ + fullToken, + pPrefix, + caretNegation, + typePrefix, + tokenName, + tokenSingleCharName + ] = match; // Negated via \P{..} or \p{^..} - let isNegated = match[1] === 'P' || !!match[2]; + let isNegated = pPrefix === 'P' || !!caretNegation; // Switch from BMP (0-FFFF) to astral (0-10FFFF) mode via flag A const isAstralMode = flags.includes('A'); - // Token lookup name. Check `[4]` first to avoid passing `undefined` via `\p{}` - let slug = normalize(match[4] || match[3]); + // Token lookup name. Check `tokenSingleCharName` first to avoid passing `undefined` + // via `\p{}` + let slug = normalize(tokenSingleCharName || tokenName); // Token data object let item = unicode[slug]; - if (match[1] === 'P' && match[2]) { - throw new SyntaxError(ERR_DOUBLE_NEG + match[0]); + if (pPrefix === 'P' && caretNegation) { + throw new SyntaxError(ERR_DOUBLE_NEG + fullToken); } if (!unicode.hasOwnProperty(slug)) { - throw new SyntaxError(ERR_UNKNOWN_NAME + match[0]); + throw new SyntaxError(ERR_UNKNOWN_NAME + fullToken); + } + + if (typePrefix) { + if (!(unicodeTypes[typePrefix] && unicodeTypes[typePrefix][slug])) { + throw new SyntaxError(ERR_UNKNOWN_NAME + fullToken); + } } // Switch to the negated form of the referenced Unicode token if (item.inverseOf) { slug = normalize(item.inverseOf); if (!unicode.hasOwnProperty(slug)) { - throw new ReferenceError(`${ERR_UNKNOWN_REF + match[0]} -> ${item.inverseOf}`); + throw new ReferenceError(`${ERR_UNKNOWN_REF + fullToken} -> ${item.inverseOf}`); } item = unicode[slug]; isNegated = !isNegated; } if (!(item.bmp || isAstralMode)) { - throw new SyntaxError(ERR_ASTRAL_ONLY + match[0]); + throw new SyntaxError(ERR_ASTRAL_ONLY + fullToken); } if (isAstralMode) { if (scope === 'class') { @@ -196,6 +212,9 @@ export default (XRegExp) => { * character classes and alternation, and should use surrogate pairs to represent astral code * points. `inverseOf` can be used to avoid duplicating character data if a Unicode token is * defined as the exact inverse of another token. + * @param {String} [typePrefix] Enables optionally using this type as a prefix for all of the + * provided Unicode tokens, e.g. if given `'Type'`, then `\p{TokenName}` can also be written + * as `\p{Type=TokenName}`. * @example * * // Basic use @@ -206,10 +225,15 @@ export default (XRegExp) => { * }]); * XRegExp('\\p{XDigit}:\\p{Hexadecimal}+').test('0:3D'); // -> true */ - XRegExp.addUnicodeData = (data) => { + XRegExp.addUnicodeData = (data, typePrefix) => { const ERR_NO_NAME = 'Unicode token requires name'; const ERR_NO_DATA = 'Unicode token has no character data '; + if (typePrefix) { + // Case sensitive to match ES2018 + unicodeTypes[typePrefix] = {}; + } + for (const item of data) { if (!item.name) { throw new Error(ERR_NO_NAME); @@ -217,9 +241,19 @@ export default (XRegExp) => { if (!(item.inverseOf || item.bmp || item.astral)) { throw new Error(ERR_NO_DATA + item.name); } - unicode[normalize(item.name)] = item; + + const normalizedName = normalize(item.name); + unicode[normalizedName] = item; + if (typePrefix) { + unicodeTypes[typePrefix][normalizedName] = true; + } + if (item.alias) { - unicode[normalize(item.alias)] = item; + const normalizedAlias = normalize(item.alias); + unicode[normalizedAlias] = item; + if (typePrefix) { + unicodeTypes[typePrefix][normalizedAlias] = true; + } } } diff --git a/src/addons/unicode-blocks.js b/src/addons/unicode-blocks.js deleted file mode 100644 index 36c07a3a..00000000 --- a/src/addons/unicode-blocks.js +++ /dev/null @@ -1,27 +0,0 @@ -/*! - * XRegExp Unicode Blocks 4.4.1 - * - * Steven Levithan (c) 2010-present MIT License - * Unicode data by Mathias Bynens - */ - -import blocks from '../../tools/output/blocks'; - -export default (XRegExp) => { - - /** - * Adds support for all Unicode blocks. Block names use the prefix 'In'. E.g., - * `\p{InBasicLatin}`. Token names are case insensitive, and any spaces, hyphens, and - * underscores are ignored. - * - * Uses Unicode 13.0.0. - * - * @requires XRegExp, Unicode Base - */ - - if (!XRegExp.addUnicodeData) { - throw new ReferenceError('Unicode Base must be loaded before Unicode Blocks'); - } - - XRegExp.addUnicodeData(blocks); -}; diff --git a/src/addons/unicode-categories.js b/src/addons/unicode-categories.js index db542a5e..1b496bc5 100644 --- a/src/addons/unicode-categories.js +++ b/src/addons/unicode-categories.js @@ -1,5 +1,5 @@ /*! - * XRegExp Unicode Categories 4.4.1 + * XRegExp Unicode Categories 5.0.0 * * Steven Levithan (c) 2010-present MIT License * Unicode data by Mathias Bynens diff --git a/src/addons/unicode-properties.js b/src/addons/unicode-properties.js index c3b5a0f8..852d3a1b 100644 --- a/src/addons/unicode-properties.js +++ b/src/addons/unicode-properties.js @@ -1,5 +1,5 @@ /*! - * XRegExp Unicode Properties 4.4.1 + * XRegExp Unicode Properties 5.0.0 * * Steven Levithan (c) 2012-present MIT License * Unicode data by Mathias Bynens diff --git a/src/addons/unicode-scripts.js b/src/addons/unicode-scripts.js index 001e612b..6121c9fb 100644 --- a/src/addons/unicode-scripts.js +++ b/src/addons/unicode-scripts.js @@ -1,5 +1,5 @@ /*! - * XRegExp Unicode Scripts 4.4.1 + * XRegExp Unicode Scripts 5.0.0 * * Steven Levithan (c) 2010-present MIT License * Unicode data by Mathias Bynens @@ -22,5 +22,5 @@ export default (XRegExp) => { throw new ReferenceError('Unicode Base must be loaded before Unicode Scripts'); } - XRegExp.addUnicodeData(scripts); + XRegExp.addUnicodeData(scripts, 'Script'); }; diff --git a/src/index.js b/src/index.js index 8fad8740..02fbf64e 100644 --- a/src/index.js +++ b/src/index.js @@ -3,7 +3,6 @@ import XRegExp from './xregexp'; import build from './addons/build'; import matchRecursive from './addons/matchrecursive'; import unicodeBase from './addons/unicode-base'; -import unicodeBlocks from './addons/unicode-blocks'; import unicodeCategories from './addons/unicode-categories'; import unicodeProperties from './addons/unicode-properties'; import unicodeScripts from './addons/unicode-scripts'; @@ -11,7 +10,6 @@ import unicodeScripts from './addons/unicode-scripts'; build(XRegExp); matchRecursive(XRegExp); unicodeBase(XRegExp); -unicodeBlocks(XRegExp); unicodeCategories(XRegExp); unicodeProperties(XRegExp); unicodeScripts(XRegExp); diff --git a/src/xregexp.js b/src/xregexp.js index faa78f4a..1a0d83a0 100644 --- a/src/xregexp.js +++ b/src/xregexp.js @@ -1,5 +1,5 @@ /*! - * XRegExp 4.4.1 + * XRegExp 5.0.0 * * Steven Levithan (c) 2007-present MIT License */ @@ -20,15 +20,7 @@ const REGEX_DATA = 'xregexp'; // Optional features that can be installed and uninstalled const features = { astral: false, - namespacing: false -}; -// Native methods to use and restore ('native' is an ES3 reserved keyword) -const nativ = { - exec: RegExp.prototype.exec, - test: RegExp.prototype.test, - match: String.prototype.match, - replace: String.prototype.replace, - split: String.prototype.split + namespacing: true }; // Storage for fixed/extended native methods const fixed = {}; @@ -49,13 +41,11 @@ const nativeTokens = { 'class': /\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\dA-Fa-f]{2}|u(?:[\dA-Fa-f]{4}|{[\dA-Fa-f]+})|c[A-Za-z]|[\s\S])|[\s\S]/ }; // Any backreference or dollar-prefixed character in replacement strings -const replacementToken = /\$(?:{([\w$]+)}|<([\w$]+)>|(\d\d?|[\s\S]))/g; +const replacementToken = /\$(?:\{([^\}]+)\}|<([^>]+)>|(\d\d?|[\s\S]?))/g; // Check for correct `exec` handling of nonparticipating capturing groups -const correctExecNpcg = nativ.exec.call(/()??/, '')[1] === undefined; +const correctExecNpcg = /()??/.exec('')[1] === undefined; // Check for ES6 `flags` prop support const hasFlagsProp = /x/.flags !== undefined; -// Shortcut to `Object.prototype.toString` -const {toString} = {}; function hasNativeFlag(flag) { // Can't check based on the presence of properties/getters since browsers might support such @@ -82,6 +72,8 @@ function hasNativeFlag(flag) { } return isSupported; } +// Check for ES2018 `s` flag support +const hasNativeS = hasNativeFlag('s'); // Check for ES6 `u` flag support const hasNativeU = hasNativeFlag('u'); // Check for ES6 `y` flag support @@ -91,9 +83,12 @@ const registeredFlags = { g: true, i: true, m: true, + s: hasNativeS, u: hasNativeU, y: hasNativeY }; +// Flags to remove when passing to native `RegExp` constructor +const nonnativeFlags = hasNativeS ? /[^gimsuy]+/g : /[^gimuy]+/g; /** * Attaches extended data and `XRegExp.prototype` properties to a regex object. @@ -144,7 +139,7 @@ function augment(regex, captureNames, xSource, xFlags, isInternalOnly) { * @returns {string} String with any duplicate characters removed. */ function clipDuplicates(str) { - return nativ.replace.call(str, /([\s\S])(?=[\s\S]*\1)/g, ''); + return str.replace(/([\s\S])(?=[\s\S]*\1)/g, ''); } /** @@ -182,7 +177,7 @@ function copyRegex(regex, options) { if (options.removeG) {flagsToRemove += 'g';} if (options.removeY) {flagsToRemove += 'y';} if (flagsToRemove) { - flags = nativ.replace.call(flags, new RegExp(`[${flagsToRemove}]+`, 'g'), ''); + flags = flags.replace(new RegExp(`[${flagsToRemove}]+`, 'g'), ''); } if (options.addG) {flagsToAdd += 'g';} @@ -242,34 +237,28 @@ function dec(hex) { * @returns {string} Either '' or '(?:)', depending on which is needed in the context of the match. */ function getContextualTokenSeparator(match, scope, flags) { + const matchEndPos = match.index + match[0].length; + const precedingChar = match.input[match.index - 1]; + const followingChar = match.input[matchEndPos]; if ( - // No need to separate tokens if at the beginning or end of a group - match.input[match.index - 1] === '(' || - match.input[match.index + match[0].length] === ')' || - - // No need to separate tokens if before or after a `|` - match.input[match.index - 1] === '|' || - match.input[match.index + match[0].length] === '|' || - + // No need to separate tokens if at the beginning or end of a group, before or after a + // group, or before or after a `|` + /^[()|]$/.test(precedingChar) || + /^[()|]$/.test(followingChar) || // No need to separate tokens if at the beginning or end of the pattern - match.index < 1 || - match.index + match[0].length >= match.input.length || - - // No need to separate tokens if at the beginning of a noncapturing group or lookahead. - // The way this is written relies on: - // - The search regex matching only 3-char strings. - // - Although `substr` gives chars from the end of the string if given a negative index, - // the resulting substring will be too short to match. Ex: `'abcd'.substr(-1, 3) === 'd'` - nativ.test.call(/^\(\?[:=!]/, match.input.substr(match.index - 3, 3)) || - + match.index === 0 || + matchEndPos === match.input.length || + // No need to separate tokens if at the beginning of a noncapturing group or lookaround. + // Looks only at the last 4 chars (at most) for perf when constructing long regexes. + /\(\?(?:[:=!]|<[=!])$/.test(match.input.substring(match.index - 4, match.index)) || // Avoid separating tokens when the following token is a quantifier - isQuantifierNext(match.input, match.index + match[0].length, flags) + isQuantifierNext(match.input, matchEndPos, flags) ) { return ''; } // Keep tokens separated. This avoids e.g. inadvertedly changing `\1 1` or `\1(?#)1` to `\11`. - // This also ensures all tokens remain as discrete atoms, e.g. it avoids converting the syntax - // error `(? :` into `(?:`. + // This also ensures all tokens remain as discrete atoms, e.g. it prevents converting the + // syntax error `(? :` into `(?:`. return '(?:)'; } @@ -286,7 +275,7 @@ function getNativeFlags(regex) { // Explicitly using `RegExp.prototype.toString` (rather than e.g. `String` or concatenation // with an empty string) allows this to continue working predictably when // `XRegExp.proptotype.toString` is overridden - nativ.exec.call(/\/([a-z]*)$/i, RegExp.prototype.toString.call(regex))[1]; + /\/([a-z]*)$/i.exec(RegExp.prototype.toString.call(regex))[1]; } /** @@ -324,14 +313,12 @@ function isQuantifierNext(pattern, pos, flags) { const inlineCommentPattern = '\\(\\?#[^)]*\\)'; const lineCommentPattern = '#[^#\\n]*'; const quantifierPattern = '[?*+]|{\\d+(?:,\\d*)?}'; - return nativ.test.call( - flags.includes('x') ? - // Ignore any leading whitespace, line comments, and inline comments - new RegExp(`^(?:\\s|${lineCommentPattern}|${inlineCommentPattern})*(?:${quantifierPattern})`) : - // Ignore any leading inline comments - new RegExp(`^(?:${inlineCommentPattern})*(?:${quantifierPattern})`), - pattern.slice(pos) - ); + const regex = flags.includes('x') ? + // Ignore any leading whitespace, line comments, and inline comments + new RegExp(`^(?:\\s|${lineCommentPattern}|${inlineCommentPattern})*(?:${quantifierPattern})`) : + // Ignore any leading inline comments + new RegExp(`^(?:${inlineCommentPattern})*(?:${quantifierPattern})`); + return regex.test(pattern.slice(pos)); } /** @@ -343,7 +330,24 @@ function isQuantifierNext(pattern, pos, flags) { * @returns {boolean} Whether the object matches the type. */ function isType(value, type) { - return toString.call(value) === `[object ${type}]`; + return Object.prototype.toString.call(value) === `[object ${type}]`; +} + +/** + * Returns the object, or throws an error if it is `null` or `undefined`. This is used to follow + * the ES5 abstract operation `ToObject`. + * + * @private + * @param {*} value Object to check and return. + * @returns {*} The provided object. + */ +function nullThrows(value) { + // null or undefined + if (value == null) { + throw new TypeError('Cannot convert null or undefined to object'); + } + + return value; } /** @@ -376,8 +380,8 @@ function prepareFlags(pattern, flags) { } // Strip and apply a leading mode modifier with any combination of flags except g or y - pattern = nativ.replace.call(pattern, /^\(\?([\w$]+)\)/, ($0, $1) => { - if (nativ.test.call(/[gy]/, $1)) { + pattern = pattern.replace(/^\(\?([\w$]+)\)/, ($0, $1) => { + if (/[gy]/.test($1)) { throw new SyntaxError(`Cannot use flag g or y in mode modifier ${$0}`); } // Allow duplicate flags within the mode modifier @@ -501,23 +505,6 @@ function setNamespacing(on) { features.namespacing = on; } -/** - * Returns the object, or throws an error if it is `null` or `undefined`. This is used to follow - * the ES5 abstract operation `ToObject`. - * - * @private - * @param {*} value Object to check and return. - * @returns {*} The provided object. - */ -function toObject(value) { - // null or undefined - if (value == null) { - throw new TypeError('Cannot convert null or undefined to object'); - } - - return value; -} - // ==--------------------------== // Constructor // ==--------------------------== @@ -539,7 +526,7 @@ function toObject(value) { * - `y` - sticky (Firefox 3+, ES6) * Additional XRegExp flags: * - `n` - explicit capture - * - `s` - dot matches all (aka singleline) + * - `s` - dot matches all (aka singleline) - works even when not natively supported * - `x` - free-spacing and line comments (aka extended) * - `A` - astral (requires the Unicode Base addon) * Flags cannot be provided when constructing one `RegExp` from another. @@ -627,9 +614,9 @@ function XRegExp(pattern, flags) { // Use basic cleanup to collapse repeated empty groups like `(?:)(?:)` to `(?:)`. Empty // groups are sometimes inserted during regex transpilation in order to keep tokens // separated. However, more than one empty group in a row is never needed. - pattern: nativ.replace.call(output, /(?:\(\?:\))+/g, '(?:)'), + pattern: output.replace(/(?:\(\?:\))+/g, '(?:)'), // Strip all but native flags - flags: nativ.replace.call(appliedFlags, /[^gimuy]+/g, ''), + flags: appliedFlags.replace(nonnativeFlags, ''), // `context.captureNames` has an item for each capturing group, even if unnamed captures: context.hasNamedCapture ? context.captureNames : null }; @@ -659,7 +646,7 @@ XRegExp.prototype = new RegExp(); * @memberOf XRegExp * @type String */ -XRegExp.version = '4.4.1'; +XRegExp.version = '5.0.0'; // ==--------------------------== // Public methods @@ -730,7 +717,7 @@ XRegExp.addToken = (regex, handler, options) => { } if (optionalFlags) { - optionalFlags = nativ.split.call(optionalFlags, ''); + optionalFlags = optionalFlags.split(''); for (const flag of optionalFlags) { registerFlag(flag); } @@ -765,7 +752,8 @@ XRegExp.addToken = (regex, handler, options) => { * @returns {RegExp} Cached XRegExp object. * @example * - * while (match = XRegExp.cache('.', 'gs').exec(str)) { + * let match; + * while (match = XRegExp.cache('.', 'gs').exec('abc')) { * // The regex is compiled once only * } */ @@ -791,7 +779,7 @@ XRegExp.cache.flush = (cacheName) => { /** * Escapes any regular expression metacharacters, for use when matching literal strings. The result - * can safely be used at any point within a regex that uses any flags. + * can safely be used at any position within a regex that uses any flags. * * @memberOf XRegExp * @param {String} str String to escape. @@ -799,17 +787,23 @@ XRegExp.cache.flush = (cacheName) => { * @example * * XRegExp.escape('Escaped? <.>'); - * // -> 'Escaped\?\ <\.>' + * // -> 'Escaped\?\u0020<\.>' */ -XRegExp.escape = (str) => nativ.replace.call(toObject(str), /[-\[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); +XRegExp.escape = (str) => String(nullThrows(str)).replace(/[-\[\]{}()*+?.,\\^$|#\s]/g, (match) => { + if (/\s/.test(match)) { + // Converting to \uNNNN since whitespace can't be escaped when used with ES6 flag `u` + return `\\u${pad4(hex(match.charCodeAt(0)))}`; + } + return `\\${match}`; +}); /** * Executes a regex search in a specified string. Returns a match array or `null`. If the provided - * regex uses named capture, named backreference properties are included on the match array. - * Optional `pos` and `sticky` arguments specify the search start position, and whether the match - * must start at the specified position only. The `lastIndex` property of the provided regex is not - * used, but is updated for compatibility. Also fixes browser bugs compared to the native - * `RegExp.prototype.exec` and can be used reliably cross-browser. + * regex uses named capture, named capture properties are included on the match array's `groups` + * property. Optional `pos` and `sticky` arguments specify the search start position, and whether + * the match must start at the specified position only. The `lastIndex` property of the provided + * regex is not used, but is updated for compatibility. Also fixes browser bugs compared to the + * native `RegExp.prototype.exec` and can be used reliably cross-browser. * * @memberOf XRegExp * @param {String} str String to search. @@ -817,12 +811,13 @@ XRegExp.escape = (str) => nativ.replace.call(toObject(str), /[-\[\]{}()*+?.,\\^$ * @param {Number} [pos=0] Zero-based index at which to start the search. * @param {Boolean|String} [sticky=false] Whether the match must start at the specified position * only. The string `'sticky'` is accepted as an alternative to `true`. - * @returns {Array} Match array with named backreference properties, or `null`. + * @returns {Array} Match array with named capture properties on the `groups` object, or `null`. If + * the `namespacing` feature is off, named capture properties are directly on the match array. * @example * - * // Basic use, with named backreference + * // Basic use, with named capturing group * let match = XRegExp.exec('U+2620', XRegExp('U\\+(?[0-9A-F]{4})')); - * match.hex; // -> '2620' + * match.groups.hex; // -> '2620' * * // With pos and sticky, in a loop * let pos = 2, result = [], match; @@ -998,7 +993,9 @@ XRegExp.isInstalled = (feature) => !!(features[feature]); * XRegExp.isRegExp(RegExp('^', 'm')); // -> true * XRegExp.isRegExp(XRegExp('(?s).')); // -> true */ -XRegExp.isRegExp = (value) => toString.call(value) === '[object RegExp]'; // isType(value, 'RegExp'); +XRegExp.isRegExp = (value) => Object.prototype.toString.call(value) === '[object RegExp]'; +// Same as `isType(value, 'RegExp')`, but avoiding that function call here for perf since +// `isRegExp` is used heavily by internals including regex construction /** * Returns the first matched string, or in global mode, an array containing all matched strings. @@ -1042,7 +1039,7 @@ XRegExp.match = (str, regex, scope) => { }) ); - const result = nativ.match.call(toObject(str), r2); + const result = String(nullThrows(str)).match(r2); if (regex.global) { regex.lastIndex = ( @@ -1075,8 +1072,8 @@ XRegExp.match = (str, regex, scope) => { * // -> ['2', '4', '56'] * * // Passing forward and returning specific backreferences - * html = 'XRegExp\ - * Google'; + * const html = `XRegExp + * Google`; * XRegExp.matchChain(html, [ * {regex: //i, backref: 1}, * {regex: XRegExp('(?i)^https?://(?[^/?#]+)'), backref: 'domain'} @@ -1094,7 +1091,7 @@ XRegExp.matchChain = (str, chain) => (function recurseChain(values, level) { if (isNamedBackref && XRegExp.isInstalled('namespacing')) { // `groups` has `null` as prototype, so using `in` instead of `hasOwnProperty` - if (!(item.backref in match.groups)) { + if (!(match.groups && item.backref in match.groups)) { throw new ReferenceError(ERR_UNDEFINED_GROUP); } } else if (!match.hasOwnProperty(item.backref)) { @@ -1124,9 +1121,9 @@ XRegExp.matchChain = (str, chain) => (function recurseChain(values, level) { * Returns a new string with one or all matches of a pattern replaced. The pattern can be a string * or regex, and the replacement can be a string or a function to be called for each match. To * perform a global search and replace, use the optional `scope` argument or include flag g if using - * a regex. Replacement strings can use `${n}` or `$` for named and numbered backreferences. - * Replacement functions can use named backreferences via `arguments[0].name`. Also fixes browser - * bugs compared to the native `String.prototype.replace` and can be used reliably cross-browser. + * a regex. Replacement strings can use `$` or `${n}` for named and numbered backreferences. + * Replacement functions can use named backreferences via the last argument. Also fixes browser bugs + * compared to the native `String.prototype.replace` and can be used reliably cross-browser. * * @memberOf XRegExp * @param {String} str String to search. @@ -1137,18 +1134,22 @@ XRegExp.matchChain = (str, chain) => (function recurseChain(values, level) { * - $&, $0 - Inserts the matched substring. * - $` - Inserts the string that precedes the matched substring (left context). * - $' - Inserts the string that follows the matched substring (right context). - * - $n, $nn - Where n/nn are digits referencing an existent capturing group, inserts + * - $n, $nn - Where n/nn are digits referencing an existing capturing group, inserts * backreference n/nn. - * - ${n}, $ - Where n is a name or any number of digits that reference an existent capturing + * - $, ${n} - Where n is a name or any number of digits that reference an existing capturing * group, inserts backreference n. * Replacement functions are invoked with three or more arguments: - * - The matched substring (corresponds to $& above). Named backreferences are accessible as - * properties of this first argument. - * - 0..n arguments, one for each backreference (corresponding to $1, $2, etc. above). - * - The zero-based index of the match within the total search string. - * - The total string being searched. - * @param {String} [scope='one'] Use 'one' to replace the first match only, or 'all'. If not - * explicitly specified and using a regex with flag g, `scope` is 'all'. + * - args[0] - The matched substring (corresponds to `$&` above). If the `namespacing` feature + * is off, named backreferences are accessible as properties of this argument. + * - args[1..n] - One argument for each backreference (corresponding to `$1`, `$2`, etc. above). + * If the regex has no capturing groups, no arguments appear in this position. + * - args[n+1] - The zero-based index of the match within the entire search string. + * - args[n+2] - The total string being searched. + * - args[n+3] - If the the search pattern is a regex with named capturing groups, the last + * argument is the groups object. Its keys are the backreference names and its values are the + * backreference values. If the `namespacing` feature is off, this argument is not present. + * @param {String} [scope] Use 'one' to replace the first match only, or 'all'. Defaults to 'one'. + * Defaults to 'all' if using a regex with flag g. * @returns {String} New string with one or all matches replaced. * @example * @@ -1158,7 +1159,10 @@ XRegExp.matchChain = (str, chain) => (function recurseChain(values, level) { * // -> 'Smith, John' * * // Regex search, using named backreferences in replacement function - * XRegExp.replace('John Smith', name, (match) => `${match.last}, ${match.first}`); + * XRegExp.replace('John Smith', name, (...args) => { + * const groups = args[args.length - 1]; + * return `${groups.last}, ${groups.first}`; + * }); * // -> 'Smith, John' * * // String search, with replace-all @@ -1188,7 +1192,7 @@ XRegExp.replace = (str, search, replacement, scope) => { } // Fixed `replace` required for named backreferences, etc. - const result = fixed.replace.call(toObject(str), s2, replacement); + const result = fixed.replace.call(nullThrows(str), s2, replacement); if (isRegex && search.global) { // Fixes IE, Safari bug (last tested IE 9, Safari 5.1) @@ -1203,8 +1207,8 @@ XRegExp.replace = (str, search, replacement, scope) => { * array of replacement details. Later replacements operate on the output of earlier replacements. * Replacement details are accepted as an array with a regex or string to search for, the * replacement string or function, and an optional scope of 'one' or 'all'. Uses the XRegExp - * replacement text syntax, which supports named backreference properties via `${name}` or - * `$`. + * replacement text syntax, which supports named backreference properties via `$` or + * `${name}`. * * @memberOf XRegExp * @param {String} str String to search. @@ -1213,12 +1217,12 @@ XRegExp.replace = (str, search, replacement, scope) => { * @example * * str = XRegExp.replaceEach(str, [ - * [XRegExp('(?a)'), 'z${name}'], + * [XRegExp('(?a)'), 'z$'], * [/b/gi, 'y'], * [/c/g, 'x', 'one'], // scope 'one' overrides /g * [/d/, 'w', 'all'], // scope 'all' overrides lack of /g * ['e', 'v', 'all'], // scope 'all' allows replace-all for strings - * [/f/g, ($0) => $0.toUpperCase()] + * [/f/g, (match) => match.toUpperCase()] * ]); */ XRegExp.replaceEach = (str, replacements) => { @@ -1255,7 +1259,7 @@ XRegExp.replaceEach = (str, replacements) => { * XRegExp.split('..word1..', /([a-z]+)(\d+)/i); * // -> ['..', 'word', '1', '..'] */ -XRegExp.split = (str, separator, limit) => fixed.split.call(toObject(str), separator, limit); +XRegExp.split = (str, separator, limit) => fixed.split.call(nullThrows(str), separator, limit); /** * Executes a regex search in a specified string. Returns `true` or `false`. Optional `pos` and @@ -1284,8 +1288,8 @@ XRegExp.split = (str, separator, limit) => fixed.split.call(toObject(str), separ XRegExp.test = (str, regex, pos, sticky) => !!XRegExp.exec(str, regex, pos, sticky); /** - * Uninstalls optional features according to the specified options. All optional features start out - * uninstalled, so this is used to undo the actions of `XRegExp.install`. + * Uninstalls optional features according to the specified options. Used to undo the actions of + * `XRegExp.install`. * * @memberOf XRegExp * @param {Object|String} options Options object or string. @@ -1293,7 +1297,7 @@ XRegExp.test = (str, regex, pos, sticky) => !!XRegExp.exec(str, regex, pos, stic * * // With an options object * XRegExp.uninstall({ - * // Disables support for astral code points in Unicode addons + * // Disables support for astral code points in Unicode addons (unless enabled per regex) * astral: true, * * // Don't add named capture groups to the `groups` property of matches @@ -1375,7 +1379,7 @@ XRegExp.union = (patterns, flags, options) => { // Rewrite backreferences. Passing to XRegExp dies on octals and ensures patterns are // independently valid; helps keep this simple. Named captures are put back - output.push(nativ.replace.call(XRegExp(pattern.source).source, parts, rewrite)); + output.push(XRegExp(pattern.source).source.replace(parts, rewrite)); } else { output.push(XRegExp.escape(pattern)); } @@ -1399,7 +1403,7 @@ XRegExp.union = (patterns, flags, options) => { */ fixed.exec = function(str) { const origLastIndex = this.lastIndex; - const match = nativ.exec.apply(this, arguments); + const match = RegExp.prototype.exec.apply(this, arguments); if (match) { // Fix browsers whose `exec` methods don't return `undefined` for nonparticipating capturing @@ -1412,7 +1416,7 @@ fixed.exec = function(str) { }); // Using `str.slice(match.index)` rather than `match[0]` in case lookahead allowed // matching due to characters outside the match - nativ.replace.call(String(str).slice(match.index), r2, (...args) => { + String(str).slice(match.index).replace(r2, (...args) => { const len = args.length; // Skip index 0 and the last 2 for (let i = 1; i < len - 2; ++i) { @@ -1424,13 +1428,13 @@ fixed.exec = function(str) { } // Attach named capture properties - let groupsObject = match; - if (XRegExp.isInstalled('namespacing')) { - // https://tc39.github.io/proposal-regexp-named-groups/#sec-regexpbuiltinexec - match.groups = Object.create(null); - groupsObject = match.groups; - } if (this[REGEX_DATA] && this[REGEX_DATA].captureNames) { + let groupsObject = match; + if (XRegExp.isInstalled('namespacing')) { + // https://tc39.github.io/proposal-regexp-named-groups/#sec-regexpbuiltinexec + match.groups = Object.create(null); + groupsObject = match.groups; + } // Skip index 0 for (let i = 1; i < match.length; ++i) { const name = this[REGEX_DATA].captureNames[i - 1]; @@ -1438,6 +1442,9 @@ fixed.exec = function(str) { groupsObject[name] = match[i]; } } + // Preserve any existing `groups` obj that came from native ES2018 named capture + } else if (!match.groups && XRegExp.isInstalled('namespacing')) { + match.groups = undefined; } // Fix browsers that increment `lastIndex` after zero-length matches @@ -1480,14 +1487,14 @@ fixed.match = function(regex) { // Use the native `RegExp` rather than `XRegExp` regex = new RegExp(regex); } else if (regex.global) { - const result = nativ.match.apply(this, arguments); + const result = String.prototype.match.apply(this, arguments); // Fixes IE bug regex.lastIndex = 0; return result; } - return fixed.exec.call(regex, toObject(this)); + return fixed.exec.call(regex, nullThrows(this)); }; /** @@ -1523,7 +1530,7 @@ fixed.replace = function(search, replacement) { if (isType(replacement, 'Function')) { // Stringifying `this` fixes a bug in IE < 9 where the last argument in replacement // functions isn't type-converted to a string - result = nativ.replace.call(String(this), search, (...args) => { + result = String(this).replace(search, (...args) => { if (captureNames) { let groupsObject; @@ -1551,48 +1558,63 @@ fixed.replace = function(search, replacement) { } else { // Ensure that the last value of `args` will be a string when given nonstring `this`, // while still throwing on null or undefined context - result = nativ.replace.call(this == null ? this : String(this), search, (...args) => { - return nativ.replace.call(String(replacement), replacementToken, replacer); + result = String(nullThrows(this)).replace(search, (...args) => { + return String(replacement).replace(replacementToken, replacer); function replacer($0, bracketed, angled, dollarToken) { bracketed = bracketed || angled; - // Named or numbered backreference with curly or angled braces + + // ES2018 added a new trailing `groups` arg that's passed to replacement functions + // when the search regex uses native named capture + const numNonCaptureArgs = isType(args[args.length - 1], 'Object') ? 4 : 3; + const numCaptures = args.length - numNonCaptureArgs; + + // Handle named or numbered backreference with curly or angled braces: ${n}, $ if (bracketed) { - // XRegExp behavior for `${n}` or `$`: - // 1. Backreference to numbered capture, if `n` is an integer. Use `0` for the - // entire match. Any number of leading zeros may be used. - // 2. Backreference to named capture `n`, if it exists and is not an integer - // overridden by numbered capture. In practice, this does not overlap with - // numbered capture since XRegExp does not allow named capture to use a bare - // integer as the name. - // 3. If the name or number does not refer to an existing capturing group, it's - // an error. - let n = +bracketed; // Type-convert; drop leading zeros - if (n <= args.length - 3) { - return args[n] || ''; + // Handle backreference to numbered capture, if `bracketed` is an integer. Use + // `0` for the entire match. Any number of leading zeros may be used. + if (/^\d+$/.test(bracketed)) { + // Type-convert and drop leading zeros + const n = +bracketed; + if (n <= numCaptures) { + return args[n] || ''; + } } - // Groups with the same name is an error, else would need `lastIndexOf` - n = captureNames ? captureNames.indexOf(bracketed) : -1; + + // Handle backreference to named capture. If the name does not refer to an + // existing capturing group, it's an error. Also handles the error for numbered + // backference that does not refer to an existing group. + // Using `indexOf` since having groups with the same name is already an error, + // otherwise would need `lastIndexOf`. + const n = captureNames ? captureNames.indexOf(bracketed) : -1; if (n < 0) { throw new SyntaxError(`Backreference to undefined group ${$0}`); } return args[n + 1] || ''; } - // Else, special variable or numbered backreference without curly braces - if (dollarToken === '$') { // $$ - return '$'; + + // Handle `$`-prefixed variable + // Handle space/blank first because type conversion with `+` drops space padding + // and converts spaces and empty strings to `0` + if (dollarToken === '' || dollarToken === ' ') { + throw new SyntaxError(`Invalid token ${$0}`); } if (dollarToken === '&' || +dollarToken === 0) { // $&, $0 (not followed by 1-9), $00 return args[0]; } + if (dollarToken === '$') { // $$ + return '$'; + } if (dollarToken === '`') { // $` (left context) return args[args.length - 1].slice(0, args[args.length - 2]); } if (dollarToken === "'") { // $' (right context) return args[args.length - 1].slice(args[args.length - 2] + args[0].length); } - // Else, numbered backreference without braces - dollarToken = +dollarToken; // Type-convert; drop leading zero + + // Handle numbered backreference without braces + // Type-convert and drop leading zero + dollarToken = +dollarToken; // XRegExp behavior for `$n` and `$nn`: // - Backrefs end after 1 or 2 digits. Use `${..}` or `$<..>` for more digits. // - `$1` is an error if no capturing groups. @@ -1607,11 +1629,12 @@ fixed.replace = function(search, replacement) { // - `$01` is `$1` if at least one capturing group, else it's a literal `$01`. // - `$0` is a literal `$0`. if (!isNaN(dollarToken)) { - if (dollarToken > args.length - 3) { + if (dollarToken > numCaptures) { throw new SyntaxError(`Backreference to undefined group ${$0}`); } return args[dollarToken] || ''; } + // `$` followed by an unsupported char is an error, unlike native JS throw new SyntaxError(`Invalid token ${$0}`); } @@ -1642,7 +1665,7 @@ fixed.replace = function(search, replacement) { fixed.split = function(separator, limit) { if (!XRegExp.isRegExp(separator)) { // Browsers handle nonregex split correctly, so use the faster native method - return nativ.split.apply(this, arguments); + return String.prototype.split.apply(this, arguments); } const str = String(this); @@ -1674,7 +1697,7 @@ fixed.split = function(separator, limit) { }); if (lastLastIndex === str.length) { - if (!nativ.test.call(separator, '') || lastLength) { + if (!separator.test('') || lastLength) { output.push(''); } } else { @@ -1741,21 +1764,6 @@ XRegExp.addToken( } ); -/* - * Empty character class: `[]` or `[^]`. This fixes a critical cross-browser syntax inconsistency. - * Unless this is standardized (per the ES spec), regex syntax can't be accurately parsed because - * character class endings can't be determined. - */ -XRegExp.addToken( - /\[(\^?)\]/, - // For cross-browser compatibility with ES3, convert [] to \b\B and [^] to [\s\S]. - // (?!) should work like \b\B, but is unreliable in some versions of Firefox - /* eslint-disable no-confusing-arrow */ - (match) => (match[1] ? '[\\s\\S]' : '\\b\\B'), - /* eslint-enable no-confusing-arrow */ - {leadChar: '['} -); - /* * Comment pattern: `(?# )`. Inline comments are an alternative to the line comments allowed in * free-spacing mode (flag x). @@ -1776,23 +1784,25 @@ XRegExp.addToken( ); /* - * Dot, in dotall mode (aka singleline mode, flag s) only. + * Dot, in dotAll mode (aka singleline mode, flag s) only. */ -XRegExp.addToken( - /\./, - () => '[\\s\\S]', - { - flag: 's', - leadChar: '.' - } -); +if (!hasNativeS) { + XRegExp.addToken( + /\./, + () => '[\\s\\S]', + { + flag: 's', + leadChar: '.' + } + ); +} /* - * Named backreference: `\k`. Backreference names can use the characters A-Z, a-z, 0-9, _, - * and $ only. Also allows numbered backreferences as `\k`. + * Named backreference: `\k`. Backreference names can use RegExpIdentifierName characters + * only. Also allows numbered backreferences as `\k`. */ XRegExp.addToken( - /\\k<([\w$]+)>/, + /\\k<([^>]+)>/, function(match) { // Groups with the same name is an error, else would need `lastIndexOf` const index = isNaN(match[1]) ? (this.captureNames.indexOf(match[1]) + 1) : +match[1]; @@ -1838,19 +1848,14 @@ XRegExp.addToken( /* * Named capturing group; match the opening delimiter only: `(?`. Capture names can use the - * characters A-Z, a-z, 0-9, _, and $ only. Names can't be integers. Supports Python-style + * RegExpIdentifierName characters only. Names can't be integers. Supports Python-style * `(?P` as an alternate syntax to avoid issues in some older versions of Opera which natively * supported the Python-style syntax. Otherwise, XRegExp might treat numbered backreferences to * Python-style named capture as octals. */ XRegExp.addToken( - /\(\?P?<([\w$]+)>/, + /\(\?P?<([\p{ID_Start}$_][\p{ID_Continue}$_\u200C\u200D]*)>/u, function(match) { - // Disallow bare integers as names because named backreferences are added to match arrays - // and therefore numeric properties may lead to incorrect lookups - if (!isNaN(match[1])) { - throw new SyntaxError(`Cannot use integer as capture name ${match[0]}`); - } if (!XRegExp.isInstalled('namespacing') && (match[1] === 'length' || match[1] === '__proto__')) { throw new SyntaxError(`Cannot use reserved word as capture name ${match[0]}`); } diff --git a/tests/.eslintrc.js b/tests/.eslintrc.js index 9d4ebe17..f89b55ad 100644 --- a/tests/.eslintrc.js +++ b/tests/.eslintrc.js @@ -4,8 +4,9 @@ module.exports = { }, "globals": { "XRegExp": true, - "disableOptInFeatures": true, + "resetFeatures": true, "REGEX_DATA": true, + "hasNativeS": true, "hasNativeU": true, "hasNativeY": true, "hasStrictMode": true, diff --git a/tests/helpers/h.js b/tests/helpers/h.js index 3bd155df..4d77d568 100644 --- a/tests/helpers/h.js +++ b/tests/helpers/h.js @@ -4,14 +4,17 @@ if (typeof global === 'undefined') { global.XRegExp = require('../../xregexp-all'); } -// Ensure that all opt-in features are disabled when each spec starts -global.disableOptInFeatures = function() { - XRegExp.uninstall('namespacing astral'); +// Ensure that all features are reset to default when each spec starts +global.resetFeatures = function() { + XRegExp.uninstall('astral'); + XRegExp.install('namespacing'); }; // Property name used for extended regex instance data global.REGEX_DATA = 'xregexp'; +// Check for ES2018 `s` flag support +global.hasNativeS = XRegExp._hasNativeFlag('s'); // Check for ES6 `u` flag support global.hasNativeU = XRegExp._hasNativeFlag('u'); // Check for ES6 `y` flag support diff --git a/tests/spec/s-addons-build.js b/tests/spec/s-addons-build.js index 2eefa78e..f3aa4886 100644 --- a/tests/spec/s-addons-build.js +++ b/tests/spec/s-addons-build.js @@ -1,5 +1,5 @@ beforeEach(function() { - global.disableOptInFeatures(); + global.resetFeatures(); global.addToEqualMatchMatcher(); }); @@ -87,7 +87,7 @@ describe('XRegExp.build addon:', function() { var time = XRegExp.tag('x')`^ ${hours} (?${minutes}) $`; expect(time.test('10:59')).toBe(true); - expect(XRegExp.exec('10:59', time).minutes).toEqual('59'); + expect(XRegExp.exec('10:59', time).groups.minutes).toEqual('59'); }); }); @@ -169,7 +169,7 @@ describe('XRegExp.build addon:', function() { }); expect(time.test('10:59')).toBe(true); - expect(XRegExp.exec('10:59', time).minutes).toBe('59'); + expect(XRegExp.exec('10:59', time).groups.minutes).toBe('59'); }); it('should pass a series of complex backreference rewrites', function() { @@ -181,11 +181,11 @@ describe('XRegExp.build addon:', function() { var match = XRegExp.exec('aaaabbbbaabbbb', built); expect(match).toBeTruthy(); - expect(match.n1).toBe('aa'); - expect(match.n2).toBeUndefined(); - expect(match.nX).toBe('bb'); - expect(match.yo).toBe('a'); - expect(match.yo2).toBe('b'); + expect(match.groups.n1).toBe('aa'); + expect(match.groups.n2).toBeUndefined(); + expect(match.groups.nX).toBe('bb'); + expect(match.groups.yo).toBe('a'); + expect(match.groups.yo2).toBe('b'); }); }); diff --git a/tests/spec/s-addons-matchrecursive.js b/tests/spec/s-addons-matchrecursive.js index 1c872021..01a64524 100644 --- a/tests/spec/s-addons-matchrecursive.js +++ b/tests/spec/s-addons-matchrecursive.js @@ -1,5 +1,5 @@ beforeEach(function() { - global.disableOptInFeatures(); + global.resetFeatures(); global.addToEqualMatchMatcher(); }); @@ -47,6 +47,36 @@ describe('XRegExp.matchRecursive addon:', function() { expect(XRegExp.matchRecursive(str, '<', '>', 'gy')).toEqual(['1', '<<2>>', '3']); }); + it('should throw for unbalanced left delimiter in first match without flag g', function() { + expect(function() {XRegExp.matchRecursive('<', '<', '>');}).toThrow(); + expect(function() {XRegExp.matchRecursive('<<>', '<', '>');}).toThrow(); + }); + + it('should not throw for unbalanced left delimiter after first match without flag g', function() { + expect(function() {XRegExp.matchRecursive('<><', '<', '>');}).not.toThrow(); + }); + + it('should throw for unbalanced left delimiter anywhere in string with flag g', function() { + expect(function() {XRegExp.matchRecursive('<', '<', '>', 'g');}).toThrow(); + expect(function() {XRegExp.matchRecursive('<<>', '<', '>', 'g');}).toThrow(); + expect(function() {XRegExp.matchRecursive('<><', '<', '>', 'g');}).toThrow(); + expect(function() {XRegExp.matchRecursive('.<.<>><', '<', '>', 'g');}).toThrow(); + }); + + it('should throw for unbalanced right delimiter in first match without flag g', function() { + expect(function() {XRegExp.matchRecursive('>', '<', '>');}).toThrow(); + }); + + it('should not throw for unbalanced right delimiter after first match without flag g', function() { + expect(function() {XRegExp.matchRecursive('<>>', '<', '>');}).not.toThrow(); + }); + + it('should throw for unbalanced right delimiter anywhere in string with flag g', function() { + expect(function() {XRegExp.matchRecursive('>', '<', '>', 'g');}).toThrow(); + expect(function() {XRegExp.matchRecursive('<>>', '<', '>', 'g');}).toThrow(); + expect(function() {XRegExp.matchRecursive('.<.<>>>', '<', '>', 'g');}).toThrow(); + }); + // TODO: Add complete specs }); diff --git a/tests/spec/s-addons-unicode.js b/tests/spec/s-addons-unicode.js index ebb3b60e..413ff70b 100644 --- a/tests/spec/s-addons-unicode.js +++ b/tests/spec/s-addons-unicode.js @@ -1,5 +1,5 @@ beforeEach(function() { - global.disableOptInFeatures(); + global.resetFeatures(); global.addToEqualMatchMatcher(); }); @@ -407,34 +407,6 @@ describe('Unicode Base addon:', function() { }); -describe('Unicode Blocks addon:', function() { - - it('should require the "In" prefix for block names (unprefixed names are not allowed)', function() { - expect(function() {XRegExp('\\p{InBasic_Latin}');}).not.toThrow(); - expect(function() {XRegExp('\\p{Basic_Latin}');}).toThrowError(SyntaxError); - }); - - it('should not allow the "Is" prefix for block names', function() { - expect(function() {XRegExp('\\p{IsBasic_Latin}');}).toThrowError(SyntaxError); - }); - - it('should handle \\p{InBasic_Latin}', function() { - testUnicodeToken('InBasic_Latin', { - valid: ['A'] - }); - }); - - it('should handle astral-only \\p{InAegean_Numbers}', function() { - testUnicodeToken('InAegean_Numbers', { - isAstralOnly: true, - valid: [String.fromCodePoint(0x10100)] - }); - }); - - // TODO: Add complete specs - -}); - describe('Unicode Categories addon:', function() { it('should not allow the "In" prefix for category names', function() { @@ -445,6 +417,10 @@ describe('Unicode Categories addon:', function() { expect(function() {XRegExp('\\p{IsP}');}).toThrowError(SyntaxError); }); + it('should not allow the "Script=" prefix for category names', function() { + expect(function() {XRegExp('\\p{Script=P}');}).toThrowError(SyntaxError); + }); + it('should handle \\p{Cn}', function() { testUnicodeToken('Cn', { invalid: ['\u20BA'] @@ -517,6 +493,10 @@ describe('Unicode Properties addon:', function() { expect(function() {XRegExp('\\p{IsASCII}');}).toThrowError(SyntaxError); }); + it('should not allow the "Script=" prefix for property names', function() { + expect(function() {XRegExp('\\p{Script=ASCII}');}).toThrowError(SyntaxError); + }); + it('should handle \\p{Alphabetic}', function() { testUnicodeToken('Alphabetic', { valid: ['A', 'a', 'Å', 'å', '日', 'ي'], @@ -557,6 +537,21 @@ describe('Unicode Scripts addon:', function() { expect(function() {XRegExp('\\p{IsLatin}');}).toThrowError(SyntaxError); }); + it('should allow the "Script=" prefix for script names', function() { + expect(function() {XRegExp('\\p{Script=Latin}');}).not.toThrow(); + testUnicodeToken('Script=Latin', { + valid: ['A', 'B', 'C'], + invalid: ['カ', 'タ', 'ナ'] + }); + }); + + it('should handle \\p{Latin}', function() { + testUnicodeToken('Latin', { + valid: ['A', 'B', 'C'], + invalid: ['カ', 'タ', 'ナ'] + }); + }); + it('should handle \\p{Katakana}', function() { testUnicodeToken('Katakana', { valid: ['カ', 'タ', 'ナ'], @@ -582,6 +577,13 @@ describe('Unicode Scripts addon:', function() { }); }); + it('should handle astral-only \\p{Anatolian_Hieroglyphs}', function() { + testUnicodeToken('Anatolian_Hieroglyphs', { + isAstralOnly: true, + valid: [String.fromCodePoint(0x14400)] + }); + }); + // TODO: Add complete specs }); diff --git a/tests/spec/s-xregexp-methods.js b/tests/spec/s-xregexp-methods.js index da72a2c1..2d0887b1 100644 --- a/tests/spec/s-xregexp-methods.js +++ b/tests/spec/s-xregexp-methods.js @@ -1,5 +1,5 @@ beforeEach(function() { - global.disableOptInFeatures(); + global.resetFeatures(); global.addToEqualMatchMatcher(); }); @@ -219,12 +219,22 @@ describe('XRegExp.cache()', function() { describe('XRegExp.escape()', function() { - it('should escape metacharacters', function() { + it('should escape standard metacharacters', function() { expect(XRegExp.escape('[()*+?.\\^$|')).toBe('\\[\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|'); }); - it('should escape context-aware metacharacters', function() { - expect(XRegExp.escape(']{}-, \n#')).toBe('\\]\\{\\}\\-\\,\\ \\\n\\#'); + it('should escape context-sensitive metacharacters, excluding whitespace', function() { + expect(XRegExp.escape(']{}-,#')).toBe('\\]\\{\\}\\-\\,\\#'); + }); + + it('should escape context-sensitive whitespace', function() { + // Don't want to explicitly check the escape pattern like this since there are multiple + // valid representations of escaped whitespace + //expect(XRegExp.escape('\t\n\f\r\x20\u2028\u2029')).toBe('\\u0009\\u000a\\u000c\\u000d\\u0020\\u2028\\u2029'); + + var whitespace = '\t\n\f\r\x20\u2028\u2029'; + expect(new RegExp('^' + XRegExp.escape(whitespace) + '$').test(whitespace)).toBe(true); + expect(XRegExp.escape(whitespace)).not.toBe(whitespace); }); it('should not escape nonmetacharacters', function() { @@ -232,7 +242,11 @@ describe('XRegExp.escape()', function() { }); it('should escape a nonstring pattern after type converting to a string', function() { - expect(XRegExp.escape({})).toBe('\\[object\\ Object\\]'); + // Don't want to explicitly check the escape pattern like this since there are multiple + // valid representations of escaped whitespace + //expect(XRegExp.escape({})).toBe('\\[object\\ Object\\]'); + + expect(new RegExp('^' + XRegExp.escape({}) + '$').test('[object Object]')).toBe(true); }); it('should throw an exception when given a null or undefined pattern', function() { @@ -445,6 +459,7 @@ describe('XRegExp.exec()', function() { // for the RegExp.prototype.exec and nonglobal String.prototype.match specs... it('should include named capture properties on the match array if namespacing is not installed', function() { + XRegExp.uninstall('namespacing'); var match = XRegExp.exec('a', XRegExp('(?a)')); expect(match.name).toBe('a'); @@ -452,27 +467,34 @@ describe('XRegExp.exec()', function() { }); it('should not include named capture properties on the match array if namespacing is installed', function() { - XRegExp.install('namespacing'); var match = XRegExp.exec('a', XRegExp('(?a)')); expect(match.name).toBeUndefined(); }); it('should not include named capture properties on a groups object if namespacing is not installed', function() { + XRegExp.uninstall('namespacing'); var match = XRegExp.exec('a', XRegExp('(?a)')); expect(match.groups).toBeUndefined(); }); it('should include named capture properties on a groups object if namespacing is installed', function() { - XRegExp.install('namespacing'); var match = XRegExp.exec('a', XRegExp('(?a)')); expect(match.groups.name).toBe('a'); expect(match[1]).toBe('a'); }); - it('should shaddow array prototype properties with named capture properties', function() { + it('should set the groups property as undefined when there are no named captures if namespacing is installed', function() { + var match = XRegExp.exec('a', XRegExp('(a)')); + + expect(match.groups).toBeUndefined(); + expect(match.hasOwnProperty('groups')).toBe(true); + }); + + it('should shadow array prototype properties with named capture properties if namespacing is not installed', function() { + XRegExp.uninstall('namespacing'); expect(XRegExp.exec('a', XRegExp('(?a)')).concat).toBe('a'); expect(XRegExp.exec('a', XRegExp('(?a)')).index).toBe('a'); }); @@ -492,10 +514,10 @@ describe('XRegExp.forEach()', function() { }); }); - it('should provide named backreferences on the match array', function() { + it('should provide named backreferences on the match array\'s groups property', function() { var result = []; XRegExp.forEach('abc 123 def', XRegExp('(?\\w)\\w*'), function(m) { - result.push(m.first); + result.push(m.groups.first); }); expect(result).toEqual(['a', '1', 'd']); @@ -711,7 +733,7 @@ describe('XRegExp.globalize()', function() { it('should retain named capture capabilities', function() { var regex = XRegExp('(?x)\\k'); - expect(XRegExp.exec('xx', XRegExp.globalize(regex)).name).toBe('x'); + expect(XRegExp.exec('xx', XRegExp.globalize(regex)).groups.name).toBe('x'); }); it('should throw an exception if not given a RegExp object', function() { @@ -736,7 +758,9 @@ describe('XRegExp.globalize()', function() { describe('XRegExp.install()', function() { - // NOTE: All optional features are uninstalled before each spec runs + beforeEach(function() { + XRegExp.uninstall('namespacing astral'); + }); var features = ['namespacing', 'astral']; @@ -1100,6 +1124,7 @@ describe('XRegExp.matchChain()', function() { }); it('should handle named and numbered backrefs when namespacing is not installed', function() { + XRegExp.uninstall('namespacing'); expect(XRegExp.matchChain('test', [ {regex: /.(..)/, backref: 1}, {regex: XRegExp('.(?.)'), backref: 'n'} @@ -1107,7 +1132,6 @@ describe('XRegExp.matchChain()', function() { }); it('should handle named and numbered backrefs when namespacing is installed', function() { - XRegExp.install('namespacing'); expect(XRegExp.matchChain('test', [ {regex: /.(..)/, backref: 1}, {regex: XRegExp('.(?.)'), backref: 'n'} @@ -1186,6 +1210,7 @@ describe('XRegExp.replace()', function() { }); it('should not pass the groups argument to callbacks when namespacing is not installed', function() { + XRegExp.uninstall('namespacing'); var regex = XRegExp('(?s)(?.)'); XRegExp.replace('test', regex, function(match, capture1, pos, str, groups) { expect(groups).toBeUndefined(); @@ -1193,7 +1218,6 @@ describe('XRegExp.replace()', function() { }); it('should pass the groups argument to callbacks when namespacing is installed', function() { - XRegExp.install('namespacing'); var regex = XRegExp('(?s)(?.)'); var groupsObject = Object.create(null); groupsObject.groupName = 't'; @@ -1203,13 +1227,13 @@ describe('XRegExp.replace()', function() { }); it('should allow accessing named backreferences in callbacks as properties of the first argument when namespacing is not installed', function() { + XRegExp.uninstall('namespacing'); expect(XRegExp.replace('abc', XRegExp('(?.).'), function(match) { return ':' + match.name + ':'; })).toBe(':a:c'); }); it('should not allow accessing named backreferences in callbacks as properties of the first argument when namespacing is installed', function() { - XRegExp.install('namespacing'); expect(XRegExp.replace('abc', XRegExp('(?.).'), function(match) { return ':' + match.name + ':'; })).toBe(':undefined:c'); @@ -1247,8 +1271,13 @@ describe('XRegExp.replace()', function() { }); it('should throw an exception for backreferences to unknown group names', function() { - expect(function() {XRegExp.replace('test', XRegExp('(?t)', 'g'), ':${x}:');}).toThrowError(SyntaxError); - expect(function() {XRegExp.replace('test', XRegExp('(?t)', 'g'), ':$:');}).toThrowError(SyntaxError); + expect(function() {XRegExp.replace('test', XRegExp('(?)'), ':${x}:');}).toThrowError(SyntaxError); + expect(function() {XRegExp.replace('test', XRegExp('(?)'), ':$:');}).toThrowError(SyntaxError); + }); + + it('should throw an exception for backreferences with leading or trailing spaces', function() { + expect(function() {XRegExp.replace('test', XRegExp('(?)'), '$< test>');}).toThrowError(SyntaxError); + expect(function() {XRegExp.replace('test', XRegExp('(?)'), '$');}).toThrowError(SyntaxError); }); }); @@ -1293,6 +1322,17 @@ describe('XRegExp.replace()', function() { expect(function() {XRegExp.replace('test', /(t)/, '$<2>');}).toThrowError(SyntaxError); }); + it('should throw an exception for backreferences to unknown group numbers when using named capture', function() { + expect(function() {XRegExp.replace('test', XRegExp('(?t)'), '$<2>');}).toThrowError(SyntaxError); + // Native ES2018 named capture + //expect(function() {XRegExp.replace('test', /(?t)/, '$<2>');}).toThrowError(SyntaxError); + }); + + it('should throw an exception for backreferences with leading or trailing spaces', function() { + expect(function() {XRegExp.replace('test', /()/, '$< 1>');}).toThrowError(SyntaxError); + expect(function() {XRegExp.replace('test', /()/, '$<1 >');}).toThrowError(SyntaxError); + }); + it('should allow ${0} to refer to the entire match', function() { expect(XRegExp.replace('test', /../g, '${0}:')).toBe('te:st:'); expect(XRegExp.replace('test', /../g, '$<0>:')).toBe('te:st:'); @@ -1342,6 +1382,20 @@ describe('XRegExp.replace()', function() { expect(function() {XRegExp.replace('xa(a)a', 'a(a)', '$1b');}).toThrowError(SyntaxError); }); + it('should throw an exception for backreferences to unknown group numbers when using named capture', function() { + expect(function() {XRegExp.replace('test', XRegExp('(?t)'), '$2');}).toThrowError(SyntaxError); + // Native ES2018 named capture + //expect(function() {XRegExp.replace('test', /(?t)/, '$2');}).toThrowError(SyntaxError); + }); + + it('should throw an exception for unrecognized tokens', function() { + expect(function() {XRegExp.replace('test', /./, '$');}).toThrowError(SyntaxError); + expect(function() {XRegExp.replace('test', /./, '$ ');}).toThrowError(SyntaxError); + expect(function() {XRegExp.replace('test', /./, '${');}).toThrowError(SyntaxError); + expect(function() {XRegExp.replace('test', /./, '$<');}).toThrowError(SyntaxError); + expect(function() {XRegExp.replace('test', /./, '$.');}).toThrowError(SyntaxError); + }); + }); }); diff --git a/tests/spec/s-xregexp.js b/tests/spec/s-xregexp.js index 1051db51..2d7ce486 100644 --- a/tests/spec/s-xregexp.js +++ b/tests/spec/s-xregexp.js @@ -1,5 +1,5 @@ beforeEach(function() { - global.disableOptInFeatures(); + global.resetFeatures(); global.addToEqualMatchMatcher(); }); @@ -121,10 +121,10 @@ describe('XRegExp()', function() { // These properties are `undefined`, but future ES may define them with value `false` it('should not set properties for nonnative flags', function() { + if (!hasNativeS) { + expect(XRegExp('', 's').dotAll).toBeFalsy(); + } expect(XRegExp('', 'n').explicitCapture).toBeFalsy(); - expect(XRegExp('', 's').singleline).toBeFalsy(); - expect(XRegExp('', 's').dotall).toBeFalsy(); - expect(XRegExp('', 's').dotAll).toBeFalsy(); expect(XRegExp('', 'x').extended).toBeFalsy(); // Flag A is added by Unicode Base //expect(XRegExp('', 'A').astral).toBeFalsy(); @@ -278,30 +278,6 @@ describe('XRegExp()', function() { expect(XRegExp(XRegExp(/./im))[REGEX_DATA].flags).toBeNull(); }); - describe('fixes regex syntax cross-browser:', function() { - - it('should use the correct JavaScript rules for empty character classes', function() { - - /* Traditional regex behavior is that a leading, unescaped ] within a character class - * is treated as a literal character and does not end the character class. However, - * this is not true for ES3/5, which states that [] is an empty set that will never - * match (similar to (?!)) and [^] matches any single character (like [\s\S] or - * [\0-\uFFFF]). IE < 9 and older versions of Safari use the traditional behavior, - * rather than the correct ES3/5 behavior. Older versions of Opera reverse the correct - * ES3/5 behavior, so that [] matches any character and [^] never matches. Regexes - * created by XRegExp follow the ES3/5 standard behavior cross-browser. - */ - - expect(XRegExp('[]').test('a')).toBe(false); - expect(XRegExp('[]]').test('a]')).toBe(false); - expect(XRegExp('[]]').test(']')).toBe(false); - - expect(XRegExp('[^]').test('a')).toBe(true); - expect(XRegExp('[^]]').test('a]')).toBe(true); - }); - - }); - describe('supports new regex syntax:', function() { describe('leading mode modifier', function() { @@ -317,10 +293,10 @@ describe('XRegExp()', function() { // These properties are `undefined`, but future ES may define them with value `false` it('should not set properties for nonnative flags', function() { + if (!hasNativeS) { + expect(XRegExp('(?s)').dotAll).toBeFalsy(); + } expect(XRegExp('(?n)').explicitCapture).toBeFalsy(); - expect(XRegExp('(?s)').singleline).toBeFalsy(); - expect(XRegExp('(?s)').dotall).toBeFalsy(); - expect(XRegExp('(?s)').dotAll).toBeFalsy(); expect(XRegExp('(?x)').extended).toBeFalsy(); // Flag A is added by Unicode Base //expect(XRegExp('(?A)').astral).toBeFalsy(); @@ -356,8 +332,11 @@ describe('XRegExp()', function() { expect(regex.ignoreCase).toBe(true); expect(regex.global).toBe(true); expect(regex.multiline).toBe(true); - // Test nonnative flag s - expect(regex.test('\n')).toBe(true); + if (hasNativeS) { + expect(regex.dotAll).toBe(true); + } else { + expect(regex.test('\n')).toBe(true); + } }); it('should throw an exception if unknown flags are used', function() { @@ -393,27 +372,24 @@ describe('XRegExp()', function() { // Named capture *functionality* is tested by the specs for named backreference syntax, // XRegExp.exec, XRegExp.replace, etc. - it('should allow the characters A-Z, a-z, 0-9, $, and _ to be used in capture names', function() { + it('should allow the RegExpIdentifierName characters to be used in capture names', function() { expect(XRegExp('(?x)').test('x')).toBe(true); expect(XRegExp('(?<_09>x)').test('x')).toBe(true); expect(XRegExp('(?<$>x)').test('x')).toBe(true); + expect(XRegExp('(?x)').test('x')).toBe(true); + expect(XRegExp('(?<Русский>)x').test('x')).toBe(true); + expect(XRegExp('(?<日本語>x)').test('x')).toBe(true); }); - it('should throw an exception if characters other than A-Z, a-z, 0-9, $, and _ are used in capture names', function() { + it('should throw an exception if non-RegExpIdentifierName characters are used in capture names', function() { expect(function() {XRegExp('(?)');}).toThrowError(SyntaxError); expect(function() {XRegExp('(?<.>)');}).toThrowError(SyntaxError); expect(function() {XRegExp('(?<<>)');}).toThrowError(SyntaxError); expect(function() {XRegExp('(?<->)');}).toThrowError(SyntaxError); - // Native named capture uses different allowed chars that XRegExp should be updated to handle - //expect(function() {XRegExp('(?)');}).toThrowError(SyntaxError); - //expect(function() {XRegExp('(?<Русский>)');}).toThrowError(SyntaxError); - //expect(function() {XRegExp('(?<日本語>)');}).toThrowError(SyntaxError); }); - it('should allow capture names to start with digits', function() { - expect(XRegExp('(?<0a>x)').test('x')).toBe(true); - expect(XRegExp('(?<1_1>x)').test('x')).toBe(true); - expect(XRegExp('(?<234$>x)').test('x')).toBe(true); + it('should not allow capture names to start with digits', function() { + expect(function() {XRegExp('(?<0a>x)');}).toThrowError(SyntaxError); }); it('should throw an exception if bare integers are used as capture names', function() { @@ -424,6 +400,7 @@ describe('XRegExp()', function() { }); it('should throw an exception if reserved words are used as capture names if namespacing is not installed', function() { + XRegExp.uninstall('namespacing'); // Only these names are reserved ['length', '__proto__'].forEach(function(name) { expect(function() {XRegExp('(?<' + name + '>)');}).toThrowError(SyntaxError); @@ -431,7 +408,6 @@ describe('XRegExp()', function() { }); it('should not throw an exception if reserved words are used as capture names if namespacing is installed', function() { - XRegExp.install('namespacing'); ['length', '__proto__'].forEach(function(name) { expect(function() {XRegExp('(?<' + name + '>)');}).not.toThrow(); }); diff --git a/tools/output/blocks.js b/tools/output/blocks.js deleted file mode 100644 index 55516cab..00000000 --- a/tools/output/blocks.js +++ /dev/null @@ -1,1170 +0,0 @@ -module.exports = [ - { - 'name': 'InAdlam', - 'astral': '\uD83A[\uDD00-\uDD5F]' - }, - { - 'name': 'InAegean_Numbers', - 'astral': '\uD800[\uDD00-\uDD3F]' - }, - { - 'name': 'InAhom', - 'astral': '\uD805[\uDF00-\uDF3F]' - }, - { - 'name': 'InAlchemical_Symbols', - 'astral': '\uD83D[\uDF00-\uDF7F]' - }, - { - 'name': 'InAlphabetic_Presentation_Forms', - 'bmp': '\uFB00-\uFB4F' - }, - { - 'name': 'InAnatolian_Hieroglyphs', - 'astral': '\uD811[\uDC00-\uDE7F]' - }, - { - 'name': 'InAncient_Greek_Musical_Notation', - 'astral': '\uD834[\uDE00-\uDE4F]' - }, - { - 'name': 'InAncient_Greek_Numbers', - 'astral': '\uD800[\uDD40-\uDD8F]' - }, - { - 'name': 'InAncient_Symbols', - 'astral': '\uD800[\uDD90-\uDDCF]' - }, - { - 'name': 'InArabic', - 'bmp': '\u0600-\u06FF' - }, - { - 'name': 'InArabic_Extended_A', - 'bmp': '\u08A0-\u08FF' - }, - { - 'name': 'InArabic_Mathematical_Alphabetic_Symbols', - 'astral': '\uD83B[\uDE00-\uDEFF]' - }, - { - 'name': 'InArabic_Presentation_Forms_A', - 'bmp': '\uFB50-\uFDFF' - }, - { - 'name': 'InArabic_Presentation_Forms_B', - 'bmp': '\uFE70-\uFEFF' - }, - { - 'name': 'InArabic_Supplement', - 'bmp': '\u0750-\u077F' - }, - { - 'name': 'InArmenian', - 'bmp': '\u0530-\u058F' - }, - { - 'name': 'InArrows', - 'bmp': '\u2190-\u21FF' - }, - { - 'name': 'InAvestan', - 'astral': '\uD802[\uDF00-\uDF3F]' - }, - { - 'name': 'InBalinese', - 'bmp': '\u1B00-\u1B7F' - }, - { - 'name': 'InBamum', - 'bmp': '\uA6A0-\uA6FF' - }, - { - 'name': 'InBamum_Supplement', - 'astral': '\uD81A[\uDC00-\uDE3F]' - }, - { - 'name': 'InBasic_Latin', - 'bmp': '\0-\x7F' - }, - { - 'name': 'InBassa_Vah', - 'astral': '\uD81A[\uDED0-\uDEFF]' - }, - { - 'name': 'InBatak', - 'bmp': '\u1BC0-\u1BFF' - }, - { - 'name': 'InBengali', - 'bmp': '\u0980-\u09FF' - }, - { - 'name': 'InBhaiksuki', - 'astral': '\uD807[\uDC00-\uDC6F]' - }, - { - 'name': 'InBlock_Elements', - 'bmp': '\u2580-\u259F' - }, - { - 'name': 'InBopomofo', - 'bmp': '\u3100-\u312F' - }, - { - 'name': 'InBopomofo_Extended', - 'bmp': '\u31A0-\u31BF' - }, - { - 'name': 'InBox_Drawing', - 'bmp': '\u2500-\u257F' - }, - { - 'name': 'InBrahmi', - 'astral': '\uD804[\uDC00-\uDC7F]' - }, - { - 'name': 'InBraille_Patterns', - 'bmp': '\u2800-\u28FF' - }, - { - 'name': 'InBuginese', - 'bmp': '\u1A00-\u1A1F' - }, - { - 'name': 'InBuhid', - 'bmp': '\u1740-\u175F' - }, - { - 'name': 'InByzantine_Musical_Symbols', - 'astral': '\uD834[\uDC00-\uDCFF]' - }, - { - 'name': 'InCJK_Compatibility', - 'bmp': '\u3300-\u33FF' - }, - { - 'name': 'InCJK_Compatibility_Forms', - 'bmp': '\uFE30-\uFE4F' - }, - { - 'name': 'InCJK_Compatibility_Ideographs', - 'bmp': '\uF900-\uFAFF' - }, - { - 'name': 'InCJK_Compatibility_Ideographs_Supplement', - 'astral': '\uD87E[\uDC00-\uDE1F]' - }, - { - 'name': 'InCJK_Radicals_Supplement', - 'bmp': '\u2E80-\u2EFF' - }, - { - 'name': 'InCJK_Strokes', - 'bmp': '\u31C0-\u31EF' - }, - { - 'name': 'InCJK_Symbols_And_Punctuation', - 'bmp': '\u3000-\u303F' - }, - { - 'name': 'InCJK_Unified_Ideographs', - 'bmp': '\u4E00-\u9FFF' - }, - { - 'name': 'InCJK_Unified_Ideographs_Extension_A', - 'bmp': '\u3400-\u4DBF' - }, - { - 'name': 'InCJK_Unified_Ideographs_Extension_B', - 'astral': '[\uD840-\uD868][\uDC00-\uDFFF]|\uD869[\uDC00-\uDEDF]' - }, - { - 'name': 'InCJK_Unified_Ideographs_Extension_C', - 'astral': '\uD869[\uDF00-\uDFFF]|[\uD86A-\uD86C][\uDC00-\uDFFF]|\uD86D[\uDC00-\uDF3F]' - }, - { - 'name': 'InCJK_Unified_Ideographs_Extension_D', - 'astral': '\uD86D[\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1F]' - }, - { - 'name': 'InCJK_Unified_Ideographs_Extension_E', - 'astral': '\uD86E[\uDC20-\uDFFF]|[\uD86F-\uD872][\uDC00-\uDFFF]|\uD873[\uDC00-\uDEAF]' - }, - { - 'name': 'InCJK_Unified_Ideographs_Extension_F', - 'astral': '\uD873[\uDEB0-\uDFFF]|[\uD874-\uD879][\uDC00-\uDFFF]|\uD87A[\uDC00-\uDFEF]' - }, - { - 'name': 'InCarian', - 'astral': '\uD800[\uDEA0-\uDEDF]' - }, - { - 'name': 'InCaucasian_Albanian', - 'astral': '\uD801[\uDD30-\uDD6F]' - }, - { - 'name': 'InChakma', - 'astral': '\uD804[\uDD00-\uDD4F]' - }, - { - 'name': 'InCham', - 'bmp': '\uAA00-\uAA5F' - }, - { - 'name': 'InCherokee', - 'bmp': '\u13A0-\u13FF' - }, - { - 'name': 'InCherokee_Supplement', - 'bmp': '\uAB70-\uABBF' - }, - { - 'name': 'InChess_Symbols', - 'astral': '\uD83E[\uDE00-\uDE6F]' - }, - { - 'name': 'InCombining_Diacritical_Marks', - 'bmp': '\u0300-\u036F' - }, - { - 'name': 'InCombining_Diacritical_Marks_Extended', - 'bmp': '\u1AB0-\u1AFF' - }, - { - 'name': 'InCombining_Diacritical_Marks_For_Symbols', - 'bmp': '\u20D0-\u20FF' - }, - { - 'name': 'InCombining_Diacritical_Marks_Supplement', - 'bmp': '\u1DC0-\u1DFF' - }, - { - 'name': 'InCombining_Half_Marks', - 'bmp': '\uFE20-\uFE2F' - }, - { - 'name': 'InCommon_Indic_Number_Forms', - 'bmp': '\uA830-\uA83F' - }, - { - 'name': 'InControl_Pictures', - 'bmp': '\u2400-\u243F' - }, - { - 'name': 'InCoptic', - 'bmp': '\u2C80-\u2CFF' - }, - { - 'name': 'InCoptic_Epact_Numbers', - 'astral': '\uD800[\uDEE0-\uDEFF]' - }, - { - 'name': 'InCounting_Rod_Numerals', - 'astral': '\uD834[\uDF60-\uDF7F]' - }, - { - 'name': 'InCuneiform', - 'astral': '\uD808[\uDC00-\uDFFF]' - }, - { - 'name': 'InCuneiform_Numbers_And_Punctuation', - 'astral': '\uD809[\uDC00-\uDC7F]' - }, - { - 'name': 'InCurrency_Symbols', - 'bmp': '\u20A0-\u20CF' - }, - { - 'name': 'InCypriot_Syllabary', - 'astral': '\uD802[\uDC00-\uDC3F]' - }, - { - 'name': 'InCyrillic', - 'bmp': '\u0400-\u04FF' - }, - { - 'name': 'InCyrillic_Extended_A', - 'bmp': '\u2DE0-\u2DFF' - }, - { - 'name': 'InCyrillic_Extended_B', - 'bmp': '\uA640-\uA69F' - }, - { - 'name': 'InCyrillic_Extended_C', - 'bmp': '\u1C80-\u1C8F' - }, - { - 'name': 'InCyrillic_Supplement', - 'bmp': '\u0500-\u052F' - }, - { - 'name': 'InDeseret', - 'astral': '\uD801[\uDC00-\uDC4F]' - }, - { - 'name': 'InDevanagari', - 'bmp': '\u0900-\u097F' - }, - { - 'name': 'InDevanagari_Extended', - 'bmp': '\uA8E0-\uA8FF' - }, - { - 'name': 'InDingbats', - 'bmp': '\u2700-\u27BF' - }, - { - 'name': 'InDogra', - 'astral': '\uD806[\uDC00-\uDC4F]' - }, - { - 'name': 'InDomino_Tiles', - 'astral': '\uD83C[\uDC30-\uDC9F]' - }, - { - 'name': 'InDuployan', - 'astral': '\uD82F[\uDC00-\uDC9F]' - }, - { - 'name': 'InEarly_Dynastic_Cuneiform', - 'astral': '\uD809[\uDC80-\uDD4F]' - }, - { - 'name': 'InEgyptian_Hieroglyphs', - 'astral': '\uD80C[\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F]' - }, - { - 'name': 'InElbasan', - 'astral': '\uD801[\uDD00-\uDD2F]' - }, - { - 'name': 'InEmoticons', - 'astral': '\uD83D[\uDE00-\uDE4F]' - }, - { - 'name': 'InEnclosed_Alphanumeric_Supplement', - 'astral': '\uD83C[\uDD00-\uDDFF]' - }, - { - 'name': 'InEnclosed_Alphanumerics', - 'bmp': '\u2460-\u24FF' - }, - { - 'name': 'InEnclosed_CJK_Letters_And_Months', - 'bmp': '\u3200-\u32FF' - }, - { - 'name': 'InEnclosed_Ideographic_Supplement', - 'astral': '\uD83C[\uDE00-\uDEFF]' - }, - { - 'name': 'InEthiopic', - 'bmp': '\u1200-\u137F' - }, - { - 'name': 'InEthiopic_Extended', - 'bmp': '\u2D80-\u2DDF' - }, - { - 'name': 'InEthiopic_Extended_A', - 'bmp': '\uAB00-\uAB2F' - }, - { - 'name': 'InEthiopic_Supplement', - 'bmp': '\u1380-\u139F' - }, - { - 'name': 'InGeneral_Punctuation', - 'bmp': '\u2000-\u206F' - }, - { - 'name': 'InGeometric_Shapes', - 'bmp': '\u25A0-\u25FF' - }, - { - 'name': 'InGeometric_Shapes_Extended', - 'astral': '\uD83D[\uDF80-\uDFFF]' - }, - { - 'name': 'InGeorgian', - 'bmp': '\u10A0-\u10FF' - }, - { - 'name': 'InGeorgian_Extended', - 'bmp': '\u1C90-\u1CBF' - }, - { - 'name': 'InGeorgian_Supplement', - 'bmp': '\u2D00-\u2D2F' - }, - { - 'name': 'InGlagolitic', - 'bmp': '\u2C00-\u2C5F' - }, - { - 'name': 'InGlagolitic_Supplement', - 'astral': '\uD838[\uDC00-\uDC2F]' - }, - { - 'name': 'InGothic', - 'astral': '\uD800[\uDF30-\uDF4F]' - }, - { - 'name': 'InGrantha', - 'astral': '\uD804[\uDF00-\uDF7F]' - }, - { - 'name': 'InGreek_And_Coptic', - 'bmp': '\u0370-\u03FF' - }, - { - 'name': 'InGreek_Extended', - 'bmp': '\u1F00-\u1FFF' - }, - { - 'name': 'InGujarati', - 'bmp': '\u0A80-\u0AFF' - }, - { - 'name': 'InGunjala_Gondi', - 'astral': '\uD807[\uDD60-\uDDAF]' - }, - { - 'name': 'InGurmukhi', - 'bmp': '\u0A00-\u0A7F' - }, - { - 'name': 'InHalfwidth_And_Fullwidth_Forms', - 'bmp': '\uFF00-\uFFEF' - }, - { - 'name': 'InHangul_Compatibility_Jamo', - 'bmp': '\u3130-\u318F' - }, - { - 'name': 'InHangul_Jamo', - 'bmp': '\u1100-\u11FF' - }, - { - 'name': 'InHangul_Jamo_Extended_A', - 'bmp': '\uA960-\uA97F' - }, - { - 'name': 'InHangul_Jamo_Extended_B', - 'bmp': '\uD7B0-\uD7FF' - }, - { - 'name': 'InHangul_Syllables', - 'bmp': '\uAC00-\uD7AF' - }, - { - 'name': 'InHanifi_Rohingya', - 'astral': '\uD803[\uDD00-\uDD3F]' - }, - { - 'name': 'InHanunoo', - 'bmp': '\u1720-\u173F' - }, - { - 'name': 'InHatran', - 'astral': '\uD802[\uDCE0-\uDCFF]' - }, - { - 'name': 'InHebrew', - 'bmp': '\u0590-\u05FF' - }, - { - 'name': 'InHigh_Private_Use_Surrogates', - 'bmp': '\uDB80-\uDBFF' - }, - { - 'name': 'InHigh_Surrogates', - 'bmp': '\uD800-\uDB7F' - }, - { - 'name': 'InHiragana', - 'bmp': '\u3040-\u309F' - }, - { - 'name': 'InIPA_Extensions', - 'bmp': '\u0250-\u02AF' - }, - { - 'name': 'InIdeographic_Description_Characters', - 'bmp': '\u2FF0-\u2FFF' - }, - { - 'name': 'InIdeographic_Symbols_And_Punctuation', - 'astral': '\uD81B[\uDFE0-\uDFFF]' - }, - { - 'name': 'InImperial_Aramaic', - 'astral': '\uD802[\uDC40-\uDC5F]' - }, - { - 'name': 'InIndic_Siyaq_Numbers', - 'astral': '\uD83B[\uDC70-\uDCBF]' - }, - { - 'name': 'InInscriptional_Pahlavi', - 'astral': '\uD802[\uDF60-\uDF7F]' - }, - { - 'name': 'InInscriptional_Parthian', - 'astral': '\uD802[\uDF40-\uDF5F]' - }, - { - 'name': 'InJavanese', - 'bmp': '\uA980-\uA9DF' - }, - { - 'name': 'InKaithi', - 'astral': '\uD804[\uDC80-\uDCCF]' - }, - { - 'name': 'InKana_Extended_A', - 'astral': '\uD82C[\uDD00-\uDD2F]' - }, - { - 'name': 'InKana_Supplement', - 'astral': '\uD82C[\uDC00-\uDCFF]' - }, - { - 'name': 'InKanbun', - 'bmp': '\u3190-\u319F' - }, - { - 'name': 'InKangxi_Radicals', - 'bmp': '\u2F00-\u2FDF' - }, - { - 'name': 'InKannada', - 'bmp': '\u0C80-\u0CFF' - }, - { - 'name': 'InKatakana', - 'bmp': '\u30A0-\u30FF' - }, - { - 'name': 'InKatakana_Phonetic_Extensions', - 'bmp': '\u31F0-\u31FF' - }, - { - 'name': 'InKayah_Li', - 'bmp': '\uA900-\uA92F' - }, - { - 'name': 'InKharoshthi', - 'astral': '\uD802[\uDE00-\uDE5F]' - }, - { - 'name': 'InKhmer', - 'bmp': '\u1780-\u17FF' - }, - { - 'name': 'InKhmer_Symbols', - 'bmp': '\u19E0-\u19FF' - }, - { - 'name': 'InKhojki', - 'astral': '\uD804[\uDE00-\uDE4F]' - }, - { - 'name': 'InKhudawadi', - 'astral': '\uD804[\uDEB0-\uDEFF]' - }, - { - 'name': 'InLao', - 'bmp': '\u0E80-\u0EFF' - }, - { - 'name': 'InLatin_1_Supplement', - 'bmp': '\x80-\xFF' - }, - { - 'name': 'InLatin_Extended_A', - 'bmp': '\u0100-\u017F' - }, - { - 'name': 'InLatin_Extended_Additional', - 'bmp': '\u1E00-\u1EFF' - }, - { - 'name': 'InLatin_Extended_B', - 'bmp': '\u0180-\u024F' - }, - { - 'name': 'InLatin_Extended_C', - 'bmp': '\u2C60-\u2C7F' - }, - { - 'name': 'InLatin_Extended_D', - 'bmp': '\uA720-\uA7FF' - }, - { - 'name': 'InLatin_Extended_E', - 'bmp': '\uAB30-\uAB6F' - }, - { - 'name': 'InLepcha', - 'bmp': '\u1C00-\u1C4F' - }, - { - 'name': 'InLetterlike_Symbols', - 'bmp': '\u2100-\u214F' - }, - { - 'name': 'InLimbu', - 'bmp': '\u1900-\u194F' - }, - { - 'name': 'InLinear_A', - 'astral': '\uD801[\uDE00-\uDF7F]' - }, - { - 'name': 'InLinear_B_Ideograms', - 'astral': '\uD800[\uDC80-\uDCFF]' - }, - { - 'name': 'InLinear_B_Syllabary', - 'astral': '\uD800[\uDC00-\uDC7F]' - }, - { - 'name': 'InLisu', - 'bmp': '\uA4D0-\uA4FF' - }, - { - 'name': 'InLow_Surrogates', - 'bmp': '\uDC00-\uDFFF' - }, - { - 'name': 'InLycian', - 'astral': '\uD800[\uDE80-\uDE9F]' - }, - { - 'name': 'InLydian', - 'astral': '\uD802[\uDD20-\uDD3F]' - }, - { - 'name': 'InMahajani', - 'astral': '\uD804[\uDD50-\uDD7F]' - }, - { - 'name': 'InMahjong_Tiles', - 'astral': '\uD83C[\uDC00-\uDC2F]' - }, - { - 'name': 'InMakasar', - 'astral': '\uD807[\uDEE0-\uDEFF]' - }, - { - 'name': 'InMalayalam', - 'bmp': '\u0D00-\u0D7F' - }, - { - 'name': 'InMandaic', - 'bmp': '\u0840-\u085F' - }, - { - 'name': 'InManichaean', - 'astral': '\uD802[\uDEC0-\uDEFF]' - }, - { - 'name': 'InMarchen', - 'astral': '\uD807[\uDC70-\uDCBF]' - }, - { - 'name': 'InMasaram_Gondi', - 'astral': '\uD807[\uDD00-\uDD5F]' - }, - { - 'name': 'InMathematical_Alphanumeric_Symbols', - 'astral': '\uD835[\uDC00-\uDFFF]' - }, - { - 'name': 'InMathematical_Operators', - 'bmp': '\u2200-\u22FF' - }, - { - 'name': 'InMayan_Numerals', - 'astral': '\uD834[\uDEE0-\uDEFF]' - }, - { - 'name': 'InMedefaidrin', - 'astral': '\uD81B[\uDE40-\uDE9F]' - }, - { - 'name': 'InMeetei_Mayek', - 'bmp': '\uABC0-\uABFF' - }, - { - 'name': 'InMeetei_Mayek_Extensions', - 'bmp': '\uAAE0-\uAAFF' - }, - { - 'name': 'InMende_Kikakui', - 'astral': '\uD83A[\uDC00-\uDCDF]' - }, - { - 'name': 'InMeroitic_Cursive', - 'astral': '\uD802[\uDDA0-\uDDFF]' - }, - { - 'name': 'InMeroitic_Hieroglyphs', - 'astral': '\uD802[\uDD80-\uDD9F]' - }, - { - 'name': 'InMiao', - 'astral': '\uD81B[\uDF00-\uDF9F]' - }, - { - 'name': 'InMiscellaneous_Mathematical_Symbols_A', - 'bmp': '\u27C0-\u27EF' - }, - { - 'name': 'InMiscellaneous_Mathematical_Symbols_B', - 'bmp': '\u2980-\u29FF' - }, - { - 'name': 'InMiscellaneous_Symbols', - 'bmp': '\u2600-\u26FF' - }, - { - 'name': 'InMiscellaneous_Symbols_And_Arrows', - 'bmp': '\u2B00-\u2BFF' - }, - { - 'name': 'InMiscellaneous_Symbols_And_Pictographs', - 'astral': '\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDDFF]' - }, - { - 'name': 'InMiscellaneous_Technical', - 'bmp': '\u2300-\u23FF' - }, - { - 'name': 'InModi', - 'astral': '\uD805[\uDE00-\uDE5F]' - }, - { - 'name': 'InModifier_Tone_Letters', - 'bmp': '\uA700-\uA71F' - }, - { - 'name': 'InMongolian', - 'bmp': '\u1800-\u18AF' - }, - { - 'name': 'InMongolian_Supplement', - 'astral': '\uD805[\uDE60-\uDE7F]' - }, - { - 'name': 'InMro', - 'astral': '\uD81A[\uDE40-\uDE6F]' - }, - { - 'name': 'InMultani', - 'astral': '\uD804[\uDE80-\uDEAF]' - }, - { - 'name': 'InMusical_Symbols', - 'astral': '\uD834[\uDD00-\uDDFF]' - }, - { - 'name': 'InMyanmar', - 'bmp': '\u1000-\u109F' - }, - { - 'name': 'InMyanmar_Extended_A', - 'bmp': '\uAA60-\uAA7F' - }, - { - 'name': 'InMyanmar_Extended_B', - 'bmp': '\uA9E0-\uA9FF' - }, - { - 'name': 'InNKo', - 'bmp': '\u07C0-\u07FF' - }, - { - 'name': 'InNabataean', - 'astral': '\uD802[\uDC80-\uDCAF]' - }, - { - 'name': 'InNew_Tai_Lue', - 'bmp': '\u1980-\u19DF' - }, - { - 'name': 'InNewa', - 'astral': '\uD805[\uDC00-\uDC7F]' - }, - { - 'name': 'InNumber_Forms', - 'bmp': '\u2150-\u218F' - }, - { - 'name': 'InNushu', - 'astral': '\uD82C[\uDD70-\uDEFF]' - }, - { - 'name': 'InOgham', - 'bmp': '\u1680-\u169F' - }, - { - 'name': 'InOl_Chiki', - 'bmp': '\u1C50-\u1C7F' - }, - { - 'name': 'InOld_Hungarian', - 'astral': '\uD803[\uDC80-\uDCFF]' - }, - { - 'name': 'InOld_Italic', - 'astral': '\uD800[\uDF00-\uDF2F]' - }, - { - 'name': 'InOld_North_Arabian', - 'astral': '\uD802[\uDE80-\uDE9F]' - }, - { - 'name': 'InOld_Permic', - 'astral': '\uD800[\uDF50-\uDF7F]' - }, - { - 'name': 'InOld_Persian', - 'astral': '\uD800[\uDFA0-\uDFDF]' - }, - { - 'name': 'InOld_Sogdian', - 'astral': '\uD803[\uDF00-\uDF2F]' - }, - { - 'name': 'InOld_South_Arabian', - 'astral': '\uD802[\uDE60-\uDE7F]' - }, - { - 'name': 'InOld_Turkic', - 'astral': '\uD803[\uDC00-\uDC4F]' - }, - { - 'name': 'InOptical_Character_Recognition', - 'bmp': '\u2440-\u245F' - }, - { - 'name': 'InOriya', - 'bmp': '\u0B00-\u0B7F' - }, - { - 'name': 'InOrnamental_Dingbats', - 'astral': '\uD83D[\uDE50-\uDE7F]' - }, - { - 'name': 'InOsage', - 'astral': '\uD801[\uDCB0-\uDCFF]' - }, - { - 'name': 'InOsmanya', - 'astral': '\uD801[\uDC80-\uDCAF]' - }, - { - 'name': 'InPahawh_Hmong', - 'astral': '\uD81A[\uDF00-\uDF8F]' - }, - { - 'name': 'InPalmyrene', - 'astral': '\uD802[\uDC60-\uDC7F]' - }, - { - 'name': 'InPau_Cin_Hau', - 'astral': '\uD806[\uDEC0-\uDEFF]' - }, - { - 'name': 'InPhags_Pa', - 'bmp': '\uA840-\uA87F' - }, - { - 'name': 'InPhaistos_Disc', - 'astral': '\uD800[\uDDD0-\uDDFF]' - }, - { - 'name': 'InPhoenician', - 'astral': '\uD802[\uDD00-\uDD1F]' - }, - { - 'name': 'InPhonetic_Extensions', - 'bmp': '\u1D00-\u1D7F' - }, - { - 'name': 'InPhonetic_Extensions_Supplement', - 'bmp': '\u1D80-\u1DBF' - }, - { - 'name': 'InPlaying_Cards', - 'astral': '\uD83C[\uDCA0-\uDCFF]' - }, - { - 'name': 'InPrivate_Use_Area', - 'bmp': '\uE000-\uF8FF' - }, - { - 'name': 'InPsalter_Pahlavi', - 'astral': '\uD802[\uDF80-\uDFAF]' - }, - { - 'name': 'InRejang', - 'bmp': '\uA930-\uA95F' - }, - { - 'name': 'InRumi_Numeral_Symbols', - 'astral': '\uD803[\uDE60-\uDE7F]' - }, - { - 'name': 'InRunic', - 'bmp': '\u16A0-\u16FF' - }, - { - 'name': 'InSamaritan', - 'bmp': '\u0800-\u083F' - }, - { - 'name': 'InSaurashtra', - 'bmp': '\uA880-\uA8DF' - }, - { - 'name': 'InSharada', - 'astral': '\uD804[\uDD80-\uDDDF]' - }, - { - 'name': 'InShavian', - 'astral': '\uD801[\uDC50-\uDC7F]' - }, - { - 'name': 'InShorthand_Format_Controls', - 'astral': '\uD82F[\uDCA0-\uDCAF]' - }, - { - 'name': 'InSiddham', - 'astral': '\uD805[\uDD80-\uDDFF]' - }, - { - 'name': 'InSinhala', - 'bmp': '\u0D80-\u0DFF' - }, - { - 'name': 'InSinhala_Archaic_Numbers', - 'astral': '\uD804[\uDDE0-\uDDFF]' - }, - { - 'name': 'InSmall_Form_Variants', - 'bmp': '\uFE50-\uFE6F' - }, - { - 'name': 'InSogdian', - 'astral': '\uD803[\uDF30-\uDF6F]' - }, - { - 'name': 'InSora_Sompeng', - 'astral': '\uD804[\uDCD0-\uDCFF]' - }, - { - 'name': 'InSoyombo', - 'astral': '\uD806[\uDE50-\uDEAF]' - }, - { - 'name': 'InSpacing_Modifier_Letters', - 'bmp': '\u02B0-\u02FF' - }, - { - 'name': 'InSpecials', - 'bmp': '\uFFF0-\uFFFF' - }, - { - 'name': 'InSundanese', - 'bmp': '\u1B80-\u1BBF' - }, - { - 'name': 'InSundanese_Supplement', - 'bmp': '\u1CC0-\u1CCF' - }, - { - 'name': 'InSuperscripts_And_Subscripts', - 'bmp': '\u2070-\u209F' - }, - { - 'name': 'InSupplemental_Arrows_A', - 'bmp': '\u27F0-\u27FF' - }, - { - 'name': 'InSupplemental_Arrows_B', - 'bmp': '\u2900-\u297F' - }, - { - 'name': 'InSupplemental_Arrows_C', - 'astral': '\uD83E[\uDC00-\uDCFF]' - }, - { - 'name': 'InSupplemental_Mathematical_Operators', - 'bmp': '\u2A00-\u2AFF' - }, - { - 'name': 'InSupplemental_Punctuation', - 'bmp': '\u2E00-\u2E7F' - }, - { - 'name': 'InSupplemental_Symbols_And_Pictographs', - 'astral': '\uD83E[\uDD00-\uDDFF]' - }, - { - 'name': 'InSupplementary_Private_Use_Area_A', - 'astral': '[\uDB80-\uDBBF][\uDC00-\uDFFF]' - }, - { - 'name': 'InSupplementary_Private_Use_Area_B', - 'astral': '[\uDBC0-\uDBFF][\uDC00-\uDFFF]' - }, - { - 'name': 'InSutton_SignWriting', - 'astral': '\uD836[\uDC00-\uDEAF]' - }, - { - 'name': 'InSyloti_Nagri', - 'bmp': '\uA800-\uA82F' - }, - { - 'name': 'InSyriac', - 'bmp': '\u0700-\u074F' - }, - { - 'name': 'InSyriac_Supplement', - 'bmp': '\u0860-\u086F' - }, - { - 'name': 'InTagalog', - 'bmp': '\u1700-\u171F' - }, - { - 'name': 'InTagbanwa', - 'bmp': '\u1760-\u177F' - }, - { - 'name': 'InTags', - 'astral': '\uDB40[\uDC00-\uDC7F]' - }, - { - 'name': 'InTai_Le', - 'bmp': '\u1950-\u197F' - }, - { - 'name': 'InTai_Tham', - 'bmp': '\u1A20-\u1AAF' - }, - { - 'name': 'InTai_Viet', - 'bmp': '\uAA80-\uAADF' - }, - { - 'name': 'InTai_Xuan_Jing_Symbols', - 'astral': '\uD834[\uDF00-\uDF5F]' - }, - { - 'name': 'InTakri', - 'astral': '\uD805[\uDE80-\uDECF]' - }, - { - 'name': 'InTamil', - 'bmp': '\u0B80-\u0BFF' - }, - { - 'name': 'InTangut', - 'astral': '[\uD81C-\uD821][\uDC00-\uDFFF]' - }, - { - 'name': 'InTangut_Components', - 'astral': '\uD822[\uDC00-\uDEFF]' - }, - { - 'name': 'InTelugu', - 'bmp': '\u0C00-\u0C7F' - }, - { - 'name': 'InThaana', - 'bmp': '\u0780-\u07BF' - }, - { - 'name': 'InThai', - 'bmp': '\u0E00-\u0E7F' - }, - { - 'name': 'InTibetan', - 'bmp': '\u0F00-\u0FFF' - }, - { - 'name': 'InTifinagh', - 'bmp': '\u2D30-\u2D7F' - }, - { - 'name': 'InTirhuta', - 'astral': '\uD805[\uDC80-\uDCDF]' - }, - { - 'name': 'InTransport_And_Map_Symbols', - 'astral': '\uD83D[\uDE80-\uDEFF]' - }, - { - 'name': 'InUgaritic', - 'astral': '\uD800[\uDF80-\uDF9F]' - }, - { - 'name': 'InUnified_Canadian_Aboriginal_Syllabics', - 'bmp': '\u1400-\u167F' - }, - { - 'name': 'InUnified_Canadian_Aboriginal_Syllabics_Extended', - 'bmp': '\u18B0-\u18FF' - }, - { - 'name': 'InVai', - 'bmp': '\uA500-\uA63F' - }, - { - 'name': 'InVariation_Selectors', - 'bmp': '\uFE00-\uFE0F' - }, - { - 'name': 'InVariation_Selectors_Supplement', - 'astral': '\uDB40[\uDD00-\uDDEF]' - }, - { - 'name': 'InVedic_Extensions', - 'bmp': '\u1CD0-\u1CFF' - }, - { - 'name': 'InVertical_Forms', - 'bmp': '\uFE10-\uFE1F' - }, - { - 'name': 'InWarang_Citi', - 'astral': '\uD806[\uDCA0-\uDCFF]' - }, - { - 'name': 'InYi_Radicals', - 'bmp': '\uA490-\uA4CF' - }, - { - 'name': 'InYi_Syllables', - 'bmp': '\uA000-\uA48F' - }, - { - 'name': 'InYijing_Hexagram_Symbols', - 'bmp': '\u4DC0-\u4DFF' - }, - { - 'name': 'InZanabazar_Square', - 'astral': '\uD806[\uDE00-\uDE4F]' - }, - { - 'name': 'Inundefined', - 'astral': '\uD803[\uDE80-\uDEBF\uDFB0-\uDFFF]|\uD806[\uDD00-\uDD5F\uDDA0-\uDDFF]|\uD807[\uDFB0-\uDFFF]|\uD80D[\uDC30-\uDC3F]|\uD822[\uDF00-\uDFFF]|\uD823[\uDC00-\uDD8F]|\uD82C[\uDD30-\uDD6F]|\uD838[\uDD00-\uDD4F\uDEC0-\uDEFF]|\uD83B[\uDD00-\uDD4F]|\uD83E[\uDE70-\uDFFF]|[\uD880-\uD883][\uDC00-\uDFFF]|\uD884[\uDC00-\uDF4F]' - } -]; diff --git a/tools/scripts/block-regex.js b/tools/scripts/block-regex.js deleted file mode 100644 index e1303821..00000000 --- a/tools/scripts/block-regex.js +++ /dev/null @@ -1,17 +0,0 @@ -const { - assemble, - writeFile, - unicodeVersion -} = require('./utils.js'); - -const blocks = require(`${unicodeVersion}`).Block; - -const result = []; -for (const block of blocks) { - const codePoints = require(`${unicodeVersion}/Block/${block}/code-points.js`); - result.push(assemble({ - name: `In${block}`, - codePoints - })); -} -writeFile('blocks.js', result); diff --git a/types/index.d.ts b/types/index.d.ts index dc9033dc..89a30a9b 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -24,7 +24,7 @@ export = XRegExp; * * Additional XRegExp flags: * - `n` - explicit capture - * - `s` - dot matches all (aka singleline) + * - `s` - dot matches all (aka singleline) - works even when not natively supported * - `x` - free-spacing and line comments (aka extended) * - `A` - astral (requires the Unicode Base addon) * @@ -123,13 +123,15 @@ declare namespace XRegExp { /** * Replacement functions are invoked with three or more arguments: - * - {string} substring - The matched substring (corresponds to `$&` above). Named backreferences are accessible as - * properties of this first argument if the `namespacing` feature is off. - * - {string} args[1..n] - arguments, one for each backreference (corresponding to `$1`, `$2`, etc. above). - * - {number} args[n+1] - The zero-based index of the match within the total search string. - * - {string} args[n+2] - The total string being searched. - * - {XRegExp.NamedGroups} args[n+3] - If the `namespacing` feature is turned on, the last parameter is the groups object. If the - * `namespacing` feature is off, then this argument is not present. + * - {string} args[0] - The matched substring (corresponds to `$&` above). If the `namespacing` feature + * is off, named backreferences are accessible as properties of this argument. + * - {string} args[1..n] - One argument for each backreference (corresponding to `$1`, `$2`, etc. above). + * If the regex has no capturing groups, no arguments appear in this position. + * - {number} args[n+1] - The zero-based index of the match within the entire search string. + * - {string} args[n+2] - The total string being searched. + * - {XRegExp.NamedGroups} args[n+3] - If the the search pattern is a regex with named capturing groups, the last + * argument is the groups object. Its keys are the backreference names and its values are the + * backreference values. If the `namespacing` feature is off, this argument is not present. */ type ReplacementFunction = ((substring: MatchSubString, ...args: Array) => string); @@ -139,19 +141,21 @@ declare namespace XRegExp { * - `$&`, `$0` - Inserts the matched substring. * - ``$` `` - Inserts the string that precedes the matched substring (left context). * - `$'` - Inserts the string that follows the matched substring (right context). - * - `$n`, `$nn` - Where n/nn are digits referencing an existent capturing group, inserts + * - `$n`, `$nn` - Where n/nn are digits referencing an existing capturing group, inserts * backreference n/nn. - * - `${n}`, `$` - Where n is a name or any number of digits that reference an existent capturing + * - `$`, `${n}` - Where n is a name or any number of digits that reference an existing capturing * group, inserts backreference n. * * Replacement functions are invoked with three or more arguments: - * - {string} substring - The matched substring (corresponds to `$&` above). Named backreferences are accessible as - * properties of this first argument if the `namespacing` feature is off. - * - {string} args[1..n] - arguments, one for each backreference (corresponding to `$1`, `$2`, etc. above). - * - {number} args[n+1] - The zero-based index of the match within the total search string. - * - {string} args[n+2] - The total string being searched. - * - {XRegExp.NamedGroups} args[n+3] - If the `namespacing` feature is turned on, the last parameter is the groups object. If the - * `namespacing` feature is off, then this argument is not present. + * - {string} args[0] - The matched substring (corresponds to `$&` above). If the `namespacing` feature + * is off, named backreferences are accessible as properties of this argument. + * - {string} args[1..n] - One argument for each backreference (corresponding to `$1`, `$2`, etc. above). + * If the regex has no capturing groups, no arguments appear in this position. + * - {number} args[n+1] - The zero-based index of the match within the entire search string. + * - {string} args[n+2] - The total string being searched. + * - {XRegExp.NamedGroups} args[n+3] - If the the search pattern is a regex with named capturing groups, the last + * argument is the groups object. Its keys are the backreference names and its values are the + * backreference values. If the `namespacing` feature is off, this argument is not present. */ type ReplacementValue = string | ReplacementFunction; @@ -286,7 +290,7 @@ declare namespace XRegExp { } /** - * Replacement details used in and array for replacing multiple items. + * Replacement details used in an array for replacing multiple items. */ interface ReplacementDetail { /** @@ -493,6 +497,9 @@ declare namespace XRegExp { * character classes and alternation, and should use surrogate pairs to represent astral code * points. `inverseOf` can be used to avoid duplicating character data if a Unicode token is * defined as the exact inverse of another token. + * @param typePrefix - Enables optionally using this type as a prefix for all of the + * provided Unicode tokens, e.g. if given `'Type'`, then `\p{TokenName}` can also be written + * as `\p{Type=TokenName}`. * @example * * // Basic use @@ -503,7 +510,7 @@ declare namespace XRegExp { * }]); * XRegExp('\\p{XDigit}:\\p{Hexadecimal}+').test('0:3D'); // -> true */ - function addUnicodeData(data: UnicodeCharacterRange[]): void; + function addUnicodeData(data: UnicodeCharacterRange[], typePrefix?: string): void; /** * Builds regexes using named subpatterns, for readability and pattern reuse. Backreferences in @@ -527,7 +534,7 @@ declare namespace XRegExp { * minutes: /^[0-5][0-9]$/ * }); * time.test('10:59'); // -> true - * XRegExp.exec('10:59', time).minutes; // -> '59' + * XRegExp.exec('10:59', time).groups.minutes; // -> '59' */ function build(pattern: string, subs: Record, flags?: string): RegExp; @@ -540,7 +547,8 @@ declare namespace XRegExp { * @returns Cached XRegExp object. * @example * - * while (match = XRegExp.cache('.', 'gs').exec(str)) { + * let match; + * while (match = XRegExp.cache('.', 'gs').exec('abc')) { * // The regex is compiled once only * } */ @@ -548,42 +556,43 @@ declare namespace XRegExp { /** * Escapes any regular expression metacharacters, for use when matching literal strings. The result - * can safely be used at any point within a regex that uses any flags. + * can safely be used at any position within a regex that uses any flags. * * @param str - String to escape. * @returns String with regex metacharacters escaped. * @example * * XRegExp.escape('Escaped? <.>'); - * // -> 'Escaped\?\ <\.>' + * // -> 'Escaped\?\u0020<\.>' */ function escape(str: string): string; /** * Executes a regex search in a specified string. Returns a match array or `null`. If the provided - * regex uses named capture, named capture groups properties are included on the match array. - * Optional `pos` and `sticky` arguments specify the search start position, and whether the match - * must start at the specified position only. The `lastIndex` property of the provided regex is not - * used, but is updated for compatibility. Also fixes browser bugs compared to the native - * `RegExp.prototype.exec` and can be used reliably cross-browser. + * regex uses named capture, named capture properties are included on the match array's `groups` + * property. Optional `pos` and `sticky` arguments specify the search start position, and whether + * the match must start at the specified position only. The `lastIndex` property of the provided + * regex is not used, but is updated for compatibility. Also fixes browser bugs compared to the + * native `RegExp.prototype.exec` and can be used reliably cross-browser. * * @param str - String to search. * @param regex - Regex to search with. * @param pos - Zero-based index at which to start the search. * @param sticky - Whether the match must start at the specified position * only. The string `'sticky'` is accepted as an alternative to `true`. - * @returns Match array with named capture groups properties, or `null`. + * @returns Match array with named capture properties on the `groups` object, or `null`. If + * the `namespacing` feature is off, named capture properties are directly on the match array. * @example * - * // Basic use, with named capture groups + * // Basic use, with named capturing group * let match = XRegExp.exec('U+2620', XRegExp('U\\+(?[0-9A-F]{4})')); - * match.hex; // -> '2620' + * match.groups.hex; // -> '2620' * * // With pos and sticky, in a loop * let pos = 2, result = [], match; * while (match = XRegExp.exec('<1><2><3><4>5<6>', /<(\d)>/, pos, 'sticky')) { * result.push(match[1]); - * pos = match.index + match[0].length; + * pos = match.groups.index + match[0].length; * } * // result -> ['2', '3', '4'] */ @@ -724,8 +733,8 @@ declare namespace XRegExp { * // -> ['2', '4', '56'] * * // Passing forward and returning specific backreferences - * html = 'XRegExp\ - * Google'; + * const html = `XRegExp + * Google`; * XRegExp.matchChain(html, [ * {regex: //i, backref: 1}, * {regex: XRegExp('(?i)^https?://(?[^/?#]+)'), backref: 'domain'} @@ -742,7 +751,7 @@ declare namespace XRegExp { * @param str - String to search. * @param left - Left delimiter as an XRegExp pattern. * @param right - Right delimiter as an XRegExp pattern. - * @param flags - Any native or XRegExp flags, used for the left and right delimiters. + * @param flags - Any combination of XRegExp flags, used for the left and right delimiters. * @param options - Lets you specify `valueNames` and `escapeChar` options. * @returns Array of matches, or an empty array. * @example @@ -791,15 +800,15 @@ declare namespace XRegExp { * Returns a new string with one or all matches of a pattern replaced. The pattern can be a string * or regex, and the replacement can be a string or a function to be called for each match. To * perform a global search and replace, use the optional `scope` argument or include flag g if using - * a regex. Replacement strings can use `${n}` or `$` for named and numbered backreferences. - * Replacement functions can use named backreferences via `arguments[0].name`. Also fixes browser - * bugs compared to the native `String.prototype.replace` and can be used reliably cross-browser. + * a regex. Replacement strings can use `$` or `${n}` for named and numbered backreferences. + * Replacement functions can use named backreferences via the last argument. Also fixes browser bugs + * compared to the native `String.prototype.replace` and can be used reliably cross-browser. * * @param str - String to search. * @param search - Search pattern to be replaced. * @param replacement - Replacement string or a function invoked to create it. - * @param scope - Use 'one' to replace the first match only, or 'all'. If not explicitly specified and using a regex with - * flag g, `scope` is 'all'. + * @param scope - Use 'one' to replace the first match only, or 'all'. Defaults to 'one'. + * Defaults to 'all' if using a regex with flag g. * @returns New string with one or all matches replaced. * @example * @@ -809,7 +818,10 @@ declare namespace XRegExp { * // -> 'Smith, John' * * // Regex search, using named backreferences in replacement function - * XRegExp.replace('John Smith', name, (match) => `${match.last as string}, ${match.first as string}`); + * XRegExp.replace('John Smith', name, (...args) => { + * const groups = args[args.length - 1]; + * return `${groups.last as string}, ${groups.first as string}`; + * }); * // -> 'Smith, John' * * // String search, with replace-all @@ -823,8 +835,8 @@ declare namespace XRegExp { * array of replacement details. Later replacements operate on the output of earlier replacements. * Replacement details are accepted as an array with a regex or string to search for, the * replacement string or function, and an optional scope of 'one' or 'all'. Uses the XRegExp - * replacement text syntax, which supports named backreference properties via `${name}` or - * `$`. + * replacement text syntax, which supports named backreference properties via `$` or + * `${name}`. * * @param str - String to search. * @param replacements - Array of replacement detail arrays. @@ -832,12 +844,12 @@ declare namespace XRegExp { * @example * * str = XRegExp.replaceEach(str, [ - * [XRegExp('(?a)'), 'z${name}'], + * [XRegExp('(?a)'), 'z$'], * [/b/gi, 'y'], * [/c/g, 'x', 'one'], // scope 'one' overrides /g * [/d/, 'w', 'all'], // scope 'all' overrides lack of /g * ['e', 'v', 'all'], // scope 'all' allows replace-all for strings - * [/f/g, ($0) => $0.toUpperCase()] + * [/f/g, (match) => match.toUpperCase()] * ]); */ function replaceEach(str: string, replacements: ReplacementDetail[]): string; @@ -883,14 +895,17 @@ declare namespace XRegExp { * @returns Handler for template literals that construct regexes with XRegExp syntax. * @example * - * const h12 = /1[0-2]|0?[1-9]/; - * const h24 = /2[0-3]|[01][0-9]/; - * const hours = XRegExp.tag('x')`${h12} : | ${h24}`; - * const minutes = /^[0-5][0-9]$/; - * // Note that explicitly naming the 'minutes' group is required for named backreferences - * const time = XRegExp.tag('x')`^ ${hours} (?${minutes}) $`; + * XRegExp.tag()`\b\w+\b`.test('word'); // -> true + * + * const hours = /1[0-2]|0?[1-9]/; + * const minutes = /(?[0-5][0-9])/; + * const time = XRegExp.tag('x')`\b ${hours} : ${minutes} \b`; * time.test('10:59'); // -> true - * XRegExp.exec('10:59', time).minutes; // -> '59' + * XRegExp.exec('10:59', time).groups.minutes; // -> '59' + * + * const backref1 = /(a)\1/; + * const backref2 = /(b)\1/; + * XRegExp.tag()`${backref1}${backref2}`.test('aabb'); // -> true */ function tag(flags?: string | null): (literals: TemplateStringsArray, ...substitutions: any[]) => RegExp; @@ -919,15 +934,15 @@ declare namespace XRegExp { function test(str: string, regex: Pattern, pos?: number, sticky?: boolean | 'sticky'): boolean; /** - * Uninstalls optional features according to the specified options. All optional features start out - * uninstalled, so this is used to undo the actions of `XRegExp.install`. + * Uninstalls optional features according to the specified options. Used to undo the actions of + * `XRegExp.install`. * * @param options - Options object or string. * @example * * // With an options object * XRegExp.uninstall({ - * // Disables support for astral code points in Unicode addons + * // Disables support for astral code points in Unicode addons (unless enabled per regex) * astral: true, * * // Don't add named capture groups to the `groups` property of matches