diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..ff45b86 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,15 @@ +; EditorConfig file: https://EditorConfig.org +; Install the "EditorConfig" plugin into your editor to use + +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true + +[*.md] +indent_size = 4 diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..590f666 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,4 @@ +dist +node_modules +test/js +docs/index.html diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 0000000..03eb773 --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,80 @@ +'use strict'; + +module.exports = { + extends: [ + 'ash-nazg/sauron-node-overrides' + ], + parser: '@babel/eslint-parser', + parserOptions: { + requireConfigFile: false, + ecmaVersion: 2020 + }, + env: { + es6: true + }, + settings: { + polyfills: [ + 'Math.trunc', + 'Number.parseFloat', + 'Symbol.iterator' + ] + }, + overrides: [{ + files: '*.cjs', + extends: ['ash-nazg/sauron-node-script-overrides'], + rules: { + // Internal use + 'node/shebang': 'off' + } + }, { + files: 'test/index.js', + parser: '@babel/eslint-parser', + parserOptions: { + requireConfigFile: false, + ecmaVersion: 2020, + sourceType: 'module' + }, + rules: { + 'no-shadow': ['error', {allow: ['assert']}], + 'node/no-unsupported-features/es-syntax': ['error', { + ignores: ['dynamicImport', 'modules'] + }], + 'no-console': 0 + } + }, { + files: '*.html', + env: { + browser: true + }, + globals: { + JSONPullParser: true + }, + rules: { + 'import/unambiguous': 0 + } + }, { + files: ['*.md/*.js'], + globals: { + json: true, + require: true, + JSONPullParser: true + }, + rules: { + 'import/no-commonjs': 0, + 'import/unambiguous': 0, + 'no-shadow': ['error', { + allow: ['JSONPullParser'] + }], + 'no-unused-vars': ['error', { + varsIgnorePattern: 'token|JSONPullParser' + }], + 'node/no-missing-require': ['error', { + allowModules: ['json-pull-parser'] + }] + } + }], + rules: { + 'no-bitwise': 0, + 'unicorn/consistent-destructuring': 0 + } +}; diff --git a/README.md b/README.md index d7af98b..a7a81c5 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,18 @@ -JSONPullParser --------------- +# JSONPullParser -**Introduction** +## Introduction -`JSONPullParser` is a dropin replacement for `JSON.parse` and also provides a -pull based api. +A dropin replacement for `JSON.parse` and also provides a pull based api. -**Usage** +## Usage -```javascript -let parser = new JSONPullParser(json); -let builder = new JSONPullParser.ObjectBuilder(); +```js +const parser = new JSONPullParser(json); +const builder = new JSONPullParser.ObjectBuilder(); -for (let token of parser) builder.handle(token); +for (const token of parser) { + builder.handle(token); +} ``` See live [demo](http://www.susi.se/json-pull-parser/demo.html)! @@ -26,23 +26,25 @@ If your *JavaScript* engine supports [Symbol.iterator](https://developer.mozilla then your parser is *iterable*. ```javascript -let parser = new JSONPullParser(json); +const parser = new JSONPullParser(json); -for (let token of parser) { +for (const token of parser) { // use token } ``` -Otherwise you have to get an *iterator* from `parser.tokens()` +Otherwise you have to get an *iterator* from `parser.tokens()`: ```javascript -var parser = new JSONPullParser(json); -var it = parser.tokens(); +const parser = new JSONPullParser(json); +const it = parser.tokens(); while (true) { - var step = it.next(); - if (step.done) break; - var token = step.value; + const step = it.next(); + if (step.done) { + break; + } + const token = step.value; // use token } ``` @@ -53,20 +55,20 @@ and `EndArray` at the correct depth. ## Installation -**Node (CommonJS)** +### Node (CommonJS) ```sh $ npm install json-pull-parser ``` -```javascript -const JSONPullParser = require('json-pull-parser') +```js +const JSONPullParser = require('json-pull-parser'); ``` -**Browser** +### Browser ```html - + ``` ## ObjectBuilder @@ -77,43 +79,46 @@ const JSONPullParser = require('json-pull-parser') `JSON.parse` could be implemented by simply feeding all the tokens to `ObjectBuilder`. -```javascript -JSON.parse = function (source) -{ - let parser = new JSONPullParser(source); - let builder = new JSONPullParser.ObjectBuilder(); - for (let token of parser) builder.handle(token); +```js +JSON.parse = function (source) { + const parser = new JSONPullParser(source); + const builder = new JSONPullParser.ObjectBuilder(); + for (const token of parser) { + builder.handle(token); + } return builder.value; -} +}; ``` ## Custom handling of events -```javascript -let parser = new JSONPullParser(json); +```js +const parser = new JSONPullParser(json); -for (let token of parser) { +for (const token of parser) { switch (token.type) { - case JSONPullParser.StartObject: - break; - case JSONPullParser.EndObject: - break; - case JSONPullParser.StartArray: - break; - case JSONPullParser.EndArray: - break; - case JSONPullParser.String: - break; - case JSONPullParser.Number: - break; - case JSONPullParser.TrueLiteral: - break; - case JSONPullParser.FalseLiteral: - break; - case JSONPullParser.NullLiteral: - break; - case JSONPullParser.Error: - break; + case JSONPullParser.StartObject: + break; + case JSONPullParser.EndObject: + break; + case JSONPullParser.StartArray: + break; + case JSONPullParser.EndArray: + break; + case JSONPullParser.String: + break; + case JSONPullParser.Number: + break; + case JSONPullParser.TrueLiteral: + break; + case JSONPullParser.FalseLiteral: + break; + case JSONPullParser.NullLiteral: + break; + case JSONPullParser.Error: + break; + default: + throw new Error('Should not get here'); } } diff --git a/bin/verify b/bin/verify deleted file mode 100755 index c0fd333..0000000 --- a/bin/verify +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env node - -var JSONPullParser = require('../'); - -var content = ''; -process.stdin.resume(); -process.stdin.on('data', data => content += data.toString()); -process.stdin.on('end', () => console.log(JSONPullParser.parse(content))); \ No newline at end of file diff --git a/bin/verify.cjs b/bin/verify.cjs new file mode 100755 index 0000000..e5fb135 --- /dev/null +++ b/bin/verify.cjs @@ -0,0 +1,13 @@ +#!/usr/bin/env node +'use strict'; + +const JSONPullParser = require('../'); + +let content = ''; +process.stdin.resume(); +process.stdin.on('data', (data) => { + content += data.toString(); +}); + +// eslint-disable-next-line no-console -- CLI +process.stdin.on('end', () => console.log(JSONPullParser.parse(content))); diff --git a/dist/json-pull-parser.cjs b/dist/json-pull-parser.cjs new file mode 100644 index 0000000..ba45e65 --- /dev/null +++ b/dist/json-pull-parser.cjs @@ -0,0 +1,2 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).JSONPullParser=t()}(this,(function(){"use strict";class e{constructor(){this.handler={ref:this,add(e){return this.ref.value=e,e}}}startObject(){this.handler={old:this.handler,key:null,ref:this.handler.add({}),add(e){return null===this.key?this.key=e:(this.ref[this.key]=e,this.key=null),e}}}endObject(){this.handler=this.handler.old}startArray(){this.handler={old:this.handler,ref:this.handler.add([]),add(e){return this.ref.push(e),e}}}add(e){this.handler.add(e)}handle(e){switch(e.type){case"{":this.startObject();break;case"}":this.endObject();break;case"[":this.startArray();break;case"]":this.endArray();break;case"string":case"number":case"true":case"false":case"null":this.add(e.value);break;case"error":throw new SyntaxError(e.value.message)}}}e.prototype.endArray=e.prototype.endObject;const t=16;class r{constructor(e){this.text=e}[Symbol.iterator](){return n(this.text)}tokens(){return n(this.text)}}function*n(e){const t={s:e,d:!1,f:0,l:e.length,e:1,c:0,r:1,x:[]};for(;;){if(t.f===t.l){if(!t.e&&!t.x.length)return;yield a(t.s,t.l,t.l,"Unexpected end of JSON input")}const e=u(t);t.f=e.last,yield e}}function a(e,t,n,a,s=1){let i=t,o=e.charCodeAt(i);for(;10!==o&&i>0;)o=e.charCodeAt(--i);10===o&&++i;const c="undefined:"+s,u=e.slice(i,t+1);let l="";for(let e=i;e0?20:0,i(0,f)):a(n,f,u,"Unexpected token } in JSON at position "+f,e.r);case 91:return 1&e.e?(e.e=17,e.x.push(64),o(0,f)):a(n,f,u,"Unexpected token [ in JSON at position "+f,e.r);case 93:return e.e&t&&64===e.x.pop()?(e.e=e.x.length>0?20:0,c(0,f)):a(n,f,u,"Unexpected token ] in JSON at position "+f,e.r);case 58:if(!(8&e.e))return a(n,f,u,"Unexpected token : in JSON at position "+f,e.r);e.e=1,++f;continue;case 44:if(!(4&e.e))return a(n,f,u,"Unexpected token , in JSON at position "+f,e.r);e.x.length>0&&32===e.x[e.x.length-1]?e.e=2:e.e=1,++f;continue;case 45:case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return 1&e.e?(e.e=e.x.length>0?20:0,l(n,f,u)):a(n,f,u,"Unexpected number in JSON at position "+f,e.r);case 34:return 2&e.e?(e.e=8,d(n,f,u)):1&e.e?(e.e=e.x.length>0?20:0,d(n,f,u)):a(n,f,u,"Unexpected string in JSON at position "+f,e.r);case 116:return 1&e.e?(e.e=e.x.length>0?20:0,h(n,f,u)):a(n,f,u,"Unexpected token t in JSON at position "+f,e.r);case 102:return 1&e.e?(e.e=e.x.length>0?20:0,p(n,f,u)):a(n,f,u,"Unexpected token f in JSON at position "+f,e.r);case 110:return 1&e.e?(e.e=e.x.length>0?20:0,x(n,f,u)):a(n,f,u,"Unexpected token n in JSON at position "+f,e.r);default:return a(n,f,u,"Unexpected token "+n[f]+" in JSON at position "+f,e.r)}return{type:r.EndDocument,first:u,last:u}}function l(e,t,n){let s=t,i=e.charCodeAt(s++);if(45===i&&(i=e.charCodeAt(s++)),48!==i)for(;i>=48&&i<=57;)i=e.charCodeAt(s++);else i=e.charCodeAt(s++);if(46===i)for(i=e.charCodeAt(s++);i>=48&&i<=57;)i=e.charCodeAt(s++);if(101===i||69===i){if(i=e.charCodeAt(s++),43!==i&&45!==i||(i=e.charCodeAt(s++)),i<48||i>57)return a(e,s-1,n,"Unexpected token "+e[s-1]+" in JSON at position "+(s-1));if(s>=n)return a(e,t,n,"Unexpected end of JSON input");for(;i>=48&&i<=57;)i=e.charCodeAt(s++)}return{type:r.Number,value:Number.parseFloat(e.slice(t,s-1)),first:t,last:s-1}}function d(e,t,n){let s=t+1;for(;sn)))return a(e,n,n,"Unexpected end of JSON input")}return{type:r.String,value:JSON.parse(e.slice(t,s)),source:e,first:t,last:s}}function f(e,t,r,n,s){if(t+n.length>r)return a(e,r,r,"Unexpected end of JSON input");for(const s of n){if(e.charCodeAt(t++)!==s)return a(e,t,r,"Unexpected token "+e[t-1]+" in JSON at position "+(t-1))}return s}function h(e,t,n){return f(e,t,n,[116,114,117,101],{type:r.TrueLiteral,value:!0,source:e,first:t,last:t+4})}function p(e,t,n){return f(e,t,n,[102,97,108,115,101],{type:r.FalseLiteral,value:!1,source:e,first:t,last:t+5})}function x(e,t,n){return f(e,t,n,[110,117,108,108],{type:r.NullLiteral,value:null,source:e,first:t,last:t+4})}return r.StartDocument="<",r.EndDocument=">",r.StartObject="{",r.EndObject="}",r.StartArray="[",r.EndArray="]",r.String="string",r.Number="number",r.TrueLiteral="true",r.FalseLiteral="false",r.NullLiteral="null",r.Whitespace="ws",r.Error="error",r.ObjectBuilder=e,r.parse=function(t,r){"string"!=typeof t&&(t=String(t));const a=new e;for(const e of n(t))a.handle(e);if(void 0===a.value)throw new SyntaxError("Unexpected end of JSON input");return a.value},r})); +//# sourceMappingURL=json-pull-parser.cjs.map diff --git a/dist/json-pull-parser.cjs.map b/dist/json-pull-parser.cjs.map new file mode 100644 index 0000000..5ca7719 --- /dev/null +++ b/dist/json-pull-parser.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"json-pull-parser.cjs","sources":["../src/builder.js","../src/parser.js"],"sourcesContent":["/**\n *\n */\nclass ObjectBuilder {\n /**\n *\n */\n constructor () {\n this.handler = {\n ref: this,\n add (value) { this.ref.value = value; return value; }\n };\n }\n\n /**\n * @returns {void}\n */\n startObject () {\n this.handler = {\n old: this.handler,\n key: null,\n ref: this.handler.add({}),\n add (value) {\n if (this.key === null) this.key = value;\n else { this.ref[this.key] = value; this.key = null; }\n return value;\n }\n };\n }\n\n /**\n * @returns {void}\n */\n endObject () {\n this.handler = this.handler.old;\n }\n\n /**\n * @returns {void}\n */\n startArray () {\n this.handler = {\n old: this.handler,\n ref: this.handler.add([]),\n add (value) {\n this.ref.push(value);\n return value;\n }\n };\n }\n\n /**\n * @param {JSONValueOrError} value\n * @returns {void}\n */\n add (value) {\n this.handler.add(value);\n }\n\n /**\n * @param {Token|TokenEnd} token\n * @returns {void}\n */\n handle (token) {\n switch (token.type) {\n case '{':\n this.startObject();\n break;\n case '}':\n this.endObject();\n break;\n case '[':\n this.startArray();\n break;\n case ']':\n this.endArray();\n break;\n case 'string':\n case 'number':\n case 'true':\n case 'false':\n case 'null':\n this.add(token.value);\n break;\n case 'error':\n throw new SyntaxError(token.value.message);\n default:\n break;\n }\n }\n}\n\nObjectBuilder.prototype.endArray = ObjectBuilder.prototype.endObject;\n\nexport default ObjectBuilder;\n","import ObjectBuilder from './builder.js';\n\n/**\n * @typedef {PlainObject} State\n * @property {string} s Text\n * @property {boolean} [d=false] Done\n * @property {Integer} [f=0] Position\n * @property {Integer} [l] Defaults to text length\n * @property {Integer} [e=VALUE] Expect\n * @property {Integer} [c=0] Column\n * @property {Integer} [r=1] Row\n * @property {Integer[]} [x=[]]\n*/\n\n/**\n* @typedef {string} Type\n*/\n\n/**\n * @typedef {PlainObject} TokenPlain\n * @property {Type} type\n * @property {Integer} first\n * @property {Integer} last\n*/\n\n/**\n * @typedef {TokenPlain} TokenEnd\n */\n\n/**\n * @typedef {SyntaxError|string|Float|boolean|null} JSONValueOrError\n */\n\n/**\n * @typedef {TokenPlain} Token\n * @property {JSONValueOrError} value\n */\n\n/**\n * @typedef {Token} TokenWithSource\n * @property {string} source\n */\n\nconst VALUE = 1;\nconst KEY = 2;\nconst COMMA = 4;\nconst COLON = 8;\nconst CLOSE = 16;\nconst OBJECT = 32;\nconst ARRAY = 64;\n\n/**\n *\n */\nclass JSONPullParser {\n /**\n * @param {string} text\n * @returns {void}\n */\n constructor (text) {\n this.text = text;\n }\n\n /**\n * @returns {Iterator}\n */\n [Symbol.iterator] () {\n return tokenIterator(this.text);\n }\n\n /**\n * @returns {Iterator}\n */\n tokens () {\n return tokenIterator(this.text);\n }\n}\n\n/*\nif (typeof Symbol === 'object' && Symbol.iterator) {\n JSONPullParser.prototype[Symbol.iterator] = JSONPullParser.prototype.tokens;\n}\n*/\n\nJSONPullParser.StartDocument = '<';\nJSONPullParser.EndDocument = '>';\nJSONPullParser.StartObject = '{';\nJSONPullParser.EndObject = '}';\nJSONPullParser.StartArray = '[';\nJSONPullParser.EndArray = ']';\nJSONPullParser.String = 'string';\nJSONPullParser.Number = 'number';\nJSONPullParser.TrueLiteral = 'true';\nJSONPullParser.FalseLiteral = 'false';\nJSONPullParser.NullLiteral = 'null';\nJSONPullParser.Whitespace = 'ws';\nJSONPullParser.Error = 'error';\n\nJSONPullParser.ObjectBuilder = ObjectBuilder;\n\n/**\n* @callback ReviverFunction\n* @returns {JSON}\n*/\n\n/**\n* @param {string} text\n* @param {ReviverFunction} reviver\n*/\nJSONPullParser.parse = function (text, reviver) {\n if (typeof text !== 'string') text = String(text);\n const builder = new ObjectBuilder();\n for (const token of tokenIterator(text)) {\n // console.log(\"token: \" + token.type);\n builder.handle(token);\n }\n if (typeof builder.value === 'undefined') {\n throw new SyntaxError('Unexpected end of JSON input');\n }\n return builder.value;\n};\n\n/**\n * @param {string} text\n * @yields {Token|TokenEnd}\n * @returns {void}\n */\nfunction * tokenIterator (text) {\n const state = {\n s: text,\n d: false, // done\n f: 0, // position\n l: text.length, // length\n e: VALUE, // expect\n c: 0, // column\n r: 1, // row\n x: []\n };\n\n while (true) {\n // console.log(\n // `next: ${state.f}, ${state.l}, ` +\n // `${text.charCodeAt(state.f).toString(16)}`\n // );\n if (state.f === state.l) {\n if (!state.e && !state.x.length) {\n return;\n }\n yield parserError(\n state.s, state.l, state.l, 'Unexpected end of JSON input'\n );\n }\n const token = parseValue(state);\n state.f = token.last;\n\n yield token;\n }\n}\n\n/**\n * @param {string} s\n * @param {Integer} f\n * @param {Integer} l\n * @param {string} m Message\n * @param {Integer} r\n * @returns {Token}\n */\nfunction parserError (s, f, l, m, r = 1) {\n let c = f;\n let cc = s.charCodeAt(c);\n while (cc !== 0x0A && c > 0) {\n cc = s.charCodeAt(--c);\n }\n if (cc === 0x0A) ++c;\n const str0 = 'undefined:' + r;\n const str1 = s.slice(c, f + 1);\n let str2 = '';\n for (let i = c; i < f; ++i) str2 += ' ';\n str2 += '^';\n\n const err = new SyntaxError(str0 + '\\n' + str1 + '\\n' + str2 + '\\n\\n' + m);\n return {\n type: JSONPullParser.Error,\n value: err,\n first: f,\n last: l\n };\n}\n\n/**\n * @param {string} s\n * @param {Integer} f\n * @param {Integer} l\n * @returns {Token}\n */\nfunction parseObjectStart (s, f, l) {\n return {\n type: JSONPullParser.StartObject,\n value: '{',\n first: f,\n last: f + 1\n };\n}\n\n/**\n * @param {string} s\n * @param {Integer} f\n * @param {Integer} l\n * @returns {Token}\n */\nfunction parseObjectEnd (s, f, l) {\n return {\n type: JSONPullParser.EndObject,\n value: '}',\n first: f,\n last: f + 1\n };\n}\n/**\n * @param {string} s\n * @param {Integer} f\n * @param {Integer} l\n * @returns {Token}\n */\nfunction parseArrayStart (s, f, l) {\n return {\n type: JSONPullParser.StartArray,\n value: '[',\n first: f,\n last: f + 1\n };\n}\n\n/**\n * @param {string} s\n * @param {Integer} f\n * @param {Integer} l\n * @returns {Token}\n */\nfunction parseArrayEnd (s, f, l) {\n return {\n type: JSONPullParser.EndArray,\n value: ']',\n first: f,\n last: f + 1\n };\n}\n\n/**\n * @param {State} state\n * @returns {Token|TokenEnd}\n */\nfunction parseValue (state) {\n const {s, l} = state;\n let {f} = state;\n while (f < l) {\n state.c++;\n switch (s.charCodeAt(f)) {\n case 0x0A: // LF\n state.c = 0;\n state.r++;\n // Fallthrough\n case 0x09: // TAB\n case 0x0D: // CR\n case 0x20: // WS\n ++f; continue;\n case 0x7B: // {\n if (!(state.e & VALUE)) {\n return parserError(\n s, f, l, 'Unexpected token { in JSON at position ' + f, state.r\n );\n }\n state.e = KEY | CLOSE;\n state.x.push(OBJECT);\n return parseObjectStart(s, f, l);\n case 0x7D: // }\n if (!(state.e & CLOSE) || state.x.pop() !== OBJECT) {\n return parserError(\n s, f, l, 'Unexpected token } in JSON at position ' + f, state.r\n );\n }\n state.e = state.x.length > 0 ? COMMA | CLOSE : 0;\n return parseObjectEnd(s, f, l);\n case 0x5B: // [\n if (!(state.e & VALUE)) {\n return parserError(\n s, f, l, 'Unexpected token [ in JSON at position ' + f, state.r\n );\n }\n state.e = VALUE | CLOSE;\n state.x.push(ARRAY);\n return parseArrayStart(s, f, l);\n case 0x5D: // ]\n if (!(state.e & CLOSE) || state.x.pop() !== ARRAY) {\n return parserError(\n s, f, l, 'Unexpected token ] in JSON at position ' + f, state.r\n );\n }\n state.e = state.x.length > 0 ? COMMA | CLOSE : 0;\n return parseArrayEnd(s, f, l);\n case 0x3A: // :\n if (!(state.e & COLON)) {\n return parserError(\n s, f, l, 'Unexpected token : in JSON at position ' + f, state.r\n );\n }\n state.e = VALUE;\n ++f; continue;\n case 0x2C: // ,\n if (!(state.e & COMMA)) {\n return parserError(\n s, f, l, 'Unexpected token , in JSON at position ' + f, state.r\n );\n }\n if (state.x.length > 0 && state.x[state.x.length - 1] === OBJECT) {\n state.e = KEY;\n } else {\n state.e = VALUE;\n }\n ++f; continue;\n case 0x2D: // -\n case 0x30: // 0\n case 0x31: // 1\n case 0x32: // 2\n case 0x33: // 3\n case 0x34: // 4\n case 0x35: // 5\n case 0x36: // 6\n case 0x37: // 7\n case 0x38: // 8\n case 0x39: // 9\n if (!(state.e & VALUE)) {\n return parserError(\n s, f, l, 'Unexpected number in JSON at position ' + f, state.r\n );\n }\n state.e = state.x.length > 0 ? COMMA | CLOSE : 0;\n return parseNumber(s, f, l);\n case 0x22:\n if (state.e & KEY) {\n state.e = COLON;\n return parseString(s, f, l);\n }\n if (!(state.e & VALUE)) {\n return parserError(\n s, f, l, 'Unexpected string in JSON at position ' + f, state.r\n );\n }\n state.e = state.x.length > 0 ? COMMA | CLOSE : 0;\n return parseString(s, f, l);\n case 0x74: // t\n if (!(state.e & VALUE)) {\n return parserError(\n s, f, l, 'Unexpected token t in JSON at position ' + f, state.r\n );\n }\n state.e = state.x.length > 0 ? COMMA | CLOSE : 0;\n return parseTrue(s, f, l);\n case 0x66: // f\n if (!(state.e & VALUE)) {\n return parserError(\n s, f, l, 'Unexpected token f in JSON at position ' + f, state.r\n );\n }\n state.e = state.x.length > 0 ? COMMA | CLOSE : 0;\n return parseFalse(s, f, l);\n case 0x6E: // n\n if (!(state.e & VALUE)) {\n return parserError(\n s, f, l, 'Unexpected token n in JSON at position ' + f, state.r\n );\n }\n state.e = state.x.length > 0 ? COMMA | CLOSE : 0;\n return parseNull(s, f, l);\n default: return parserError(\n s, f, l, 'Unexpected token ' + s[f] + ' in JSON at position ' + f, state.r\n );\n }\n }\n return {\n type: JSONPullParser.EndDocument,\n first: l,\n last: l\n };\n}\n\n/**\n * @param {string} s\n * @param {Integer} f\n * @param {Integer} l\n * @returns {Token}\n */\nfunction parseNumber (s, f, l) {\n let c = f;\n\n let cc = s.charCodeAt(c++);\n\n if (cc === 0x2D /* - */) cc = s.charCodeAt(c++);\n\n if (cc !== 0x30 /* 0 */) {\n while (cc >= 0x30 /* 0 */ && cc <= 0x39 /* 9 */) {\n cc = s.charCodeAt(c++);\n }\n } else {\n cc = s.charCodeAt(c++);\n }\n\n if (cc === 0x2E /* . */) {\n cc = s.charCodeAt(c++);\n while (cc >= 0x30 && cc <= 0x39) cc = s.charCodeAt(c++);\n }\n\n if (cc === 0x65 /* e */|| cc === 0x45 /* E */) {\n cc = s.charCodeAt(c++);\n if (cc === 0x2B /* + */|| cc === 0x2D /* - */) cc = s.charCodeAt(c++);\n if (cc < 0x30 || cc > 0x39) {\n return parserError(\n s, c - 1, l,\n 'Unexpected token ' + s[c - 1] + ' in JSON at position ' + (c - 1)\n );\n }\n if (c >= l) return parserError(s, f, l, 'Unexpected end of JSON input');\n while (cc >= 0x30 /* 0 */ && cc <= 0x39 /* 9 */) cc = s.charCodeAt(c++);\n }\n\n return {\n type: JSONPullParser.Number,\n value: Number.parseFloat(\n s.slice(f, c - 1)\n ), // parseFloat seems to be faster than JSON.parse\n first: f,\n last: c - 1\n };\n}\n\n// ECMA-404 section 9\n/**\n * @param {string} s\n * @param {Integer} f\n * @param {Integer} l\n * @returns {TokenWithSource}\n */\nfunction parseString (s, f, l) {\n let c = f + 1;\n while (c < l) {\n let cc = s.charCodeAt(c++);\n if (cc === 0x22 /* \" */) break;\n else if (cc === 0x5C /* \\ */) {\n cc = s.charCodeAt(c++);\n if (cc === 0x75 /* u */) {\n c += 4;\n if (c > l) return parserError(s, l, l, 'Unexpected end of JSON input');\n }\n }\n }\n // console.log(`string: ${c}, ${f}, ${s.substring(f, c)}`);\n return {\n type: JSONPullParser.String,\n value: JSON.parse(s.slice(f, c)),\n source: s,\n first: f,\n last: c\n };\n}\n\n/**\n * @param {string} s\n * @param {Integer} f\n * @param {Integer} l\n * @param {Integer[]} ccs\n * @param {TokenWithSource} success\n * @returns {token}\n */\nfunction match (s, f, l, ccs, success) {\n if (f + ccs.length > l) {\n return parserError(s, l, l, 'Unexpected end of JSON input');\n }\n for (const cc_ of ccs) {\n const cc = s.charCodeAt(f++);\n if (cc !== cc_) {\n return parserError(\n s, f, l,\n 'Unexpected token ' + s[f - 1] + ' in JSON at position ' + (f - 1)\n );\n }\n }\n return success;\n}\n\n/**\n * @param {string} s\n * @param {Integer} f\n * @param {Integer} l\n * @returns {TokenWithSource}\n */\nfunction parseTrue (s, f, l) {\n return match(s, f, l, [0x74, 0x72, 0x75, 0x65], {\n type: JSONPullParser.TrueLiteral,\n value: true,\n source: s,\n first: f,\n last: f + 4\n });\n}\n\n/**\n * @param {string} s\n * @param {Integer} f\n * @param {Integer} l\n * @returns {TokenWithSource}\n */\nfunction parseFalse (s, f, l) {\n return match(s, f, l, [0x66, 0x61, 0x6C, 0x73, 0x65], {\n type: JSONPullParser.FalseLiteral,\n value: false,\n source: s,\n first: f,\n last: f + 5\n });\n}\n\n/**\n * @param {string} s\n * @param {Integer} f\n * @param {Integer} l\n * @returns {TokenWithSource}\n */\nfunction parseNull (s, f, l) {\n return match(s, f, l, [0x6E, 0x75, 0x6C, 0x6C], {\n type: JSONPullParser.NullLiteral,\n value: null,\n source: s,\n first: f,\n last: f + 4\n });\n}\n\nexport default JSONPullParser;\n"],"names":["ObjectBuilder","[object Object]","this","handler","ref","value","old","key","add","push","token","type","startObject","endObject","startArray","endArray","SyntaxError","message","prototype","CLOSE","JSONPullParser","text","Symbol","iterator","tokenIterator","state","s","d","f","l","length","e","c","r","x","parserError","parseValue","last","m","cc","charCodeAt","str0","str1","slice","str2","i","err","Error","first","parseObjectStart","StartObject","parseObjectEnd","EndObject","parseArrayStart","StartArray","parseArrayEnd","EndArray","KEY","pop","COMMA","VALUE","parseNumber","parseString","parseTrue","parseFalse","parseNull","EndDocument","Number","parseFloat","String","JSON","parse","source","match","ccs","success","cc_","TrueLiteral","FalseLiteral","NullLiteral","StartDocument","Whitespace","reviver","builder","handle"],"mappings":"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"} \ No newline at end of file diff --git a/dist/json-pull-parser.js b/dist/json-pull-parser.js index 7ca7cf7..448bbcd 100644 --- a/dist/json-pull-parser.js +++ b/dist/json-pull-parser.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.JSONPullParser=t():e.JSONPullParser=t()}(this,function(){return function(e){function t(n){if(r[n])return r[n].exports;var o=r[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var r={};return t.m=e,t.c=r,t.i=function(e){return e},t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=2)}([function(e,t,r){"use strict";function n(e){this.text=e}function o(e){this.s=e,this.f=0,this.l=0|e.length,this.cc=0}function a(e){var t={d:!1,s:e,f:0,l:e.length,e:v,c:0,r:1,x:[]};return{next:function(){if(t.f===t.l)return t.e||t.x.length>0?{done:!1,value:i(t.s,t.l,t.l,"Unexpected end of JSON input")}:{done:!0};var e=l(t);return t.f=e.last,{value:e,done:!1}}}}function i(e,t,r,o,a){a=a||1;for(var i=t,s=e.charCodeAt(i);10!==s&&i>0;)s=e.charCodeAt(--i);10===s&&++i;for(var u="undefined:"+a,c=e.substring(i,t+1),f="",l=i;l0?g|k:0,u(t,r,o)):i(t,r,o,"Unexpected token } in JSON at position "+r,e.r);case 91:return e.e&v?(e.e=v|k,e.x.push(J),c(t,r,o)):i(t,r,o,"Unexpected token [ in JSON at position "+r,e.r);case 93:return e.e&k&&e.x.pop()===J?(e.e=e.x.length>0?g|k:0,f(t,r,o)):i(t,r,o,"Unexpected token ] in JSON at position "+r,e.r);case 58:if(!(e.e&N))return i(t,r,o,"Unexpected token : in JSON at position "+r,e.r);e.e=v,++r;continue;case 44:if(!(e.e&g))return i(t,r,o,"Unexpected token , in JSON at position "+r,e.r);e.x.length>0&&e.x[e.x.length-1]===A?e.e=O:e.e=v,++r;continue;case 45:case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return e.e&v?(e.e=e.x.length>0?g|k:0,p(t,r,o)):i(t,r,o,"Unexpected number in JSON at position "+r,e.r);case 34:return e.e&O?(e.e=N,d(t,r,o)):e.e&v?(e.e=e.x.length>0?g|k:0,d(t,r,o)):i(t,r,o,"Unexpected string in JSON at position "+r,e.r);case 116:return e.e&v?(e.e=e.x.length>0?g|k:0,x(t,r,o)):i(t,r,o,"Unexpected token t in JSON at position "+r,e.r);case 102:return e.e&v?(e.e=e.x.length>0?g|k:0,y(t,r,o)):i(t,r,o,"Unexpected token f in JSON at position "+r,e.r);case 110:return e.e&v?(e.e=e.x.length>0?g|k:0,b(t,r,o)):i(t,r,o,"Unexpected token n in JSON at position "+r,e.r);default:return i(t,r,o,"Unexpected token "+t[r]+" in JSON at position "+r,e.r)}return{type:n.EndDocument,first:o,last:o}}function p(e,t,r){var o=t,a=e.charCodeAt(o++);if(45===a&&(a=e.charCodeAt(o++)),48!==a)for(;a>=48&&a<=57;)a=e.charCodeAt(o++);else a=e.charCodeAt(o++);if(46===a)for(a=e.charCodeAt(o++);a>=48&&a<=57;)a=e.charCodeAt(o++);if(101===a||69===a){if(a=e.charCodeAt(o++),43!==a&&45!==a||(a=e.charCodeAt(o++)),a<48||a>57)return i(e,o-1,r,"Unexpected token "+e[o-1]+" in JSON at position "+(o-1));if(o>=r)return i(e,t,r,"Unexpected end of JSON input");for(;a>=48&&a<=57;)a=e.charCodeAt(o++)}return{type:n.Number,value:parseFloat(e.substring(t,o-1)),first:t,last:o-1}}function d(e,t,r){for(var o=t+1;or)))return i(e,r,r,"Unexpected end of JSON input")}return{type:n.String,value:JSON.parse(e.substring(t,o)),source:e,first:t,last:o}}function h(e,t,r,n,o){if(t+n.length>r)return i(e,r,r,"Unexpected end of JSON input");for(var a=0;a",n.StartObject="{",n.EndObject="}",n.StartArray="[",n.EndArray="]",n.String="string",n.Number="number",n.TrueLiteral="true",n.FalseLiteral="false",n.NullLiteral="null",n.Whitespace="ws",n.Error="error",o.prototype.next=function(){return!(this.f>=this.l)&&(this.cc=0|source.charCodeAt(this.f++),!0)},o.prototype.code=function(){return this.cc},o.prototype.expect=function(e){},n.ObjectBuilder=S,n.parse=function(e,t){"string"!=typeof e&&(e=""+e);for(var r=new S,n=a(e),o=n.next();!o.done;o=n.next()){var i=o.value;r.handle(i)}if("undefined"==typeof r.value)throw new SyntaxError("Unexpected end of JSON input");return r.value},e.exports=n},function(e,t){function r(){this.handler={ref:this,add:function(e){return this.ref.value=e,e}}}r.prototype.startObject=function(){this.handler={old:this.handler,key:null,ref:this.handler.add({}),add:function(e){return null===this.key?this.key=e:(this.ref[this.key]=e,this.key=null),e}}},r.prototype.endObject=function(){this.handler=this.handler.old},r.prototype.startArray=function(){this.handler={old:this.handler,ref:this.handler.add([]),add:function(e){return this.ref.push(e),e}}},r.prototype.endArray=r.prototype.endObject,r.prototype.add=function(e){this.handler.add(e)},r.prototype.handle=function(e){switch(e.type){case"{":this.startObject();break;case"}":this.endObject();break;case"[":this.startArray();break;case"]":this.endArray();break;case"string":case"number":case"true":case"false":case"null":this.add(e.value);break;case"error":throw new SyntaxError(e.value.message)}},e.exports=r},function(e,t,r){e.exports=r(0)}])}); -//# sourceMappingURL=json-pull-parser.js.map \ No newline at end of file +class e{constructor(){this.handler={ref:this,add(e){return this.ref.value=e,e}}}startObject(){this.handler={old:this.handler,key:null,ref:this.handler.add({}),add(e){return null===this.key?this.key=e:(this.ref[this.key]=e,this.key=null),e}}}endObject(){this.handler=this.handler.old}startArray(){this.handler={old:this.handler,ref:this.handler.add([]),add(e){return this.ref.push(e),e}}}add(e){this.handler.add(e)}handle(e){switch(e.type){case"{":this.startObject();break;case"}":this.endObject();break;case"[":this.startArray();break;case"]":this.endArray();break;case"string":case"number":case"true":case"false":case"null":this.add(e.value);break;case"error":throw new SyntaxError(e.value.message)}}}e.prototype.endArray=e.prototype.endObject;class t{constructor(e){this.text=e}[Symbol.iterator](){return r(this.text)}tokens(){return r(this.text)}}function*r(e){const t={s:e,d:!1,f:0,l:e.length,e:1,c:0,r:1,x:[]};for(;;){if(t.f===t.l){if(!t.e&&!t.x.length)return;yield n(t.s,t.l,t.l,"Unexpected end of JSON input")}const e=c(t);t.f=e.last,yield e}}function n(e,r,n,a,s=1){let i=r,o=e.charCodeAt(i);for(;10!==o&&i>0;)o=e.charCodeAt(--i);10===o&&++i;const c="undefined:"+s,u=e.slice(i,r+1);let l="";for(let e=i;e0?20:0,s(0,d)):n(r,d,c,"Unexpected token } in JSON at position "+d,e.r);case 91:return 1&e.e?(e.e=17,e.x.push(64),i(0,d)):n(r,d,c,"Unexpected token [ in JSON at position "+d,e.r);case 93:return 16&e.e&&64===e.x.pop()?(e.e=e.x.length>0?20:0,o(0,d)):n(r,d,c,"Unexpected token ] in JSON at position "+d,e.r);case 58:if(!(8&e.e))return n(r,d,c,"Unexpected token : in JSON at position "+d,e.r);e.e=1,++d;continue;case 44:if(!(4&e.e))return n(r,d,c,"Unexpected token , in JSON at position "+d,e.r);e.x.length>0&&32===e.x[e.x.length-1]?e.e=2:e.e=1,++d;continue;case 45:case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return 1&e.e?(e.e=e.x.length>0?20:0,u(r,d,c)):n(r,d,c,"Unexpected number in JSON at position "+d,e.r);case 34:return 2&e.e?(e.e=8,l(r,d,c)):1&e.e?(e.e=e.x.length>0?20:0,l(r,d,c)):n(r,d,c,"Unexpected string in JSON at position "+d,e.r);case 116:return 1&e.e?(e.e=e.x.length>0?20:0,f(r,d,c)):n(r,d,c,"Unexpected token t in JSON at position "+d,e.r);case 102:return 1&e.e?(e.e=e.x.length>0?20:0,h(r,d,c)):n(r,d,c,"Unexpected token f in JSON at position "+d,e.r);case 110:return 1&e.e?(e.e=e.x.length>0?20:0,p(r,d,c)):n(r,d,c,"Unexpected token n in JSON at position "+d,e.r);default:return n(r,d,c,"Unexpected token "+r[d]+" in JSON at position "+d,e.r)}return{type:t.EndDocument,first:c,last:c}}function u(e,r,a){let s=r,i=e.charCodeAt(s++);if(45===i&&(i=e.charCodeAt(s++)),48!==i)for(;i>=48&&i<=57;)i=e.charCodeAt(s++);else i=e.charCodeAt(s++);if(46===i)for(i=e.charCodeAt(s++);i>=48&&i<=57;)i=e.charCodeAt(s++);if(101===i||69===i){if(i=e.charCodeAt(s++),43!==i&&45!==i||(i=e.charCodeAt(s++)),i<48||i>57)return n(e,s-1,a,"Unexpected token "+e[s-1]+" in JSON at position "+(s-1));if(s>=a)return n(e,r,a,"Unexpected end of JSON input");for(;i>=48&&i<=57;)i=e.charCodeAt(s++)}return{type:t.Number,value:Number.parseFloat(e.slice(r,s-1)),first:r,last:s-1}}function l(e,r,a){let s=r+1;for(;sa)))return n(e,a,a,"Unexpected end of JSON input")}return{type:t.String,value:JSON.parse(e.slice(r,s)),source:e,first:r,last:s}}function d(e,t,r,a,s){if(t+a.length>r)return n(e,r,r,"Unexpected end of JSON input");for(const s of a){if(e.charCodeAt(t++)!==s)return n(e,t,r,"Unexpected token "+e[t-1]+" in JSON at position "+(t-1))}return s}function f(e,r,n){return d(e,r,n,[116,114,117,101],{type:t.TrueLiteral,value:!0,source:e,first:r,last:r+4})}function h(e,r,n){return d(e,r,n,[102,97,108,115,101],{type:t.FalseLiteral,value:!1,source:e,first:r,last:r+5})}function p(e,r,n){return d(e,r,n,[110,117,108,108],{type:t.NullLiteral,value:null,source:e,first:r,last:r+4})}t.StartDocument="<",t.EndDocument=">",t.StartObject="{",t.EndObject="}",t.StartArray="[",t.EndArray="]",t.String="string",t.Number="number",t.TrueLiteral="true",t.FalseLiteral="false",t.NullLiteral="null",t.Whitespace="ws",t.Error="error",t.ObjectBuilder=e,t.parse=function(t,n){"string"!=typeof t&&(t=String(t));const a=new e;for(const e of r(t))a.handle(e);if(void 0===a.value)throw new SyntaxError("Unexpected end of JSON input");return a.value};export default t; +//# sourceMappingURL=json-pull-parser.js.map diff --git a/dist/json-pull-parser.js.map b/dist/json-pull-parser.js.map index 6118b93..8c0bf2d 100644 --- a/dist/json-pull-parser.js.map +++ b/dist/json-pull-parser.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///dist/json-pull-parser.js","webpack:///webpack/bootstrap fadce7542f432126fdff","webpack:///./src/parser.js","webpack:///./src/builder.js","webpack:///./index.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","i","l","call","m","c","value","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","JSONPullParser","text","CodePointIterator","source","f","length","cc","TokenIterator","state","e","VALUE","r","x","next","done","ParserError","token","parseValue","last","charCodeAt","str0","str1","substring","str2","err","SyntaxError","type","Error","first","parseObjectStart","StartObject","parseObjectEnd","EndObject","parseArrayStart","StartArray","parseArrayEnd","EndArray","KEY","CLOSE","push","OBJECT","pop","COMMA","ARRAY","COLON","parseNumber","parseString","parseTrue","parseFalse","parseNull","EndDocument","Number","parseFloat","String","JSON","parse","match","ccs","success","TrueLiteral","FalseLiteral","NullLiteral","ObjectBuilder","Symbol","iterator","tokens","StartDocument","Whitespace","code","expect","reviever","builder","it","step","handle","handler","ref","add","startObject","old","key","endObject","startArray","endArray","message"],"mappings":"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","file":"dist/json-pull-parser.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"JSONPullParser\"] = factory();\n\telse\n\t\troot[\"JSONPullParser\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"JSONPullParser\"] = factory();\n\telse\n\t\troot[\"JSONPullParser\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 2);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar ObjectBuilder = __webpack_require__(1);\n\nvar VALUE = 1;\nvar KEY = 2;\nvar COMMA = 4;\nvar COLON = 8;\nvar CLOSE = 16;\nvar OBJECT = 32;\nvar ARRAY = 64;\n\nfunction JSONPullParser(text)\n{\n this.text = text;\n}\n\nJSONPullParser.prototype[Symbol.iterator] = function()\n{\n return TokenIterator(this.text);\n}\n\nJSONPullParser.prototype.tokens = function()\n{\n return TokenIterator(this.text);\n}\n\nif (typeof Symbol === 'object' && Symbol.iterator) {\n JSONPullParser.prototype[Symbol.iterator] = JSONPullParser.prototype.tokens;\n}\n\nJSONPullParser.StartDocument = '<';\nJSONPullParser.EndDocument = '>';\nJSONPullParser.StartObject = '{';\nJSONPullParser.EndObject = '}';\nJSONPullParser.StartArray = '[';\nJSONPullParser.EndArray = ']';\nJSONPullParser.String = 'string';\nJSONPullParser.Number = 'number';\nJSONPullParser.TrueLiteral = 'true';\nJSONPullParser.FalseLiteral = 'false';\nJSONPullParser.NullLiteral = 'null';\nJSONPullParser.Whitespace = 'ws';\nJSONPullParser.Error = 'error';\n\nfunction CodePointIterator(source)\n{\n this.s = source;\n this.f = 0;\n this.l = source.length | 0;\n this.cc = 0;\n}\n\nCodePointIterator.prototype.next = function ()\n{\n if (this.f >= this.l) return false;\n this.cc = source.charCodeAt(this.f++) | 0;\n return true;\n}\n\nCodePointIterator.prototype.code = function ()\n{\n return this.cc;\n}\n\nCodePointIterator.prototype.expect = function (code)\n{\n}\n\nJSONPullParser.ObjectBuilder = ObjectBuilder;\n\nJSONPullParser.parse = function(text, reviever)\n{\n if (typeof text !== 'string') text = '' + text;\n var builder = new ObjectBuilder();\n var it = TokenIterator(text);\n for (var step = it.next();!step.done; step = it.next()) {\n var token = step.value;\n // console.log(\"token: \" + token.type);\n builder.handle(token);\n }\n if (typeof builder.value === 'undefined') throw new SyntaxError('Unexpected end of JSON input');\n return builder.value;\n}\n\nfunction TokenIterator(text)\n{\n var state = {\n d: false, // done\n s: text,\n f: 0, // position\n l: text.length, // length\n e: VALUE, // expect\n c: 0, // column\n r: 1, // row\n x: []\n };\n return {\n next: function () {\n // console.log(`next: ${state.f}, ${state.l}, ${text.charCodeAt(state.f).toString(16)}`)\n if (state.f === state.l) {\n return (state.e || state.x.length > 0)\n ? { done: false, value: ParserError(state.s, state.l, state.l, 'Unexpected end of JSON input') }\n : { done: true };\n }\n var token = parseValue(state);\n state.f = token.last;\n return { value: token, done: false };\n }\n };\n}\n\nfunction ParserError(s, f, l, m, r)\n{\n r = r || 1;\n var c = f;\n var cc = s.charCodeAt(c);\n while (cc !== 0x0a && c > 0) {\n cc = s.charCodeAt(--c);\n }\n if (cc === 0x0a) ++c;\n var str0 = 'undefined:' + r;\n var str1 = s.substring(c, f+1);\n var str2 = '';\n for (var i = c;i < f;++i) str2 += ' ';\n str2 += '^';\n\n var err = new SyntaxError(str0 + \"\\n\" + str1 + \"\\n\" + str2 + \"\\n\\n\" + m);\n return {\n type: JSONPullParser.Error,\n value: err,\n first: f,\n last: l\n };\n}\n\nfunction parseObjectStart(s, f, l)\n{\n return {\n type: JSONPullParser.StartObject,\n value: '{',\n first: f,\n last: f+1\n };\n}\n\nfunction parseObjectEnd(s, f, l)\n{\n return {\n type: JSONPullParser.EndObject,\n value: '}',\n first: f,\n last: f+1\n };\n}\nfunction parseArrayStart(s, f, l)\n{\n return {\n type: JSONPullParser.StartArray,\n value: '[',\n first: f,\n last: f+1\n };\n}\n\nfunction parseArrayEnd(s, f, l)\n{\n return {\n type: JSONPullParser.EndArray,\n value: ']',\n first: f,\n last: f+1\n };\n}\n\nfunction parseValue(state)\n{\n var s = state.s;\n var f = state.f;\n var l = state.l;\n while (f < l) {\n state.c++;\n switch (s.charCodeAt(f)) {\n case 0x0a: // LF\n state.c = 0;\n state.r++;\n case 0x09: // TAB\n case 0x0d: // CR\n case 0x20: // WS\n ++f; continue;\n case 0x7b: // {\n if (!(state.e & VALUE)) return ParserError(s, f, l, 'Unexpected token { in JSON at position ' + f, state.r);\n state.e = KEY | CLOSE;\n state.x.push(OBJECT);\n return parseObjectStart(s, f, l);\n case 0x7d: // }\n if (!(state.e & CLOSE) || state.x.pop() !== OBJECT) return ParserError(s, f, l, 'Unexpected token } in JSON at position ' + f, state.r);\n state.e = state.x.length > 0 ? COMMA | CLOSE : 0;\n return parseObjectEnd(s, f, l);\n case 0x5b: // [\n if (!(state.e & VALUE)) return ParserError(s, f, l, 'Unexpected token [ in JSON at position ' + f, state.r);\n state.e = VALUE | CLOSE;\n state.x.push(ARRAY);\n return parseArrayStart(s, f, l);\n case 0x5d: // ]\n if (!(state.e & CLOSE) || state.x.pop() !== ARRAY) return ParserError(s, f, l, 'Unexpected token ] in JSON at position ' + f, state.r);\n state.e = state.x.length > 0 ? COMMA | CLOSE : 0;\n return parseArrayEnd(s, f, l);\n case 0x3a: // :\n if (!(state.e & COLON)) return ParserError(s, f, l, 'Unexpected token : in JSON at position ' + f, state.r);\n state.e = VALUE;\n ++f; continue;\n case 0x2c: // ,\n if (!(state.e & COMMA)) return ParserError(s, f, l, 'Unexpected token , in JSON at position ' + f, state.r);\n if (state.x.length > 0 && state.x[state.x.length-1] === OBJECT) state.e = KEY;\n else state.e = VALUE;\n ++f; continue;\n case 0x2d: // -\n case 0x30: // 0\n case 0x31: // 1\n case 0x32: // 2\n case 0x33: // 3\n case 0x34: // 4\n case 0x35: // 5\n case 0x36: // 6\n case 0x37: // 7\n case 0x38: // 8\n case 0x39: // 9\n if (!(state.e & VALUE)) return ParserError(s, f, l, 'Unexpected number in JSON at position ' + f, state.r);\n state.e = state.x.length > 0 ? COMMA | CLOSE : 0;\n return parseNumber(s, f, l);\n case 0x22:\n if (state.e & KEY) {\n state.e = COLON;\n return parseString(s, f, l);\n }\n if (!(state.e & VALUE)) return ParserError(s, f, l, 'Unexpected string in JSON at position ' + f, state.r);\n state.e = state.x.length > 0 ? COMMA | CLOSE : 0;\n return parseString(s, f, l);\n case 0x74: // t\n if (!(state.e & VALUE)) return ParserError(s, f, l, 'Unexpected token t in JSON at position ' + f, state.r);\n state.e = state.x.length > 0 ? COMMA | CLOSE : 0;\n return parseTrue(s, f, l);\n case 0x66: // f\n if (!(state.e & VALUE)) return ParserError(s, f, l, 'Unexpected token f in JSON at position ' + f, state.r);\n state.e = state.x.length > 0 ? COMMA | CLOSE : 0;\n return parseFalse(s, f, l);\n case 0x6e: // n\n if (!(state.e & VALUE)) return ParserError(s, f, l, 'Unexpected token n in JSON at position ' + f, state.r);\n state.e = state.x.length > 0 ? COMMA | CLOSE : 0;\n return parseNull(s, f, l);\n default: return ParserError(s, f, l, 'Unexpected token ' + s[f] + ' in JSON at position ' + f, state.r);\n }\n }\n return {\n type: JSONPullParser.EndDocument,\n first: l,\n last: l,\n };\n}\n\nfunction parseNumber(s, f, l)\n{\n var c = f;\n\n var cc = s.charCodeAt(c++);\n\n if (cc === 0x2d /* - */) cc = s.charCodeAt(c++);\n\n if (cc !== 0x30 /* 0 */) {\n while (cc >= 0x30 /* 0 */ && cc <= 0x39 /* 9 */) {\n cc = s.charCodeAt(c++);\n }\n }\n else {\n cc = s.charCodeAt(c++);\n }\n\n if (cc === 0x2e /* . */) {\n cc = s.charCodeAt(c++);\n while (cc >= 0x30 && cc <= 0x39) cc = s.charCodeAt(c++);\n }\n\n if (cc === 0x65 /* e */|| cc === 0x45 /* E */) {\n cc = s.charCodeAt(c++);\n if (cc === 0x2b /* + */|| cc === 0x2d /* - */) cc = s.charCodeAt(c++);\n if (cc < 0x30 || cc > 0x39) return ParserError(s, c-1, l, 'Unexpected token ' + s[c-1] + ' in JSON at position ' + (c-1));\n if (c >= l) return ParserError(s, f, l, 'Unexpected end of JSON input');\n while (cc >= 0x30 /* 0 */ && cc <= 0x39 /* 9 */) cc = s.charCodeAt(c++);\n\n }\n\n return {\n type: JSONPullParser.Number,\n value: parseFloat(s.substring(f, c-1)), // parseFloat seems to be faster than JSON.parse\n first: f,\n last: c-1\n };\n\n}\n\n// ECMA-404 section 9\nfunction parseString(s, f, l)\n{\n var c = f+1;\n while (c < l) {\n var cc = s.charCodeAt(c++);\n if (cc === 0x22 /* \" */) break;\n else if (cc === 0x5c /* \\ */) {\n cc = s.charCodeAt(c++);\n if (cc === 0x75 /* u */) {\n c += 4;\n if (c > l) return ParserError(s, l, l, 'Unexpected end of JSON input');\n }\n }\n }\n // console.log(`string: ${c}, ${f}, ${s.substring(f, c)}`);\n return {\n type: JSONPullParser.String,\n value: JSON.parse(s.substring(f, c)),\n source: s,\n first: f,\n last: c\n };\n}\n\nfunction match(s, f, l, ccs, success)\n{\n if (f + ccs.length > l) return ParserError(s, l, l, 'Unexpected end of JSON input');\n for (var i = 0;i < ccs.length; ++i) {\n var cc = s.charCodeAt(f++);\n if (cc !== ccs[i]) return ParserError(s, f, l, 'Unexpected token ' + s[f-1] + ' in JSON at position ' + (f-1));\n }\n return success;\n}\n\nfunction parseTrue(s, f, l)\n{\n return match(s, f, l, [0x74, 0x72, 0x75, 0x65], {\n type: JSONPullParser.TrueLiteral,\n value: true,\n source: s,\n first: f,\n last: f+4\n });\n}\n\nfunction parseFalse(s, f, l)\n{\n return match(s, f, l, [0x66, 0x61, 0x6c, 0x73, 0x65], {\n type: JSONPullParser.FalseLiteral,\n value: false,\n source: s,\n first: f,\n last: f+5\n });\n}\n\nfunction parseNull(s, f, l)\n{\n return match(s, f, l, [0x6e, 0x75, 0x6c, 0x6c], {\n type: JSONPullParser.NullLiteral,\n value: null,\n source: s,\n first: f,\n last: f+4\n });\n}\n\nmodule.exports = JSONPullParser;\n\n\n/***/ },\n/* 1 */\n/***/ function(module, exports) {\n\nfunction ObjectBuilder() {\n this.handler = {\n ref: this,\n add: function (value) { this.ref.value = value; return value; },\n };\n}\n\nObjectBuilder.prototype.startObject = function () {\n this.handler = {\n old: this.handler,\n key: null,\n ref: this.handler.add({}),\n add: function (value) {\n if (this.key === null) this.key = value;\n else { this.ref[this.key] = value; this.key = null; }\n return value;\n },\n };\n}\n\nObjectBuilder.prototype.endObject = function () {\n this.handler = this.handler.old;\n}\n\nObjectBuilder.prototype.startArray = function () {\n this.handler = {\n old: this.handler,\n ref: this.handler.add([]),\n add: function (value) {\n this.ref.push(value);\n return value;\n },\n };\n}\n\nObjectBuilder.prototype.endArray = ObjectBuilder.prototype.endObject;\n\nObjectBuilder.prototype.add = function (value) {\n this.handler.add(value);\n}\n\nObjectBuilder.prototype.handle = function (token) {\n switch (token.type) {\n case '{':\n this.startObject();\n break;\n case '}':\n this.endObject();\n break;\n case '[':\n this.startArray();\n break;\n case ']':\n this.endArray();\n break;\n case 'string':\n case 'number':\n case 'true':\n case 'false':\n case 'null':\n this.add(token.value);\n break;\n case 'error':\n throw new SyntaxError(token.value.message);\n }\n}\n\nmodule.exports = ObjectBuilder;\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(0);\n\n// function printStatus(fn) {\n// switch(%GetOptimizationStatus(fn)) {\n// case 1: console.log(\"Function is optimized\"); break;\n// case 2: console.log(\"Function is not optimized\"); break;\n// case 3: console.log(\"Function is always optimized\"); break;\n// case 4: console.log(\"Function is never optimized\"); break;\n// case 6: console.log(\"Function is maybe deoptimized\"); break;\n// case 7: console.log(\"Function is optimized by TurboFan\"); break;\n// default: console.log(\"Unknown optimization status\"); break;\n// }\n// }\n\n// const N = 1e6;\n\n// var o = true;\n// // for (let i = 0;i < N;++i) {\n// // o.push(null);\n// // o.push(true);\n// // o.push(false);\n// // // o.push(((Math.random() - 0.5) * 1e12));\n// // // o.push(((Math.random() - 0.5) * 1e12).toString(36));\n// // // o[ ((Math.random() - 0.5) * 1e12).toString(36) ] = ((Math.random() - 0.5) * 1e12);\n// // }\n\n// var s = JSON.stringify(o, null, 2);\n\n// JSONPullParser.parse(s);\n// JSONPullParser.parse(s);\n// JSONPullParser.parse(s);\n\n\n// // %OptimizeFunctionOnNextCall(JSONPullParser.parse);\n// %OptimizeFunctionOnNextCall(parseTrue);\n// %OptimizeFunctionOnNextCall(parseFalse);\n// %OptimizeFunctionOnNextCall(parseNull);\n// %OptimizeFunctionOnNextCall(match);\n\n// JSONPullParser.parse(s);\n// JSONPullParser.parse(s);\n\n// printStatus(JSONPullParser.parse);\n// printStatus(parseNumber);\n// printStatus(parseString);\n// printStatus(parseTrue);\n// printStatus(parseFalse);\n// printStatus(parseNull);\n// printStatus(match);\n\n\n// // console.time('1');\n// // var o1 = JSON.parse(s);\n// // console.timeEnd('1');\n// // var s1 = JSON.stringify(o1);\n\n// console.time('2');\n// var o2 = JSONPullParser.parse(s);\n// console.timeEnd('2');\n// // var s2 = JSON.stringify(o2);\n\n// console.time('1');\n// var o1 = JSON.parse(s);\n// console.timeEnd('1');\n// var s1 = JSON.stringify(o1);\n\n\n// // console.log(s1 === s2);\n\n// // for (let i = 0;i < N;++i) {\n// // if (o1[i] !== o2[i]) {\n// // console.log(i, o[i], o1[i], o2[i]);\n// // break;\n// // }\n// // }\n\n// JSON.parse('[\"Comma after the close\"],');\n\n// JSONPullParser.parse('25');\n\n\n/***/ }\n/******/ ]);\n});\n\n\n// WEBPACK FOOTER //\n// dist/json-pull-parser.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 2);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap fadce7542f432126fdff","'use strict';\n\nvar ObjectBuilder = require('./builder');\n\nvar VALUE = 1;\nvar KEY = 2;\nvar COMMA = 4;\nvar COLON = 8;\nvar CLOSE = 16;\nvar OBJECT = 32;\nvar ARRAY = 64;\n\nfunction JSONPullParser(text)\n{\n this.text = text;\n}\n\nJSONPullParser.prototype[Symbol.iterator] = function()\n{\n return TokenIterator(this.text);\n}\n\nJSONPullParser.prototype.tokens = function()\n{\n return TokenIterator(this.text);\n}\n\nif (typeof Symbol === 'object' && Symbol.iterator) {\n JSONPullParser.prototype[Symbol.iterator] = JSONPullParser.prototype.tokens;\n}\n\nJSONPullParser.StartDocument = '<';\nJSONPullParser.EndDocument = '>';\nJSONPullParser.StartObject = '{';\nJSONPullParser.EndObject = '}';\nJSONPullParser.StartArray = '[';\nJSONPullParser.EndArray = ']';\nJSONPullParser.String = 'string';\nJSONPullParser.Number = 'number';\nJSONPullParser.TrueLiteral = 'true';\nJSONPullParser.FalseLiteral = 'false';\nJSONPullParser.NullLiteral = 'null';\nJSONPullParser.Whitespace = 'ws';\nJSONPullParser.Error = 'error';\n\nfunction CodePointIterator(source)\n{\n this.s = source;\n this.f = 0;\n this.l = source.length | 0;\n this.cc = 0;\n}\n\nCodePointIterator.prototype.next = function ()\n{\n if (this.f >= this.l) return false;\n this.cc = source.charCodeAt(this.f++) | 0;\n return true;\n}\n\nCodePointIterator.prototype.code = function ()\n{\n return this.cc;\n}\n\nCodePointIterator.prototype.expect = function (code)\n{\n}\n\nJSONPullParser.ObjectBuilder = ObjectBuilder;\n\nJSONPullParser.parse = function(text, reviever)\n{\n if (typeof text !== 'string') text = '' + text;\n var builder = new ObjectBuilder();\n var it = TokenIterator(text);\n for (var step = it.next();!step.done; step = it.next()) {\n var token = step.value;\n // console.log(\"token: \" + token.type);\n builder.handle(token);\n }\n if (typeof builder.value === 'undefined') throw new SyntaxError('Unexpected end of JSON input');\n return builder.value;\n}\n\nfunction TokenIterator(text)\n{\n var state = {\n d: false, // done\n s: text,\n f: 0, // position\n l: text.length, // length\n e: VALUE, // expect\n c: 0, // column\n r: 1, // row\n x: []\n };\n return {\n next: function () {\n // console.log(`next: ${state.f}, ${state.l}, ${text.charCodeAt(state.f).toString(16)}`)\n if (state.f === state.l) {\n return (state.e || state.x.length > 0)\n ? { done: false, value: ParserError(state.s, state.l, state.l, 'Unexpected end of JSON input') }\n : { done: true };\n }\n var token = parseValue(state);\n state.f = token.last;\n return { value: token, done: false };\n }\n };\n}\n\nfunction ParserError(s, f, l, m, r)\n{\n r = r || 1;\n var c = f;\n var cc = s.charCodeAt(c);\n while (cc !== 0x0a && c > 0) {\n cc = s.charCodeAt(--c);\n }\n if (cc === 0x0a) ++c;\n var str0 = 'undefined:' + r;\n var str1 = s.substring(c, f+1);\n var str2 = '';\n for (var i = c;i < f;++i) str2 += ' ';\n str2 += '^';\n\n var err = new SyntaxError(str0 + \"\\n\" + str1 + \"\\n\" + str2 + \"\\n\\n\" + m);\n return {\n type: JSONPullParser.Error,\n value: err,\n first: f,\n last: l\n };\n}\n\nfunction parseObjectStart(s, f, l)\n{\n return {\n type: JSONPullParser.StartObject,\n value: '{',\n first: f,\n last: f+1\n };\n}\n\nfunction parseObjectEnd(s, f, l)\n{\n return {\n type: JSONPullParser.EndObject,\n value: '}',\n first: f,\n last: f+1\n };\n}\nfunction parseArrayStart(s, f, l)\n{\n return {\n type: JSONPullParser.StartArray,\n value: '[',\n first: f,\n last: f+1\n };\n}\n\nfunction parseArrayEnd(s, f, l)\n{\n return {\n type: JSONPullParser.EndArray,\n value: ']',\n first: f,\n last: f+1\n };\n}\n\nfunction parseValue(state)\n{\n var s = state.s;\n var f = state.f;\n var l = state.l;\n while (f < l) {\n state.c++;\n switch (s.charCodeAt(f)) {\n case 0x0a: // LF\n state.c = 0;\n state.r++;\n case 0x09: // TAB\n case 0x0d: // CR\n case 0x20: // WS\n ++f; continue;\n case 0x7b: // {\n if (!(state.e & VALUE)) return ParserError(s, f, l, 'Unexpected token { in JSON at position ' + f, state.r);\n state.e = KEY | CLOSE;\n state.x.push(OBJECT);\n return parseObjectStart(s, f, l);\n case 0x7d: // }\n if (!(state.e & CLOSE) || state.x.pop() !== OBJECT) return ParserError(s, f, l, 'Unexpected token } in JSON at position ' + f, state.r);\n state.e = state.x.length > 0 ? COMMA | CLOSE : 0;\n return parseObjectEnd(s, f, l);\n case 0x5b: // [\n if (!(state.e & VALUE)) return ParserError(s, f, l, 'Unexpected token [ in JSON at position ' + f, state.r);\n state.e = VALUE | CLOSE;\n state.x.push(ARRAY);\n return parseArrayStart(s, f, l);\n case 0x5d: // ]\n if (!(state.e & CLOSE) || state.x.pop() !== ARRAY) return ParserError(s, f, l, 'Unexpected token ] in JSON at position ' + f, state.r);\n state.e = state.x.length > 0 ? COMMA | CLOSE : 0;\n return parseArrayEnd(s, f, l);\n case 0x3a: // :\n if (!(state.e & COLON)) return ParserError(s, f, l, 'Unexpected token : in JSON at position ' + f, state.r);\n state.e = VALUE;\n ++f; continue;\n case 0x2c: // ,\n if (!(state.e & COMMA)) return ParserError(s, f, l, 'Unexpected token , in JSON at position ' + f, state.r);\n if (state.x.length > 0 && state.x[state.x.length-1] === OBJECT) state.e = KEY;\n else state.e = VALUE;\n ++f; continue;\n case 0x2d: // -\n case 0x30: // 0\n case 0x31: // 1\n case 0x32: // 2\n case 0x33: // 3\n case 0x34: // 4\n case 0x35: // 5\n case 0x36: // 6\n case 0x37: // 7\n case 0x38: // 8\n case 0x39: // 9\n if (!(state.e & VALUE)) return ParserError(s, f, l, 'Unexpected number in JSON at position ' + f, state.r);\n state.e = state.x.length > 0 ? COMMA | CLOSE : 0;\n return parseNumber(s, f, l);\n case 0x22:\n if (state.e & KEY) {\n state.e = COLON;\n return parseString(s, f, l);\n }\n if (!(state.e & VALUE)) return ParserError(s, f, l, 'Unexpected string in JSON at position ' + f, state.r);\n state.e = state.x.length > 0 ? COMMA | CLOSE : 0;\n return parseString(s, f, l);\n case 0x74: // t\n if (!(state.e & VALUE)) return ParserError(s, f, l, 'Unexpected token t in JSON at position ' + f, state.r);\n state.e = state.x.length > 0 ? COMMA | CLOSE : 0;\n return parseTrue(s, f, l);\n case 0x66: // f\n if (!(state.e & VALUE)) return ParserError(s, f, l, 'Unexpected token f in JSON at position ' + f, state.r);\n state.e = state.x.length > 0 ? COMMA | CLOSE : 0;\n return parseFalse(s, f, l);\n case 0x6e: // n\n if (!(state.e & VALUE)) return ParserError(s, f, l, 'Unexpected token n in JSON at position ' + f, state.r);\n state.e = state.x.length > 0 ? COMMA | CLOSE : 0;\n return parseNull(s, f, l);\n default: return ParserError(s, f, l, 'Unexpected token ' + s[f] + ' in JSON at position ' + f, state.r);\n }\n }\n return {\n type: JSONPullParser.EndDocument,\n first: l,\n last: l,\n };\n}\n\nfunction parseNumber(s, f, l)\n{\n var c = f;\n\n var cc = s.charCodeAt(c++);\n\n if (cc === 0x2d /* - */) cc = s.charCodeAt(c++);\n\n if (cc !== 0x30 /* 0 */) {\n while (cc >= 0x30 /* 0 */ && cc <= 0x39 /* 9 */) {\n cc = s.charCodeAt(c++);\n }\n }\n else {\n cc = s.charCodeAt(c++);\n }\n\n if (cc === 0x2e /* . */) {\n cc = s.charCodeAt(c++);\n while (cc >= 0x30 && cc <= 0x39) cc = s.charCodeAt(c++);\n }\n\n if (cc === 0x65 /* e */|| cc === 0x45 /* E */) {\n cc = s.charCodeAt(c++);\n if (cc === 0x2b /* + */|| cc === 0x2d /* - */) cc = s.charCodeAt(c++);\n if (cc < 0x30 || cc > 0x39) return ParserError(s, c-1, l, 'Unexpected token ' + s[c-1] + ' in JSON at position ' + (c-1));\n if (c >= l) return ParserError(s, f, l, 'Unexpected end of JSON input');\n while (cc >= 0x30 /* 0 */ && cc <= 0x39 /* 9 */) cc = s.charCodeAt(c++);\n\n }\n\n return {\n type: JSONPullParser.Number,\n value: parseFloat(s.substring(f, c-1)), // parseFloat seems to be faster than JSON.parse\n first: f,\n last: c-1\n };\n\n}\n\n// ECMA-404 section 9\nfunction parseString(s, f, l)\n{\n var c = f+1;\n while (c < l) {\n var cc = s.charCodeAt(c++);\n if (cc === 0x22 /* \" */) break;\n else if (cc === 0x5c /* \\ */) {\n cc = s.charCodeAt(c++);\n if (cc === 0x75 /* u */) {\n c += 4;\n if (c > l) return ParserError(s, l, l, 'Unexpected end of JSON input');\n }\n }\n }\n // console.log(`string: ${c}, ${f}, ${s.substring(f, c)}`);\n return {\n type: JSONPullParser.String,\n value: JSON.parse(s.substring(f, c)),\n source: s,\n first: f,\n last: c\n };\n}\n\nfunction match(s, f, l, ccs, success)\n{\n if (f + ccs.length > l) return ParserError(s, l, l, 'Unexpected end of JSON input');\n for (var i = 0;i < ccs.length; ++i) {\n var cc = s.charCodeAt(f++);\n if (cc !== ccs[i]) return ParserError(s, f, l, 'Unexpected token ' + s[f-1] + ' in JSON at position ' + (f-1));\n }\n return success;\n}\n\nfunction parseTrue(s, f, l)\n{\n return match(s, f, l, [0x74, 0x72, 0x75, 0x65], {\n type: JSONPullParser.TrueLiteral,\n value: true,\n source: s,\n first: f,\n last: f+4\n });\n}\n\nfunction parseFalse(s, f, l)\n{\n return match(s, f, l, [0x66, 0x61, 0x6c, 0x73, 0x65], {\n type: JSONPullParser.FalseLiteral,\n value: false,\n source: s,\n first: f,\n last: f+5\n });\n}\n\nfunction parseNull(s, f, l)\n{\n return match(s, f, l, [0x6e, 0x75, 0x6c, 0x6c], {\n type: JSONPullParser.NullLiteral,\n value: null,\n source: s,\n first: f,\n last: f+4\n });\n}\n\nmodule.exports = JSONPullParser;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/parser.js\n// module id = 0\n// module chunks = 0","function ObjectBuilder() {\n this.handler = {\n ref: this,\n add: function (value) { this.ref.value = value; return value; },\n };\n}\n\nObjectBuilder.prototype.startObject = function () {\n this.handler = {\n old: this.handler,\n key: null,\n ref: this.handler.add({}),\n add: function (value) {\n if (this.key === null) this.key = value;\n else { this.ref[this.key] = value; this.key = null; }\n return value;\n },\n };\n}\n\nObjectBuilder.prototype.endObject = function () {\n this.handler = this.handler.old;\n}\n\nObjectBuilder.prototype.startArray = function () {\n this.handler = {\n old: this.handler,\n ref: this.handler.add([]),\n add: function (value) {\n this.ref.push(value);\n return value;\n },\n };\n}\n\nObjectBuilder.prototype.endArray = ObjectBuilder.prototype.endObject;\n\nObjectBuilder.prototype.add = function (value) {\n this.handler.add(value);\n}\n\nObjectBuilder.prototype.handle = function (token) {\n switch (token.type) {\n case '{':\n this.startObject();\n break;\n case '}':\n this.endObject();\n break;\n case '[':\n this.startArray();\n break;\n case ']':\n this.endArray();\n break;\n case 'string':\n case 'number':\n case 'true':\n case 'false':\n case 'null':\n this.add(token.value);\n break;\n case 'error':\n throw new SyntaxError(token.value.message);\n }\n}\n\nmodule.exports = ObjectBuilder;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/builder.js\n// module id = 1\n// module chunks = 0","module.exports = require('./src/parser.js');\n\n// function printStatus(fn) {\n// switch(%GetOptimizationStatus(fn)) {\n// case 1: console.log(\"Function is optimized\"); break;\n// case 2: console.log(\"Function is not optimized\"); break;\n// case 3: console.log(\"Function is always optimized\"); break;\n// case 4: console.log(\"Function is never optimized\"); break;\n// case 6: console.log(\"Function is maybe deoptimized\"); break;\n// case 7: console.log(\"Function is optimized by TurboFan\"); break;\n// default: console.log(\"Unknown optimization status\"); break;\n// }\n// }\n\n// const N = 1e6;\n\n// var o = true;\n// // for (let i = 0;i < N;++i) {\n// // o.push(null);\n// // o.push(true);\n// // o.push(false);\n// // // o.push(((Math.random() - 0.5) * 1e12));\n// // // o.push(((Math.random() - 0.5) * 1e12).toString(36));\n// // // o[ ((Math.random() - 0.5) * 1e12).toString(36) ] = ((Math.random() - 0.5) * 1e12);\n// // }\n\n// var s = JSON.stringify(o, null, 2);\n\n// JSONPullParser.parse(s);\n// JSONPullParser.parse(s);\n// JSONPullParser.parse(s);\n\n\n// // %OptimizeFunctionOnNextCall(JSONPullParser.parse);\n// %OptimizeFunctionOnNextCall(parseTrue);\n// %OptimizeFunctionOnNextCall(parseFalse);\n// %OptimizeFunctionOnNextCall(parseNull);\n// %OptimizeFunctionOnNextCall(match);\n\n// JSONPullParser.parse(s);\n// JSONPullParser.parse(s);\n\n// printStatus(JSONPullParser.parse);\n// printStatus(parseNumber);\n// printStatus(parseString);\n// printStatus(parseTrue);\n// printStatus(parseFalse);\n// printStatus(parseNull);\n// printStatus(match);\n\n\n// // console.time('1');\n// // var o1 = JSON.parse(s);\n// // console.timeEnd('1');\n// // var s1 = JSON.stringify(o1);\n\n// console.time('2');\n// var o2 = JSONPullParser.parse(s);\n// console.timeEnd('2');\n// // var s2 = JSON.stringify(o2);\n\n// console.time('1');\n// var o1 = JSON.parse(s);\n// console.timeEnd('1');\n// var s1 = JSON.stringify(o1);\n\n\n// // console.log(s1 === s2);\n\n// // for (let i = 0;i < N;++i) {\n// // if (o1[i] !== o2[i]) {\n// // console.log(i, o[i], o1[i], o2[i]);\n// // break;\n// // }\n// // }\n\n// JSON.parse('[\"Comma after the close\"],');\n\n// JSONPullParser.parse('25');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./index.js\n// module id = 2\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"json-pull-parser.js","sources":["../src/builder.js","../src/parser.js"],"sourcesContent":["/**\n *\n */\nclass ObjectBuilder {\n /**\n *\n */\n constructor () {\n this.handler = {\n ref: this,\n add (value) { this.ref.value = value; return value; }\n };\n }\n\n /**\n * @returns {void}\n */\n startObject () {\n this.handler = {\n old: this.handler,\n key: null,\n ref: this.handler.add({}),\n add (value) {\n if (this.key === null) this.key = value;\n else { this.ref[this.key] = value; this.key = null; }\n return value;\n }\n };\n }\n\n /**\n * @returns {void}\n */\n endObject () {\n this.handler = this.handler.old;\n }\n\n /**\n * @returns {void}\n */\n startArray () {\n this.handler = {\n old: this.handler,\n ref: this.handler.add([]),\n add (value) {\n this.ref.push(value);\n return value;\n }\n };\n }\n\n /**\n * @param {JSONValueOrError} value\n * @returns {void}\n */\n add (value) {\n this.handler.add(value);\n }\n\n /**\n * @param {Token|TokenEnd} token\n * @returns {void}\n */\n handle (token) {\n switch (token.type) {\n case '{':\n this.startObject();\n break;\n case '}':\n this.endObject();\n break;\n case '[':\n this.startArray();\n break;\n case ']':\n this.endArray();\n break;\n case 'string':\n case 'number':\n case 'true':\n case 'false':\n case 'null':\n this.add(token.value);\n break;\n case 'error':\n throw new SyntaxError(token.value.message);\n default:\n break;\n }\n }\n}\n\nObjectBuilder.prototype.endArray = ObjectBuilder.prototype.endObject;\n\nexport default ObjectBuilder;\n","import ObjectBuilder from './builder.js';\n\n/**\n * @typedef {PlainObject} State\n * @property {string} s Text\n * @property {boolean} [d=false] Done\n * @property {Integer} [f=0] Position\n * @property {Integer} [l] Defaults to text length\n * @property {Integer} [e=VALUE] Expect\n * @property {Integer} [c=0] Column\n * @property {Integer} [r=1] Row\n * @property {Integer[]} [x=[]]\n*/\n\n/**\n* @typedef {string} Type\n*/\n\n/**\n * @typedef {PlainObject} TokenPlain\n * @property {Type} type\n * @property {Integer} first\n * @property {Integer} last\n*/\n\n/**\n * @typedef {TokenPlain} TokenEnd\n */\n\n/**\n * @typedef {SyntaxError|string|Float|boolean|null} JSONValueOrError\n */\n\n/**\n * @typedef {TokenPlain} Token\n * @property {JSONValueOrError} value\n */\n\n/**\n * @typedef {Token} TokenWithSource\n * @property {string} source\n */\n\nconst VALUE = 1;\nconst KEY = 2;\nconst COMMA = 4;\nconst COLON = 8;\nconst CLOSE = 16;\nconst OBJECT = 32;\nconst ARRAY = 64;\n\n/**\n *\n */\nclass JSONPullParser {\n /**\n * @param {string} text\n * @returns {void}\n */\n constructor (text) {\n this.text = text;\n }\n\n /**\n * @returns {Iterator}\n */\n [Symbol.iterator] () {\n return tokenIterator(this.text);\n }\n\n /**\n * @returns {Iterator}\n */\n tokens () {\n return tokenIterator(this.text);\n }\n}\n\n/*\nif (typeof Symbol === 'object' && Symbol.iterator) {\n JSONPullParser.prototype[Symbol.iterator] = JSONPullParser.prototype.tokens;\n}\n*/\n\nJSONPullParser.StartDocument = '<';\nJSONPullParser.EndDocument = '>';\nJSONPullParser.StartObject = '{';\nJSONPullParser.EndObject = '}';\nJSONPullParser.StartArray = '[';\nJSONPullParser.EndArray = ']';\nJSONPullParser.String = 'string';\nJSONPullParser.Number = 'number';\nJSONPullParser.TrueLiteral = 'true';\nJSONPullParser.FalseLiteral = 'false';\nJSONPullParser.NullLiteral = 'null';\nJSONPullParser.Whitespace = 'ws';\nJSONPullParser.Error = 'error';\n\nJSONPullParser.ObjectBuilder = ObjectBuilder;\n\n/**\n* @callback ReviverFunction\n* @returns {JSON}\n*/\n\n/**\n* @param {string} text\n* @param {ReviverFunction} reviver\n*/\nJSONPullParser.parse = function (text, reviver) {\n if (typeof text !== 'string') text = String(text);\n const builder = new ObjectBuilder();\n for (const token of tokenIterator(text)) {\n // console.log(\"token: \" + token.type);\n builder.handle(token);\n }\n if (typeof builder.value === 'undefined') {\n throw new SyntaxError('Unexpected end of JSON input');\n }\n return builder.value;\n};\n\n/**\n * @param {string} text\n * @yields {Token|TokenEnd}\n * @returns {void}\n */\nfunction * tokenIterator (text) {\n const state = {\n s: text,\n d: false, // done\n f: 0, // position\n l: text.length, // length\n e: VALUE, // expect\n c: 0, // column\n r: 1, // row\n x: []\n };\n\n while (true) {\n // console.log(\n // `next: ${state.f}, ${state.l}, ` +\n // `${text.charCodeAt(state.f).toString(16)}`\n // );\n if (state.f === state.l) {\n if (!state.e && !state.x.length) {\n return;\n }\n yield parserError(\n state.s, state.l, state.l, 'Unexpected end of JSON input'\n );\n }\n const token = parseValue(state);\n state.f = token.last;\n\n yield token;\n }\n}\n\n/**\n * @param {string} s\n * @param {Integer} f\n * @param {Integer} l\n * @param {string} m Message\n * @param {Integer} r\n * @returns {Token}\n */\nfunction parserError (s, f, l, m, r = 1) {\n let c = f;\n let cc = s.charCodeAt(c);\n while (cc !== 0x0A && c > 0) {\n cc = s.charCodeAt(--c);\n }\n if (cc === 0x0A) ++c;\n const str0 = 'undefined:' + r;\n const str1 = s.slice(c, f + 1);\n let str2 = '';\n for (let i = c; i < f; ++i) str2 += ' ';\n str2 += '^';\n\n const err = new SyntaxError(str0 + '\\n' + str1 + '\\n' + str2 + '\\n\\n' + m);\n return {\n type: JSONPullParser.Error,\n value: err,\n first: f,\n last: l\n };\n}\n\n/**\n * @param {string} s\n * @param {Integer} f\n * @param {Integer} l\n * @returns {Token}\n */\nfunction parseObjectStart (s, f, l) {\n return {\n type: JSONPullParser.StartObject,\n value: '{',\n first: f,\n last: f + 1\n };\n}\n\n/**\n * @param {string} s\n * @param {Integer} f\n * @param {Integer} l\n * @returns {Token}\n */\nfunction parseObjectEnd (s, f, l) {\n return {\n type: JSONPullParser.EndObject,\n value: '}',\n first: f,\n last: f + 1\n };\n}\n/**\n * @param {string} s\n * @param {Integer} f\n * @param {Integer} l\n * @returns {Token}\n */\nfunction parseArrayStart (s, f, l) {\n return {\n type: JSONPullParser.StartArray,\n value: '[',\n first: f,\n last: f + 1\n };\n}\n\n/**\n * @param {string} s\n * @param {Integer} f\n * @param {Integer} l\n * @returns {Token}\n */\nfunction parseArrayEnd (s, f, l) {\n return {\n type: JSONPullParser.EndArray,\n value: ']',\n first: f,\n last: f + 1\n };\n}\n\n/**\n * @param {State} state\n * @returns {Token|TokenEnd}\n */\nfunction parseValue (state) {\n const {s, l} = state;\n let {f} = state;\n while (f < l) {\n state.c++;\n switch (s.charCodeAt(f)) {\n case 0x0A: // LF\n state.c = 0;\n state.r++;\n // Fallthrough\n case 0x09: // TAB\n case 0x0D: // CR\n case 0x20: // WS\n ++f; continue;\n case 0x7B: // {\n if (!(state.e & VALUE)) {\n return parserError(\n s, f, l, 'Unexpected token { in JSON at position ' + f, state.r\n );\n }\n state.e = KEY | CLOSE;\n state.x.push(OBJECT);\n return parseObjectStart(s, f, l);\n case 0x7D: // }\n if (!(state.e & CLOSE) || state.x.pop() !== OBJECT) {\n return parserError(\n s, f, l, 'Unexpected token } in JSON at position ' + f, state.r\n );\n }\n state.e = state.x.length > 0 ? COMMA | CLOSE : 0;\n return parseObjectEnd(s, f, l);\n case 0x5B: // [\n if (!(state.e & VALUE)) {\n return parserError(\n s, f, l, 'Unexpected token [ in JSON at position ' + f, state.r\n );\n }\n state.e = VALUE | CLOSE;\n state.x.push(ARRAY);\n return parseArrayStart(s, f, l);\n case 0x5D: // ]\n if (!(state.e & CLOSE) || state.x.pop() !== ARRAY) {\n return parserError(\n s, f, l, 'Unexpected token ] in JSON at position ' + f, state.r\n );\n }\n state.e = state.x.length > 0 ? COMMA | CLOSE : 0;\n return parseArrayEnd(s, f, l);\n case 0x3A: // :\n if (!(state.e & COLON)) {\n return parserError(\n s, f, l, 'Unexpected token : in JSON at position ' + f, state.r\n );\n }\n state.e = VALUE;\n ++f; continue;\n case 0x2C: // ,\n if (!(state.e & COMMA)) {\n return parserError(\n s, f, l, 'Unexpected token , in JSON at position ' + f, state.r\n );\n }\n if (state.x.length > 0 && state.x[state.x.length - 1] === OBJECT) {\n state.e = KEY;\n } else {\n state.e = VALUE;\n }\n ++f; continue;\n case 0x2D: // -\n case 0x30: // 0\n case 0x31: // 1\n case 0x32: // 2\n case 0x33: // 3\n case 0x34: // 4\n case 0x35: // 5\n case 0x36: // 6\n case 0x37: // 7\n case 0x38: // 8\n case 0x39: // 9\n if (!(state.e & VALUE)) {\n return parserError(\n s, f, l, 'Unexpected number in JSON at position ' + f, state.r\n );\n }\n state.e = state.x.length > 0 ? COMMA | CLOSE : 0;\n return parseNumber(s, f, l);\n case 0x22:\n if (state.e & KEY) {\n state.e = COLON;\n return parseString(s, f, l);\n }\n if (!(state.e & VALUE)) {\n return parserError(\n s, f, l, 'Unexpected string in JSON at position ' + f, state.r\n );\n }\n state.e = state.x.length > 0 ? COMMA | CLOSE : 0;\n return parseString(s, f, l);\n case 0x74: // t\n if (!(state.e & VALUE)) {\n return parserError(\n s, f, l, 'Unexpected token t in JSON at position ' + f, state.r\n );\n }\n state.e = state.x.length > 0 ? COMMA | CLOSE : 0;\n return parseTrue(s, f, l);\n case 0x66: // f\n if (!(state.e & VALUE)) {\n return parserError(\n s, f, l, 'Unexpected token f in JSON at position ' + f, state.r\n );\n }\n state.e = state.x.length > 0 ? COMMA | CLOSE : 0;\n return parseFalse(s, f, l);\n case 0x6E: // n\n if (!(state.e & VALUE)) {\n return parserError(\n s, f, l, 'Unexpected token n in JSON at position ' + f, state.r\n );\n }\n state.e = state.x.length > 0 ? COMMA | CLOSE : 0;\n return parseNull(s, f, l);\n default: return parserError(\n s, f, l, 'Unexpected token ' + s[f] + ' in JSON at position ' + f, state.r\n );\n }\n }\n return {\n type: JSONPullParser.EndDocument,\n first: l,\n last: l\n };\n}\n\n/**\n * @param {string} s\n * @param {Integer} f\n * @param {Integer} l\n * @returns {Token}\n */\nfunction parseNumber (s, f, l) {\n let c = f;\n\n let cc = s.charCodeAt(c++);\n\n if (cc === 0x2D /* - */) cc = s.charCodeAt(c++);\n\n if (cc !== 0x30 /* 0 */) {\n while (cc >= 0x30 /* 0 */ && cc <= 0x39 /* 9 */) {\n cc = s.charCodeAt(c++);\n }\n } else {\n cc = s.charCodeAt(c++);\n }\n\n if (cc === 0x2E /* . */) {\n cc = s.charCodeAt(c++);\n while (cc >= 0x30 && cc <= 0x39) cc = s.charCodeAt(c++);\n }\n\n if (cc === 0x65 /* e */|| cc === 0x45 /* E */) {\n cc = s.charCodeAt(c++);\n if (cc === 0x2B /* + */|| cc === 0x2D /* - */) cc = s.charCodeAt(c++);\n if (cc < 0x30 || cc > 0x39) {\n return parserError(\n s, c - 1, l,\n 'Unexpected token ' + s[c - 1] + ' in JSON at position ' + (c - 1)\n );\n }\n if (c >= l) return parserError(s, f, l, 'Unexpected end of JSON input');\n while (cc >= 0x30 /* 0 */ && cc <= 0x39 /* 9 */) cc = s.charCodeAt(c++);\n }\n\n return {\n type: JSONPullParser.Number,\n value: Number.parseFloat(\n s.slice(f, c - 1)\n ), // parseFloat seems to be faster than JSON.parse\n first: f,\n last: c - 1\n };\n}\n\n// ECMA-404 section 9\n/**\n * @param {string} s\n * @param {Integer} f\n * @param {Integer} l\n * @returns {TokenWithSource}\n */\nfunction parseString (s, f, l) {\n let c = f + 1;\n while (c < l) {\n let cc = s.charCodeAt(c++);\n if (cc === 0x22 /* \" */) break;\n else if (cc === 0x5C /* \\ */) {\n cc = s.charCodeAt(c++);\n if (cc === 0x75 /* u */) {\n c += 4;\n if (c > l) return parserError(s, l, l, 'Unexpected end of JSON input');\n }\n }\n }\n // console.log(`string: ${c}, ${f}, ${s.substring(f, c)}`);\n return {\n type: JSONPullParser.String,\n value: JSON.parse(s.slice(f, c)),\n source: s,\n first: f,\n last: c\n };\n}\n\n/**\n * @param {string} s\n * @param {Integer} f\n * @param {Integer} l\n * @param {Integer[]} ccs\n * @param {TokenWithSource} success\n * @returns {token}\n */\nfunction match (s, f, l, ccs, success) {\n if (f + ccs.length > l) {\n return parserError(s, l, l, 'Unexpected end of JSON input');\n }\n for (const cc_ of ccs) {\n const cc = s.charCodeAt(f++);\n if (cc !== cc_) {\n return parserError(\n s, f, l,\n 'Unexpected token ' + s[f - 1] + ' in JSON at position ' + (f - 1)\n );\n }\n }\n return success;\n}\n\n/**\n * @param {string} s\n * @param {Integer} f\n * @param {Integer} l\n * @returns {TokenWithSource}\n */\nfunction parseTrue (s, f, l) {\n return match(s, f, l, [0x74, 0x72, 0x75, 0x65], {\n type: JSONPullParser.TrueLiteral,\n value: true,\n source: s,\n first: f,\n last: f + 4\n });\n}\n\n/**\n * @param {string} s\n * @param {Integer} f\n * @param {Integer} l\n * @returns {TokenWithSource}\n */\nfunction parseFalse (s, f, l) {\n return match(s, f, l, [0x66, 0x61, 0x6C, 0x73, 0x65], {\n type: JSONPullParser.FalseLiteral,\n value: false,\n source: s,\n first: f,\n last: f + 5\n });\n}\n\n/**\n * @param {string} s\n * @param {Integer} f\n * @param {Integer} l\n * @returns {TokenWithSource}\n */\nfunction parseNull (s, f, l) {\n return match(s, f, l, [0x6E, 0x75, 0x6C, 0x6C], {\n type: JSONPullParser.NullLiteral,\n value: null,\n source: s,\n first: f,\n last: f + 4\n });\n}\n\nexport default JSONPullParser;\n"],"names":["ObjectBuilder","[object Object]","this","handler","ref","value","old","key","add","push","token","type","startObject","endObject","startArray","endArray","SyntaxError","message","prototype","JSONPullParser","text","Symbol","iterator","tokenIterator","state","s","d","f","l","length","e","c","r","x","parserError","parseValue","last","m","cc","charCodeAt","str0","str1","slice","str2","i","err","Error","first","parseObjectStart","StartObject","parseObjectEnd","EndObject","parseArrayStart","StartArray","parseArrayEnd","EndArray","KEY","pop","COMMA","VALUE","parseNumber","parseString","parseTrue","parseFalse","parseNull","EndDocument","Number","parseFloat","String","JSON","parse","source","match","ccs","success","cc_","TrueLiteral","FalseLiteral","NullLiteral","StartDocument","Whitespace","reviver","builder","handle"],"mappings":"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"} \ No newline at end of file diff --git a/docs/demo.html b/docs/demo.html index 8db8e1c..ff1c07e 100644 --- a/docs/demo.html +++ b/docs/demo.html @@ -26,119 +26,139 @@ Please wait, benchmarking! - \ No newline at end of file + diff --git a/docs/index.html b/docs/index.html index 9e75d5b..3625330 100644 --- a/docs/index.html +++ b/docs/index.html @@ -77,18 +77,18 @@

