From dff32fe4df9c1291d156960ed7a476afa3b01a9f Mon Sep 17 00:00:00 2001 From: Joseph Frazier <1212jtraceur@gmail.com> Date: Sat, 9 Jan 2021 03:13:24 -0500 Subject: [PATCH 01/13] Update tests to show API changes --- tests/spec/s-xregexp-methods.js | 80 +-------------------------------- tests/spec/s-xregexp.js | 62 +++++-------------------- 2 files changed, 12 insertions(+), 130 deletions(-) diff --git a/tests/spec/s-xregexp-methods.js b/tests/spec/s-xregexp-methods.js index da72a2c1..f118b4b0 100644 --- a/tests/spec/s-xregexp-methods.js +++ b/tests/spec/s-xregexp-methods.js @@ -1251,84 +1251,8 @@ describe('XRegExp.replace()', function() { expect(function() {XRegExp.replace('test', XRegExp('(?t)', 'g'), ':$:');}).toThrowError(SyntaxError); }); - }); - - describe('explicit numbered backreferences', function() { - - it('should return the numbered backreference', function() { - expect(XRegExp.replace('test', /(.)./g, '${1}')).toBe('ts'); - expect(XRegExp.replace('test', /(.)./g, '$<1>')).toBe('ts'); - - // Backreference to a nonparticipating capturing group - expect(XRegExp.replace('test', /t|(e)/g, '${1}')).toBe('es'); - expect(XRegExp.replace('test', /t|(e)/g, '$<1>')).toBe('es'); - }); - - it('should allow leading zeros', function() { - expect(XRegExp.replace('test', /(.)./g, '${01}')).toBe('ts'); - expect(XRegExp.replace('test', /(.)./g, '$<01>')).toBe('ts'); - - expect(XRegExp.replace('test', /(.)./g, '${001}')).toBe('ts'); - expect(XRegExp.replace('test', /(.)./g, '$<001>')).toBe('ts'); - }); - - it('should return named backreferences by number', function() { - expect(XRegExp.replace('test', XRegExp('(?.).', 'g'), '${1}')).toBe('ts'); - expect(XRegExp.replace('test', XRegExp('(?.).', 'g'), '$<1>')).toBe('ts'); - }); - - it('should separate numbered backreferences from following literal digits', function() { - expect(XRegExp.replace('test', new RegExp('(.).', 'g'), '${1}0')).toBe('t0s0'); - expect(XRegExp.replace('test', new RegExp('(.).', 'g'), '$<1>0')).toBe('t0s0'); - - expect(XRegExp.replace('test', new RegExp('(.).' + '()'.repeat(9), 'g'), '${1}0')).toBe('t0s0'); - expect(XRegExp.replace('test', new RegExp('(.).' + '()'.repeat(9), 'g'), '$<1>0')).toBe('t0s0'); - }); - - it('should throw an exception for backreferences to unknown group numbers', function() { - expect(function() {XRegExp.replace('test', /t/, '${1}');}).toThrowError(SyntaxError); - expect(function() {XRegExp.replace('test', /t/, '$<1>');}).toThrowError(SyntaxError); - - expect(function() {XRegExp.replace('test', /(t)/, '${2}');}).toThrowError(SyntaxError); - expect(function() {XRegExp.replace('test', /(t)/, '$<2>');}).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:'); - - expect(XRegExp.replace('test', /../g, '${00}:')).toBe('te:st:'); - expect(XRegExp.replace('test', /../g, '$<00>:')).toBe('te:st:'); - - expect(XRegExp.replace('test', /../g, '${000}:')).toBe('te:st:'); - expect(XRegExp.replace('test', /../g, '$<000>:')).toBe('te:st:'); - }); - - it('should support backreferences 100 and greater, if the browser does natively', function() { - // IE < 9 doesn't allow backreferences greater than \99 *within* a regex, but - // XRegExp still allows backreferences to groups 100+ within replacement text - try { - // Regex with 1,000 capturing groups. This fails in Firefox 4-6 (but not v3.6 - // or v7+) with `InternalError: regular expression too complex` - var lottaGroups = new RegExp([ - '^(a)\\1', '()'.repeat(8), - '(b)\\10', '()'.repeat(89), - '(c)', '()'.repeat(899), - '(d)$' - ].join('')); - - expect(XRegExp.replace('aabbcd', lottaGroups, '${0} ${01} ${001} ${0001} ${1} ${10} ${100} ${1000}')).toBe('aabbcd a a a a b c d'); - expect(XRegExp.replace('aabbcd', lottaGroups, '$<0> $<01> $<001> $<0001> $<1> $<10> $<100> $<1000>')).toBe('aabbcd a a a a b c d'); - expect(XRegExp.replace('aabbcd', lottaGroups, '$<0> ${01} $<001> ${0001} $<1> ${10} $<100> ${1000}')).toBe('aabbcd a a a a b c d'); - // For comparison... - expect(XRegExp.replace('aabbcd', lottaGroups, '$0 $01 $001 $0001 $1 $10 $100 $1000')).toBe('aabbcd a aabbcd1 aabbcd01 a b b0 b00'); - } catch (err) { - // Keep the assertion count consistent cross-browser - expect(true).toBe(true); - expect(true).toBe(true); - expect(true).toBe(true); - expect(true).toBe(true); - } + it('should not allow leading digits', function() { + expect(function() {XRegExp.replace('test', /(.)./g, '${01}');}).toThrowError(SyntaxError); }); }); diff --git a/tests/spec/s-xregexp.js b/tests/spec/s-xregexp.js index 1051db51..7ae57667 100644 --- a/tests/spec/s-xregexp.js +++ b/tests/spec/s-xregexp.js @@ -393,10 +393,13 @@ 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 characters A-Z, a-z, 0-9, $, _, and 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(function() {XRegExp('(?)');}).not.toThrow(); + expect(function() {XRegExp('(?<Русский>)');}).not.toThrow(); + expect(function() {XRegExp('(?<日本語>)');}).not.toThrow(); }); it('should throw an exception if characters other than A-Z, a-z, 0-9, $, and _ are used in capture names', function() { @@ -404,16 +407,10 @@ describe('XRegExp()', function() { 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() { @@ -488,6 +485,10 @@ describe('XRegExp()', function() { expect(function() {XRegExp('\\k<`>');}).toThrowError(SyntaxError); }); + it('should not allow leading digits', function() { + expect(function() {XRegExp('(.)\\k<01>');}).toThrowError(SyntaxError); + }); + it('should separate backreferences from following literal digits', function() { expect(XRegExp('(?<$1>A1)(2)(3)(4)(5)(6)(7)(8)(9)(B10)\\k<$1>0').test('A123456789B10A10')).toBe(true); expect(XRegExp('(?<$1>A)\\k<$1>2').test('AA2')).toBe(true); @@ -506,49 +507,6 @@ describe('XRegExp()', function() { }); - describe('explicit numbered backreferences', function() { - - it('should match the numbered backreference', function() { - expect(XRegExp('(.)\\k<1>').test('aa')).toBe(true); - expect(XRegExp('(.)\\k<1>').test('ab')).toBe(false); - expect(XRegExp('(.)\\k<1>\\k<1>').test('aaa')).toBe(true); - }); - - it('should allow leading zeros', function() { - expect(XRegExp('(.)\\k<01>').test('aa')).toBe(true); - expect(XRegExp('(.)\\k<001>').test('aa')).toBe(true); - }); - - it('should match named backreferences by number', function() { - expect(XRegExp('(?.)\\k<1>').test('aa')).toBe(true); - expect(XRegExp('(?.)\\k<1>').test('ab')).toBe(false); - expect(XRegExp('(?.)\\k<1>\\k<1>').test('aaa')).toBe(true); - }); - - it('should separate numbered backreferences from following literal digits', function() { - expect(XRegExp('(A1)(2)(3)(4)(5)(6)(7)(8)(9)(B10)\\k<1>0').test('A123456789B10A10')).toBe(true); - expect(XRegExp('(A)\\k<1>2').test('AA2')).toBe(true); - }); - - it('should throw an exception for backreferences to unknown groups', function() { - expect(function() {XRegExp('\\k<1>');}).toThrowError(SyntaxError); - expect(function() {XRegExp('()\\k<2>');}).toThrowError(SyntaxError); - }); - - it('should throw an exception for backreferences to capturing groups not opened to the left', function() { - expect(function() {XRegExp('\\k<1>()');}).toThrowError(SyntaxError); - expect(function() {XRegExp('()\\k<2>()');}).toThrowError(SyntaxError); - expect(function() {XRegExp('(1)(2)(3)(4)(5)(6)(7)(8)(9)(10)\\k<11>(11)');}).toThrowError(SyntaxError); - expect(function() {XRegExp('(\\k<1>)');}).not.toThrow(); - }); - - it('should not allow \\k<0> to refer to the entire match', function() { - expect(function() {XRegExp('\\k<0>');}).toThrowError(SyntaxError); - expect(function() {XRegExp('\\k<00>');}).toThrowError(SyntaxError); - }); - - }); - describe('strict error handling', function() { it('should throw an exception for octals except \\0 not followed by 0-9', function() { From c324a75f4292a81dfca9854498f540149e073dc4 Mon Sep 17 00:00:00 2001 From: Joseph Frazier <1212jtraceur@gmail.com> Date: Sat, 9 Jan 2021 03:13:52 -0500 Subject: [PATCH 02/13] Use RegExpIdentifierName without escape sequences for named captures/backreferences --- src/xregexp.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/xregexp.js b/src/xregexp.js index faa78f4a..461e5252 100644 --- a/src/xregexp.js +++ b/src/xregexp.js @@ -49,7 +49,7 @@ 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 = /\$(?:\{([\p{ID_Start}$_][\p{ID_Continue}$_\u200C\u200D]*)\}|<([\p{ID_Start}$_][\p{ID_Continue}$_\u200C\u200D]*)>|(\d\d?|[\s\S]))/gu; // Check for correct `exec` handling of nonparticipating capturing groups const correctExecNpcg = nativ.exec.call(/()??/, '')[1] === undefined; // Check for ES6 `flags` prop support @@ -1792,7 +1792,7 @@ XRegExp.addToken( * and $ only. Also allows numbered backreferences as `\k`. */ XRegExp.addToken( - /\\k<([\w$]+)>/, + /\\k<([\p{ID_Start}$_][\p{ID_Continue}$_\u200C\u200D]*)>/u, 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]; @@ -1844,7 +1844,7 @@ XRegExp.addToken( * 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 From 1e000ef7aba1e1d5efec6592defc9a9dec9fa0a1 Mon Sep 17 00:00:00 2001 From: Joseph Frazier <1212jtraceur@gmail.com> Date: Sat, 9 Jan 2021 03:15:03 -0500 Subject: [PATCH 03/13] Update build tools to make it actually work --- .babelrc | 1 + .eslintrc.js | 1 + package-lock.json | 1398 +++++++++++++++++++++++++++++++++++++++------ package.json | 1 + 4 files changed, 1233 insertions(+), 168 deletions(-) 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/package-lock.json b/package-lock.json index dc784f08..97de1ad6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -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", @@ -2120,6 +2121,9 @@ "dependencies": { "mime-types": "~2.1.6", "negotiator": "0.5.3" + }, + "engines": { + "node": ">= 0.6" } }, "node_modules/acorn": { @@ -2158,7 +2162,10 @@ "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/ajv": { "version": "6.12.6", @@ -2186,13 +2193,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 +2220,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", @@ -2236,6 +2255,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 +2270,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", @@ -2284,13 +2310,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 +2361,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 +2408,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 +2489,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 +2654,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 +2723,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 +2747,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 +2772,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 +2790,9 @@ "dev": true, "dependencies": { "hoek": "0.9.x" + }, + "engines": { + "node": ">=0.8.0" } }, "node_modules/brace-expansion": { @@ -2752,6 +2814,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 +2837,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 +2974,9 @@ "dependencies": { "lru-cache": "2", "sigmund": "~1.0.0" + }, + "engines": { + "node": "*" } }, "node_modules/browserify-rsa": { @@ -3005,7 +3076,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 +3282,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 +3303,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", @@ -3288,7 +3369,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 +3395,9 @@ "dependencies": { "align-text": "^0.1.3", "lazy-cache": "^1.0.3" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/chalk": { @@ -3324,6 +3411,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": { @@ -3412,13 +3502,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 +3548,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 +3578,9 @@ "dev": true, "dependencies": { "delayed-stream": "0.0.5" + }, + "engines": { + "node": ">= 0.8" } }, "node_modules/command-exists": { @@ -3509,6 +3611,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 +3647,9 @@ "dev": true, "dependencies": { "mime-db": ">= 1.33.0 < 2" + }, + "engines": { + "node": ">= 0.6" } }, "node_modules/compression": { @@ -3556,6 +3664,9 @@ "debug": "~2.2.0", "on-headers": "~1.0.0", "vary": "~1.0.0" + }, + "engines": { + "node": ">= 0.8.0" } }, "node_modules/compression/node_modules/debug": { @@ -3584,6 +3695,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 +3751,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 +3766,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 +3799,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 +3826,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", @@ -3768,6 +3900,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 +4032,9 @@ "dev": true, "dependencies": { "boom": "0.4.x" + }, + "engines": { + "node": ">=0.8.0" } }, "node_modules/crypto-browserify": { @@ -3916,13 +4054,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 +4093,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", @@ -4019,13 +4166,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 +4225,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 +4269,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 +4291,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 +4311,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 +4323,9 @@ "dev": true, "dependencies": { "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, "node_modules/dts-critic/node_modules/yargs": { @@ -4265,7 +4440,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", @@ -4368,7 +4546,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 +4562,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 +4577,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 - }, - "node_modules/escodegen/node_modules/esutils": { + "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 +4612,9 @@ "optional": true, "dependencies": { "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" } }, "node_modules/eslint": { @@ -4780,7 +4984,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 +5048,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 +5072,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 +5100,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 +5116,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 +5128,9 @@ "dev": true, "dependencies": { "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" } }, "node_modules/expand-brackets": { @@ -4911,6 +5140,9 @@ "dev": true, "dependencies": { "is-posix-bracket": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/expand-range": { @@ -4920,6 +5152,9 @@ "dev": true, "dependencies": { "fill-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/express": { @@ -4940,13 +5175,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 +5200,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 +5239,9 @@ "dev": true, "dependencies": { "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/fast-deep-equal": { @@ -5056,6 +5310,9 @@ "dependencies": { "inherits": "2", "minimatch": "0.3" + }, + "engines": { + "node": "*" } }, "node_modules/file-utils/node_modules/glob/node_modules/minimatch": { @@ -5066,13 +5323,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 +5346,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 +5387,9 @@ "dependencies": { "inherits": "2", "minimatch": "0.3" + }, + "engines": { + "node": "*" } }, "node_modules/fileset/node_modules/glob/node_modules/minimatch": { @@ -5124,6 +5400,9 @@ "dependencies": { "lru-cache": "2", "sigmund": "~1.0.0" + }, + "engines": { + "node": "*" } }, "node_modules/fileset/node_modules/minimatch": { @@ -5134,6 +5413,9 @@ "dependencies": { "lru-cache": "2", "sigmund": "~1.0.0" + }, + "engines": { + "node": "*" } }, "node_modules/fill-range": { @@ -5147,6 +5429,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 +5447,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,6 +5465,9 @@ "dev": true, "dependencies": { "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" } }, "node_modules/find-nearest-file": { @@ -5192,6 +5483,9 @@ "dev": true, "dependencies": { "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, "node_modules/findup-sync": { @@ -5202,6 +5496,9 @@ "dependencies": { "glob": "~3.2.9", "lodash": "~2.4.1" + }, + "engines": { + "node": ">= 0.6.0" } }, "node_modules/findup-sync/node_modules/glob": { @@ -5212,13 +5509,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 +5532,9 @@ "dependencies": { "lru-cache": "2", "sigmund": "~1.0.0" + }, + "engines": { + "node": "*" } }, "node_modules/firefox-profile": { @@ -5276,7 +5583,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 +5595,9 @@ "dev": true, "dependencies": { "for-in": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/foreach": { @@ -5306,13 +5619,20 @@ "dev": true, "dependencies": { "sequence": "2.x" + }, + "engines": { + "ender": ">= 0.5.0", + "node": "*" } }, "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 +5643,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", @@ -5377,7 +5706,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", @@ -5450,6 +5782,9 @@ "dev": true, "dependencies": { "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, "node_modules/get-value": { @@ -5489,6 +5824,9 @@ "dependencies": { "glob-parent": "^2.0.0", "is-glob": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/glob-parent": { @@ -5504,7 +5842,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 +5870,9 @@ "minimatch": "2 || 3", "once": "^1.3.0", "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" } }, "node_modules/graceful-fs": { @@ -5545,6 +5889,12 @@ "dependencies": { "optimist": "~0.3", "uglify-js": "~2.3" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" } }, "node_modules/has": { @@ -5566,13 +5916,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 +6022,9 @@ "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" + }, + "engines": { + "node": ">=4" } }, "node_modules/hash.js": { @@ -5688,6 +6047,9 @@ "cryptiles": "0.2.x", "hoek": "0.9.x", "sntp": "0.2.x" + }, + "engines": { + "node": ">=0.8.0" } }, "node_modules/hbs": { @@ -5698,6 +6060,9 @@ "dependencies": { "handlebars": "1.0.12", "walk": "2.2.1" + }, + "engines": { + "node": ">= 0.4.0" } }, "node_modules/hbs/node_modules/handlebars": { @@ -5708,13 +6073,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 +6105,19 @@ "version": "0.9.1", "resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz", "integrity": "sha1-PTIkYrrfB3Fup+uFuviAec3c5QU=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8.0" + } }, "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 +6129,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 +6151,9 @@ "dependencies": { "eventemitter3": "1.x.x", "requires-port": "0.x.x" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/http-signature": { @@ -5776,6 +6165,9 @@ "asn1": "0.1.11", "assert-plus": "^0.1.5", "ctype": "0.5.3" + }, + "engines": { + "node": ">=0.8" } }, "node_modules/https-browserify": { @@ -5794,7 +6186,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 +6223,10 @@ "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/indexof": { "version": "0.0.1", @@ -5887,6 +6285,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 +6299,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 +6341,9 @@ "dev": true, "dependencies": { "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/is-buffer": { @@ -6017,7 +6427,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 +6439,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 +6487,9 @@ "dev": true, "dependencies": { "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/is-negative-zero": { @@ -6080,6 +6508,9 @@ "dev": true, "dependencies": { "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/is-plain-object": { @@ -6107,13 +6538,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 +6571,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", @@ -6222,7 +6662,10 @@ "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 +6680,9 @@ "dev": true, "dependencies": { "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/istanbul": { @@ -6257,6 +6703,9 @@ "resolve": "0.7.x", "which": "1.0.x", "wordwrap": "0.0.x" + }, + "bin": { + "istanbul": "lib/cli.js" } }, "node_modules/istanbul-middleware": { @@ -6269,6 +6718,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 +6731,9 @@ "dependencies": { "mime-types": "~2.1.18", "negotiator": "0.6.1" + }, + "engines": { + "node": ">= 0.6" } }, "node_modules/istanbul-middleware/node_modules/archiver": { @@ -6295,19 +6750,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 +6783,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 +6806,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 +6821,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 +6875,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 +6896,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 +6920,9 @@ "inherits": "2", "minimatch": "^2.0.1", "once": "^1.3.0" + }, + "engines": { + "node": "*" } }, "node_modules/istanbul-middleware/node_modules/handlebars": { @@ -6440,6 +6936,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 +6959,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 +6999,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 +7021,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 +7042,19 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true + "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 +7063,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 +7084,9 @@ "dev": true, "dependencies": { "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" } }, "node_modules/istanbul-middleware/node_modules/optimist": { @@ -6574,19 +7103,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 +7136,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 +7160,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 +7208,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 +7221,9 @@ "optional": true, "dependencies": { "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" } }, "node_modules/istanbul-middleware/node_modules/string_decoder": { @@ -6686,6 +7239,9 @@ "dev": true, "dependencies": { "has-flag": "^1.0.0" + }, + "engines": { + "node": ">=0.8.0" } }, "node_modules/istanbul-middleware/node_modules/uglify-js": { @@ -6698,6 +7254,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 +7267,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 +7288,9 @@ "dev": true, "dependencies": { "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" } }, "node_modules/istanbul-middleware/node_modules/zip-stream": { @@ -6731,13 +7302,23 @@ "compress-commons": "~0.2.0", "lodash": "~3.2.0", "readable-stream": "~1.0.26" + }, + "engines": { + "node": ">= 0.8.0" } }, "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 +7330,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,7 +7455,10 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "dev": true + "dev": true, + "engines": [ + "node >= 0.2.0" + ] }, "node_modules/JSONStream": { "version": "1.3.2", @@ -6881,6 +7468,12 @@ "dependencies": { "jsonparse": "^1.2.0", "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" } }, "node_modules/keypress": { @@ -6896,6 +7489,9 @@ "dev": true, "dependencies": { "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/labeled-stream-splicer": { @@ -6920,7 +7516,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 +7528,9 @@ "dev": true, "dependencies": { "readable-stream": "~1.0.2" + }, + "engines": { + "node": ">= 0.6.3" } }, "node_modules/lazystream/node_modules/isarray": { @@ -6962,6 +7564,9 @@ "dev": true, "dependencies": { "invert-kv": "^2.0.0" + }, + "engines": { + "node": ">=6" } }, "node_modules/levn": { @@ -6972,6 +7577,9 @@ "dependencies": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" } }, "node_modules/load-script": { @@ -6989,6 +7597,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 +7615,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 +7638,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 +7669,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 +7681,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 +7694,9 @@ "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, "node_modules/lodash": { @@ -7138,7 +7767,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 +7798,9 @@ "dev": true, "dependencies": { "p-defer": "^1.0.0" + }, + "engines": { + "node": ">=6" } }, "node_modules/map-cache": { @@ -7203,7 +7838,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 +7852,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 +7897,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 +7910,9 @@ "dependencies": { "bn.js": "^4.0.0", "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" } }, "node_modules/mime": { @@ -7311,6 +7961,9 @@ "dev": true, "dependencies": { "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, "node_modules/minimist": { @@ -7351,6 +8004,9 @@ "dev": true, "dependencies": { "minimist": "0.0.8" + }, + "bin": { + "mkdirp": "bin/cmd.js" } }, "node_modules/mkdirp-classic": { @@ -7380,6 +8036,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 +8058,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 +8244,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", @@ -7609,7 +8280,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 +8292,9 @@ "dev": true, "dependencies": { "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" } }, "node_modules/normalize-path": { @@ -7627,6 +8304,9 @@ "dev": true, "dependencies": { "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/npm-run-path": { @@ -7636,19 +8316,28 @@ "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 + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, "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 + "dev": true, + "engines": { + "node": "*" + } }, "node_modules/object-copy": { "version": "0.1.0", @@ -7735,6 +8424,9 @@ "dependencies": { "for-own": "^0.1.4", "is-extendable": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/object.pick": { @@ -7765,13 +8457,19 @@ "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", @@ -7786,7 +8484,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 +8502,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 +8519,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 +8539,9 @@ "execa": "^1.0.0", "lcid": "^2.0.0", "mem": "^4.0.0" + }, + "engines": { + "node": ">=6" } }, "node_modules/osenv": { @@ -7853,19 +8563,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 +8593,9 @@ "dev": true, "dependencies": { "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" } }, "node_modules/p-locate": { @@ -7883,13 +8605,19 @@ "dev": true, "dependencies": { "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" } }, "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/pako": { "version": "0.2.9", @@ -7941,13 +8669,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 +8715,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 +8748,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", @@ -8030,6 +8776,9 @@ "ripemd160": "^2.0.1", "safe-buffer": "^5.0.1", "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" } }, "node_modules/picomatch": { @@ -8067,19 +8816,28 @@ "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", @@ -8091,7 +8849,10 @@ "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 +8862,9 @@ "dependencies": { "forwarded": "~0.1.2", "ipaddr.js": "1.6.0" + }, + "engines": { + "node": ">= 0.10" } }, "node_modules/psl": { @@ -8142,25 +8906,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 +8947,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 +8959,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 +8971,9 @@ "dev": true, "dependencies": { "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/randomatic/node_modules/kind-of": { @@ -8197,6 +8983,9 @@ "dev": true, "dependencies": { "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/randombytes": { @@ -8231,6 +9020,9 @@ "dev": true, "dependencies": { "bytes": "~0.2.1" + }, + "engines": { + "node": ">= 0.8.0" } }, "node_modules/raw-body/node_modules/bytes": { @@ -8664,6 +9456,9 @@ "dev": true, "dependencies": { "is-equal-shallow": "^0.1.3" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/regex-not": { @@ -8770,13 +9565,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 +9600,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 +9624,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 +9687,9 @@ "optional": true, "dependencies": { "align-text": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/rimraf": { @@ -8914,7 +9727,10 @@ "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", @@ -8962,7 +9778,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 +9794,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 +9818,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 +9839,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 +9872,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 +9912,9 @@ "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" } }, "node_modules/shallow-copy": { @@ -9105,13 +9949,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 +10011,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 +10162,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", @@ -9349,6 +10211,9 @@ "dev": true, "dependencies": { "through": "1" + }, + "engines": { + "node": "*" } }, "node_modules/split-string": { @@ -9486,7 +10351,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 +10383,9 @@ "dev": true, "dependencies": { "readable-stream": "~1.1.8" + }, + "engines": { + "node": ">=0.8.0" } }, "node_modules/stream-counter/node_modules/isarray": { @@ -9581,13 +10452,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 +10473,9 @@ "dev": true, "dependencies": { "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, "node_modules/string.prototype.trimend": { @@ -9637,19 +10517,28 @@ "dev": true, "dependencies": { "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, "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 +10569,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 +10599,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 +10700,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 +10745,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": { @@ -9896,6 +10803,9 @@ "dev": true, "dependencies": { "process": "~0.11.0" + }, + "engines": { + "node": ">=0.6.0" } }, "node_modules/to-arraybuffer": { @@ -9908,7 +10818,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 +11014,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 +11029,9 @@ "dev": true, "dependencies": { "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, "node_modules/tslint/node_modules/chalk": { @@ -10121,13 +11043,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 +11064,9 @@ "dev": true, "dependencies": { "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, "node_modules/tsutils": { @@ -10157,7 +11088,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 +11100,9 @@ "dev": true, "dependencies": { "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" } }, "node_modules/type-fest": { @@ -10185,6 +11122,9 @@ "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.18" + }, + "engines": { + "node": ">= 0.6" } }, "node_modules/typedarray": { @@ -10197,7 +11137,14 @@ "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 +11155,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 +11176,9 @@ "dev": true, "dependencies": { "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" } }, "node_modules/uglify-to-browserify": { @@ -10242,7 +11198,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 +11223,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 +11296,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 +11391,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", @@ -10482,7 +11453,10 @@ "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/v8-compile-cache": { "version": "2.1.1", @@ -10494,13 +11468,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 +11513,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 +11580,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 +11607,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 +11618,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 +11637,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 +11651,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 +11666,9 @@ "inherits": "2", "minimatch": "^1.0.0", "once": "^1.3.0" + }, + "engines": { + "node": "*" } }, "node_modules/wd/node_modules/graceful-fs": { @@ -10677,6 +11678,9 @@ "dev": true, "dependencies": { "natives": "^1.1.0" + }, + "engines": { + "node": ">=0.4.0" } }, "node_modules/wd/node_modules/isarray": { @@ -10689,7 +11693,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 +11707,9 @@ "dependencies": { "lru-cache": "2", "sigmund": "~1.0.0" + }, + "engines": { + "node": "*" } }, "node_modules/wd/node_modules/readable-stream": { @@ -10729,6 +11740,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 +11754,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 +11833,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 +11861,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 +11873,9 @@ "dev": true, "dependencies": { "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/wrap-ansi/node_modules/string-width": { @@ -10858,6 +11887,9 @@ "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": { @@ -10870,7 +11902,10 @@ "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", @@ -10898,7 +11933,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 +12003,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 +12017,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 +12164,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 +12185,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 +12211,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 +12242,9 @@ "minimatch": "2 || 3", "once": "^1.3.0", "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" } }, "node_modules/zuul/node_modules/isarray": { @@ -11231,6 +12290,9 @@ "dev": true, "dependencies": { "object-keys": "~0.4.0" + }, + "engines": { + "node": ">=0.4" } } }, diff --git a/package.json b/package.json index 1474e667..39d4a60b 100644 --- a/package.json +++ b/package.json @@ -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", From 101d4c7cc5a7214dd2cc504ef52e29fd1bdd31a6 Mon Sep 17 00:00:00 2001 From: Joseph Frazier <1212jtraceur@gmail.com> Date: Sat, 9 Jan 2021 14:45:17 -0500 Subject: [PATCH 04/13] Remove now-unnecessary bare integer check from named capture group parser, see https://github.com/slevithan/xregexp/pull/247#discussion_r554317544 --- src/xregexp.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/xregexp.js b/src/xregexp.js index 461e5252..2f725cbb 100644 --- a/src/xregexp.js +++ b/src/xregexp.js @@ -1846,11 +1846,6 @@ XRegExp.addToken( XRegExp.addToken( /\(\?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]}`); } From b489e503688dbfb970936fe5049dc2bbc7f54a39 Mon Sep 17 00:00:00 2001 From: Joseph Frazier <1212jtraceur@gmail.com> Date: Sat, 9 Jan 2021 14:51:43 -0500 Subject: [PATCH 05/13] Just say RegExpIdentifierName instead of listing alphnumeric/$_, see https://github.com/slevithan/xregexp/pull/247/files#r554330786 --- tests/spec/s-xregexp.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/spec/s-xregexp.js b/tests/spec/s-xregexp.js index 7ae57667..76a12e1b 100644 --- a/tests/spec/s-xregexp.js +++ b/tests/spec/s-xregexp.js @@ -393,7 +393,7 @@ 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 RegExpIdentifierName characters 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); From 50d95f9cd906482bfa5148e695ce22c2f99d31a1 Mon Sep 17 00:00:00 2001 From: Joseph Frazier <1212jtraceur@gmail.com> Date: Sat, 9 Jan 2021 14:54:11 -0500 Subject: [PATCH 06/13] Test operation of named capture groups, not just construction, see https://github.com/slevithan/xregexp/pull/247/files#r554332286 --- tests/spec/s-xregexp.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/spec/s-xregexp.js b/tests/spec/s-xregexp.js index 76a12e1b..8435f0a7 100644 --- a/tests/spec/s-xregexp.js +++ b/tests/spec/s-xregexp.js @@ -397,9 +397,9 @@ describe('XRegExp()', function() { expect(XRegExp('(?x)').test('x')).toBe(true); expect(XRegExp('(?<_09>x)').test('x')).toBe(true); expect(XRegExp('(?<$>x)').test('x')).toBe(true); - expect(function() {XRegExp('(?)');}).not.toThrow(); - expect(function() {XRegExp('(?<Русский>)');}).not.toThrow(); - expect(function() {XRegExp('(?<日本語>)');}).not.toThrow(); + 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() { From 35a63a686cb9b4d7b01fd6e499f4c61091d35f36 Mon Sep 17 00:00:00 2001 From: Joseph Frazier <1212jtraceur@gmail.com> Date: Sat, 9 Jan 2021 14:55:29 -0500 Subject: [PATCH 07/13] Reference "RegExpIdentifierName characters" instead of listing the narrower set, see https://github.com/slevithan/xregexp/pull/247/files#r554333301 --- tests/spec/s-xregexp.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/spec/s-xregexp.js b/tests/spec/s-xregexp.js index 8435f0a7..dc416bc3 100644 --- a/tests/spec/s-xregexp.js +++ b/tests/spec/s-xregexp.js @@ -402,7 +402,7 @@ describe('XRegExp()', function() { 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); From c68536ee575461eb64c743e6fca558f0da37a364 Mon Sep 17 00:00:00 2001 From: Joseph Frazier <1212jtraceur@gmail.com> Date: Sat, 9 Jan 2021 14:56:40 -0500 Subject: [PATCH 08/13] Don't disallow numbered backreferences like \k<1>, see https://github.com/slevithan/xregexp/pull/247/files#r554340317 --- tests/spec/s-xregexp.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/tests/spec/s-xregexp.js b/tests/spec/s-xregexp.js index dc416bc3..5c389616 100644 --- a/tests/spec/s-xregexp.js +++ b/tests/spec/s-xregexp.js @@ -485,10 +485,6 @@ describe('XRegExp()', function() { expect(function() {XRegExp('\\k<`>');}).toThrowError(SyntaxError); }); - it('should not allow leading digits', function() { - expect(function() {XRegExp('(.)\\k<01>');}).toThrowError(SyntaxError); - }); - it('should separate backreferences from following literal digits', function() { expect(XRegExp('(?<$1>A1)(2)(3)(4)(5)(6)(7)(8)(9)(B10)\\k<$1>0').test('A123456789B10A10')).toBe(true); expect(XRegExp('(?<$1>A)\\k<$1>2').test('AA2')).toBe(true); From b20cadd829febc769291d1b08e458842d4837754 Mon Sep 17 00:00:00 2001 From: Joseph Frazier <1212jtraceur@gmail.com> Date: Sat, 9 Jan 2021 14:58:57 -0500 Subject: [PATCH 09/13] Restore tests of explicit numbered backreferences, see https://github.com/slevithan/xregexp/pull/247/files#r554341172 --- tests/spec/s-xregexp.js | 43 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/tests/spec/s-xregexp.js b/tests/spec/s-xregexp.js index 5c389616..13f76cd2 100644 --- a/tests/spec/s-xregexp.js +++ b/tests/spec/s-xregexp.js @@ -503,6 +503,49 @@ describe('XRegExp()', function() { }); + describe('explicit numbered backreferences', function() { + + it('should match the numbered backreference', function() { + expect(XRegExp('(.)\\k<1>').test('aa')).toBe(true); + expect(XRegExp('(.)\\k<1>').test('ab')).toBe(false); + expect(XRegExp('(.)\\k<1>\\k<1>').test('aaa')).toBe(true); + }); + + it('should allow leading zeros', function() { + expect(XRegExp('(.)\\k<01>').test('aa')).toBe(true); + expect(XRegExp('(.)\\k<001>').test('aa')).toBe(true); + }); + + it('should match named backreferences by number', function() { + expect(XRegExp('(?.)\\k<1>').test('aa')).toBe(true); + expect(XRegExp('(?.)\\k<1>').test('ab')).toBe(false); + expect(XRegExp('(?.)\\k<1>\\k<1>').test('aaa')).toBe(true); + }); + + it('should separate numbered backreferences from following literal digits', function() { + expect(XRegExp('(A1)(2)(3)(4)(5)(6)(7)(8)(9)(B10)\\k<1>0').test('A123456789B10A10')).toBe(true); + expect(XRegExp('(A)\\k<1>2').test('AA2')).toBe(true); + }); + + it('should throw an exception for backreferences to unknown groups', function() { + expect(function() {XRegExp('\\k<1>');}).toThrowError(SyntaxError); + expect(function() {XRegExp('()\\k<2>');}).toThrowError(SyntaxError); + }); + + it('should throw an exception for backreferences to capturing groups not opened to the left', function() { + expect(function() {XRegExp('\\k<1>()');}).toThrowError(SyntaxError); + expect(function() {XRegExp('()\\k<2>()');}).toThrowError(SyntaxError); + expect(function() {XRegExp('(1)(2)(3)(4)(5)(6)(7)(8)(9)(10)\\k<11>(11)');}).toThrowError(SyntaxError); + expect(function() {XRegExp('(\\k<1>)');}).not.toThrow(); + }); + + it('should not allow \\k<0> to refer to the entire match', function() { + expect(function() {XRegExp('\\k<0>');}).toThrowError(SyntaxError); + expect(function() {XRegExp('\\k<00>');}).toThrowError(SyntaxError); + }); + + }); + describe('strict error handling', function() { it('should throw an exception for octals except \\0 not followed by 0-9', function() { From 86318d49bf1720b8c09e67fb7d36adeb3fb2b185 Mon Sep 17 00:00:00 2001 From: Joseph Frazier <1212jtraceur@gmail.com> Date: Sat, 9 Jan 2021 15:01:27 -0500 Subject: [PATCH 10/13] Reallow explicit numbered backreferences in replacement text, see https://github.com/slevithan/xregexp/pull/247/files#r554312167 --- src/xregexp.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/xregexp.js b/src/xregexp.js index 2f725cbb..2f64bf93 100644 --- a/src/xregexp.js +++ b/src/xregexp.js @@ -49,7 +49,7 @@ 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 = /\$(?:\{([\p{ID_Start}$_][\p{ID_Continue}$_\u200C\u200D]*)\}|<([\p{ID_Start}$_][\p{ID_Continue}$_\u200C\u200D]*)>|(\d\d?|[\s\S]))/gu; +const replacementToken = /\$(?:\{([^\}]+)\}|<([^>]+)>|(\d\d?|[\s\S]))/g; // Check for correct `exec` handling of nonparticipating capturing groups const correctExecNpcg = nativ.exec.call(/()??/, '')[1] === undefined; // Check for ES6 `flags` prop support From 574a5bb28fe81e3d6edad0b935fcae7747359cda Mon Sep 17 00:00:00 2001 From: Joseph Frazier <1212jtraceur@gmail.com> Date: Sat, 9 Jan 2021 15:03:49 -0500 Subject: [PATCH 11/13] Reallow numbered backreferences in patterns, see https://github.com/slevithan/xregexp/pull/247/files#r554343245 --- src/xregexp.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/xregexp.js b/src/xregexp.js index 2f64bf93..e4949a1f 100644 --- a/src/xregexp.js +++ b/src/xregexp.js @@ -1792,7 +1792,7 @@ XRegExp.addToken( * and $ only. Also allows numbered backreferences as `\k`. */ XRegExp.addToken( - /\\k<([\p{ID_Start}$_][\p{ID_Continue}$_\u200C\u200D]*)>/u, + /\\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]; From 4eee345d87e86094805bc40432cbf8228aae7038 Mon Sep 17 00:00:00 2001 From: Joseph Frazier <1212jtraceur@gmail.com> Date: Sat, 9 Jan 2021 15:15:14 -0500 Subject: [PATCH 12/13] Restore s-xregexp-methods.js --- tests/spec/s-xregexp-methods.js | 80 ++++++++++++++++++++++++++++++++- 1 file changed, 78 insertions(+), 2 deletions(-) diff --git a/tests/spec/s-xregexp-methods.js b/tests/spec/s-xregexp-methods.js index f118b4b0..da72a2c1 100644 --- a/tests/spec/s-xregexp-methods.js +++ b/tests/spec/s-xregexp-methods.js @@ -1251,8 +1251,84 @@ describe('XRegExp.replace()', function() { expect(function() {XRegExp.replace('test', XRegExp('(?t)', 'g'), ':$:');}).toThrowError(SyntaxError); }); - it('should not allow leading digits', function() { - expect(function() {XRegExp.replace('test', /(.)./g, '${01}');}).toThrowError(SyntaxError); + }); + + describe('explicit numbered backreferences', function() { + + it('should return the numbered backreference', function() { + expect(XRegExp.replace('test', /(.)./g, '${1}')).toBe('ts'); + expect(XRegExp.replace('test', /(.)./g, '$<1>')).toBe('ts'); + + // Backreference to a nonparticipating capturing group + expect(XRegExp.replace('test', /t|(e)/g, '${1}')).toBe('es'); + expect(XRegExp.replace('test', /t|(e)/g, '$<1>')).toBe('es'); + }); + + it('should allow leading zeros', function() { + expect(XRegExp.replace('test', /(.)./g, '${01}')).toBe('ts'); + expect(XRegExp.replace('test', /(.)./g, '$<01>')).toBe('ts'); + + expect(XRegExp.replace('test', /(.)./g, '${001}')).toBe('ts'); + expect(XRegExp.replace('test', /(.)./g, '$<001>')).toBe('ts'); + }); + + it('should return named backreferences by number', function() { + expect(XRegExp.replace('test', XRegExp('(?.).', 'g'), '${1}')).toBe('ts'); + expect(XRegExp.replace('test', XRegExp('(?.).', 'g'), '$<1>')).toBe('ts'); + }); + + it('should separate numbered backreferences from following literal digits', function() { + expect(XRegExp.replace('test', new RegExp('(.).', 'g'), '${1}0')).toBe('t0s0'); + expect(XRegExp.replace('test', new RegExp('(.).', 'g'), '$<1>0')).toBe('t0s0'); + + expect(XRegExp.replace('test', new RegExp('(.).' + '()'.repeat(9), 'g'), '${1}0')).toBe('t0s0'); + expect(XRegExp.replace('test', new RegExp('(.).' + '()'.repeat(9), 'g'), '$<1>0')).toBe('t0s0'); + }); + + it('should throw an exception for backreferences to unknown group numbers', function() { + expect(function() {XRegExp.replace('test', /t/, '${1}');}).toThrowError(SyntaxError); + expect(function() {XRegExp.replace('test', /t/, '$<1>');}).toThrowError(SyntaxError); + + expect(function() {XRegExp.replace('test', /(t)/, '${2}');}).toThrowError(SyntaxError); + expect(function() {XRegExp.replace('test', /(t)/, '$<2>');}).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:'); + + expect(XRegExp.replace('test', /../g, '${00}:')).toBe('te:st:'); + expect(XRegExp.replace('test', /../g, '$<00>:')).toBe('te:st:'); + + expect(XRegExp.replace('test', /../g, '${000}:')).toBe('te:st:'); + expect(XRegExp.replace('test', /../g, '$<000>:')).toBe('te:st:'); + }); + + it('should support backreferences 100 and greater, if the browser does natively', function() { + // IE < 9 doesn't allow backreferences greater than \99 *within* a regex, but + // XRegExp still allows backreferences to groups 100+ within replacement text + try { + // Regex with 1,000 capturing groups. This fails in Firefox 4-6 (but not v3.6 + // or v7+) with `InternalError: regular expression too complex` + var lottaGroups = new RegExp([ + '^(a)\\1', '()'.repeat(8), + '(b)\\10', '()'.repeat(89), + '(c)', '()'.repeat(899), + '(d)$' + ].join('')); + + expect(XRegExp.replace('aabbcd', lottaGroups, '${0} ${01} ${001} ${0001} ${1} ${10} ${100} ${1000}')).toBe('aabbcd a a a a b c d'); + expect(XRegExp.replace('aabbcd', lottaGroups, '$<0> $<01> $<001> $<0001> $<1> $<10> $<100> $<1000>')).toBe('aabbcd a a a a b c d'); + expect(XRegExp.replace('aabbcd', lottaGroups, '$<0> ${01} $<001> ${0001} $<1> ${10} $<100> ${1000}')).toBe('aabbcd a a a a b c d'); + // For comparison... + expect(XRegExp.replace('aabbcd', lottaGroups, '$0 $01 $001 $0001 $1 $10 $100 $1000')).toBe('aabbcd a aabbcd1 aabbcd01 a b b0 b00'); + } catch (err) { + // Keep the assertion count consistent cross-browser + expect(true).toBe(true); + expect(true).toBe(true); + expect(true).toBe(true); + expect(true).toBe(true); + } }); }); From 6ff1615fa1257eb0fdca04b0e5dc339fe4919b78 Mon Sep 17 00:00:00 2001 From: Joseph Frazier <1212jtraceur@gmail.com> Date: Sat, 9 Jan 2021 15:18:06 -0500 Subject: [PATCH 13/13] Update code comments, see https://github.com/slevithan/xregexp/pull/247#pullrequestreview-564806504 --- src/xregexp.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/xregexp.js b/src/xregexp.js index e4949a1f..ea4388be 100644 --- a/src/xregexp.js +++ b/src/xregexp.js @@ -1788,8 +1788,8 @@ XRegExp.addToken( ); /* - * 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<([^>]+)>/, @@ -1838,7 +1838,7 @@ 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.