See live demo!

\ No newline at end of file +})(); + \ No newline at end of file diff --git a/index.js b/index.js index 4adb40a..affa3c0 100644 --- a/index.js +++ b/index.js @@ -1,79 +1,80 @@ -module.exports = require('./src/parser.js'); - -// function printStatus(fn) { -// switch(%GetOptimizationStatus(fn)) { -// case 1: console.log("Function is optimized"); break; -// case 2: console.log("Function is not optimized"); break; -// case 3: console.log("Function is always optimized"); break; -// case 4: console.log("Function is never optimized"); break; -// case 6: console.log("Function is maybe deoptimized"); break; -// case 7: console.log("Function is optimized by TurboFan"); break; -// default: console.log("Unknown optimization status"); break; -// } -// } - -// const N = 1e6; - -// var o = true; -// // for (let i = 0;i < N;++i) { -// // o.push(null); -// // o.push(true); -// // o.push(false); -// // // o.push(((Math.random() - 0.5) * 1e12)); -// // // o.push(((Math.random() - 0.5) * 1e12).toString(36)); -// // // o[ ((Math.random() - 0.5) * 1e12).toString(36) ] = ((Math.random() - 0.5) * 1e12); -// // } - -// var s = JSON.stringify(o, null, 2); - -// JSONPullParser.parse(s); -// JSONPullParser.parse(s); -// JSONPullParser.parse(s); - - -// // %OptimizeFunctionOnNextCall(JSONPullParser.parse); -// %OptimizeFunctionOnNextCall(parseTrue); -// %OptimizeFunctionOnNextCall(parseFalse); -// %OptimizeFunctionOnNextCall(parseNull); -// %OptimizeFunctionOnNextCall(match); - -// JSONPullParser.parse(s); -// JSONPullParser.parse(s); - -// printStatus(JSONPullParser.parse); -// printStatus(parseNumber); -// printStatus(parseString); -// printStatus(parseTrue); -// printStatus(parseFalse); -// printStatus(parseNull); -// printStatus(match); - - -// // console.time('1'); -// // var o1 = JSON.parse(s); -// // console.timeEnd('1'); -// // var s1 = JSON.stringify(o1); - -// console.time('2'); -// var o2 = JSONPullParser.parse(s); -// console.timeEnd('2'); -// // var s2 = JSON.stringify(o2); +import JSONPullParser from './src/parser.js'; + +export default JSONPullParser; + +/** + * @example +function printStatus (fn) { + switch (GetOptimizationStatus(fn)) { + case 1: console.log('Function is optimized'); break; + case 2: console.log('Function is not optimized'); break; + case 3: console.log('Function is always optimized'); break; + case 4: console.log('Function is never optimized'); break; + case 6: console.log('Function is maybe deoptimized'); break; + case 7: console.log('Function is optimized by TurboFan'); break; + default: console.log('Unknown optimization status'); break; + } +} + +const N = 1e6; + +const o = []; +for (let i = 0; i < N; ++i) { + o.push(null, true, false); + // o.push(((Math.random() - 0.5) * 1e12)); + // o.push(((Math.random() - 0.5) * 1e12).toString(36)); + // o[ ((Math.random() - 0.5) * 1e12).toString(36) ] = + // ((Math.random() - 0.5) * 1e12); +} + +const s = JSON.stringify(o, null, 2); + +JSONPullParser.parse(s); +JSONPullParser.parse(s); +JSONPullParser.parse(s); + +// %OptimizeFunctionOnNextCall(JSONPullParser.parse); +OptimizeFunctionOnNextCall(parseTrue); +OptimizeFunctionOnNextCall(parseFalse); +OptimizeFunctionOnNextCall(parseNull); +OptimizeFunctionOnNextCall(match); + +JSONPullParser.parse(s); +JSONPullParser.parse(s); + +printStatus(JSONPullParser.parse); +printStatus(parseNumber); +printStatus(parseString); +printStatus(parseTrue); +printStatus(parseFalse); +printStatus(parseNull); +printStatus(match); // console.time('1'); // var o1 = JSON.parse(s); // console.timeEnd('1'); // var s1 = JSON.stringify(o1); +console.time('2'); +const o2 = JSONPullParser.parse(s); +console.timeEnd('2'); +const s2 = JSON.stringify(o2); -// // console.log(s1 === s2); +console.time('1'); +const o1 = JSON.parse(s); +console.timeEnd('1'); +const s1 = JSON.stringify(o1); -// // for (let i = 0;i < N;++i) { -// // if (o1[i] !== o2[i]) { -// // console.log(i, o[i], o1[i], o2[i]); -// // break; -// // } -// // } +console.log(s1 === s2); -// JSON.parse('["Comma after the close"],'); +for (let i = 0; i < N; ++i) { + if (o1[i] !== o2[i]) { + console.log(i, o[i], o1[i], o2[i]); + break; + } +} -// JSONPullParser.parse('25'); +JSON.parse('["Comma after the close"],'); + +JSONPullParser.parse('25'); +*/ diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..c697a58 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6877 @@ +{ + "name": "json-pull-parser", + "version": "1.0.2", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "version": "1.0.2", + "license": "MIT", + "bin": { + "json-pull-parser": "bin/verify.cjs" + }, + "devDependencies": { + "@babel/eslint-parser": "^7.13.4", + "@brettz9/eslint-plugin": "^1.0.3", + "eslint": "^7.20.0", + "eslint-config-ash-nazg": "^29.8.0", + "eslint-config-standard": "^16.0.2", + "eslint-plugin-array-func": "^3.1.7", + "eslint-plugin-compat": "^3.9.0", + "eslint-plugin-eslint-comments": "^3.2.0", + "eslint-plugin-html": "^6.1.1", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-jsdoc": "^32.2.0", + "eslint-plugin-markdown": "^2.0.0", + "eslint-plugin-no-unsanitized": "^3.1.4", + "eslint-plugin-no-use-extend-native": "^0.5.0", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-promise": "^4.3.1", + "eslint-plugin-radar": "^0.2.1", + "eslint-plugin-standard": "^4.1.0", + "eslint-plugin-unicorn": "^28.0.2", + "glob": "^7.1.6", + "json-schema-test-suite": "^0.0.10", + "rollup": "^2.39.1", + "rollup-plugin-terser": "^7.0.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.12.13" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.13.6", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.6.tgz", + "integrity": "sha512-VhgqKOWYVm7lQXlvbJnWOzwfAQATd2nV52koT0HZ/LdDH0m4DUDwkKYsH+IwpXb+bKPyBJzawA4I6nBKqZcpQw==", + "dev": true + }, + "node_modules/@babel/core": { + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.1.tgz", + "integrity": "sha512-FzeKfFBG2rmFtGiiMdXZPFt/5R5DXubVi82uYhjGX4Msf+pgYQMCFIqFXZWs5vbIYbf14VeBIgdGI03CDOOM1w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.13.0", + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helpers": "^7.13.0", + "@babel/parser": "^7.13.0", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "semver": "7.0.0", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/eslint-parser": { + "version": "7.13.4", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.13.4.tgz", + "integrity": "sha512-WfFEd89SzqmtYox8crTLJuEXyJolZY6Uu6iJpJmw4aMu50zHbYnxzxwuVkCt2cWygw+gLkUPTtAuox7eSnrL8g==", + "dev": true, + "dependencies": { + "eslint-scope": "5.1.0", + "eslint-visitor-keys": "^1.3.0", + "semver": "7.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.11.0", + "eslint": ">=7.5.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.0.tgz", + "integrity": "sha512-zBZfgvBB/ywjx0Rgc2+BwoH/3H+lDtlgD4hBOpEv5LxRnYsm/753iRuLepqnYlynpjC3AdQxtxsoeHJoEEwOAw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.13.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.0.tgz", + "integrity": "sha512-SOWD0JK9+MMIhTQiUVd4ng8f3NXhPVQvTv7D3UN4wbp/6cAHnB2EmMaU1zZA2Hh1gwme+THBrVSqTFxHczTh0Q==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.13.0", + "@babel/helper-validator-option": "^7.12.17", + "browserslist": "^4.14.5", + "semver": "7.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "dev": true, + "dependencies": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.0.tgz", + "integrity": "sha512-yvRf8Ivk62JwisqV1rFRMxiSMDGnN6KH1/mDMmIrij4jztpQNRoHqqMG3U6apYbGRPJpgPalhva9Yd06HlUxJQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.13.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz", + "integrity": "sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.0.tgz", + "integrity": "sha512-Ls8/VBwH577+pw7Ku1QkUWIyRRNHpYlts7+qSqBBFCW3I8QteB9DxfcZ5YJpOwH6Ihe/wn8ch7fMGOP1OhEIvw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-replace-supers": "^7.13.0", + "@babel/helper-simple-access": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.12.11", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0", + "lodash": "^4.17.19" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.0.tgz", + "integrity": "sha512-Segd5me1+Pz+rmN/NFBOplMbZG3SqRJOBlY+mA0SxAv6rjj7zJqr1AVr3SfzUVTLCv7ZLU5FycOM/SBGuLPbZw==", + "dev": true, + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.13.0", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz", + "integrity": "sha512-0ski5dyYIHEfwpWGx5GPWhH35j342JaflmCeQmsPWcrOQDtCN6C1zKAVRFVbK53lPW2c9TsuLLSUDf0tIGJ5hA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "dev": true + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", + "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", + "dev": true + }, + "node_modules/@babel/helpers": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.0.tgz", + "integrity": "sha512-aan1MeFPxFacZeSz6Ld7YZo5aPuqnKlD7+HZY75xQsueczFccP9A7V05+oe0XpLwHK3oLorPe9eaAUljL7WEaQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.12.13.tgz", + "integrity": "sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.13.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.4.tgz", + "integrity": "sha512-uvoOulWHhI+0+1f9L4BoozY7U5cIkZ9PgJqvb041d6vypgUmtVPG4vmGm4pSggjl8BELzvHyUeJSUyEMY6b+qA==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/traverse": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.0.tgz", + "integrity": "sha512-xys5xi5JEhzC3RzEmSGrs/b3pJW/o87SypZ+G/PhaE7uqVQNv/jlmVIBXuoh5atqQ434LfXV+sf23Oxj0bchJQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.13.0", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.13.0", + "@babel/types": "^7.13.0", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + } + }, + "node_modules/@babel/types": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.0.tgz", + "integrity": "sha512-hE+HE8rnG1Z6Wzo+MhaKE5lM5eMx71T4EHJgku2E3xIfaULhDcxiiRxUYgwX8qwP1BBSlag+TdGOt6JAidIZTA==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "node_modules/@brettz9/eslint-plugin": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@brettz9/eslint-plugin/-/eslint-plugin-1.0.3.tgz", + "integrity": "sha512-2ESGw4oZJ5IvkFitzRXzfdUY8hzSPSanQ8i+adzWMQPK7jxxUHkZ6GEslOd7GjHFZIcwqc1xVXVU0itf8zYFGA==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "eslint": ">=7.20.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz", + "integrity": "sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.20", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "dependencies": { + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@mdn/browser-compat-data": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-2.0.7.tgz", + "integrity": "sha512-GeeM827DlzFFidn1eKkMBiqXFD2oLsnZbaiGhByPl0vcapsRzUL+t9hDoov1swc9rB2jw64R+ihtzC8qOE9wXw==", + "dev": true, + "dependencies": { + "extend": "3.0.2" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, + "node_modules/@types/node": { + "version": "14.14.31", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.31.tgz", + "integrity": "sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g==", + "dev": true + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", + "dev": true + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-includes": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", + "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", + "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ast-metadata-inferer": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/ast-metadata-inferer/-/ast-metadata-inferer-0.4.0.tgz", + "integrity": "sha512-tKHdBe8N/Vq2nLAm4YPBVREVZjMux6KrqyPfNQgIbDl0t7HaNSmy8w4OyVHYg/cvyn5BW7o7pVwpjPte89Zhcg==", + "dev": true + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/browserslist": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz", + "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001181", + "colorette": "^1.2.1", + "electron-to-chromium": "^1.3.649", + "escalade": "^3.1.1", + "node-releases": "^1.1.70" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001191", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001191.tgz", + "integrity": "sha512-xJJqzyd+7GCJXkcoBiQ1GuxEiOBCLQ0aVW9HMekifZsAVGdj5eJ4mFB9fEhSHipq9IOk/QXFJUiIr9lZT+EsGw==", + "dev": true + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "node_modules/clean-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", + "integrity": "sha1-jffHquUf02h06PjQW5GAvBGj/tc=", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/collapse-white-space": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", + "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/colorette": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", + "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", + "dev": true + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/comment-parser": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.1.2.tgz", + "integrity": "sha512-AOdq0i8ghZudnYv8RUnHrhTgafUGs61Rdz9jemU5x2lnZwAWyOq7vySo626K59e1fVKH1xSRorJwPVRLSWOoAQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/core-js": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.9.0.tgz", + "integrity": "sha512-PyFBJaLq93FlyYdsndE5VaueA9K5cNB7CGzeCj191YYLhkQM0gdZR2SKihM70oF0wdqKSKClv/tEBOpoRmdOVQ==", + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.2.0.tgz", + "integrity": "sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-serializer/node_modules/domhandler": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.0.0.tgz", + "integrity": "sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==", + "dev": true, + "dependencies": { + "domelementtype": "^2.1.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", + "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", + "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.4.4.tgz", + "integrity": "sha512-jBC0vOsECI4OMdD0GC9mGn7NXPLb+Qt6KW1YDQzeQYRUFKmNG8lh7mO5HiELfr+lLQE7loDVI4QcAxV80HS+RA==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/domutils/node_modules/domhandler": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.0.0.tgz", + "integrity": "sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==", + "dev": true, + "dependencies": { + "domelementtype": "^2.1.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.3.673", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.673.tgz", + "integrity": "sha512-ms+QR2ckfrrpEAjXweLx6kNCbpAl66DcW//3BZD4BV5KhUgr0RZRce1ON/9J3QyA3JO28nzgb5Xv8DnPr05ILg==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.18.0-next.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.2.tgz", + "integrity": "sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.1", + "object-inspect": "^1.9.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.3", + "string.prototype.trimstart": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.20.0.tgz", + "integrity": "sha512-qGi0CTcOGP2OtCQBgWZlQjcTuP0XkIpYFj25XtRTQSHC+umNnp7UMshr2G8SLsRFYDdAPFeHOsiteadmMH02Yw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.3.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "file-entry-cache": "^6.0.0", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.20", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.4", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-ash-nazg": { + "version": "29.8.0", + "resolved": "https://registry.npmjs.org/eslint-config-ash-nazg/-/eslint-config-ash-nazg-29.8.0.tgz", + "integrity": "sha512-R1DBmX46w2Byjhq51faJRedIffs3WItOgrX0rW42WEuMlmzZ9E7vUeV2fjfUmy/BeEgQQIS4pssqbZKApLYERA==", + "dev": true, + "dependencies": { + "semver": "^7.3.4" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "@brettz9/eslint-plugin": "^1.0.3", + "eslint": "^7.20.0", + "eslint-config-standard": "^16.0.2", + "eslint-plugin-array-func": "^3.1.7", + "eslint-plugin-compat": "^3.9.0", + "eslint-plugin-eslint-comments": "^3.2.0", + "eslint-plugin-html": "^6.1.1", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-jsdoc": "^32.2.0", + "eslint-plugin-markdown": "^2.0.0", + "eslint-plugin-no-unsanitized": "^3.1.4", + "eslint-plugin-no-use-extend-native": "^0.5.0", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-promise": "^4.3.1", + "eslint-plugin-radar": "^0.2.1", + "eslint-plugin-standard": "^4.1.0", + "eslint-plugin-unicorn": "^28.0.2" + } + }, + "node_modules/eslint-config-ash-nazg/node_modules/semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-config-standard": { + "version": "16.0.2", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.2.tgz", + "integrity": "sha512-fx3f1rJDsl9bY7qzyX8SAtP8GBSk6MfXFaTfaGgk12aAYW4gJSyRm7dM790L6cbXv63fvjY4XeSzXnb4WM+SKw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peerDependencies": { + "eslint": "^7.12.1", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-promise": "^4.2.1" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", + "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", + "dev": true, + "dependencies": { + "debug": "^2.6.9", + "resolve": "^1.13.1" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/eslint-module-utils": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", + "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", + "dev": true, + "dependencies": { + "debug": "^2.6.9", + "pkg-dir": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/eslint-module-utils/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/eslint-plugin-array-func": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/eslint-plugin-array-func/-/eslint-plugin-array-func-3.1.7.tgz", + "integrity": "sha512-fB5TBICjHSTGToNTbCCgR8zsngpUkoCM31EMh/M/NEAyNg90i5rUuG0dnNNBML2n0BzM0nBE3sPvo2SEWf6jlA==", + "dev": true, + "engines": { + "node": ">= 6.8.0" + }, + "peerDependencies": { + "eslint": ">=3.0.0" + } + }, + "node_modules/eslint-plugin-compat": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-3.9.0.tgz", + "integrity": "sha512-lt3l5PHFHVEYSZ5zijcoYvtQJPsBifRiH5N0Et57KwVu7l/yxmHhSG6VJiLMa/lXrg93Qu8049RNQOMn0+yJBg==", + "dev": true, + "dependencies": { + "@mdn/browser-compat-data": "^2.0.7", + "ast-metadata-inferer": "^0.4.0", + "browserslist": "^4.12.2", + "caniuse-lite": "^1.0.30001166", + "core-js": "^3.6.5", + "find-up": "^4.1.0", + "lodash.memoize": "4.1.2", + "semver": "7.3.2" + }, + "engines": { + "node": ">=9.x" + }, + "peerDependencies": { + "eslint": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/eslint-plugin-compat/node_modules/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", + "dev": true, + "dependencies": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-eslint-comments": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz", + "integrity": "sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5", + "ignore": "^5.0.5" + }, + "engines": { + "node": ">=6.5.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-eslint-comments/node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint-plugin-html": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-6.1.1.tgz", + "integrity": "sha512-JSe3ZDb7feKMnQM27XWGeoIjvP4oWQMJD9GZ6wW67J7/plVL87NK72RBwlvfc3tTZiYUchHhxAwtgEd1GdofDA==", + "dev": true, + "dependencies": { + "htmlparser2": "^5.0.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.22.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz", + "integrity": "sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.1", + "array.prototype.flat": "^1.2.3", + "contains-path": "^0.1.0", + "debug": "^2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.4", + "eslint-module-utils": "^2.6.0", + "has": "^1.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.1", + "read-pkg-up": "^2.0.0", + "resolve": "^1.17.0", + "tsconfig-paths": "^3.9.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "dependencies": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/eslint-plugin-jsdoc": { + "version": "32.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-32.2.0.tgz", + "integrity": "sha512-ikeVeF3JVmzjcmGd04OZK0rXjgiw46TWtNX+OhyF2jQlw3w1CAU1vyAyLv8PZcIjp7WxP4N20Vg1CI9bp/52dw==", + "dev": true, + "dependencies": { + "comment-parser": "1.1.2", + "debug": "^4.3.1", + "jsdoctypeparser": "^9.0.0", + "lodash": "^4.17.20", + "regextras": "^0.7.1", + "semver": "^7.3.4", + "spdx-expression-parse": "^3.0.1" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0" + } + }, + "node_modules/eslint-plugin-jsdoc/node_modules/semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-plugin-markdown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-2.0.0.tgz", + "integrity": "sha512-zt10JoexHeJFMTE5egDcetAJ34bn5k/92s0wAuRZfhDAyI0ryEj+O91JL2CbBExajie6BE5L63y47dN1Sbp6mQ==", + "dev": true, + "dependencies": { + "remark-parse": "^5.0.0", + "unified": "^6.1.2" + }, + "engines": { + "node": "^8.10.0 || ^10.12.0 || >= 12.0.0" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/eslint-plugin-no-unsanitized": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-unsanitized/-/eslint-plugin-no-unsanitized-3.1.4.tgz", + "integrity": "sha512-WF1+eZo2Sh+bQNjZuVNwT0dA61zuJORsLh+1Sww7+O6GOPw+WPWIIRfTWNqrmaXaDMhM4SXAqYPcNlhRMiH13g==", + "dev": true, + "peerDependencies": { + "eslint": "^5 || ^6 || ^7" + } + }, + "node_modules/eslint-plugin-no-use-extend-native": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-use-extend-native/-/eslint-plugin-no-use-extend-native-0.5.0.tgz", + "integrity": "sha512-dBNjs8hor8rJgeXLH4HTut5eD3RGWf9JUsadIfuL7UosVQ/dnvOKwxEcRrXrFxrMZ8llUVWT+hOimxJABsAUzQ==", + "dev": true, + "dependencies": { + "is-get-set-prop": "^1.0.0", + "is-js-type": "^2.0.0", + "is-obj-prop": "^1.0.0", + "is-proto-prop": "^2.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/eslint-plugin-node": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "dev": true, + "dependencies": { + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "peerDependencies": { + "eslint": ">=5.16.0" + } + }, + "node_modules/eslint-plugin-node/node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint-plugin-node/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-promise": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.3.1.tgz", + "integrity": "sha512-bY2sGqyptzFBDLh/GMbAxfdJC+b0f23ME63FOE4+Jao0oZ3E1LEwFtWJX/1pGMJLiTtrSSern2CRM/g+dfc0eQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-plugin-radar": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-radar/-/eslint-plugin-radar-0.2.1.tgz", + "integrity": "sha512-aOc1MK6ddL45X6mS6zEqFIKy/c/qnwjhNycDecaFMw5acUsD744ZCZf2cG7yxLhMv71mBSwr6pZdu+26+Zzk5A==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": ">= 3.0.0 <= 7.x.x" + } + }, + "node_modules/eslint-plugin-standard": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.1.0.tgz", + "integrity": "sha512-ZL7+QRixjTR6/528YNGyDotyffm5OQst/sGxKDwGb9Uqs4In5Egi4+jbobhqJoyoCM6/7v/1A5fhQ7ScMtDjaQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peerDependencies": { + "eslint": ">=5.0.0" + } + }, + "node_modules/eslint-plugin-unicorn": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-28.0.2.tgz", + "integrity": "sha512-k4AoFP7n8/oq6lBXkdc9Flid6vw2B8j7aXFCxgzJCyKvmaKrCUFb1TFPhG9eSJQFZowqmymMPRtl8oo9NKLUbw==", + "dev": true, + "dependencies": { + "ci-info": "^2.0.0", + "clean-regexp": "^1.0.0", + "eslint-template-visitor": "^2.2.2", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "import-modules": "^2.1.0", + "lodash": "^4.17.20", + "pluralize": "^8.0.0", + "read-pkg-up": "^7.0.1", + "regexp-tree": "^0.1.22", + "reserved-words": "^0.1.2", + "safe-regex": "^2.1.1", + "semver": "^7.3.4" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1" + }, + "peerDependencies": { + "eslint": ">=7.17.0" + } + }, + "node_modules/eslint-plugin-unicorn/node_modules/eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-plugin-unicorn/node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-plugin-unicorn/node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint-plugin-unicorn/node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-plugin-unicorn/node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint-plugin-unicorn/node_modules/semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", + "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", + "dev": true, + "dependencies": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-template-visitor": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/eslint-template-visitor/-/eslint-template-visitor-2.3.2.tgz", + "integrity": "sha512-3ydhqFpuV7x1M9EK52BPNj6V0Kwu0KKkcIAfpUhwHbR8ocRln/oUHgfxQupY8O1h4Qv/POHDumb/BwwNfxbtnA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.16", + "@babel/eslint-parser": "^7.12.16", + "eslint-visitor-keys": "^2.0.0", + "esquery": "^1.3.1", + "multimap": "^1.1.0" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-template-visitor/node_modules/eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "dependencies": { + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-set-props": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-set-props/-/get-set-props-0.1.0.tgz", + "integrity": "sha1-mYR1wXhEVobQsyJG2l3428++jqM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "dev": true + }, + "node_modules/htmlparser2": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-5.0.1.tgz", + "integrity": "sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^3.3.0", + "domutils": "^2.4.2", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/fb55/htmlparser2?sponsor=1" + } + }, + "node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-modules": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-modules/-/import-modules-2.1.0.tgz", + "integrity": "sha512-8HEWcnkbGpovH9yInoisxaSoIg9Brbul+Ju3Kqe2UsYDUBJD/iQjSgEj0zPcTDPKfPp2fs5xlv1i+JSye/m1/A==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "dev": true, + "dependencies": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-get-set-prop": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-get-set-prop/-/is-get-set-prop-1.0.0.tgz", + "integrity": "sha1-JzGHfk14pqae3M5rudaLB3nnYxI=", + "dev": true, + "dependencies": { + "get-set-props": "^0.1.0", + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-js-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-js-type/-/is-js-type-2.0.0.tgz", + "integrity": "sha1-c2FwBtZZtOtHKbunR9KHgt8PfiI=", + "dev": true, + "dependencies": { + "js-types": "^1.0.0" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj-prop": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-obj-prop/-/is-obj-prop-1.0.0.tgz", + "integrity": "sha1-s03nnEULjXxzqyzfZ9yHWtuF+A4=", + "dev": true, + "dependencies": { + "lowercase-keys": "^1.0.0", + "obj-props": "^1.0.0" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-proto-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-proto-prop/-/is-proto-prop-2.0.0.tgz", + "integrity": "sha512-jl3NbQ/fGLv5Jhan4uX+Ge9ohnemqyblWVVCpAvtTQzNFvV2xhJq+esnkIbYQ9F1nITXoLfDDQLp7LBw/zzncg==", + "dev": true, + "dependencies": { + "lowercase-keys": "^1.0.0", + "proto-props": "^2.0.0" + } + }, + "node_modules/is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-whitespace-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", + "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-word-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", + "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-types": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/js-types/-/js-types-1.0.0.tgz", + "integrity": "sha1-0kLmSU7Vcq08koCfyL7X92h8vwM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdoctypeparser": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz", + "integrity": "sha512-jrTA2jJIL6/DAEILBEh2/w9QxCuwmvNXIry39Ay/HVfhE3o2yVV0U44blYkqdHA/OKloJEqvJy0xU+GSdE2SIw==", + "dev": true, + "bin": { + "jsdoctypeparser": "bin/jsdoctypeparser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-test-suite": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/json-schema-test-suite/-/json-schema-test-suite-0.0.10.tgz", + "integrity": "sha1-qTYEqsPPQIQk1VNgi8OgF/0JAbw=", + "dev": true, + "dependencies": { + "lodash": "^3.9.3" + } + }, + "node_modules/json-schema-test-suite/node_modules/lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "node_modules/load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/markdown-escapes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", + "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/multimap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multimap/-/multimap-1.1.0.tgz", + "integrity": "sha512-0ZIR9PasPxGXmRsEF8jsDzndzHDj7tIav+JUmvIFB/WHswliFnquxECT/De7GR4yg99ky/NlRKJT82G1y271bw==", + "dev": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/node-releases": { + "version": "1.1.71", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", + "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==", + "dev": true + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/obj-props": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/obj-props/-/obj-props-1.3.0.tgz", + "integrity": "sha512-k2Xkjx5wn6eC3537SWAXHzB6lkI81kS+icMKMkh4nG3w7shWG6MaWOBrNvhWVOszrtL5uxdfymQQfPUxwY+2eg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", + "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", + "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-entities": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.2.tgz", + "integrity": "sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==", + "dev": true, + "dependencies": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "node_modules/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "node_modules/path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "dependencies": { + "pify": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "dependencies": { + "find-up": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir/node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/proto-props": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/proto-props/-/proto-props-2.0.0.tgz", + "integrity": "sha512-2yma2tog9VaRZY2mn3Wq51uiSW4NcPYT1cQdBagwyrznrilKSZwIZ0UG3ZPL/mx+axEns0hE35T5ufOYZXEnBQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/punycode": { + "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, + "engines": { + "node": ">=6" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "dependencies": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/regexp-tree": { + "version": "0.1.23", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.23.tgz", + "integrity": "sha512-+7HWfb4Bvu8Rs2eQTUIpX9I/PlQkYOuTNbRpKLJlQpSgwSkzFYh+pUj0gtvglnOZLKB6YgnIgRuJ2/IlpL48qw==", + "dev": true, + "bin": { + "regexp-tree": "bin/regexp-tree" + } + }, + "node_modules/regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/regextras": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regextras/-/regextras-0.7.1.tgz", + "integrity": "sha512-9YXf6xtW+qzQ+hcMQXx95MOvfqXFgsKDZodX3qZB0x2n5Z94ioetIITsBtvJbiOyxa/6s9AtyweBLCdPmPko/w==", + "dev": true, + "engines": { + "node": ">=0.1.14" + } + }, + "node_modules/remark-parse": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-5.0.0.tgz", + "integrity": "sha512-b3iXszZLH1TLoyUzrATcTQUZrwNl1rE70rVdSruJFlDaJ9z5aMkhrG43Pp68OgfHndL/ADz6V69Zow8cTQu+JA==", + "dev": true, + "dependencies": { + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^1.1.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^1.0.0", + "vfile-location": "^2.0.0", + "xtend": "^4.0.1" + } + }, + "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, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/reserved-words": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/reserved-words/-/reserved-words-0.1.2.tgz", + "integrity": "sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE=", + "dev": true + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "2.39.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.39.1.tgz", + "integrity": "sha512-9rfr0Z6j+vE+eayfNVFr1KZ+k+jiUl2+0e4quZafy1x6SFCjzFspfRSO2ZZQeWeX9noeDTUDgg6eCENiEPFvQg==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.1" + } + }, + "node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/safe-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz", + "integrity": "sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==", + "dev": true, + "dependencies": { + "regexp-tree": "~0.1.1" + } + }, + "node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "dev": true + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/state-toggle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", + "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/table": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", + "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", + "dev": true, + "dependencies": { + "ajv": "^7.0.2", + "lodash": "^4.17.20", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.1.1.tgz", + "integrity": "sha512-ga/aqDYnUy/o7vbsRTFhhTsNeXiYb5JWDIcRIeZfwRNCefwjNTVYCGdGSUrEmiu3yDK3vFvNbgJxvrQW4JXrYQ==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/terser": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.6.0.tgz", + "integrity": "sha512-vyqLMoqadC1uR0vywqOZzriDYzgEkNJFK4q9GeyOBHIbiECHiWLKcWfbQWAUaPfxkjDhapSlZB9f7fkMrvkVjA==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/to-fast-properties": { + "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, + "engines": { + "node": ">=4" + } + }, + "node_modules/trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=", + "dev": true + }, + "node_modules/trim-trailing-lines": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", + "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", + "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/unherit": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", + "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.0", + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/unified": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-6.2.0.tgz", + "integrity": "sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA==", + "dev": true, + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^1.1.0", + "trough": "^1.0.0", + "vfile": "^2.0.0", + "x-is-string": "^0.1.0" + } + }, + "node_modules/unist-util-is": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", + "dev": true + }, + "node_modules/unist-util-remove-position": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz", + "integrity": "sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==", + "dev": true, + "dependencies": { + "unist-util-visit": "^1.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", + "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==", + "dev": true + }, + "node_modules/unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "dev": true, + "dependencies": { + "unist-util-visit-parents": "^2.0.0" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", + "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", + "dev": true, + "dependencies": { + "unist-util-is": "^3.0.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", + "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", + "dev": true + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/vfile": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-2.3.0.tgz", + "integrity": "sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.4", + "replace-ext": "1.0.0", + "unist-util-stringify-position": "^1.0.0", + "vfile-message": "^1.0.0" + } + }, + "node_modules/vfile-location": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.6.tgz", + "integrity": "sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz", + "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==", + "dev": true, + "dependencies": { + "unist-util-stringify-position": "^1.1.1" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/x-is-string": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", + "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=", + "dev": true + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "@babel/compat-data": { + "version": "7.13.6", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.6.tgz", + "integrity": "sha512-VhgqKOWYVm7lQXlvbJnWOzwfAQATd2nV52koT0HZ/LdDH0m4DUDwkKYsH+IwpXb+bKPyBJzawA4I6nBKqZcpQw==", + "dev": true + }, + "@babel/core": { + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.1.tgz", + "integrity": "sha512-FzeKfFBG2rmFtGiiMdXZPFt/5R5DXubVi82uYhjGX4Msf+pgYQMCFIqFXZWs5vbIYbf14VeBIgdGI03CDOOM1w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.13.0", + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helpers": "^7.13.0", + "@babel/parser": "^7.13.0", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "semver": "7.0.0", + "source-map": "^0.5.0" + } + }, + "@babel/eslint-parser": { + "version": "7.13.4", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.13.4.tgz", + "integrity": "sha512-WfFEd89SzqmtYox8crTLJuEXyJolZY6Uu6iJpJmw4aMu50zHbYnxzxwuVkCt2cWygw+gLkUPTtAuox7eSnrL8g==", + "dev": true, + "requires": { + "eslint-scope": "5.1.0", + "eslint-visitor-keys": "^1.3.0", + "semver": "7.0.0" + } + }, + "@babel/generator": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.0.tgz", + "integrity": "sha512-zBZfgvBB/ywjx0Rgc2+BwoH/3H+lDtlgD4hBOpEv5LxRnYsm/753iRuLepqnYlynpjC3AdQxtxsoeHJoEEwOAw==", + "dev": true, + "requires": { + "@babel/types": "^7.13.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.0.tgz", + "integrity": "sha512-SOWD0JK9+MMIhTQiUVd4ng8f3NXhPVQvTv7D3UN4wbp/6cAHnB2EmMaU1zZA2Hh1gwme+THBrVSqTFxHczTh0Q==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.0", + "@babel/helper-validator-option": "^7.12.17", + "browserslist": "^4.14.5", + "semver": "7.0.0" + } + }, + "@babel/helper-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.0.tgz", + "integrity": "sha512-yvRf8Ivk62JwisqV1rFRMxiSMDGnN6KH1/mDMmIrij4jztpQNRoHqqMG3U6apYbGRPJpgPalhva9Yd06HlUxJQ==", + "dev": true, + "requires": { + "@babel/types": "^7.13.0" + } + }, + "@babel/helper-module-imports": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz", + "integrity": "sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-module-transforms": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.0.tgz", + "integrity": "sha512-Ls8/VBwH577+pw7Ku1QkUWIyRRNHpYlts7+qSqBBFCW3I8QteB9DxfcZ5YJpOwH6Ihe/wn8ch7fMGOP1OhEIvw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-replace-supers": "^7.13.0", + "@babel/helper-simple-access": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.12.11", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0", + "lodash": "^4.17.19" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-replace-supers": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.0.tgz", + "integrity": "sha512-Segd5me1+Pz+rmN/NFBOplMbZG3SqRJOBlY+mA0SxAv6rjj7zJqr1AVr3SfzUVTLCv7ZLU5FycOM/SBGuLPbZw==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.13.0", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0" + } + }, + "@babel/helper-simple-access": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz", + "integrity": "sha512-0ski5dyYIHEfwpWGx5GPWhH35j342JaflmCeQmsPWcrOQDtCN6C1zKAVRFVbK53lPW2c9TsuLLSUDf0tIGJ5hA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", + "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", + "dev": true + }, + "@babel/helpers": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.0.tgz", + "integrity": "sha512-aan1MeFPxFacZeSz6Ld7YZo5aPuqnKlD7+HZY75xQsueczFccP9A7V05+oe0XpLwHK3oLorPe9eaAUljL7WEaQ==", + "dev": true, + "requires": { + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0" + } + }, + "@babel/highlight": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.12.13.tgz", + "integrity": "sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.13.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.4.tgz", + "integrity": "sha512-uvoOulWHhI+0+1f9L4BoozY7U5cIkZ9PgJqvb041d6vypgUmtVPG4vmGm4pSggjl8BELzvHyUeJSUyEMY6b+qA==", + "dev": true + }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/traverse": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.0.tgz", + "integrity": "sha512-xys5xi5JEhzC3RzEmSGrs/b3pJW/o87SypZ+G/PhaE7uqVQNv/jlmVIBXuoh5atqQ434LfXV+sf23Oxj0bchJQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.13.0", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.13.0", + "@babel/types": "^7.13.0", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + } + }, + "@babel/types": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.0.tgz", + "integrity": "sha512-hE+HE8rnG1Z6Wzo+MhaKE5lM5eMx71T4EHJgku2E3xIfaULhDcxiiRxUYgwX8qwP1BBSlag+TdGOt6JAidIZTA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "@brettz9/eslint-plugin": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@brettz9/eslint-plugin/-/eslint-plugin-1.0.3.tgz", + "integrity": "sha512-2ESGw4oZJ5IvkFitzRXzfdUY8hzSPSanQ8i+adzWMQPK7jxxUHkZ6GEslOd7GjHFZIcwqc1xVXVU0itf8zYFGA==", + "dev": true, + "requires": {} + }, + "@eslint/eslintrc": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz", + "integrity": "sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.20", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + } + } + }, + "@mdn/browser-compat-data": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-2.0.7.tgz", + "integrity": "sha512-GeeM827DlzFFidn1eKkMBiqXFD2oLsnZbaiGhByPl0vcapsRzUL+t9hDoov1swc9rB2jw64R+ihtzC8qOE9wXw==", + "dev": true, + "requires": { + "extend": "3.0.2" + } + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, + "@types/node": { + "version": "14.14.31", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.31.tgz", + "integrity": "sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g==", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", + "dev": true + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true, + "requires": {} + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "array-includes": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", + "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.5" + } + }, + "array.prototype.flat": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", + "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + } + }, + "ast-metadata-inferer": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/ast-metadata-inferer/-/ast-metadata-inferer-0.4.0.tgz", + "integrity": "sha512-tKHdBe8N/Vq2nLAm4YPBVREVZjMux6KrqyPfNQgIbDl0t7HaNSmy8w4OyVHYg/cvyn5BW7o7pVwpjPte89Zhcg==", + "dev": true + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "browserslist": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz", + "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001181", + "colorette": "^1.2.1", + "electron-to-chromium": "^1.3.649", + "escalade": "^3.1.1", + "node-releases": "^1.1.70" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001191", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001191.tgz", + "integrity": "sha512-xJJqzyd+7GCJXkcoBiQ1GuxEiOBCLQ0aVW9HMekifZsAVGdj5eJ4mFB9fEhSHipq9IOk/QXFJUiIr9lZT+EsGw==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "dev": true + }, + "character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "dev": true + }, + "character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "dev": true + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "clean-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", + "integrity": "sha1-jffHquUf02h06PjQW5GAvBGj/tc=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "collapse-white-space": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", + "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", + "dev": true + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "colorette": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", + "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", + "dev": true + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "comment-parser": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.1.2.tgz", + "integrity": "sha512-AOdq0i8ghZudnYv8RUnHrhTgafUGs61Rdz9jemU5x2lnZwAWyOq7vySo626K59e1fVKH1xSRorJwPVRLSWOoAQ==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "core-js": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.9.0.tgz", + "integrity": "sha512-PyFBJaLq93FlyYdsndE5VaueA9K5cNB7CGzeCj191YYLhkQM0gdZR2SKihM70oF0wdqKSKClv/tEBOpoRmdOVQ==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-serializer": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.2.0.tgz", + "integrity": "sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "entities": "^2.0.0" + }, + "dependencies": { + "domhandler": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.0.0.tgz", + "integrity": "sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==", + "dev": true, + "requires": { + "domelementtype": "^2.1.0" + } + } + } + }, + "domelementtype": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", + "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==", + "dev": true + }, + "domhandler": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", + "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1" + } + }, + "domutils": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.4.4.tgz", + "integrity": "sha512-jBC0vOsECI4OMdD0GC9mGn7NXPLb+Qt6KW1YDQzeQYRUFKmNG8lh7mO5HiELfr+lLQE7loDVI4QcAxV80HS+RA==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0" + }, + "dependencies": { + "domhandler": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.0.0.tgz", + "integrity": "sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==", + "dev": true, + "requires": { + "domelementtype": "^2.1.0" + } + } + } + }, + "electron-to-chromium": { + "version": "1.3.673", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.673.tgz", + "integrity": "sha512-ms+QR2ckfrrpEAjXweLx6kNCbpAl66DcW//3BZD4BV5KhUgr0RZRce1ON/9J3QyA3JO28nzgb5Xv8DnPr05ILg==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.18.0-next.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.2.tgz", + "integrity": "sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.1", + "object-inspect": "^1.9.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.3", + "string.prototype.trimstart": "^1.0.3" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.20.0.tgz", + "integrity": "sha512-qGi0CTcOGP2OtCQBgWZlQjcTuP0XkIpYFj25XtRTQSHC+umNnp7UMshr2G8SLsRFYDdAPFeHOsiteadmMH02Yw==", + "dev": true, + "requires": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.3.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "file-entry-cache": "^6.0.0", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.20", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.4", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "eslint-config-ash-nazg": { + "version": "29.8.0", + "resolved": "https://registry.npmjs.org/eslint-config-ash-nazg/-/eslint-config-ash-nazg-29.8.0.tgz", + "integrity": "sha512-R1DBmX46w2Byjhq51faJRedIffs3WItOgrX0rW42WEuMlmzZ9E7vUeV2fjfUmy/BeEgQQIS4pssqbZKApLYERA==", + "dev": true, + "requires": { + "semver": "^7.3.4" + }, + "dependencies": { + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "eslint-config-standard": { + "version": "16.0.2", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.2.tgz", + "integrity": "sha512-fx3f1rJDsl9bY7qzyX8SAtP8GBSk6MfXFaTfaGgk12aAYW4gJSyRm7dM790L6cbXv63fvjY4XeSzXnb4WM+SKw==", + "dev": true, + "requires": {} + }, + "eslint-import-resolver-node": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", + "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "resolve": "^1.13.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "eslint-module-utils": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", + "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "pkg-dir": "^2.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "eslint-plugin-array-func": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/eslint-plugin-array-func/-/eslint-plugin-array-func-3.1.7.tgz", + "integrity": "sha512-fB5TBICjHSTGToNTbCCgR8zsngpUkoCM31EMh/M/NEAyNg90i5rUuG0dnNNBML2n0BzM0nBE3sPvo2SEWf6jlA==", + "dev": true, + "requires": {} + }, + "eslint-plugin-compat": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-3.9.0.tgz", + "integrity": "sha512-lt3l5PHFHVEYSZ5zijcoYvtQJPsBifRiH5N0Et57KwVu7l/yxmHhSG6VJiLMa/lXrg93Qu8049RNQOMn0+yJBg==", + "dev": true, + "requires": { + "@mdn/browser-compat-data": "^2.0.7", + "ast-metadata-inferer": "^0.4.0", + "browserslist": "^4.12.2", + "caniuse-lite": "^1.0.30001166", + "core-js": "^3.6.5", + "find-up": "^4.1.0", + "lodash.memoize": "4.1.2", + "semver": "7.3.2" + }, + "dependencies": { + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + } + } + }, + "eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", + "dev": true, + "requires": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + } + }, + "eslint-plugin-eslint-comments": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz", + "integrity": "sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5", + "ignore": "^5.0.5" + }, + "dependencies": { + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + } + } + }, + "eslint-plugin-html": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-6.1.1.tgz", + "integrity": "sha512-JSe3ZDb7feKMnQM27XWGeoIjvP4oWQMJD9GZ6wW67J7/plVL87NK72RBwlvfc3tTZiYUchHhxAwtgEd1GdofDA==", + "dev": true, + "requires": { + "htmlparser2": "^5.0.1" + } + }, + "eslint-plugin-import": { + "version": "2.22.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz", + "integrity": "sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==", + "dev": true, + "requires": { + "array-includes": "^3.1.1", + "array.prototype.flat": "^1.2.3", + "contains-path": "^0.1.0", + "debug": "^2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.4", + "eslint-module-utils": "^2.6.0", + "has": "^1.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.1", + "read-pkg-up": "^2.0.0", + "resolve": "^1.17.0", + "tsconfig-paths": "^3.9.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "eslint-plugin-jsdoc": { + "version": "32.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-32.2.0.tgz", + "integrity": "sha512-ikeVeF3JVmzjcmGd04OZK0rXjgiw46TWtNX+OhyF2jQlw3w1CAU1vyAyLv8PZcIjp7WxP4N20Vg1CI9bp/52dw==", + "dev": true, + "requires": { + "comment-parser": "1.1.2", + "debug": "^4.3.1", + "jsdoctypeparser": "^9.0.0", + "lodash": "^4.17.20", + "regextras": "^0.7.1", + "semver": "^7.3.4", + "spdx-expression-parse": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "eslint-plugin-markdown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-2.0.0.tgz", + "integrity": "sha512-zt10JoexHeJFMTE5egDcetAJ34bn5k/92s0wAuRZfhDAyI0ryEj+O91JL2CbBExajie6BE5L63y47dN1Sbp6mQ==", + "dev": true, + "requires": { + "remark-parse": "^5.0.0", + "unified": "^6.1.2" + } + }, + "eslint-plugin-no-unsanitized": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-unsanitized/-/eslint-plugin-no-unsanitized-3.1.4.tgz", + "integrity": "sha512-WF1+eZo2Sh+bQNjZuVNwT0dA61zuJORsLh+1Sww7+O6GOPw+WPWIIRfTWNqrmaXaDMhM4SXAqYPcNlhRMiH13g==", + "dev": true, + "requires": {} + }, + "eslint-plugin-no-use-extend-native": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-use-extend-native/-/eslint-plugin-no-use-extend-native-0.5.0.tgz", + "integrity": "sha512-dBNjs8hor8rJgeXLH4HTut5eD3RGWf9JUsadIfuL7UosVQ/dnvOKwxEcRrXrFxrMZ8llUVWT+hOimxJABsAUzQ==", + "dev": true, + "requires": { + "is-get-set-prop": "^1.0.0", + "is-js-type": "^2.0.0", + "is-obj-prop": "^1.0.0", + "is-proto-prop": "^2.0.0" + } + }, + "eslint-plugin-node": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "dev": true, + "requires": { + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" + }, + "dependencies": { + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "eslint-plugin-promise": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.3.1.tgz", + "integrity": "sha512-bY2sGqyptzFBDLh/GMbAxfdJC+b0f23ME63FOE4+Jao0oZ3E1LEwFtWJX/1pGMJLiTtrSSern2CRM/g+dfc0eQ==", + "dev": true + }, + "eslint-plugin-radar": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-radar/-/eslint-plugin-radar-0.2.1.tgz", + "integrity": "sha512-aOc1MK6ddL45X6mS6zEqFIKy/c/qnwjhNycDecaFMw5acUsD744ZCZf2cG7yxLhMv71mBSwr6pZdu+26+Zzk5A==", + "dev": true, + "requires": {} + }, + "eslint-plugin-standard": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.1.0.tgz", + "integrity": "sha512-ZL7+QRixjTR6/528YNGyDotyffm5OQst/sGxKDwGb9Uqs4In5Egi4+jbobhqJoyoCM6/7v/1A5fhQ7ScMtDjaQ==", + "dev": true, + "requires": {} + }, + "eslint-plugin-unicorn": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-28.0.2.tgz", + "integrity": "sha512-k4AoFP7n8/oq6lBXkdc9Flid6vw2B8j7aXFCxgzJCyKvmaKrCUFb1TFPhG9eSJQFZowqmymMPRtl8oo9NKLUbw==", + "dev": true, + "requires": { + "ci-info": "^2.0.0", + "clean-regexp": "^1.0.0", + "eslint-template-visitor": "^2.2.2", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "import-modules": "^2.1.0", + "lodash": "^4.17.20", + "pluralize": "^8.0.0", + "read-pkg-up": "^7.0.1", + "regexp-tree": "^0.1.22", + "reserved-words": "^0.1.2", + "safe-regex": "^2.1.1", + "semver": "^7.3.4" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + } + }, + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "eslint-scope": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", + "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-template-visitor": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/eslint-template-visitor/-/eslint-template-visitor-2.3.2.tgz", + "integrity": "sha512-3ydhqFpuV7x1M9EK52BPNj6V0Kwu0KKkcIAfpUhwHbR8ocRln/oUHgfxQupY8O1h4Qv/POHDumb/BwwNfxbtnA==", + "dev": true, + "requires": { + "@babel/core": "^7.12.16", + "@babel/eslint-parser": "^7.12.16", + "eslint-visitor-keys": "^2.0.0", + "esquery": "^1.3.1", + "multimap": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true + } + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + }, + "espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-set-props": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-set-props/-/get-set-props-0.1.0.tgz", + "integrity": "sha1-mYR1wXhEVobQsyJG2l3428++jqM=", + "dev": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "dev": true + }, + "htmlparser2": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-5.0.1.tgz", + "integrity": "sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^3.3.0", + "domutils": "^2.4.2", + "entities": "^2.0.0" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-modules": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-modules/-/import-modules-2.1.0.tgz", + "integrity": "sha512-8HEWcnkbGpovH9yInoisxaSoIg9Brbul+Ju3Kqe2UsYDUBJD/iQjSgEj0zPcTDPKfPp2fs5xlv1i+JSye/m1/A==", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "dev": true + }, + "is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "dev": true, + "requires": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true + }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true + }, + "is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-get-set-prop": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-get-set-prop/-/is-get-set-prop-1.0.0.tgz", + "integrity": "sha1-JzGHfk14pqae3M5rudaLB3nnYxI=", + "dev": true, + "requires": { + "get-set-props": "^0.1.0", + "lowercase-keys": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "dev": true + }, + "is-js-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-js-type/-/is-js-type-2.0.0.tgz", + "integrity": "sha1-c2FwBtZZtOtHKbunR9KHgt8PfiI=", + "dev": true, + "requires": { + "js-types": "^1.0.0" + } + }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true + }, + "is-obj-prop": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-obj-prop/-/is-obj-prop-1.0.0.tgz", + "integrity": "sha1-s03nnEULjXxzqyzfZ9yHWtuF+A4=", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0", + "obj-props": "^1.0.0" + } + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-proto-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-proto-prop/-/is-proto-prop-2.0.0.tgz", + "integrity": "sha512-jl3NbQ/fGLv5Jhan4uX+Ge9ohnemqyblWVVCpAvtTQzNFvV2xhJq+esnkIbYQ9F1nITXoLfDDQLp7LBw/zzncg==", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0", + "proto-props": "^2.0.0" + } + }, + "is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" + } + }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-whitespace-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", + "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", + "dev": true + }, + "is-word-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", + "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-types": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/js-types/-/js-types-1.0.0.tgz", + "integrity": "sha1-0kLmSU7Vcq08koCfyL7X92h8vwM=", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsdoctypeparser": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz", + "integrity": "sha512-jrTA2jJIL6/DAEILBEh2/w9QxCuwmvNXIry39Ay/HVfhE3o2yVV0U44blYkqdHA/OKloJEqvJy0xU+GSdE2SIw==", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema-test-suite": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/json-schema-test-suite/-/json-schema-test-suite-0.0.10.tgz", + "integrity": "sha1-qTYEqsPPQIQk1VNgi8OgF/0JAbw=", + "dev": true, + "requires": { + "lodash": "^3.9.3" + }, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + } + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "markdown-escapes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", + "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "multimap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multimap/-/multimap-1.1.0.tgz", + "integrity": "sha512-0ZIR9PasPxGXmRsEF8jsDzndzHDj7tIav+JUmvIFB/WHswliFnquxECT/De7GR4yg99ky/NlRKJT82G1y271bw==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node-releases": { + "version": "1.1.71", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", + "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "obj-props": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/obj-props/-/obj-props-1.3.0.tgz", + "integrity": "sha512-k2Xkjx5wn6eC3537SWAXHzB6lkI81kS+icMKMkh4nG3w7shWG6MaWOBrNvhWVOszrtL5uxdfymQQfPUxwY+2eg==", + "dev": true + }, + "object-inspect": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", + "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.values": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", + "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has": "^1.0.3" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "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 + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-entities": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.2.tgz", + "integrity": "sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==", + "dev": true, + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "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 + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, + "pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "proto-props": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/proto-props/-/proto-props-2.0.0.tgz", + "integrity": "sha512-2yma2tog9VaRZY2mn3Wq51uiSW4NcPYT1cQdBagwyrznrilKSZwIZ0UG3ZPL/mx+axEns0hE35T5ufOYZXEnBQ==", + "dev": true + }, + "punycode": { + "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 + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, + "regexp-tree": { + "version": "0.1.23", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.23.tgz", + "integrity": "sha512-+7HWfb4Bvu8Rs2eQTUIpX9I/PlQkYOuTNbRpKLJlQpSgwSkzFYh+pUj0gtvglnOZLKB6YgnIgRuJ2/IlpL48qw==", + "dev": true + }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true + }, + "regextras": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regextras/-/regextras-0.7.1.tgz", + "integrity": "sha512-9YXf6xtW+qzQ+hcMQXx95MOvfqXFgsKDZodX3qZB0x2n5Z94ioetIITsBtvJbiOyxa/6s9AtyweBLCdPmPko/w==", + "dev": true + }, + "remark-parse": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-5.0.0.tgz", + "integrity": "sha512-b3iXszZLH1TLoyUzrATcTQUZrwNl1rE70rVdSruJFlDaJ9z5aMkhrG43Pp68OgfHndL/ADz6V69Zow8cTQu+JA==", + "dev": true, + "requires": { + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^1.1.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^1.0.0", + "vfile-location": "^2.0.0", + "xtend": "^4.0.1" + } + }, + "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 + }, + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "reserved-words": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/reserved-words/-/reserved-words-0.1.2.tgz", + "integrity": "sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE=", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rollup": { + "version": "2.39.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.39.1.tgz", + "integrity": "sha512-9rfr0Z6j+vE+eayfNVFr1KZ+k+jiUl2+0e4quZafy1x6SFCjzFspfRSO2ZZQeWeX9noeDTUDgg6eCENiEPFvQg==", + "dev": true, + "requires": { + "fsevents": "~2.3.1" + } + }, + "rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safe-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz", + "integrity": "sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==", + "dev": true, + "requires": { + "regexp-tree": "~0.1.1" + } + }, + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "state-toggle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", + "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "table": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", + "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", + "dev": true, + "requires": { + "ajv": "^7.0.2", + "lodash": "^4.17.20", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0" + }, + "dependencies": { + "ajv": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.1.1.tgz", + "integrity": "sha512-ga/aqDYnUy/o7vbsRTFhhTsNeXiYb5JWDIcRIeZfwRNCefwjNTVYCGdGSUrEmiu3yDK3vFvNbgJxvrQW4JXrYQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + } + } + }, + "terser": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.6.0.tgz", + "integrity": "sha512-vyqLMoqadC1uR0vywqOZzriDYzgEkNJFK4q9GeyOBHIbiECHiWLKcWfbQWAUaPfxkjDhapSlZB9f7fkMrvkVjA==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "to-fast-properties": { + "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 + }, + "trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=", + "dev": true + }, + "trim-trailing-lines": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", + "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==", + "dev": true + }, + "trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "dev": true + }, + "tsconfig-paths": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", + "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, + "unherit": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", + "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", + "dev": true, + "requires": { + "inherits": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "unified": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-6.2.0.tgz", + "integrity": "sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA==", + "dev": true, + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^1.1.0", + "trough": "^1.0.0", + "vfile": "^2.0.0", + "x-is-string": "^0.1.0" + } + }, + "unist-util-is": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", + "dev": true + }, + "unist-util-remove-position": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz", + "integrity": "sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==", + "dev": true, + "requires": { + "unist-util-visit": "^1.1.0" + } + }, + "unist-util-stringify-position": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", + "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==", + "dev": true + }, + "unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "dev": true, + "requires": { + "unist-util-visit-parents": "^2.0.0" + } + }, + "unist-util-visit-parents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", + "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", + "dev": true, + "requires": { + "unist-util-is": "^3.0.0" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "v8-compile-cache": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", + "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "vfile": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-2.3.0.tgz", + "integrity": "sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==", + "dev": true, + "requires": { + "is-buffer": "^1.1.4", + "replace-ext": "1.0.0", + "unist-util-stringify-position": "^1.0.0", + "vfile-message": "^1.0.0" + } + }, + "vfile-location": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.6.tgz", + "integrity": "sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==", + "dev": true + }, + "vfile-message": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz", + "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==", + "dev": true, + "requires": { + "unist-util-stringify-position": "^1.1.1" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "x-is-string": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", + "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } +} diff --git a/package.json b/package.json index 5934096..85c4f89 100644 --- a/package.json +++ b/package.json @@ -2,33 +2,67 @@ "name": "json-pull-parser", "version": "1.0.2", "author": "John Susi (https://github.com/johnsusi/)", + "contributors": [ + "Brett Zamir" + ], "description": "JSON pull parser", "license": "MIT", - "main": "index.js", + "main": "./dist/json-pull-parser.cjs", + "exports": { + "import": "./dist/json-pull-parser.js", + "require": "./dist/json-pull-parser.cjs", + "./builder": "./src/builder.js" + }, + "type": "module", "scripts": { - "build": "webpack", - "test": "node ./test", - "preversion": "npm test", + "lint": "eslint --ext=js,cjs,md,html .", + "build": "rollup -c", + "test": "node --experimental-modules ./test/index.js", + "preversion": "npm run lint && npm test", "version": "npm run build && git add -A dist", "postversion": "git push && git push --tags && npm publish" }, + "repository": "https://github.com/johnsusi/json-pull-parser", + "bugs": "https://github.com/johnsusi/json-pull-parser/issues", + "homepage": "https://github.com/johnsusi/json-pull-parser#readme", + "engines": { + "node": ">=12" + }, "keywords": [ - "json" + "json", + "iterator" ], "files": [ - "dist/json-pull-parser.js", - "dist/json-pull-parser.js.map", + "dist/json-pull-parser.cjs", + "dist/json-pull-parser.cjs.map", "index.js", "src/builder.js", "src/parser.js" ], + "dependencies": {}, "devDependencies": { - "glob": "^7.1.1", + "@babel/eslint-parser": "^7.13.4", + "@brettz9/eslint-plugin": "^1.0.3", + "eslint": "^7.20.0", + "eslint-config-ash-nazg": "^29.8.0", + "eslint-config-standard": "^16.0.2", + "eslint-plugin-array-func": "^3.1.7", + "eslint-plugin-compat": "^3.9.0", + "eslint-plugin-eslint-comments": "^3.2.0", + "eslint-plugin-html": "^6.1.1", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-jsdoc": "^32.2.0", + "eslint-plugin-markdown": "^2.0.0", + "eslint-plugin-no-unsanitized": "^3.1.4", + "eslint-plugin-no-use-extend-native": "^0.5.0", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-promise": "^4.3.1", + "eslint-plugin-radar": "^0.2.1", + "eslint-plugin-standard": "^4.1.0", + "eslint-plugin-unicorn": "^28.0.2", + "glob": "^7.1.6", "json-schema-test-suite": "^0.0.10", - "webpack": "beta", - "xo": "^0.17.1" - }, - "xo": { - "space": true + "rollup": "^2.39.1", + "rollup-plugin-terser": "^7.0.2" } } diff --git a/rollup.config.js b/rollup.config.js new file mode 100644 index 0000000..575a382 --- /dev/null +++ b/rollup.config.js @@ -0,0 +1,25 @@ +import {terser} from 'rollup-plugin-terser'; + +export default [{ + input: 'index.js', + output: { + file: 'dist/json-pull-parser.cjs', + format: 'umd', + sourcemap: true, + name: 'JSONPullParser' + }, + plugins: [ + terser() + ] +}, { + input: 'index.js', + output: { + file: 'dist/json-pull-parser.js', + format: 'esm', + sourcemap: true, + name: 'JSONPullParser' + }, + plugins: [ + terser() + ] +}]; diff --git a/src/CodePointIterator.js b/src/CodePointIterator.js new file mode 100644 index 0000000..c9107bb --- /dev/null +++ b/src/CodePointIterator.js @@ -0,0 +1,41 @@ +/* eslint-disable no-empty-function, class-methods-use-this -- Not complete */ +/** + * @ignore + */ +class CodePointIterator { + /** + * @param {string} source + * @returns {void} + */ + constructor (source) { + this.s = source; + this.f = 0; + this.l = Math.trunc(source.length); + this.cc = 0; + } + + /** + * @returns {boolean} + */ + next () { + if (this.f >= this.l) return false; + this.cc = this.s.charCodeAt(this.f++); + return true; + } + + /** + * @returns {Integer} + */ + code () { + return this.cc; + } + + /** + * @param {Integer} code + * @returns {void} + */ + expect (code) { + } +} + +export default CodePointIterator; diff --git a/src/builder.js b/src/builder.js index 03c7a38..b9bce88 100644 --- a/src/builder.js +++ b/src/builder.js @@ -1,46 +1,68 @@ -function ObjectBuilder() { - this.handler = { - ref: this, - add: function (value) { this.ref.value = value; return value; }, - }; -} - -ObjectBuilder.prototype.startObject = function () { - this.handler = { - old: this.handler, - key: null, - ref: this.handler.add({}), - add: function (value) { - if (this.key === null) this.key = value; - else { this.ref[this.key] = value; this.key = null; } - return value; - }, - }; -} +/** + * + */ +class ObjectBuilder { + /** + * + */ + constructor () { + this.handler = { + ref: this, + add (value) { this.ref.value = value; return value; } + }; + } -ObjectBuilder.prototype.endObject = function () { - this.handler = this.handler.old; -} + /** + * @returns {void} + */ + startObject () { + this.handler = { + old: this.handler, + key: null, + ref: this.handler.add({}), + add (value) { + if (this.key === null) this.key = value; + else { this.ref[this.key] = value; this.key = null; } + return value; + } + }; + } -ObjectBuilder.prototype.startArray = function () { - this.handler = { - old: this.handler, - ref: this.handler.add([]), - add: function (value) { - this.ref.push(value); - return value; - }, - }; -} + /** + * @returns {void} + */ + endObject () { + this.handler = this.handler.old; + } -ObjectBuilder.prototype.endArray = ObjectBuilder.prototype.endObject; + /** + * @returns {void} + */ + startArray () { + this.handler = { + old: this.handler, + ref: this.handler.add([]), + add (value) { + this.ref.push(value); + return value; + } + }; + } -ObjectBuilder.prototype.add = function (value) { - this.handler.add(value); -} + /** + * @param {JSONValueOrError} value + * @returns {void} + */ + add (value) { + this.handler.add(value); + } -ObjectBuilder.prototype.handle = function (token) { - switch (token.type) { + /** + * @param {Token|TokenEnd} token + * @returns {void} + */ + handle (token) { + switch (token.type) { case '{': this.startObject(); break; @@ -62,7 +84,12 @@ ObjectBuilder.prototype.handle = function (token) { break; case 'error': throw new SyntaxError(token.value.message); + default: + break; + } } } -module.exports = ObjectBuilder; \ No newline at end of file +ObjectBuilder.prototype.endArray = ObjectBuilder.prototype.endObject; + +export default ObjectBuilder; diff --git a/src/parser.js b/src/parser.js index e0d73f9..203f0ca 100644 --- a/src/parser.js +++ b/src/parser.js @@ -1,131 +1,184 @@ -'use strict'; - -var ObjectBuilder = require('./builder'); - -var VALUE = 1; -var KEY = 2; -var COMMA = 4; -var COLON = 8; -var CLOSE = 16; -var OBJECT = 32; -var ARRAY = 64; - -function JSONPullParser(text) -{ - this.text = text; -} +import ObjectBuilder from './builder.js'; + +/** + * @typedef {PlainObject} State + * @property {string} s Text + * @property {boolean} [d=false] Done + * @property {Integer} [f=0] Position + * @property {Integer} [l] Defaults to text length + * @property {Integer} [e=VALUE] Expect + * @property {Integer} [c=0] Column + * @property {Integer} [r=1] Row + * @property {Integer[]} [x=[]] +*/ + +/** +* @typedef {string} Type +*/ + +/** + * @typedef {PlainObject} TokenPlain + * @property {Type} type + * @property {Integer} first + * @property {Integer} last +*/ + +/** + * @typedef {TokenPlain} TokenEnd + */ + +/** + * @typedef {SyntaxError|string|Float|boolean|null} JSONValueOrError + */ + +/** + * @typedef {TokenPlain} Token + * @property {JSONValueOrError} value + */ + +/** + * @typedef {Token} TokenWithSource + * @property {string} source + */ + +const VALUE = 1; +const KEY = 2; +const COMMA = 4; +const COLON = 8; +const CLOSE = 16; +const OBJECT = 32; +const ARRAY = 64; + +/** + * + */ +class JSONPullParser { + /** + * @param {string} text + * @returns {void} + */ + constructor (text) { + this.text = text; + } -JSONPullParser.prototype[Symbol.iterator] = function() -{ - return TokenIterator(this.text); -} + /** + * @returns {Iterator} + */ + [Symbol.iterator] () { + return tokenIterator(this.text); + } -JSONPullParser.prototype.tokens = function() -{ - return TokenIterator(this.text); + /** + * @returns {Iterator} + */ + tokens () { + return tokenIterator(this.text); + } } +/* if (typeof Symbol === 'object' && Symbol.iterator) { JSONPullParser.prototype[Symbol.iterator] = JSONPullParser.prototype.tokens; } +*/ JSONPullParser.StartDocument = '<'; -JSONPullParser.EndDocument = '>'; -JSONPullParser.StartObject = '{'; -JSONPullParser.EndObject = '}'; -JSONPullParser.StartArray = '['; -JSONPullParser.EndArray = ']'; -JSONPullParser.String = 'string'; -JSONPullParser.Number = 'number'; -JSONPullParser.TrueLiteral = 'true'; -JSONPullParser.FalseLiteral = 'false'; -JSONPullParser.NullLiteral = 'null'; -JSONPullParser.Whitespace = 'ws'; -JSONPullParser.Error = 'error'; - -function CodePointIterator(source) -{ - this.s = source; - this.f = 0; - this.l = source.length | 0; - this.cc = 0; -} - -CodePointIterator.prototype.next = function () -{ - if (this.f >= this.l) return false; - this.cc = source.charCodeAt(this.f++) | 0; - return true; -} - -CodePointIterator.prototype.code = function () -{ - return this.cc; -} - -CodePointIterator.prototype.expect = function (code) -{ -} +JSONPullParser.EndDocument = '>'; +JSONPullParser.StartObject = '{'; +JSONPullParser.EndObject = '}'; +JSONPullParser.StartArray = '['; +JSONPullParser.EndArray = ']'; +JSONPullParser.String = 'string'; +JSONPullParser.Number = 'number'; +JSONPullParser.TrueLiteral = 'true'; +JSONPullParser.FalseLiteral = 'false'; +JSONPullParser.NullLiteral = 'null'; +JSONPullParser.Whitespace = 'ws'; +JSONPullParser.Error = 'error'; JSONPullParser.ObjectBuilder = ObjectBuilder; -JSONPullParser.parse = function(text, reviever) -{ - if (typeof text !== 'string') text = '' + text; - var builder = new ObjectBuilder(); - var it = TokenIterator(text); - for (var step = it.next();!step.done; step = it.next()) { - var token = step.value; +/** +* @callback ReviverFunction +* @returns {JSON} +*/ + +/** +* @param {string} text +* @param {ReviverFunction} reviver +*/ +JSONPullParser.parse = function (text, reviver) { + if (typeof text !== 'string') text = String(text); + const builder = new ObjectBuilder(); + for (const token of tokenIterator(text)) { // console.log("token: " + token.type); builder.handle(token); } - if (typeof builder.value === 'undefined') throw new SyntaxError('Unexpected end of JSON input'); + if (typeof builder.value === 'undefined') { + throw new SyntaxError('Unexpected end of JSON input'); + } return builder.value; -} - -function TokenIterator(text) -{ - var state = { - d: false, // done +}; + +/** + * @param {string} text + * @yields {Token|TokenEnd} + * @returns {void} + */ +function * tokenIterator (text) { + const state = { s: text, - f: 0, // position + d: false, // done + f: 0, // position l: text.length, // length - e: VALUE, // expect - c: 0, // column - r: 1, // row + e: VALUE, // expect + c: 0, // column + r: 1, // row x: [] }; - return { - next: function () { - // console.log(`next: ${state.f}, ${state.l}, ${text.charCodeAt(state.f).toString(16)}`) - if (state.f === state.l) { - return (state.e || state.x.length > 0) - ? { done: false, value: ParserError(state.s, state.l, state.l, 'Unexpected end of JSON input') } - : { done: true }; + + while (true) { + // console.log( + // `next: ${state.f}, ${state.l}, ` + + // `${text.charCodeAt(state.f).toString(16)}` + // ); + if (state.f === state.l) { + if (!state.e && !state.x.length) { + return; } - var token = parseValue(state); - state.f = token.last; - return { value: token, done: false }; + yield parserError( + state.s, state.l, state.l, 'Unexpected end of JSON input' + ); } - }; + const token = parseValue(state); + state.f = token.last; + + yield token; + } } -function ParserError(s, f, l, m, r) -{ - r = r || 1; - var c = f; - var cc = s.charCodeAt(c); - while (cc !== 0x0a && c > 0) { +/** + * @param {string} s + * @param {Integer} f + * @param {Integer} l + * @param {string} m Message + * @param {Integer} r + * @returns {Token} + */ +function parserError (s, f, l, m, r = 1) { + let c = f; + let cc = s.charCodeAt(c); + while (cc !== 0x0A && c > 0) { cc = s.charCodeAt(--c); } - if (cc === 0x0a) ++c; - var str0 = 'undefined:' + r; - var str1 = s.substring(c, f+1); - var str2 = ''; - for (var i = c;i < f;++i) str2 += ' '; + if (cc === 0x0A) ++c; + const str0 = 'undefined:' + r; + const str1 = s.slice(c, f + 1); + let str2 = ''; + for (let i = c; i < f; ++i) str2 += ' '; str2 += '^'; - var err = new SyntaxError(str0 + "\n" + str1 + "\n" + str2 + "\n\n" + m); + const err = new SyntaxError(str0 + '\n' + str1 + '\n' + str2 + '\n\n' + m); return { type: JSONPullParser.Error, value: err, @@ -134,237 +187,352 @@ function ParserError(s, f, l, m, r) }; } -function parseObjectStart(s, f, l) -{ +/** + * @param {string} s + * @param {Integer} f + * @param {Integer} l + * @returns {Token} + */ +function parseObjectStart (s, f, l) { return { type: JSONPullParser.StartObject, value: '{', first: f, - last: f+1 + last: f + 1 }; } -function parseObjectEnd(s, f, l) -{ +/** + * @param {string} s + * @param {Integer} f + * @param {Integer} l + * @returns {Token} + */ +function parseObjectEnd (s, f, l) { return { type: JSONPullParser.EndObject, value: '}', first: f, - last: f+1 + last: f + 1 }; } -function parseArrayStart(s, f, l) -{ +/** + * @param {string} s + * @param {Integer} f + * @param {Integer} l + * @returns {Token} + */ +function parseArrayStart (s, f, l) { return { type: JSONPullParser.StartArray, value: '[', first: f, - last: f+1 + last: f + 1 }; } -function parseArrayEnd(s, f, l) -{ +/** + * @param {string} s + * @param {Integer} f + * @param {Integer} l + * @returns {Token} + */ +function parseArrayEnd (s, f, l) { return { type: JSONPullParser.EndArray, value: ']', first: f, - last: f+1 + last: f + 1 }; } -function parseValue(state) -{ - var s = state.s; - var f = state.f; - var l = state.l; +/** + * @param {State} state + * @returns {Token|TokenEnd} + */ +function parseValue (state) { + const {s, l} = state; + let {f} = state; while (f < l) { state.c++; switch (s.charCodeAt(f)) { - case 0x0a: // LF - state.c = 0; - state.r++; - case 0x09: // TAB - case 0x0d: // CR - case 0x20: // WS - ++f; continue; - case 0x7b: // { - if (!(state.e & VALUE)) return ParserError(s, f, l, 'Unexpected token { in JSON at position ' + f, state.r); - state.e = KEY | CLOSE; - state.x.push(OBJECT); - return parseObjectStart(s, f, l); - case 0x7d: // } - if (!(state.e & CLOSE) || state.x.pop() !== OBJECT) return ParserError(s, f, l, 'Unexpected token } in JSON at position ' + f, state.r); - state.e = state.x.length > 0 ? COMMA | CLOSE : 0; - return parseObjectEnd(s, f, l); - case 0x5b: // [ - if (!(state.e & VALUE)) return ParserError(s, f, l, 'Unexpected token [ in JSON at position ' + f, state.r); - state.e = VALUE | CLOSE; - state.x.push(ARRAY); - return parseArrayStart(s, f, l); - case 0x5d: // ] - if (!(state.e & CLOSE) || state.x.pop() !== ARRAY) return ParserError(s, f, l, 'Unexpected token ] in JSON at position ' + f, state.r); - state.e = state.x.length > 0 ? COMMA | CLOSE : 0; - return parseArrayEnd(s, f, l); - case 0x3a: // : - if (!(state.e & COLON)) return ParserError(s, f, l, 'Unexpected token : in JSON at position ' + f, state.r); + case 0x0A: // LF + state.c = 0; + state.r++; + // Fallthrough + case 0x09: // TAB + case 0x0D: // CR + case 0x20: // WS + ++f; continue; + case 0x7B: // { + if (!(state.e & VALUE)) { + return parserError( + s, f, l, 'Unexpected token { in JSON at position ' + f, state.r + ); + } + state.e = KEY | CLOSE; + state.x.push(OBJECT); + return parseObjectStart(s, f, l); + case 0x7D: // } + if (!(state.e & CLOSE) || state.x.pop() !== OBJECT) { + return parserError( + s, f, l, 'Unexpected token } in JSON at position ' + f, state.r + ); + } + state.e = state.x.length > 0 ? COMMA | CLOSE : 0; + return parseObjectEnd(s, f, l); + case 0x5B: // [ + if (!(state.e & VALUE)) { + return parserError( + s, f, l, 'Unexpected token [ in JSON at position ' + f, state.r + ); + } + state.e = VALUE | CLOSE; + state.x.push(ARRAY); + return parseArrayStart(s, f, l); + case 0x5D: // ] + if (!(state.e & CLOSE) || state.x.pop() !== ARRAY) { + return parserError( + s, f, l, 'Unexpected token ] in JSON at position ' + f, state.r + ); + } + state.e = state.x.length > 0 ? COMMA | CLOSE : 0; + return parseArrayEnd(s, f, l); + case 0x3A: // : + if (!(state.e & COLON)) { + return parserError( + s, f, l, 'Unexpected token : in JSON at position ' + f, state.r + ); + } + state.e = VALUE; + ++f; continue; + case 0x2C: // , + if (!(state.e & COMMA)) { + return parserError( + s, f, l, 'Unexpected token , in JSON at position ' + f, state.r + ); + } + if (state.x.length > 0 && state.x[state.x.length - 1] === OBJECT) { + state.e = KEY; + } else { state.e = VALUE; - ++f; continue; - case 0x2c: // , - if (!(state.e & COMMA)) return ParserError(s, f, l, 'Unexpected token , in JSON at position ' + f, state.r); - if (state.x.length > 0 && state.x[state.x.length-1] === OBJECT) state.e = KEY; - else state.e = VALUE; - ++f; continue; - case 0x2d: // - - case 0x30: // 0 - case 0x31: // 1 - case 0x32: // 2 - case 0x33: // 3 - case 0x34: // 4 - case 0x35: // 5 - case 0x36: // 6 - case 0x37: // 7 - case 0x38: // 8 - case 0x39: // 9 - if (!(state.e & VALUE)) return ParserError(s, f, l, 'Unexpected number in JSON at position ' + f, state.r); - state.e = state.x.length > 0 ? COMMA | CLOSE : 0; - return parseNumber(s, f, l); - case 0x22: - if (state.e & KEY) { - state.e = COLON; - return parseString(s, f, l); - } - if (!(state.e & VALUE)) return ParserError(s, f, l, 'Unexpected string in JSON at position ' + f, state.r); - state.e = state.x.length > 0 ? COMMA | CLOSE : 0; + } + ++f; continue; + case 0x2D: // - + case 0x30: // 0 + case 0x31: // 1 + case 0x32: // 2 + case 0x33: // 3 + case 0x34: // 4 + case 0x35: // 5 + case 0x36: // 6 + case 0x37: // 7 + case 0x38: // 8 + case 0x39: // 9 + if (!(state.e & VALUE)) { + return parserError( + s, f, l, 'Unexpected number in JSON at position ' + f, state.r + ); + } + state.e = state.x.length > 0 ? COMMA | CLOSE : 0; + return parseNumber(s, f, l); + case 0x22: + if (state.e & KEY) { + state.e = COLON; return parseString(s, f, l); - case 0x74: // t - if (!(state.e & VALUE)) return ParserError(s, f, l, 'Unexpected token t in JSON at position ' + f, state.r); - state.e = state.x.length > 0 ? COMMA | CLOSE : 0; - return parseTrue(s, f, l); - case 0x66: // f - if (!(state.e & VALUE)) return ParserError(s, f, l, 'Unexpected token f in JSON at position ' + f, state.r); - state.e = state.x.length > 0 ? COMMA | CLOSE : 0; - return parseFalse(s, f, l); - case 0x6e: // n - if (!(state.e & VALUE)) return ParserError(s, f, l, 'Unexpected token n in JSON at position ' + f, state.r); - state.e = state.x.length > 0 ? COMMA | CLOSE : 0; - return parseNull(s, f, l); - default: return ParserError(s, f, l, 'Unexpected token ' + s[f] + ' in JSON at position ' + f, state.r); + } + if (!(state.e & VALUE)) { + return parserError( + s, f, l, 'Unexpected string in JSON at position ' + f, state.r + ); + } + state.e = state.x.length > 0 ? COMMA | CLOSE : 0; + return parseString(s, f, l); + case 0x74: // t + if (!(state.e & VALUE)) { + return parserError( + s, f, l, 'Unexpected token t in JSON at position ' + f, state.r + ); + } + state.e = state.x.length > 0 ? COMMA | CLOSE : 0; + return parseTrue(s, f, l); + case 0x66: // f + if (!(state.e & VALUE)) { + return parserError( + s, f, l, 'Unexpected token f in JSON at position ' + f, state.r + ); + } + state.e = state.x.length > 0 ? COMMA | CLOSE : 0; + return parseFalse(s, f, l); + case 0x6E: // n + if (!(state.e & VALUE)) { + return parserError( + s, f, l, 'Unexpected token n in JSON at position ' + f, state.r + ); + } + state.e = state.x.length > 0 ? COMMA | CLOSE : 0; + return parseNull(s, f, l); + default: return parserError( + s, f, l, 'Unexpected token ' + s[f] + ' in JSON at position ' + f, state.r + ); } } return { type: JSONPullParser.EndDocument, first: l, - last: l, + last: l }; } -function parseNumber(s, f, l) -{ - var c = f; +/** + * @param {string} s + * @param {Integer} f + * @param {Integer} l + * @returns {Token} + */ +function parseNumber (s, f, l) { + let c = f; - var cc = s.charCodeAt(c++); + let cc = s.charCodeAt(c++); - if (cc === 0x2d /* - */) cc = s.charCodeAt(c++); + if (cc === 0x2D /* - */) cc = s.charCodeAt(c++); if (cc !== 0x30 /* 0 */) { while (cc >= 0x30 /* 0 */ && cc <= 0x39 /* 9 */) { cc = s.charCodeAt(c++); } - } - else { + } else { cc = s.charCodeAt(c++); } - if (cc === 0x2e /* . */) { + if (cc === 0x2E /* . */) { cc = s.charCodeAt(c++); while (cc >= 0x30 && cc <= 0x39) cc = s.charCodeAt(c++); } if (cc === 0x65 /* e */|| cc === 0x45 /* E */) { cc = s.charCodeAt(c++); - if (cc === 0x2b /* + */|| cc === 0x2d /* - */) cc = s.charCodeAt(c++); - if (cc < 0x30 || cc > 0x39) return ParserError(s, c-1, l, 'Unexpected token ' + s[c-1] + ' in JSON at position ' + (c-1)); - if (c >= l) return ParserError(s, f, l, 'Unexpected end of JSON input'); + if (cc === 0x2B /* + */|| cc === 0x2D /* - */) cc = s.charCodeAt(c++); + if (cc < 0x30 || cc > 0x39) { + return parserError( + s, c - 1, l, + 'Unexpected token ' + s[c - 1] + ' in JSON at position ' + (c - 1) + ); + } + if (c >= l) return parserError(s, f, l, 'Unexpected end of JSON input'); while (cc >= 0x30 /* 0 */ && cc <= 0x39 /* 9 */) cc = s.charCodeAt(c++); - } return { type: JSONPullParser.Number, - value: parseFloat(s.substring(f, c-1)), // parseFloat seems to be faster than JSON.parse + value: Number.parseFloat( + s.slice(f, c - 1) + ), // parseFloat seems to be faster than JSON.parse first: f, - last: c-1 + last: c - 1 }; - } // ECMA-404 section 9 -function parseString(s, f, l) -{ - var c = f+1; +/** + * @param {string} s + * @param {Integer} f + * @param {Integer} l + * @returns {TokenWithSource} + */ +function parseString (s, f, l) { + let c = f + 1; while (c < l) { - var cc = s.charCodeAt(c++); + let cc = s.charCodeAt(c++); if (cc === 0x22 /* " */) break; - else if (cc === 0x5c /* \ */) { + else if (cc === 0x5C /* \ */) { cc = s.charCodeAt(c++); if (cc === 0x75 /* u */) { c += 4; - if (c > l) return ParserError(s, l, l, 'Unexpected end of JSON input'); + if (c > l) return parserError(s, l, l, 'Unexpected end of JSON input'); } } } // console.log(`string: ${c}, ${f}, ${s.substring(f, c)}`); return { type: JSONPullParser.String, - value: JSON.parse(s.substring(f, c)), + value: JSON.parse(s.slice(f, c)), source: s, first: f, last: c }; } -function match(s, f, l, ccs, success) -{ - if (f + ccs.length > l) return ParserError(s, l, l, 'Unexpected end of JSON input'); - for (var i = 0;i < ccs.length; ++i) { - var cc = s.charCodeAt(f++); - if (cc !== ccs[i]) return ParserError(s, f, l, 'Unexpected token ' + s[f-1] + ' in JSON at position ' + (f-1)); +/** + * @param {string} s + * @param {Integer} f + * @param {Integer} l + * @param {Integer[]} ccs + * @param {TokenWithSource} success + * @returns {token} + */ +function match (s, f, l, ccs, success) { + if (f + ccs.length > l) { + return parserError(s, l, l, 'Unexpected end of JSON input'); + } + for (const cc_ of ccs) { + const cc = s.charCodeAt(f++); + if (cc !== cc_) { + return parserError( + s, f, l, + 'Unexpected token ' + s[f - 1] + ' in JSON at position ' + (f - 1) + ); + } } return success; } -function parseTrue(s, f, l) -{ +/** + * @param {string} s + * @param {Integer} f + * @param {Integer} l + * @returns {TokenWithSource} + */ +function parseTrue (s, f, l) { return match(s, f, l, [0x74, 0x72, 0x75, 0x65], { type: JSONPullParser.TrueLiteral, value: true, source: s, first: f, - last: f+4 + last: f + 4 }); } -function parseFalse(s, f, l) -{ - return match(s, f, l, [0x66, 0x61, 0x6c, 0x73, 0x65], { +/** + * @param {string} s + * @param {Integer} f + * @param {Integer} l + * @returns {TokenWithSource} + */ +function parseFalse (s, f, l) { + return match(s, f, l, [0x66, 0x61, 0x6C, 0x73, 0x65], { type: JSONPullParser.FalseLiteral, value: false, source: s, first: f, - last: f+5 + last: f + 5 }); } -function parseNull(s, f, l) -{ - return match(s, f, l, [0x6e, 0x75, 0x6c, 0x6c], { +/** + * @param {string} s + * @param {Integer} f + * @param {Integer} l + * @returns {TokenWithSource} + */ +function parseNull (s, f, l) { + return match(s, f, l, [0x6E, 0x75, 0x6C, 0x6C], { type: JSONPullParser.NullLiteral, value: null, source: s, first: f, - last: f+4 + last: f + 4 }); } -module.exports = JSONPullParser; +export default JSONPullParser; diff --git a/test/index.js b/test/index.js index ab194a6..3fe97d3 100644 --- a/test/index.js +++ b/test/index.js @@ -1,118 +1,127 @@ -const JSONPullParser = require(__dirname + '/..'); +/* eslint-disable node/no-sync -- Ok for tests */ +import assert from 'assert'; +import fs from 'fs'; +import {join, dirname} from 'path'; +import {fileURLToPath} from 'url'; +import vm from 'vm'; +import glb from 'glob'; -const assert = require('assert'); -const fs = require('fs'); -const glob = require('glob').sync; +import testSuite from 'json-schema-test-suite'; -glob(__dirname + '/**/fail*.json').forEach(file => { +const glob = glb.sync; + +const __dirname = dirname(fileURLToPath(import.meta.url)); + +const globRelativePath = (path) => { + return glob(join(__dirname, path)); +}; + +(async () => { +// eslint-disable-next-line no-unsanitized/method -- Own tests +const JSONPullParser = (await import(__dirname + '/../index.js')).default; +globRelativePath('/**/fail*.json').forEach((file) => { console.log(file); - var test = fs.readFileSync(file).toString(); + const tst = fs.readFileSync(file).toString(); assert.throws(() => { - JSONPullParser.parse(test) + JSONPullParser.parse(tst); }); - }); -glob(__dirname + '/**/pass*.json').forEach(file => { +globRelativePath('/**/pass*.json').forEach((file) => { console.log(file); - var test = fs.readFileSync(file).toString(); + const tst = fs.readFileSync(file).toString(); - var o1 = JSONPullParser.parse(test); - assert.doesNotThrow( () => { - - var o1 = JSONPullParser.parse(test); - var o2 = JSON.parse(test); + let o1 = JSONPullParser.parse(tst); + assert.doesNotThrow(() => { + o1 = JSONPullParser.parse(tst); + const o2 = JSON.parse(tst); assert.deepStrictEqual(o1, o2); - }); - }); -const util = require('util'); -const vm = require('vm'); - -glob(__dirname + '/js/**/*.js').forEach(file => { +globRelativePath('/js/**/*.js').forEach((file) => { console.log(file); const sandbox = { assert: { - throws(type, block) { + throws (type, block) { try { block(); assert.fail(); } catch (err) { + // eslint-disable-next-line no-restricted-syntax -- Frame safe assert(err instanceof type, `Expected ${type}, got ${err}`); } }, - sameValue(actual, expected, message) { + sameValue (actual, expected, message) { assert.equal(actual, expected, message); } }, - console: console, + console, JSON: JSONPullParser, - SyntaxError: SyntaxError, + SyntaxError }; const source = fs.readFileSync(file).toString(); const script = new vm.Script(source); - const context = new vm.createContext(sandbox); - script.runInContext(context); - + const ctxt = vm.createContext(sandbox); + script.runInContext(ctxt); }); -const testSuite = require('json-schema-test-suite'); - const factory = function (schema, options) { return { - validate: function (json) { + validate (json) { try { - var s = JSON.stringify(json); - var s1, s2, e1; + const s = JSON.stringify(json); + let s1, s2, e1; try { s1 = JSON.stringify(JSON.parse(s)); - } - catch (err) { + } catch (err) { e1 = err; } try { s2 = JSON.stringify(JSONPullParser.parse(s)); - } - catch (err) { + } catch (err) { if (!e1) { console.log(json); console.error(err); + // eslint-disable-next-line max-len -- Necessary + // eslint-disable-next-line unicorn/no-process-exit -- Immediate feedback process.exit(-1); } } - if (e1) return { valid: false, errors: [e1.message] }; + if (e1) return {valid: false, errors: [e1.message]}; - return s1 === s2 ? { valid: true } : { valid: false, errors: ['not equal'] }; + return s1 === s2 + ? {valid: true} + : {valid: false, errors: ['not equal']}; } catch (err) { console.error(err); + return {valid: false, errors: [err.message]}; } } }; }; -const tests = testSuite.testSync(factory); +/* const tests = */ testSuite.testSync(factory); -glob(__dirname + '/json/benchmark/**.json').forEach(file => { +globRelativePath('/json/benchmark/**.json').forEach((file) => { console.log(file); const source = fs.readFileSync(file).toString(); console.time('JSON'); - for (let i = 0;i < 1e2;++i) JSON.parse(source); + for (let i = 0; i < 1e2; ++i) JSON.parse(source); const o1 = JSON.parse(source); console.timeEnd('JSON'); console.time('JSONPullParser'); - for (let i = 0;i < 1e2;++i) JSONPullParser.parse(source); + for (let i = 0; i < 1e2; ++i) JSONPullParser.parse(source); const o2 = JSONPullParser.parse(source); console.timeEnd('JSONPullParser'); assert.deepStrictEqual(o1, o2); assert.equal(JSON.stringify(o1), JSON.stringify(o2)); - -}) \ No newline at end of file +}); +})(); diff --git a/webpack.config.js b/webpack.config.js deleted file mode 100644 index 039d297..0000000 --- a/webpack.config.js +++ /dev/null @@ -1,16 +0,0 @@ -const webpack = require('webpack'); - -module.exports = { - entry: './index.js', - output: { - filename: 'dist/json-pull-parser.js', - library: 'JSONPullParser', - libraryTarget: 'umd', - }, - devtool: "source-map", - plugins: [ - new webpack.optimize.UglifyJsPlugin({ - sourceMap: true - }), - ], -}; \ No newline at end of file