From 37075c4c78db268eadf7cece7fd4b0565d2e4db8 Mon Sep 17 00:00:00 2001 From: Diana Arreola Date: Mon, 17 Aug 2020 17:09:05 -0700 Subject: [PATCH 01/13] added badges to readme and package.json --- extension/code-editor-integration/README.md | 1 + extension/vscode-howdoi/LICENSE.txt | 21 +++++++++++++ extension/vscode-howdoi/package.json | 33 +++++++++++++++++++-- 3 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 extension/vscode-howdoi/LICENSE.txt diff --git a/extension/code-editor-integration/README.md b/extension/code-editor-integration/README.md index 7ca87a39f..934fdc0cb 100644 --- a/extension/code-editor-integration/README.md +++ b/extension/code-editor-integration/README.md @@ -1,4 +1,5 @@ # Code Editor Integration Development +![Node.js CI](https://github.com/gleitz/howdoi/workflows/Node.js%20CI/badge.svg) Simplifies the process of integrating howdoi as a code editor extension. diff --git a/extension/vscode-howdoi/LICENSE.txt b/extension/vscode-howdoi/LICENSE.txt new file mode 100644 index 000000000..4e68a491c --- /dev/null +++ b/extension/vscode-howdoi/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Diana Arreola + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/extension/vscode-howdoi/package.json b/extension/vscode-howdoi/package.json index 95de33acd..656def704 100644 --- a/extension/vscode-howdoi/package.json +++ b/extension/vscode-howdoi/package.json @@ -1,15 +1,19 @@ { "name": "howdoi", "displayName": "howdoi", - "publisher": "Diana", + "publisher": "Diana Arreola and Benjamin Gleitzman", "description": "Receive instant coding answers via a code editor.", "version": "0.0.1", "engines": { "vscode": "^1.46.0" }, "categories": [ - "Other" + "Other", + "Programming Languages" ], + "author": { + "name": "diana arreola" + }, "activationEvents": [ "onCommand:howdoi.extension" ], @@ -51,5 +55,28 @@ "@types/chai": "^4.2.12", "ncp": "^2.0.0", "rimraf": "^3.0.2" - } + }, + "badges": [ + { + "url": "https://secure.travis-ci.org/gleitz/howdoi.png?branch=master" , + "href": "https://travis-ci.org/github/gleitz/howdoi", + "description": "Howdoi Travis CI Build" + + }, + { + "url": "https://github.com/gleitz/howdoi/workflows/Node.js%20CI/badge.svg" , + "href": "https://github.com/gleitz/howdoi/actions?query=workflow%3A%22Node.js+CI%22", + "description": "Github Actions Node.js CI" + + } + ], + "license": "SEE LICENSE IN LICENSE.txt", + "bugs": { + "url": "https://github.com/gleitz/howdoi/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/gleitz/howdoi.git" + }, + "homepage": "https://github.com/gleitz/howdoi/blob/master/extension/vscode-howdoi/README.md" } From 0cf718300628a086faafddb051dcc1684726154f Mon Sep 17 00:00:00 2001 From: Diana Arreola Date: Mon, 17 Aug 2020 17:16:05 -0700 Subject: [PATCH 02/13] vscode howdoi packaged file --- extension/vscode-howdoi/package.json | 2 +- extension/vscode-pkg/howdoi-0.0.1.vsix | Bin 0 -> 101349 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 extension/vscode-pkg/howdoi-0.0.1.vsix diff --git a/extension/vscode-howdoi/package.json b/extension/vscode-howdoi/package.json index 656def704..cadfcc204 100644 --- a/extension/vscode-howdoi/package.json +++ b/extension/vscode-howdoi/package.json @@ -1,7 +1,7 @@ { "name": "howdoi", "displayName": "howdoi", - "publisher": "Diana Arreola and Benjamin Gleitzman", + "publisher": "Diana", "description": "Receive instant coding answers via a code editor.", "version": "0.0.1", "engines": { diff --git a/extension/vscode-pkg/howdoi-0.0.1.vsix b/extension/vscode-pkg/howdoi-0.0.1.vsix new file mode 100644 index 0000000000000000000000000000000000000000..512b41551c4fecb2d93bfd707d53f4cbe4f0a5aa GIT binary patch literal 101349 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%0A=Qd`N8L1T`&E)%bC)bbc7k3QfkA*)(-G0 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 Date: Mon, 17 Aug 2020 18:08:19 -0700 Subject: [PATCH 03/13] added README for packaged extension --- README.rst | 2 +- extension/vscode-howdoi/package.json | 2 +- extension/vscode-pkg/README.md | 19 +++++++++++++++++++ extension/vscode-pkg/howdoi-0.0.1.vsix | Bin 101349 -> 101349 bytes extension/vscode-pkg/img/code-command.png | Bin 0 -> 13706 bytes 5 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 extension/vscode-pkg/README.md create mode 100644 extension/vscode-pkg/img/code-command.png diff --git a/README.rst b/README.rst index f1adce522..693f332a3 100644 --- a/README.rst +++ b/README.rst @@ -231,7 +231,7 @@ howdoi can now be installed as an extension on Visual Studio Code! There are two - (coming soon) 2. Directly from the packaged extension: -- (coming soon) + - To locally install the howdoi Visual Studio Code package, head over to the ``extension/vscode-pkg/README`` folder. Contributing ------------ diff --git a/extension/vscode-howdoi/package.json b/extension/vscode-howdoi/package.json index cadfcc204..61a90cf60 100644 --- a/extension/vscode-howdoi/package.json +++ b/extension/vscode-howdoi/package.json @@ -1,7 +1,7 @@ { "name": "howdoi", "displayName": "howdoi", - "publisher": "Diana", + "publisher": "howdoi-org", "description": "Receive instant coding answers via a code editor.", "version": "0.0.1", "engines": { diff --git a/extension/vscode-pkg/README.md b/extension/vscode-pkg/README.md new file mode 100644 index 000000000..f15f08abd --- /dev/null +++ b/extension/vscode-pkg/README.md @@ -0,0 +1,19 @@ +# Howdoi Visual Studio Code Extension + +Locally install the howdoi Visual Studio Code Extension. + +## Installation + +- Open Visual Studio Code and open the Command Palette and run: + + Shell Command: Install ‘code’ command in PATH + ![Image of Shell Command](https://octodex.github.com/img/code-command.png) + + Restart your terminal +- Within the `ext/vscode-pkg` folder, run: + + code --install-extension howdoi-0.0.1.vsix + +- Add unpackaged files to your VS Code extensions folder. Head over [here](https://code.visualstudio.com/api/working-with-extensions/publishing-extension#your-extension-folder) to determine the path to your extension folder. + + diff --git a/extension/vscode-pkg/howdoi-0.0.1.vsix b/extension/vscode-pkg/howdoi-0.0.1.vsix index 512b41551c4fecb2d93bfd707d53f4cbe4f0a5aa..d27e7867c8fdb99945e0852729e5954423ebb2f3 100644 GIT binary patch delta 1601 zcmY+EdpOez7{~XUVa71bQW}+8r7XFX6qZVca)~0>D7&~+ZrfoU*F_t(YVK=T*U2)M zXyqK2J!2wEJ?GGI>73=7TndrnSm$|qp8ong-}iZ+_j&*Le!nu7l8mKCd%_k=r6~+ z94bY}V|$P0ZTS{YaK|U#_8lha28#D5d=c&OgH0_T@(m?f=4VWGgpn41RfW(dObd^% zo!aJa2wpX!MduqcjW(TPhdK9NPA9AQy1)x!Bj8D5E3JaTan&y&?%AaEaqN*?nZUYuDfZR{j{b=&TnLE9Ng`SWz%{-K}`8sb^Jq z=Jn~+q1&+ywS!_x{YSQi6dCw3WlJR|E_0vsLEjbW=tIZTsSfwnz6I1-+Jh&0(;qL7 z!Y;o0BUXi6>yoC~(~ z(DFcd+0zobJxyoFA`h1T+ndc>O_7FV@F+^z%!wrLoJ94iY3b&M?MuP&aVZN~L<4i` z6r-d+a!kMeNNep^!^BDb)PqL-#c=fMJBwKcA8uV;eb6o){vpN;QZ~e}=u6cN#@6lf zBwD?vkTb8|=-gbB@Oj2uc9J-&Woj72kz!vgk(2hK-48L=FcB4WYzreTs2eZt4=dln z4sxns8vL9@8bwg8pbUVqIfAEAWe|l{?{VZJo0Z zkuTWjg^R3IJ$iox`Gki;YTrfq-TcHPqTq#V{b2P8F&_Jx4DOPeW&_c z-ciVFFW(}U2w zD!1Iy&JyGdA;mk4;NLFp30Oq&dXD)I1X}Fg-Ml+i-MhwqN%@4EGE}SVaGC#lB{xGs zpmmF={AlZRj9CN53@~zr|J2;9P&{C}ZW~q+9ylcD03MiHHvp@H0N~}cCIT1aWE20_ psw5y-u8Abzyqs@HK$M)0(ZCV7-MZa=e86Hxe?Q&O6%FWZ{twil+aLe{ delta 1601 zcmY+EX;jh)6vg=i3NE=5X;Us`B(^uEC6cX@nyJ~KnWDKPNTy9WW|+HenozW;ShyxC zWVn}#BBWxPxjXJ_xn;JHMI+5Qozth^x$nI5&iioh9cRdoGvtx>HV~*52n2_N>J!x+ zhC-ROfe;X=^fpqL>P8tc(~6ic;uw4kKvw$T^BoY5JFjNpTJz#sFt@x%`i2U;{KzP} zl#N2hnnq#M90pB)##L^OV6qlwF#oxb#g?6>MToTf( z()p=@5>N}R$n`q*c`ixqNaX>}BDVT$v!Su5jCJ3Z9Za35ZLjyXwNz*v^Kh9?|3|Fd zSzT5|5*O7gfGhyJ?26jN7P!LXQ29_gUg?aTod5Rkam{6RN;f>!BIhDppx&q7-{8T4uO*nk|W|ruwkmNEK_V#gd2h$fdvEI?k zuxyHEHBYTB-o(Q+p%=*DGopQyI&}(o#hD4pDbJ2tlzwl+3-r>}rMobH?8MA}rf@Zu zbU(Xd1cG3#qO(B`e*~(xEF<63w;EUH8n;K=Z!%HQ-jkl(Dev`!+ zj9D%?UN9pmyzs&re~z~hn;h4Gm~hTdUDI)@gKVp7Pi#OwfvV<1N4zJoBYZPugHp0E4Tjs=lbSQC2Hk{oV~k4 zRa{v8Xtv8!WoEnU~(57NgEuiduU{i!uRJg)Be>B9JPvw|>b z_?MA4Q=R%55{(FS*lHN8<+5pS6CcLs7}a^S9epyWdcS|lU+#OPn_23u$tDp3_72^1 zX#A9I_+VD+B-J{*#P4`aU5{Wm^t4r&DS|xieGpyjJPK3vtyG5%SxSo8`b^99>nhVz*x(Fla$PPnR|a0ov>S18(pETL1t6 diff --git a/extension/vscode-pkg/img/code-command.png b/extension/vscode-pkg/img/code-command.png new file mode 100644 index 0000000000000000000000000000000000000000..e12b7c1e3567e756838cb54103bd06dc33bfe3ff GIT binary patch literal 13706 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 literal 0 HcmV?d00001 From 0321a9386d01bffb71decbc7799132289970a86d Mon Sep 17 00:00:00 2001 From: Diana Arreola Date: Mon, 17 Aug 2020 18:22:32 -0700 Subject: [PATCH 04/13] completed README for packaged extension --- README.rst | 2 +- extension/vscode-pkg/README.md | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/README.rst b/README.rst index 693f332a3..d8af1f8e2 100644 --- a/README.rst +++ b/README.rst @@ -231,7 +231,7 @@ howdoi can now be installed as an extension on Visual Studio Code! There are two - (coming soon) 2. Directly from the packaged extension: - - To locally install the howdoi Visual Studio Code package, head over to the ``extension/vscode-pkg/README`` folder. + - To locally install the howdoi Visual Studio Code package, head over `here `_. Contributing ------------ diff --git a/extension/vscode-pkg/README.md b/extension/vscode-pkg/README.md index f15f08abd..e91fd156f 100644 --- a/extension/vscode-pkg/README.md +++ b/extension/vscode-pkg/README.md @@ -1,4 +1,4 @@ -# Howdoi Visual Studio Code Extension +# howdoi Packaged Visual Studio Code Extension Locally install the howdoi Visual Studio Code Extension. @@ -7,13 +7,15 @@ Locally install the howdoi Visual Studio Code Extension. - Open Visual Studio Code and open the Command Palette and run: Shell Command: Install ‘code’ command in PATH - ![Image of Shell Command](https://octodex.github.com/img/code-command.png) + ![Image of Shell Command](https://github.com/gleitz/howdoi/tree/master/extension/vscode-pkg/img/code-command.png) - Restart your terminal -- Within the `ext/vscode-pkg` folder, run: + Restart your terminal. +- Within the `extension/vscode-pkg` folder, run: code --install-extension howdoi-0.0.1.vsix -- Add unpackaged files to your VS Code extensions folder. Head over [here](https://code.visualstudio.com/api/working-with-extensions/publishing-extension#your-extension-folder) to determine the path to your extension folder. +- Add the unpackaged files to your VS Code extensions folder (the path of the folder can be found [here](https://code.visualstudio.com/api/working-with-extensions/publishing-extension#your-extension-folder)). If no files were created within the `extension/vscode-pkg`, check if the files are in the extension folder path. + +- Look over the README within the unpackaged files for more info on how to run howdoi within VS Code. From 9f47dedebebae011c2f393ab57540b2c0082c4f4 Mon Sep 17 00:00:00 2001 From: Diana Arreola Date: Tue, 18 Aug 2020 01:49:22 -0700 Subject: [PATCH 05/13] Created NPM CLI tool for code editor integration plugin --- extension/plugin-cli/.eslintignore | 2 + extension/plugin-cli/.eslintrc.json | 47 + extension/plugin-cli/.gitignore | 2 + extension/plugin-cli/package-lock.json | 1904 ++++++++++ extension/plugin-cli/package.json | 54 + .../src/code-editor-integration/.eslintignore | 2 + .../code-editor-integration/.eslintrc.json | 47 + .../src/code-editor-integration/.gitignore | 4 + .../src/code-editor-integration/README.md | 85 + .../code-editor-integration/package-lock.json | 3182 +++++++++++++++++ .../src/code-editor-integration/package.json | 34 + .../src/create_attributes.ts | 28 + .../src/find_attributes.ts | 53 + .../src/code-editor-integration/src/plugin.ts | 86 + .../src/plugin_interfaces.ts | 18 + .../src/remove_regexes.ts | 52 + .../src/test/plugin.test.ts | 159 + .../src/code-editor-integration/tsconfig.json | 14 + extension/plugin-cli/src/create-project.ts | 4 + extension/plugin-cli/src/index.ts | 18 + extension/plugin-cli/src/wrapper.ts | 30 + extension/plugin-cli/tsconfig.json | 11 + 22 files changed, 5836 insertions(+) create mode 100644 extension/plugin-cli/.eslintignore create mode 100644 extension/plugin-cli/.eslintrc.json create mode 100644 extension/plugin-cli/.gitignore create mode 100644 extension/plugin-cli/package-lock.json create mode 100644 extension/plugin-cli/package.json create mode 100644 extension/plugin-cli/src/code-editor-integration/.eslintignore create mode 100644 extension/plugin-cli/src/code-editor-integration/.eslintrc.json create mode 100644 extension/plugin-cli/src/code-editor-integration/.gitignore create mode 100644 extension/plugin-cli/src/code-editor-integration/README.md create mode 100644 extension/plugin-cli/src/code-editor-integration/package-lock.json create mode 100644 extension/plugin-cli/src/code-editor-integration/package.json create mode 100644 extension/plugin-cli/src/code-editor-integration/src/create_attributes.ts create mode 100644 extension/plugin-cli/src/code-editor-integration/src/find_attributes.ts create mode 100644 extension/plugin-cli/src/code-editor-integration/src/plugin.ts create mode 100644 extension/plugin-cli/src/code-editor-integration/src/plugin_interfaces.ts create mode 100644 extension/plugin-cli/src/code-editor-integration/src/remove_regexes.ts create mode 100644 extension/plugin-cli/src/code-editor-integration/src/test/plugin.test.ts create mode 100644 extension/plugin-cli/src/code-editor-integration/tsconfig.json create mode 100644 extension/plugin-cli/src/create-project.ts create mode 100644 extension/plugin-cli/src/index.ts create mode 100644 extension/plugin-cli/src/wrapper.ts create mode 100644 extension/plugin-cli/tsconfig.json diff --git a/extension/plugin-cli/.eslintignore b/extension/plugin-cli/.eslintignore new file mode 100644 index 000000000..f3e429bfa --- /dev/null +++ b/extension/plugin-cli/.eslintignore @@ -0,0 +1,2 @@ +plugin.js +node_modules/ \ No newline at end of file diff --git a/extension/plugin-cli/.eslintrc.json b/extension/plugin-cli/.eslintrc.json new file mode 100644 index 000000000..3b6785034 --- /dev/null +++ b/extension/plugin-cli/.eslintrc.json @@ -0,0 +1,47 @@ +{ + "root": true, + "parser": "@typescript-eslint/parser", + "plugins": [ + "@typescript-eslint" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/eslint-recommended", + "plugin:@typescript-eslint/recommended" + ], + "rules": { + "max-len": [ + "error", + { + "code": 120 + } + ], + "indent": [ + "error", + 2, + { + "SwitchCase": 1, + "flatTernaryExpressions": false, + "ignoreComments": false + } + ], + "@typescript-eslint/naming-convention": "warn", + "@typescript-eslint/semi": ["error", "never"], + "@typescript-eslint/member-delimiter-style": ["error", { + "multiline": { + "delimiter": "none", // 'none' or 'semi' or 'comma' + "requireLast": true + }, + "singleline": { + "delimiter": "semi", // 'semi' or 'comma' + "requireLast": false + } + }], + "comma-spacing": ["error", { "before": false, "after": true }], + "curly": "warn", + "eqeqeq": "warn", + "no-throw-literal": "warn", + "quotes": ["error", "single"], + "semi": "off" + } +} \ No newline at end of file diff --git a/extension/plugin-cli/.gitignore b/extension/plugin-cli/.gitignore new file mode 100644 index 000000000..5695e9f41 --- /dev/null +++ b/extension/plugin-cli/.gitignore @@ -0,0 +1,2 @@ +node_modules +out/ \ No newline at end of file diff --git a/extension/plugin-cli/package-lock.json b/extension/plugin-cli/package-lock.json new file mode 100644 index 000000000..33cf89919 --- /dev/null +++ b/extension/plugin-cli/package-lock.json @@ -0,0 +1,1904 @@ +{ + "name": "@diarreola/howdoi-cli", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "@types/chai": { + "version": "4.2.12", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.12.tgz", + "integrity": "sha512-aN5IAC8QNtSUdQzxu7lGBgYAOuU1tmRU4c9dIq5OKGf/SBVjXo+ffM2wEjudAWbgpOhy60nLoAGH1xm8fpCKFQ==" + }, + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" + }, + "@types/eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==" + }, + "@types/json-schema": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", + "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==" + }, + "@types/mocha": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.0.1.tgz", + "integrity": "sha512-TBZ6YdX7IZz4U9/mBoB8zCMRN1vXw8QdihRcZxD3I0Cv/r8XF8RggZ8WiXFws4aj5atzRR5hJrYer7g8nXwpnQ==" + }, + "@types/node": { + "version": "14.0.27", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.27.tgz", + "integrity": "sha512-kVrqXhbclHNHGu9ztnAwSncIgJv/FaxmzXJvGXNdcCpV1b8u1/Mi6z6m0vwy0LzKeXFTPLH0NzwmoJ3fNCIq0g==", + "dev": true + }, + "@types/yargs": { + "version": "15.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.5.tgz", + "integrity": "sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", + "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.9.0.tgz", + "integrity": "sha512-UD6b4p0/hSe1xdTvRCENSx7iQ+KR6ourlZFfYuPC7FlXEzdHuLPrEmuxZ23b2zW96KJX9Z3w05GE/wNOiEzrVg==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "3.9.0", + "debug": "^4.1.1", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.0.0", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.9.0.tgz", + "integrity": "sha512-/vSHUDYizSOhrOJdjYxPNGfb4a3ibO8zd4nUKo/QBFOmxosT3cVUV7KIg8Dwi6TXlr667G7YPqFK9+VSZOorNA==", + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/types": "3.9.0", + "@typescript-eslint/typescript-estree": "3.9.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-3.9.0.tgz", + "integrity": "sha512-rDHOKb6uW2jZkHQniUQVZkixQrfsZGUCNWWbKWep4A5hGhN5dLHMUCNAWnC4tXRlHedXkTDptIpxs6e4Pz8UfA==", + "requires": { + "@types/eslint-visitor-keys": "^1.0.0", + "@typescript-eslint/experimental-utils": "3.9.0", + "@typescript-eslint/types": "3.9.0", + "@typescript-eslint/typescript-estree": "3.9.0", + "eslint-visitor-keys": "^1.1.0" + } + }, + "@typescript-eslint/types": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.9.0.tgz", + "integrity": "sha512-rb6LDr+dk9RVVXO/NJE8dT1pGlso3voNdEIN8ugm4CWM5w5GimbThCMiMl4da1t5u3YwPWEwOnKAULCZgBtBHg==" + }, + "@typescript-eslint/typescript-estree": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.9.0.tgz", + "integrity": "sha512-N+158NKgN4rOmWVfvKOMoMFV5n8XxAliaKkArm/sOypzQ0bUL8MSnOEBW3VFIeffb/K5ce/cAV0yYhR7U4ALAA==", + "requires": { + "@typescript-eslint/types": "3.9.0", + "@typescript-eslint/visitor-keys": "3.9.0", + "debug": "^4.1.1", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.9.0.tgz", + "integrity": "sha512-O1qeoGqDbu0EZUC/MZ6F1WHTIzcBVhGqDj3LhTnj65WUA548RXVxUHbYhAW9bZWfb2rnX9QsbbP5nmeJ5Z4+ng==", + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "acorn": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", + "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==" + }, + "acorn-jsx": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", + "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==" + }, + "ajv": { + "version": "6.12.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", + "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", + "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==" + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "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==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "array.prototype.map": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.2.tgz", + "integrity": "sha512-Az3OYxgsa1g7xDYp86l0nnN4bcmuEITGe1rbdEBVkrqkzMgDcbdQ2R7r41pNzti+4NMces3H8gMmuioZUilLgw==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.4" + } + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" + }, + "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 + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "chai": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", + "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.0", + "type-detect": "^4.0.5" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "requires": { + "@types/color-name": "^1.1.1", + "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==", + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=" + }, + "chokidar": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz", + "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==", + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.3.0" + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "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==" + }, + "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==" + }, + "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==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "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=" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "requires": { + "type-detect": "^4.0.0" + } + }, + "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=" + }, + "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==", + "requires": { + "object-keys": "^1.0.12" + } + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "requires": { + "esutils": "^2.0.2" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "es-abstract": { + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", + "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" + }, + "es-get-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.0.tgz", + "integrity": "sha512-UfrmHuWQlNMTs35e1ypnvikg6jCz3SK8v8ImvmDsh36fCVUR1MqoFDiyn0/k52C8NqO3YsO8Oe0azeesNuqSsQ==", + "requires": { + "es-abstract": "^1.17.4", + "has-symbols": "^1.0.1", + "is-arguments": "^1.0.4", + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-string": "^1.0.5", + "isarray": "^2.0.5" + } + }, + "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==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "eslint": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.6.0.tgz", + "integrity": "sha512-QlAManNtqr7sozWm5TF4wIH9gmUm2hE3vNRUvyoYAa4y1l5/jxD/PQStEjBMQtCqZmSep8UxrcecI60hOpe61w==", + "requires": { + "@babel/code-frame": "^7.0.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.0", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^1.3.0", + "espree": "^7.2.0", + "esquery": "^1.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "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.19", + "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": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + } + }, + "eslint-scope": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", + "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "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==" + }, + "esm": { + "version": "3.2.25", + "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", + "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==" + }, + "espree": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.2.0.tgz", + "integrity": "sha512-H+cQ3+3JYRMEIOl87e7QdHX70ocly5iW4+dttuR8iYSPr/hXKFb+7dBsZ7+u1adC4VrnPlTkv0+OwuPnDop19g==", + "requires": { + "acorn": "^7.3.1", + "acorn-jsx": "^5.2.0", + "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==" + }, + "esquery": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", + "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "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==" + } + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "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==" + }, + "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==" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "requires": { + "flat-cache": "^2.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", + "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", + "requires": { + "is-buffer": "~2.0.3" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "dependencies": { + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "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=" + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=" + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "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==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "requires": { + "type-fest": "^0.8.1" + } + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "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=" + }, + "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==" + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" + }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==" + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-buffer": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==" + }, + "is-callable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", + "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==" + }, + "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==" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "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==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.1.tgz", + "integrity": "sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "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=" + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-set": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.1.tgz", + "integrity": "sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA==" + }, + "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==" + }, + "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==", + "requires": { + "has-symbols": "^1.0.1" + } + }, + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "iterate-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.1.tgz", + "integrity": "sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw==" + }, + "iterate-value": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz", + "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==", + "requires": { + "es-get-iterator": "^1.0.2", + "iterate-iterator": "^1.0.1" + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "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==" + }, + "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=" + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" + }, + "log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "requires": { + "chalk": "^2.4.2" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "mocha": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.1.1.tgz", + "integrity": "sha512-p7FuGlYH8t7gaiodlFreseLxEmxTgvyG9RgPHODFPySNhwUehu8NIb0vdSt3WFckSneswZ0Un5typYcWElk7HQ==", + "requires": { + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.3.1", + "debug": "3.2.6", + "diff": "4.0.2", + "escape-string-regexp": "1.0.5", + "find-up": "4.1.0", + "glob": "7.1.6", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.13.1", + "log-symbols": "3.0.0", + "minimatch": "3.0.4", + "ms": "2.1.2", + "object.assign": "4.1.0", + "promise.allsettled": "1.0.2", + "serialize-javascript": "4.0.0", + "strip-json-comments": "3.0.1", + "supports-color": "7.1.0", + "which": "2.0.2", + "wide-align": "1.1.3", + "workerpool": "6.0.0", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "1.6.1" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.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==" + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "strip-json-comments": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==" + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + } + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" + }, + "ncp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=" + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "object-inspect": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "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==", + "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==", + "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==" + }, + "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==", + "requires": { + "callsites": "^3.0.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==" + }, + "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=" + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "pathval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=" + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + }, + "promise.allsettled": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.2.tgz", + "integrity": "sha512-UpcYW5S1RaNKT6pd+s9jp9K9rlQge1UXKskec0j6Mmuq7UJCvlS2J2/s/yuPN8ehftf9HXMxWlKiPbGGUzpoRg==", + "requires": { + "array.prototype.map": "^1.0.1", + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "iterate-value": "^1.0.0" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "readdirp": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz", + "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==", + "requires": { + "picomatch": "^2.0.7" + } + }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==" + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "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==" + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "requires": { + "randombytes": "^2.1.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "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==", + "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==" + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } + }, + "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 + }, + "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" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "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==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "ts-node": { + "version": "8.10.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.10.2.tgz", + "integrity": "sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==", + "dev": true, + "requires": { + "arg": "^4.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + } + }, + "tslib": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", + "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" + }, + "tsutils": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", + "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", + "requires": { + "tslib": "^1.8.1" + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + }, + "typescript": { + "version": "3.9.7", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz", + "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "requires": { + "punycode": "^2.1.0" + } + }, + "v8-compile-cache": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", + "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==" + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "requires": { + "string-width": "^1.0.2 || 2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.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==" + }, + "workerpool": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.0.tgz", + "integrity": "sha512-fU2OcNA/GVAJLLyKUoHkAgIhKb0JoCpSjLC/G2vYKxUjVmQwGbRVeoPJ1a8U4pnVofz4AQV5Y/NEw8oKqxEBtA==" + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "requires": { + "@types/color-name": "^1.1.1", + "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==", + "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==" + }, + "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==" + }, + "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==" + }, + "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==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "requires": { + "mkdirp": "^0.5.1" + } + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "dependencies": { + "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==" + }, + "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==" + }, + "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==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "yargs-unparser": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.1.tgz", + "integrity": "sha512-qZV14lK9MWsGCmcr7u5oXGH0dbGqZAIxTDrWXZDo5zUr6b6iUmelNKO6x6R1dQT24AH3LgRxJpr8meWy2unolA==", + "requires": { + "camelcase": "^5.3.1", + "decamelize": "^1.2.0", + "flat": "^4.1.0", + "is-plain-obj": "^1.1.0", + "yargs": "^14.2.3" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "yargs": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", + "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==", + "requires": { + "cliui": "^5.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^15.0.1" + } + }, + "yargs-parser": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz", + "integrity": "sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + } + } +} diff --git a/extension/plugin-cli/package.json b/extension/plugin-cli/package.json new file mode 100644 index 000000000..f6dd9f583 --- /dev/null +++ b/extension/plugin-cli/package.json @@ -0,0 +1,54 @@ +{ + "name": "@diarreola/howdoi-cli", + "version": "1.0.0", + "description": "Simplifiy the process of retrieving the answers to a howdoi query for code editor integration", + "main": "index.js", + "bin": { + "plugin-cli": "./out/create-project.js" + }, + "publishConfig": { + "access": "public" + }, + "scripts": { + "copy": "ncp ../code-editor-integration/ src/code-editor-integration/", + "clean": "rimraf ./src/code-editor-integration/node_modules", + "precompile": "npm run copy && npm run clean", + "prepare": "npm run compile", + "compile": "tsc -p ./", + "lint": "eslint . --ext .ts", + "watch": "tsc -watch -p ./", + "pretest": "npm run compile && npm run lint", + "start": "node ./out/index.js", + "build": "npm run compile && npm run lint && npm run start", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [ + "howdoi", + "cli", + "query", + "answers", + "extensions", + "code editor integration cli" + ], + "author": "diana arreola", + "license": "ISC", + "devDependencies": { + "@types/node": "^14.0.27", + "@types/yargs": "^15.0.5", + "@typescript-eslint/eslint-plugin": "^3.9.0", + "ts-node": "^8.10.2", + "typescript": "^3.9.7" + }, + "dependencies": { + "@types/chai": "^4.2.12", + "@types/mocha": "^8.0.1", + "@typescript-eslint/parser": "^3.9.0", + "chai": "^4.2.0", + "eslint": "^7.6.0", + "esm": "^3.2.25", + "mocha": "^8.1.1", + "ncp": "^2.0.0", + "rimraf": "^3.0.2", + "yargs": "^15.4.1" + } +} diff --git a/extension/plugin-cli/src/code-editor-integration/.eslintignore b/extension/plugin-cli/src/code-editor-integration/.eslintignore new file mode 100644 index 000000000..f3e429bfa --- /dev/null +++ b/extension/plugin-cli/src/code-editor-integration/.eslintignore @@ -0,0 +1,2 @@ +plugin.js +node_modules/ \ No newline at end of file diff --git a/extension/plugin-cli/src/code-editor-integration/.eslintrc.json b/extension/plugin-cli/src/code-editor-integration/.eslintrc.json new file mode 100644 index 000000000..3b6785034 --- /dev/null +++ b/extension/plugin-cli/src/code-editor-integration/.eslintrc.json @@ -0,0 +1,47 @@ +{ + "root": true, + "parser": "@typescript-eslint/parser", + "plugins": [ + "@typescript-eslint" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/eslint-recommended", + "plugin:@typescript-eslint/recommended" + ], + "rules": { + "max-len": [ + "error", + { + "code": 120 + } + ], + "indent": [ + "error", + 2, + { + "SwitchCase": 1, + "flatTernaryExpressions": false, + "ignoreComments": false + } + ], + "@typescript-eslint/naming-convention": "warn", + "@typescript-eslint/semi": ["error", "never"], + "@typescript-eslint/member-delimiter-style": ["error", { + "multiline": { + "delimiter": "none", // 'none' or 'semi' or 'comma' + "requireLast": true + }, + "singleline": { + "delimiter": "semi", // 'semi' or 'comma' + "requireLast": false + } + }], + "comma-spacing": ["error", { "before": false, "after": true }], + "curly": "warn", + "eqeqeq": "warn", + "no-throw-literal": "warn", + "quotes": ["error", "single"], + "semi": "off" + } +} \ No newline at end of file diff --git a/extension/plugin-cli/src/code-editor-integration/.gitignore b/extension/plugin-cli/src/code-editor-integration/.gitignore new file mode 100644 index 000000000..0f868b263 --- /dev/null +++ b/extension/plugin-cli/src/code-editor-integration/.gitignore @@ -0,0 +1,4 @@ +out/ +node_modules/ + + diff --git a/extension/plugin-cli/src/code-editor-integration/README.md b/extension/plugin-cli/src/code-editor-integration/README.md new file mode 100644 index 000000000..934fdc0cb --- /dev/null +++ b/extension/plugin-cli/src/code-editor-integration/README.md @@ -0,0 +1,85 @@ +# Code Editor Integration Development +![Node.js CI](https://github.com/gleitz/howdoi/workflows/Node.js%20CI/badge.svg) + +Simplifies the process of integrating howdoi as a code editor extension. + +## Description + +The Code Editor Integration plug-in is ran by calling the `runHowdoi` function which takes in a user's query of type string. The parameter is encapsulated by a single line comment and is formatted as follows: + + // howdoi query + +`runHowdoi` returns an Object with the structure: + + { + question: string + answer: string[] + link: string[] + } + +The Object values: +* question contains the user's query ecapsulated by a single line comment +* answer contains the three possible answers to the user's query +* link contains the three possible links to the answer encapsulated by a single line comment + + +## Installation + +First, install howdoi on your machine. + +Then, install all necessary packages: + + npm install + +## Development + +To compile the script: + + npm run compile + +To run the script: + + npm start + +To compile and run the script: + + npm run build + +To run the testing script: + + npm test + +## Integration + +To utilize this plug-in to create a howdoi extension for a code editor: + +1. Copy the `code-editor-integration` folder into your workspace and remove the `node_modules` folder by adding the script + + "copy": "ncp ../code-editor-integration/ src/code-editor-integration/" + "clean": "rimraf ./src/code-editor-integration/node_modules" + + into your `package.json` file and running it. + First, you will need to install [ncp](https://www.npmjs.com/package/ncp) and [rimraf](https://www.npmjs.com/package/rimraf). + +2. Import the `plugin.ts` file into your main file. + +3. Call the `runHowdoi` function. + +Refer to `vscode-howdoi` for an example. + +## Usage + +usage: + + // howdoi query [-n NUM_ANSWERS] + +positional arguments: + + QUERY the question to answer + +optional arguments: + + -n NUM_ANSWERS NUM_ANSWERS + number of answers to return + (default: 3) + diff --git a/extension/plugin-cli/src/code-editor-integration/package-lock.json b/extension/plugin-cli/src/code-editor-integration/package-lock.json new file mode 100644 index 000000000..449119898 --- /dev/null +++ b/extension/plugin-cli/src/code-editor-integration/package-lock.json @@ -0,0 +1,3182 @@ +{ + "name": "code-editor-integration", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.3.tgz", + "integrity": "sha512-fDx9eNW0qz0WkUeqL6tXEXzVlPh6Y5aCDEZesl0xBGA8ndRukX91Uk44ZqnkECp01NAZUdCAl+aiQNGi0k88Eg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.3" + } + }, + "@babel/generator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz", + "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==", + "dev": true, + "requires": { + "@babel/types": "^7.10.4", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", + "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz", + "integrity": "sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw==", + "dev": true + }, + "@babel/highlight": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.3.tgz", + "integrity": "sha512-Ih9B/u7AtgEnySE2L2F0Xm0GaM729XqqLfHkalTsbjXGyqmf/6M0Cu0WpvqueUlW+xk88BHw9Nkpj49naU+vWw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.3", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "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" + } + } + } + }, + "@babel/parser": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", + "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==", + "dev": true + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "dev": true + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "@babel/traverse": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz", + "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.4", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "dev": true + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "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 + } + } + }, + "@babel/types": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", + "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "dev": true + } + } + }, + "@types/chai": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.11.tgz", + "integrity": "sha512-t7uW6eFafjO+qJ3BIV2gGUyZs27egcNRkUdalkud+Qa3+kg//f129iuOFivHDXQ+vnU3fDXuwgv0cqMCbcE8sw==", + "dev": true + }, + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", + "dev": true + }, + "@types/eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", + "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==", + "dev": true + }, + "@types/mocha": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-7.0.2.tgz", + "integrity": "sha512-ZvO2tAcjmMi8V/5Z3JsyofMe3hasRcaw88cto5etSVMwVQfeivGAlEYmaQgceUSVYFofVjT+ioHsATjdWcFt1w==", + "dev": true + }, + "@types/node": { + "version": "14.0.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.14.tgz", + "integrity": "sha512-syUgf67ZQpaJj01/tRTknkMNoBBLWJOBODF0Zm4NrXmiSuxjymFrxnTu1QVYRubhVkRcZLYZG8STTwJRdVm/WQ==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.9.0.tgz", + "integrity": "sha512-UD6b4p0/hSe1xdTvRCENSx7iQ+KR6ourlZFfYuPC7FlXEzdHuLPrEmuxZ23b2zW96KJX9Z3w05GE/wNOiEzrVg==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "3.9.0", + "debug": "^4.1.1", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.0.0", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "dependencies": { + "@typescript-eslint/experimental-utils": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.9.0.tgz", + "integrity": "sha512-/vSHUDYizSOhrOJdjYxPNGfb4a3ibO8zd4nUKo/QBFOmxosT3cVUV7KIg8Dwi6TXlr667G7YPqFK9+VSZOorNA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/types": "3.9.0", + "@typescript-eslint/typescript-estree": "3.9.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + } + }, + "@typescript-eslint/typescript-estree": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.9.0.tgz", + "integrity": "sha512-N+158NKgN4rOmWVfvKOMoMFV5n8XxAliaKkArm/sOypzQ0bUL8MSnOEBW3VFIeffb/K5ce/cAV0yYhR7U4ALAA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "3.9.0", + "@typescript-eslint/visitor-keys": "3.9.0", + "debug": "^4.1.1", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + } + } + } + }, + "@typescript-eslint/experimental-utils": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.4.0.tgz", + "integrity": "sha512-rHPOjL43lOH1Opte4+dhC0a/+ks+8gOBwxXnyrZ/K4OTAChpSjP76fbI8Cglj7V5GouwVAGaK+xVwzqTyE/TPw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/typescript-estree": "3.4.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-3.4.0.tgz", + "integrity": "sha512-ZUGI/de44L5x87uX5zM14UYcbn79HSXUR+kzcqU42gH0AgpdB/TjuJy3m4ezI7Q/jk3wTQd755mxSDLhQP79KA==", + "dev": true, + "requires": { + "@types/eslint-visitor-keys": "^1.0.0", + "@typescript-eslint/experimental-utils": "3.4.0", + "@typescript-eslint/typescript-estree": "3.4.0", + "eslint-visitor-keys": "^1.1.0" + } + }, + "@typescript-eslint/types": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.9.0.tgz", + "integrity": "sha512-rb6LDr+dk9RVVXO/NJE8dT1pGlso3voNdEIN8ugm4CWM5w5GimbThCMiMl4da1t5u3YwPWEwOnKAULCZgBtBHg==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.4.0.tgz", + "integrity": "sha512-zKwLiybtt4uJb4mkG5q2t6+W7BuYx2IISiDNV+IY68VfoGwErDx/RfVI7SWL4gnZ2t1A1ytQQwZ+YOJbHHJ2rw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "eslint-visitor-keys": "^1.1.0", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.9.0.tgz", + "integrity": "sha512-O1qeoGqDbu0EZUC/MZ6F1WHTIzcBVhGqDj3LhTnj65WUA548RXVxUHbYhAW9bZWfb2rnX9QsbbP5nmeJ5Z4+ng==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "acorn": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz", + "integrity": "sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==", + "dev": true + }, + "acorn-jsx": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", + "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", + "dev": true + }, + "ajv": { + "version": "6.12.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", + "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", + "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": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "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" + } + }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "append-transform": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", + "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", + "dev": true, + "requires": { + "default-require-extensions": "^2.0.0" + } + }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "array.prototype.map": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.2.tgz", + "integrity": "sha512-Az3OYxgsa1g7xDYp86l0nnN4bcmuEITGe1rbdEBVkrqkzMgDcbdQ2R7r41pNzti+4NMces3H8gMmuioZUilLgw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.4" + } + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "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 + }, + "binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "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 + }, + "caching-transform": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-3.0.2.tgz", + "integrity": "sha512-Mtgcv3lh3U0zRii/6qVgQODdPA4G3zhG+jtbCWj39RXuUFTMzH0vcdMtaJS1jPowd+It2Pqr6y3NJMQqOqCE2w==", + "dev": true, + "requires": { + "hasha": "^3.0.0", + "make-dir": "^2.0.0", + "package-hash": "^3.0.0", + "write-file-atomic": "^2.4.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "chai": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", + "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", + "dev": true, + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.0", + "type-detect": "^4.0.5" + } + }, + "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" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "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 + }, + "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.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true + }, + "chokidar": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz", + "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.3.0" + } + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "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 + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "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 + }, + "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" + } + }, + "cp-file": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-6.2.0.tgz", + "integrity": "sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "make-dir": "^2.0.0", + "nested-error-stacks": "^2.0.0", + "pify": "^4.0.1", + "safe-buffer": "^5.0.1" + } + }, + "cross-env": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.0.tgz", + "integrity": "sha512-jtdNFfFW1hB7sMhr/H6rW1Z45LFqyI431m3qU6bFXcQ3Eh7LtBuG3h74o7ohHZ3crrRkkqHlo4jYHFPcjroANg==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.5", + "is-windows": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "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.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "requires": { + "type-detect": "^4.0.0" + } + }, + "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 + }, + "default-require-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", + "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", + "dev": true, + "requires": { + "strip-bom": "^3.0.0" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "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" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enquirer": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.5.tgz", + "integrity": "sha512-BNT1C08P9XD0vNg3J475yIUG+mVdp9T6towYFHUv897X0KoHBjB1shyrNmhmtHWKP17iSWgo7Gqh7BBuzLZMSA==", + "dev": true, + "requires": { + "ansi-colors": "^3.2.1" + } + }, + "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.17.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", + "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "dev": true + }, + "es-get-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.0.tgz", + "integrity": "sha512-UfrmHuWQlNMTs35e1ypnvikg6jCz3SK8v8ImvmDsh36fCVUR1MqoFDiyn0/k52C8NqO3YsO8Oe0azeesNuqSsQ==", + "dev": true, + "requires": { + "es-abstract": "^1.17.4", + "has-symbols": "^1.0.1", + "is-arguments": "^1.0.4", + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-string": "^1.0.5", + "isarray": "^2.0.5" + } + }, + "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" + } + }, + "es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true + }, + "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.3.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.3.1.tgz", + "integrity": "sha512-cQC/xj9bhWUcyi/RuMbRtC3I0eW8MH0jhRELSvpKYkWep3C6YZ2OkvcvJVUeO6gcunABmzptbXBuDoXsjHmfTA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.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.0", + "eslint-utils": "^2.0.0", + "eslint-visitor-keys": "^1.2.0", + "espree": "^7.1.0", + "esquery": "^1.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "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.14", + "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": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + } + }, + "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-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.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.1.0.tgz", + "integrity": "sha512-dcorZSyfmm4WTuTnE5Y7MEN1DyoPYy1ZR783QW1FJoenn7RailyWFsq/UL6ZAAA7uXurN9FIpYyUs3OfiIW+Qw==", + "dev": true, + "requires": { + "acorn": "^7.2.0", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.2.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.3.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", + "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz", + "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "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 + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "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": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "flat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", + "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", + "dev": true, + "requires": { + "is-buffer": "~2.0.3" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "foreground-child": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz", + "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=", + "dev": true, + "requires": { + "cross-spawn": "^4", + "signal-exit": "^3.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", + "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "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.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "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 + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "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": "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" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.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 + }, + "hasha": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-3.0.0.tgz", + "integrity": "sha1-UqMvq4Vp1BymmmH/GiFPjrfIvTk=", + "dev": true, + "requires": { + "is-stream": "^1.0.1" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "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 + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "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.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "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 + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true + }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-buffer": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", + "dev": true + }, + "is-callable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", + "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", + "dev": true + }, + "is-date-object": { + "version": "1.0.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-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.1.tgz", + "integrity": "sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-set": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.1.tgz", + "integrity": "sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA==", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "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 + }, + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "dev": true + }, + "istanbul-lib-hook": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz", + "integrity": "sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA==", + "dev": true, + "requires": { + "append-transform": "^1.0.0" + } + }, + "istanbul-lib-instrument": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", + "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", + "dev": true, + "requires": { + "@babel/generator": "^7.4.0", + "@babel/parser": "^7.4.3", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.3", + "@babel/types": "^7.4.0", + "istanbul-lib-coverage": "^2.0.5", + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", + "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "rimraf": "^2.6.3", + "source-map": "^0.6.1" + }, + "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 + } + } + }, + "istanbul-reports": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.7.tgz", + "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0" + } + }, + "iterate-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.1.tgz", + "integrity": "sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw==", + "dev": true + }, + "iterate-value": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz", + "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==", + "dev": true, + "requires": { + "es-get-iterator": "^1.0.2", + "iterate-iterator": "^1.0.1" + } + }, + "js-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-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "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 + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, + "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" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "dev": true + }, + "lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", + "dev": true + }, + "log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "dev": true, + "requires": { + "chalk": "^2.4.2" + }, + "dependencies": { + "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" + } + } + } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, + "requires": { + "p-defer": "^1.0.0" + } + }, + "mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + } + }, + "merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + }, + "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 + } + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "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 + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "mocha": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.1.1.tgz", + "integrity": "sha512-p7FuGlYH8t7gaiodlFreseLxEmxTgvyG9RgPHODFPySNhwUehu8NIb0vdSt3WFckSneswZ0Un5typYcWElk7HQ==", + "dev": true, + "requires": { + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.3.1", + "debug": "3.2.6", + "diff": "4.0.2", + "escape-string-regexp": "1.0.5", + "find-up": "4.1.0", + "glob": "7.1.6", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.13.1", + "log-symbols": "3.0.0", + "minimatch": "3.0.4", + "ms": "2.1.2", + "object.assign": "4.1.0", + "promise.allsettled": "1.0.2", + "serialize-javascript": "4.0.0", + "strip-json-comments": "3.0.1", + "supports-color": "7.1.0", + "which": "2.0.2", + "wide-align": "1.1.3", + "workerpool": "6.0.0", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "1.6.1" + }, + "dependencies": { + "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": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "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" + } + }, + "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 + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "strip-json-comments": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + } + } + }, + "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 + }, + "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 + }, + "nested-error-stacks": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz", + "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "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 + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + }, + "dependencies": { + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + } + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "nyc": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-14.1.1.tgz", + "integrity": "sha512-OI0vm6ZGUnoGZv/tLdZ2esSVzDwUC88SNs+6JoSOMVxA+gKMB8Tk7jBwgemLx4O40lhhvZCVw1C+OYLOBOPXWw==", + "dev": true, + "requires": { + "archy": "^1.0.0", + "caching-transform": "^3.0.2", + "convert-source-map": "^1.6.0", + "cp-file": "^6.2.0", + "find-cache-dir": "^2.1.0", + "find-up": "^3.0.0", + "foreground-child": "^1.5.6", + "glob": "^7.1.3", + "istanbul-lib-coverage": "^2.0.5", + "istanbul-lib-hook": "^2.0.7", + "istanbul-lib-instrument": "^3.3.0", + "istanbul-lib-report": "^2.0.8", + "istanbul-lib-source-maps": "^3.0.6", + "istanbul-reports": "^2.2.4", + "js-yaml": "^3.13.1", + "make-dir": "^2.1.0", + "merge-source-map": "^1.1.0", + "resolve-from": "^4.0.0", + "rimraf": "^2.6.3", + "signal-exit": "^3.0.2", + "spawn-wrap": "^1.4.2", + "test-exclude": "^5.2.3", + "uuid": "^3.3.2", + "yargs": "^13.2.2", + "yargs-parser": "^13.0.0" + } + }, + "object-inspect": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "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" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "dev": true + }, + "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": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "package-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-3.0.0.tgz", + "integrity": "sha512-lOtmukMDVvtkL84rJHI7dpTYq+0rli8N2wlnqUcBuDWCfVhRUfOmnR9SsoHFMLpACvEV60dX7rd0rFaYDZI+FA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.15", + "hasha": "^3.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + } + }, + "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-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "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": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "pathval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "dev": true + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "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 + }, + "promise.allsettled": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.2.tgz", + "integrity": "sha512-UpcYW5S1RaNKT6pd+s9jp9K9rlQge1UXKskec0j6Mmuq7UJCvlS2J2/s/yuPN8ehftf9HXMxWlKiPbGGUzpoRg==", + "dev": true, + "requires": { + "array.prototype.map": "^1.0.1", + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "iterate-value": "^1.0.0" + } + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "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": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", + "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", + "dev": true, + "requires": { + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" + } + }, + "readdirp": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz", + "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==", + "dev": true, + "requires": { + "picomatch": "^2.0.7" + } + }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true + }, + "release-zalgo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", + "dev": true, + "requires": { + "es6-error": "^4.0.1" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "requires": { + "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": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "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 + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "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" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "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 + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } + }, + "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 + } + } + }, + "spawn-wrap": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.4.3.tgz", + "integrity": "sha512-IgB8md0QW/+tWqcavuFgKYR/qIRvJkRLPJDFaoXtLLUaVcCDK0+HeFTkmQHj3eprcYhc+gOl0aEA1w7qZlYezw==", + "dev": true, + "requires": { + "foreground-child": "^1.5.6", + "mkdirp": "^0.5.0", + "os-homedir": "^1.0.1", + "rimraf": "^2.6.2", + "signal-exit": "^3.0.2", + "which": "^1.3.0" + }, + "dependencies": { + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "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.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "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-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz", + "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==", + "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": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + } + }, + "test-exclude": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", + "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", + "dev": true, + "requires": { + "glob": "^7.1.3", + "minimatch": "^3.0.4", + "read-pkg-up": "^4.0.0", + "require-main-filename": "^2.0.0" + } + }, + "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 + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "ts-node": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.3.0.tgz", + "integrity": "sha512-dyNS/RqyVTDcmNM4NIBAeDMpsAdaQ+ojdf0GOLqE6nwJOgzEkdRNzJywhDfwnuvB10oa6NLVG1rUJQCpRN7qoQ==", + "dev": true, + "requires": { + "arg": "^4.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.6", + "yn": "^3.0.0" + }, + "dependencies": { + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + } + } + }, + "tslib": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", + "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", + "dev": true + }, + "tsutils": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", + "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "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-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "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 + }, + "typescript": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz", + "integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", + "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", + "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" + } + }, + "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" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "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 + }, + "workerpool": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.0.tgz", + "integrity": "sha512-fU2OcNA/GVAJLLyKUoHkAgIhKb0JoCpSjLC/G2vYKxUjVmQwGbRVeoPJ1a8U4pnVofz4AQV5Y/NEw8oKqxEBtA==", + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.2.tgz", + "integrity": "sha512-WyEoxgyTD3w5XRpAQNYUB9ycVH/PQrToaTXdYXRdOXvEy1l19br+VJsc0vcO8PTGg5ro/l/GY7F/JMEBmI0BxA==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "os-locale": "^3.1.0", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.0.0" + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "yargs-unparser": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.1.tgz", + "integrity": "sha512-qZV14lK9MWsGCmcr7u5oXGH0dbGqZAIxTDrWXZDo5zUr6b6iUmelNKO6x6R1dQT24AH3LgRxJpr8meWy2unolA==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "decamelize": "^1.2.0", + "flat": "^4.1.0", + "is-plain-obj": "^1.1.0", + "yargs": "^14.2.3" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "yargs": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", + "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^15.0.1" + } + }, + "yargs-parser": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz", + "integrity": "sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + } + } +} diff --git a/extension/plugin-cli/src/code-editor-integration/package.json b/extension/plugin-cli/src/code-editor-integration/package.json new file mode 100644 index 000000000..2650a2c06 --- /dev/null +++ b/extension/plugin-cli/src/code-editor-integration/package.json @@ -0,0 +1,34 @@ +{ + "name": "code-editor-integration", + "version": "1.0.0", + "description": "", + "main": "plugin.js", + "scripts": { + "prepublish": "npm run compile", + "compile": "tsc -p ./", + "lint": "eslint . --ext .ts", + "watch": "tsc -watch -p ./", + "pretest": "npm run compile && npm run lint", + "start": "node ./out/plugin.js", + "build": "npm run compile && npm run lint && npm run start", + "test": "cross-env TS_NODE_FILES=true mocha --exit --require ts-node/register --colors src/test/**/*.ts" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": {}, + "devDependencies": { + "@types/chai": "^4.2.11", + "@types/mocha": "^7.0.2", + "@types/node": "^14.0.14", + "@typescript-eslint/eslint-plugin": "^3.9.0", + "@typescript-eslint/parser": "^3.4.0", + "chai": "^4.2.0", + "cross-env": "^5.2.0", + "eslint": "^7.3.1", + "mocha": "^8.1.1", + "nyc": "^14.1.1", + "ts-node": "^8.3.0", + "typescript": "^3.5.3" + } +} diff --git a/extension/plugin-cli/src/code-editor-integration/src/create_attributes.ts b/extension/plugin-cli/src/code-editor-integration/src/create_attributes.ts new file mode 100644 index 000000000..971ef3cb7 --- /dev/null +++ b/extension/plugin-cli/src/code-editor-integration/src/create_attributes.ts @@ -0,0 +1,28 @@ +'use strict' +import {HowdoiObj, JSONObj, CommentChars} from './plugin_interfaces' + +export function createComment(command: string, commentChar: CommentChars): string { + // adds single line comment to string provided + const frontCommentChar: string = commentChar.frontComment + const endCommentChar: string = commentChar.endComment + if (frontCommentChar && (endCommentChar !== '')) { + const commentedCommand: string = frontCommentChar + ' ' + command + ' ' + endCommentChar + return commentedCommand + } + const commentedCommand: string = frontCommentChar + ' ' + command + return commentedCommand +} + +export function createHowdoiObj(parsedJson: JSONObj[], userCommand: string, commentChar: CommentChars): HowdoiObj { + // creates a HowdoiObj interface + const howdoiObj: HowdoiObj = {question: userCommand, answer: [], link: []} + + for (let i = 0; i < parsedJson.length; i++) { + if (parsedJson[i].answer.trim() === 'end=\'\'') { + break + } + howdoiObj.answer.push(parsedJson[i].answer.trim()) + howdoiObj.link.push(createComment(parsedJson[i].link.trim(), commentChar)) + } + return howdoiObj +} diff --git a/extension/plugin-cli/src/code-editor-integration/src/find_attributes.ts b/extension/plugin-cli/src/code-editor-integration/src/find_attributes.ts new file mode 100644 index 000000000..d15ab5d82 --- /dev/null +++ b/extension/plugin-cli/src/code-editor-integration/src/find_attributes.ts @@ -0,0 +1,53 @@ +'use strict' +import {CommentChars} from './plugin_interfaces' + +export function findCommentChar(userCommand: string): CommentChars { + /* This function finds the comment regex, removes it from the string and returns a + CommentChars interface with the beginning comment regex and ending comment regex or returns + null if there is no comment regex/an invalid comment regex */ + const frontCommentRegex = /^[!@#<>/;%*(+=._-]+/ + const endCommentRegex = /[!@#<>/%*+=._-]+$/ + let frontCommentChar: string + let endCommentChar: string + let userCommandWithoutComment: CommentChars + const initialMatchRegex: RegExpMatchArray | null = userCommand.match(frontCommentRegex) + const endMatchRegex: RegExpMatchArray | null = userCommand.match(endCommentRegex) + + if (initialMatchRegex && endMatchRegex){ + frontCommentChar = initialMatchRegex.join() + endCommentChar = endMatchRegex.join() + userCommandWithoutComment = { + frontComment: frontCommentChar, + endComment: endCommentChar + } + return userCommandWithoutComment + } + else if(initialMatchRegex){ + frontCommentChar = initialMatchRegex.join() + userCommandWithoutComment = { + frontComment: frontCommentChar, + endComment: '' + } + return userCommandWithoutComment + } + else { + throw Error('Invalid line comment. Please use single line comment for howdoi.') + } +} + +export function findNumFlagVal(userCommand: string): number { + /* This function finds the numFlag value within the userCommand and returns the value */ + const numFlag = '-n' + const defaultNumFlag = 3 + const index = userCommand.indexOf(numFlag) + + if (index === -1){ + return defaultNumFlag + } + + const userNumFlag = Number(userCommand.slice(index).replace(numFlag, '').trim()) + if (isNaN(userNumFlag) || (userNumFlag === 0)) { + throw new RangeError('Invalid num flag value') + } + return userNumFlag +} diff --git a/extension/plugin-cli/src/code-editor-integration/src/plugin.ts b/extension/plugin-cli/src/code-editor-integration/src/plugin.ts new file mode 100644 index 000000000..5bce2158e --- /dev/null +++ b/extension/plugin-cli/src/code-editor-integration/src/plugin.ts @@ -0,0 +1,86 @@ +'use strict' +import * as cp from 'child_process' +import {once} from 'events' +import {HOWDOI_PREFIX, HowdoiObj, JSONObj, CommentChars} from './plugin_interfaces' +import * as removeRegex from './remove_regexes' +import * as findAttr from './find_attributes' +import * as createAttr from './create_attributes' + +export async function retrieveHowdoiOutput(command: string, numFlagVal: number): Promise { + /* This function spawns an external application in a new process to run the howdoi query and returns + the howdoi query answer formatted as a JSONObj[] */ + const numFlag: string = '-n' + String(numFlagVal) + const process = cp.spawn(HOWDOI_PREFIX, [command, numFlag, '-j']) + let howdoiJSON: JSONObj[] = [{ answer: '', link: '', position: ''}] + + process.stdout.on('data', (data: string) => { + howdoiJSON = JSON.parse(data) + }) + + process.stderr.on('dataErr', (dataErr: Buffer) => { + console.log(`stderr: ${dataErr}`) + }) + + process.on('error', (error: Error) => { + console.log(`error: ${error.message}`) + }) + + process.on('close', (code: number) => { + console.log(`child process exited with code ${code}`) + }) + + // Wait for the child process to exit + const endProcess = await once(process, 'close') + try { + endProcess + } catch(e) { + throw Error('Invalid json object or no json object returned') + } + return howdoiJSON +} + +export async function runHowdoi(userCommand: string): Promise { + /* This functions modifies the users command while checking for errors + and formats the howdoi query answer into a HowdoiObj*/ + + let commentChar: CommentChars + // check if query is enclosed by a single line comment and return commentChar + try { + // retrieve single line comment and store in CommentChars obj + commentChar = findAttr.findCommentChar(userCommand) + }catch (e) { + throw new ReferenceError('Invalid line comment. Please use single line comment for howdoi.') + } + + const commandWithoutComment: string = removeRegex.removeCommentChar(userCommand, commentChar) + let commandWithoutPrefix: string + + // check if howdoi prefix is present and remove it + try { + commandWithoutPrefix = removeRegex.removeHowdoiPrefix(commandWithoutComment) + }catch (e) { + throw new SyntaxError('Place "howdoi" in front of query') + } + + let numFlagVal: number + // check if -n flag is present and remove it + try { + numFlagVal = findAttr.findNumFlagVal(commandWithoutPrefix) + }catch (e) { + throw new RangeError('Invalid num flag value') + } + + const commandWithoutFlag = removeRegex.removeNumFlag(commandWithoutPrefix) + + let parsedJson: JSONObj[] + // check if howdoi output is valid and save the JSON Obj + try { + parsedJson = await retrieveHowdoiOutput(commandWithoutFlag, numFlagVal) + }catch (e) { + throw new Error('Invalid json object or no json object returned') + } + + let howdoiResultObj = createAttr.createHowdoiObj(parsedJson, userCommand, commentChar) + howdoiResultObj = removeRegex.removeInlineRegex(howdoiResultObj) + return howdoiResultObj +} diff --git a/extension/plugin-cli/src/code-editor-integration/src/plugin_interfaces.ts b/extension/plugin-cli/src/code-editor-integration/src/plugin_interfaces.ts new file mode 100644 index 000000000..a82aea219 --- /dev/null +++ b/extension/plugin-cli/src/code-editor-integration/src/plugin_interfaces.ts @@ -0,0 +1,18 @@ +export const HOWDOI_PREFIX = 'howdoi' + +export interface HowdoiObj { + question: string + answer: string[] + link: string[] +} + +export interface JSONObj { + answer: string + link: string + position: string +} + +export interface CommentChars { + frontComment: string + endComment: string +} diff --git a/extension/plugin-cli/src/code-editor-integration/src/remove_regexes.ts b/extension/plugin-cli/src/code-editor-integration/src/remove_regexes.ts new file mode 100644 index 000000000..a3ee486a1 --- /dev/null +++ b/extension/plugin-cli/src/code-editor-integration/src/remove_regexes.ts @@ -0,0 +1,52 @@ +'use strict' +import {HOWDOI_PREFIX, HowdoiObj, CommentChars} from './plugin_interfaces' + +export function removeCommentChar(userCommand: string, commentChar: CommentChars): string { + /* This function removes the single line comment regex from the userCommand and returns it*/ + const frontCommentChar: string = commentChar.frontComment + const endCommentChar: string = commentChar.endComment + + if (!userCommand.includes(endCommentChar)) { + return userCommand.replace(frontCommentChar, '').trim() + } + userCommand = userCommand.replace(frontCommentChar, '') + return userCommand.replace(endCommentChar, '').trim() +} + +export function removeHowdoiPrefix(command: string): string { + // removes the prefix `howdoi` from the string + if (!command.trim().startsWith(HOWDOI_PREFIX)) { + throw Error('Place "howdoi" in front of query') + } + return command.replace(HOWDOI_PREFIX, '').trim() +} + +export function removeNumFlag(userCommand: string): string { + /* This function removes the numFlag value within the userCommand and returns userCommand */ + const numFlag = '-n' + const index = userCommand.indexOf(numFlag) + + if (index === -1){ + return userCommand + } + const commandWithoutNumFlag = userCommand.slice(0, index).trim() + return commandWithoutNumFlag +} + +export function removeInlineRegex(howdoiResultObj: HowdoiObj): HowdoiObj { + /* This function returns a HowdoiObj that has the arrow and dot regexes removed + from the answer array to display inline code more cleanly */ + + const arrowRegex = /[>->->]{3}/g + const dotRegex = /[.-.-.]{3}/g + + for (let i = 0; i < howdoiResultObj.answer.length; i++) { + if (howdoiResultObj.answer[i].match(arrowRegex)) { + howdoiResultObj.answer[i] = howdoiResultObj.answer[i].replace(arrowRegex, '').trim() + } + if (howdoiResultObj.answer[i].match(dotRegex)) { + howdoiResultObj.answer[i] = howdoiResultObj.answer[i].replace(dotRegex, '').trim() + } + } + return howdoiResultObj +} diff --git a/extension/plugin-cli/src/code-editor-integration/src/test/plugin.test.ts b/extension/plugin-cli/src/code-editor-integration/src/test/plugin.test.ts new file mode 100644 index 000000000..5074f6cb4 --- /dev/null +++ b/extension/plugin-cli/src/code-editor-integration/src/test/plugin.test.ts @@ -0,0 +1,159 @@ +import { assert, expect} from 'chai' +import {suite, test} from 'mocha' +import {CommentChars} from '../plugin_interfaces' +import * as removeRegex from '../remove_regexes' +import * as findAttr from '../find_attributes' +import * as createAttr from '../create_attributes' + +suite('Plugin Tests', function () { + // //: JS, TS, C/ C++/ C#, Java, GO, Rust, Scala, Swift, J#, Dlang single line comment + const commentChar1: CommentChars = {frontComment: '//', endComment: ''} + // #: Python, Ruby, powershell, Julia, R, prolog, Crystal, Dockerfile, Diff single line comment + const commentChar2: CommentChars = { frontComment: '#', endComment: '' } + // /* */: C++, CSS single line comment + const commentChar3: CommentChars = { frontComment: '--', endComment: '' } + // : HTML, PHP, Markdown, Vue single line comment + const commentChar4: CommentChars = { frontComment: '%', endComment: '' } + // --: SQL, Haskell single line comment + const commentChar5: CommentChars = { frontComment: ';', endComment: '' } + // %: LaTex single line comment + const commentChar6: CommentChars = { frontComment: '/*', endComment: '*/' } + // ;: clojure single line comment + const commentChar7: CommentChars = { frontComment: '' } + /* eslint-disable prefer-const*/ + const commentCharArr: CommentChars[] = [commentChar1, commentChar2, commentChar3, commentChar4, commentChar5, + commentChar6, commentChar7] + + // Global function used for #findNumFlagVal and #removeNumFlag + function getRandomInt(max: number): number { + return Math.floor(Math.random() * Math.floor(max)) + } + + suite('Find comment regex in string -> #findCommentChar', function () { + test('String w/o comment regex', function () { + // error example + const err = 'Invalid line comment. Please use single line comment for howdoi.' + expect(function(){ + findAttr.findCommentChar('howdoi query') + }).to.throw(err) + }) + test('Comment regex test (w/ space): //, #, --, %, ;, /* */, ', function () { + for (let commentChar of commentCharArr) { + let commentedQuery = commentChar.frontComment + ' howdoi query ' + commentChar.endComment + assert.deepEqual(findAttr.findCommentChar(commentedQuery), commentChar) + } + }) + test('Comment regex test (w/o space): //, #, --, %, ;, /* */, ', function () { + for (let commentChar of commentCharArr) { + let commentedQuery = commentChar.frontComment + 'howdoi query' + commentChar.endComment + assert.deepEqual(findAttr.findCommentChar(commentedQuery), commentChar) + } + }) + }) + + suite('Find the Num Flag value from the user command -> #findNumFlagVal', function () { + test('error examples', function () { + const err = 'Invalid num flag value' + expect(function(){ + findAttr.findNumFlagVal('query -n') + }).to.throw(err) + expect(function(){ + findAttr.findNumFlagVal('query -nzl') + }).to.throw(err) + }) + test('testing default num 3', function () { + assert.equal(findAttr.findNumFlagVal('query -n3'), 3) + assert.equal(findAttr.findNumFlagVal('query -n 3'), 3) + }) + test('testing non-default numbers', function () { + const maxNum = 25 + for (let i = 0; i < maxNum; i++) { + const randomNum = getRandomInt(maxNum) + const query1 = 'query -n' + String(randomNum) + const query2 = 'query -n ' + String(randomNum) + if (randomNum === 0) { + const err = 'Invalid num flag value' + expect(function(){ + findAttr.findNumFlagVal(query1) + }).to.throw(err) + } + else { + assert.equal(findAttr.findNumFlagVal(query1), randomNum) + assert.equal(findAttr.findNumFlagVal(query2), randomNum) + } + } + }) + }) + + suite('Removal of comment character from user command -> #removeCommentChar', function () { + test('Removal of front and front/back comment char (w/ space): //, #, --, %, ;, /* */, ', function () { + for (let commentChar of commentCharArr) { + let commentedQuery = commentChar.frontComment + ' howdoi query ' + commentChar.endComment + assert.equal(removeRegex.removeCommentChar(commentedQuery, commentChar), 'howdoi query') + } + }) + test('Removal of front and front/back comment char (w/o space): //, #, --, %, ;, /* */, ', function () { + for (let commentChar of commentCharArr) { + let commentedQuery = commentChar.frontComment + 'howdoi query' + commentChar.endComment + assert.equal(removeRegex.removeCommentChar(commentedQuery, commentChar), 'howdoi query') + } + }) + }) + + suite('Removal of howdoi prefix test -> #removeHowdoiPrefix', function () { + test('Normal Query', function () { + // Normal Query + assert.equal(removeRegex.removeHowdoiPrefix('howdoi query'), 'query') + }) + test('Query with whitespace', function () { + // Query with whitespace + assert.equal(removeRegex.removeHowdoiPrefix(' howdoi query '), 'query') + }) + test('Query without howdoi prefix', function () { + // Query without howdoi prefix + const err = 'Place "howdoi" in front of query' + expect(function(){ + removeRegex.removeHowdoiPrefix('query') + }).to.throw(err) + }) + test('Query without howdoi prefix and whitespace', function () { + // Query without howdoi prefix and whitespace + const err = 'Place "howdoi" in front of query' + expect(function(){ + removeRegex.removeHowdoiPrefix(' query ') + }).to.throw(err) + }) + }) + + suite('Remove the Num Flag and value from the user command -> #removeNumFlag', function () { + test('testing default num 3', function () { + assert.equal(removeRegex.removeNumFlag('query -n3'), 'query') + assert.equal(removeRegex.removeNumFlag('query -n 3'), 'query') + }) + test('testing non-default numbers', function () { + const maxNum = 25 + for (let i = 0; i < maxNum; i++) { + const randomNum = getRandomInt(maxNum) + const query1 = 'query -n' + String(randomNum) + const query2 = 'query -n ' + String(randomNum) + assert.equal(removeRegex.removeNumFlag(query1), 'query') + assert.equal(removeRegex.removeNumFlag(query2), 'query') + } + }) + }) + + suite('Create comment character to a string -> #createComment', function () { + test('Creare comment with front & front/back char to string: //, #, --, %, ;, /* */, ', function () { + let testString = '' + for (let commentChar of commentCharArr) { + if (commentChar.frontComment && (commentChar.endComment !== '')) { + testString = commentChar.frontComment + ' howdoi query ' + commentChar.endComment + } + else { + testString = commentChar.frontComment + ' howdoi query' + } + assert.equal(createAttr.createComment('howdoi query', commentChar), testString) + } + }) + }) +}) diff --git a/extension/plugin-cli/src/code-editor-integration/tsconfig.json b/extension/plugin-cli/src/code-editor-integration/tsconfig.json new file mode 100644 index 000000000..a6413f68a --- /dev/null +++ b/extension/plugin-cli/src/code-editor-integration/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "target": "es2018", + "module": "commonjs", + "outDir": "out", + "lib": ["es2018", "dom"], + "sourceMap": true, + "rootDir": "src", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true + } +} diff --git a/extension/plugin-cli/src/create-project.ts b/extension/plugin-cli/src/create-project.ts new file mode 100644 index 000000000..5b98e69d3 --- /dev/null +++ b/extension/plugin-cli/src/create-project.ts @@ -0,0 +1,4 @@ +#!/usr/bin/env node + +require = require("esm")(module/*, options*/) +require("../out/index.js").parseArgs(process) diff --git a/extension/plugin-cli/src/index.ts b/extension/plugin-cli/src/index.ts new file mode 100644 index 000000000..43e9e49b6 --- /dev/null +++ b/extension/plugin-cli/src/index.ts @@ -0,0 +1,18 @@ +#!/usr/bin/env node + +import yargs from 'yargs' +import * as wrapper from './wrapper' +import { HowdoiObj } from './code-editor-integration/src/plugin_interfaces' + +export async function parseArgs(): Promise { + const args = yargs.options({'query': { + type: 'string', + demandOption: true, + alias: 'q', + describe: 'howdoi query encapsulated in single line comment', + }}).help().argv + + const result = await wrapper.howdoiWrapper(args['query']) + return result +} + diff --git a/extension/plugin-cli/src/wrapper.ts b/extension/plugin-cli/src/wrapper.ts new file mode 100644 index 000000000..32c78bcb5 --- /dev/null +++ b/extension/plugin-cli/src/wrapper.ts @@ -0,0 +1,30 @@ +import * as plugin from './code-editor-integration/src/plugin' + +interface HowdoiObj { + question: string + answer: string[] + link: string[] +} + +export async function howdoiWrapper(userArgs: string): Promise { + let howdoiResultObj + + try { + howdoiResultObj = await plugin.runHowdoi(userArgs) + } catch (e) { + if (e instanceof ReferenceError) { + console.log('Invalid line comment. Please use single line comment for howdoi.') + return e + } else if (e instanceof SyntaxError) { + console.log('Place "howdoi" in front of query') + return e + }else if (e instanceof Error) { + console.log('Could not find response for query') + return e + } else { + console.log('Error. Try again') + return e + } + } + return howdoiResultObj +} \ No newline at end of file diff --git a/extension/plugin-cli/tsconfig.json b/extension/plugin-cli/tsconfig.json new file mode 100644 index 000000000..3bfcb1561 --- /dev/null +++ b/extension/plugin-cli/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "target": "ES2018", + "module": "commonjs", + "strict": true, + "esModuleInterop": true, + "rootDir": "src", + "outDir": "out" + } + } \ No newline at end of file From f758f72845b3c76f8a8fa2390ae0f2195b47e19a Mon Sep 17 00:00:00 2001 From: Diana Arreola Date: Tue, 18 Aug 2020 17:07:44 -0700 Subject: [PATCH 06/13] added verbosity levels to code integration files --- extension/code-editor-integration/package-lock.json | 5 +++++ extension/code-editor-integration/package.json | 4 +++- extension/code-editor-integration/src/plugin.ts | 9 ++++++--- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/extension/code-editor-integration/package-lock.json b/extension/code-editor-integration/package-lock.json index 449119898..0de83d071 100644 --- a/extension/code-editor-integration/package-lock.json +++ b/extension/code-editor-integration/package-lock.json @@ -1790,6 +1790,11 @@ } } }, + "loglevel": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.8.tgz", + "integrity": "sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA==" + }, "lru-cache": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", diff --git a/extension/code-editor-integration/package.json b/extension/code-editor-integration/package.json index 2650a2c06..ef6832e37 100644 --- a/extension/code-editor-integration/package.json +++ b/extension/code-editor-integration/package.json @@ -16,7 +16,9 @@ "keywords": [], "author": "", "license": "ISC", - "dependencies": {}, + "dependencies": { + "loglevel": "^1.6.8" + }, "devDependencies": { "@types/chai": "^4.2.11", "@types/mocha": "^7.0.2", diff --git a/extension/code-editor-integration/src/plugin.ts b/extension/code-editor-integration/src/plugin.ts index 5bce2158e..299a4b0d3 100644 --- a/extension/code-editor-integration/src/plugin.ts +++ b/extension/code-editor-integration/src/plugin.ts @@ -1,14 +1,17 @@ 'use strict' import * as cp from 'child_process' import {once} from 'events' +import * as log from 'loglevel' import {HOWDOI_PREFIX, HowdoiObj, JSONObj, CommentChars} from './plugin_interfaces' import * as removeRegex from './remove_regexes' import * as findAttr from './find_attributes' import * as createAttr from './create_attributes' +runHowdoi('# howdoi print python') export async function retrieveHowdoiOutput(command: string, numFlagVal: number): Promise { /* This function spawns an external application in a new process to run the howdoi query and returns the howdoi query answer formatted as a JSONObj[] */ + log.setLevel('warn') const numFlag: string = '-n' + String(numFlagVal) const process = cp.spawn(HOWDOI_PREFIX, [command, numFlag, '-j']) let howdoiJSON: JSONObj[] = [{ answer: '', link: '', position: ''}] @@ -18,15 +21,15 @@ export async function retrieveHowdoiOutput(command: string, numFlagVal: number): }) process.stderr.on('dataErr', (dataErr: Buffer) => { - console.log(`stderr: ${dataErr}`) + log.warn(`stderr: ${dataErr}`) }) process.on('error', (error: Error) => { - console.log(`error: ${error.message}`) + log.warn(`error: ${error.message}`) }) process.on('close', (code: number) => { - console.log(`child process exited with code ${code}`) + log.info(`child process exited with code ${code}`) }) // Wait for the child process to exit From 94393b5b0bfd6285e72e473601c79591a32829e7 Mon Sep 17 00:00:00 2001 From: Diana Arreola Date: Tue, 18 Aug 2020 17:11:12 -0700 Subject: [PATCH 07/13] removed unnecessary line --- extension/code-editor-integration/src/plugin.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/extension/code-editor-integration/src/plugin.ts b/extension/code-editor-integration/src/plugin.ts index 299a4b0d3..f59a57f4e 100644 --- a/extension/code-editor-integration/src/plugin.ts +++ b/extension/code-editor-integration/src/plugin.ts @@ -6,12 +6,11 @@ import {HOWDOI_PREFIX, HowdoiObj, JSONObj, CommentChars} from './plugin_interfac import * as removeRegex from './remove_regexes' import * as findAttr from './find_attributes' import * as createAttr from './create_attributes' -runHowdoi('# howdoi print python') export async function retrieveHowdoiOutput(command: string, numFlagVal: number): Promise { /* This function spawns an external application in a new process to run the howdoi query and returns the howdoi query answer formatted as a JSONObj[] */ - log.setLevel('warn') + log.setLevel('warn') const numFlag: string = '-n' + String(numFlagVal) const process = cp.spawn(HOWDOI_PREFIX, [command, numFlag, '-j']) let howdoiJSON: JSONObj[] = [{ answer: '', link: '', position: ''}] From 231e32323e95509864195a2f478e619ac34c1f4b Mon Sep 17 00:00:00 2001 From: Diana Arreola Date: Tue, 18 Aug 2020 21:36:34 -0700 Subject: [PATCH 08/13] cli returns howdoi object --- extension/plugin-cli/package-lock.json | 139 +++++++++++++++++- extension/plugin-cli/package.json | 3 + .../code-editor-integration/package-lock.json | 5 + .../src/code-editor-integration/package.json | 4 +- .../src/code-editor-integration/src/plugin.ts | 8 +- extension/plugin-cli/src/create-project.ts | 4 +- extension/plugin-cli/src/index.ts | 5 +- 7 files changed, 157 insertions(+), 11 deletions(-) diff --git a/extension/plugin-cli/package-lock.json b/extension/plugin-cli/package-lock.json index 33cf89919..83f8e50e3 100644 --- a/extension/plugin-cli/package-lock.json +++ b/extension/plugin-cli/package-lock.json @@ -39,6 +39,34 @@ } } }, + "@kristoferbaxter/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@kristoferbaxter/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-aPFon+UXJ0758piFg/sp0tKr67675UWR9ssa39gN0ynJAY5wDQ8u57H0Z0uaeu0z1gEvLnLF8T1/rLrCZ4gFIg==" + }, + "@nodelib/fs.scandir": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", + "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", + "requires": { + "@nodelib/fs.stat": "2.0.3", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", + "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==" + }, + "@nodelib/fs.walk": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", + "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "requires": { + "@nodelib/fs.scandir": "2.1.3", + "fastq": "^1.6.0" + } + }, "@types/chai": { "version": "4.2.12", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.12.tgz", @@ -54,6 +82,14 @@ "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==" }, + "@types/esm": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@types/esm/-/esm-3.2.0.tgz", + "integrity": "sha512-aXemgVPnF1s0PQin04Ei8zTWaNwUdc4pmhZDg8LBW6QEl9kBWVItAUOLGUY5H5xduAmbL1pLGH1X/PN0+4R9tg==", + "requires": { + "@types/node": "*" + } + }, "@types/json-schema": { "version": "7.0.5", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", @@ -67,8 +103,7 @@ "@types/node": { "version": "14.0.27", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.27.tgz", - "integrity": "sha512-kVrqXhbclHNHGu9ztnAwSncIgJv/FaxmzXJvGXNdcCpV1b8u1/Mi6z6m0vwy0LzKeXFTPLH0NzwmoJ3fNCIq0g==", - "dev": true + "integrity": "sha512-kVrqXhbclHNHGu9ztnAwSncIgJv/FaxmzXJvGXNdcCpV1b8u1/Mi6z6m0vwy0LzKeXFTPLH0NzwmoJ3fNCIq0g==" }, "@types/yargs": { "version": "15.0.5", @@ -156,6 +191,11 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==" }, + "acorn-import-meta": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/acorn-import-meta/-/acorn-import-meta-1.1.0.tgz", + "integrity": "sha512-pshgiVR5mhpjFVdizKTN+kAGRqjJFUOEB3TvpQ6kiAutb1lvHrIVVcGoe5xzMpJkVNifCeymMG7/tsDkWn8CdQ==" + }, "acorn-jsx": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", @@ -656,6 +696,19 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, + "fast-glob": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.2.tgz", + "integrity": "sha512-UDV82o4uQyljznxwMxyVRJgZZt3O5wENYojjzbaGEGZgeOxkLFf+V4cnUD+krzb2F72E18RhamkMZ7AdeggF7A==", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + } + }, "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", @@ -666,6 +719,14 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, + "fastq": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz", + "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==", + "requires": { + "reusify": "^1.0.4" + } + }, "file-entry-cache": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", @@ -1022,12 +1083,39 @@ } } }, + "loglevel": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.8.tgz", + "integrity": "sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA==" + }, + "magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, "make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -1209,6 +1297,11 @@ } } }, + "mri": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.5.tgz", + "integrity": "sha512-d2RKzMD4JNyHMbnbWnznPaa8vbdlq/4pNZ3IgdaGrVbBhebBsGUUE/6qorTMYNS6TwuH3ilfOlD2bf4Igh8CKg==" + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -1388,6 +1481,11 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -1396,6 +1494,11 @@ "glob": "^7.1.3" } }, + "run-parallel": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", + "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==" + }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -1458,6 +1561,11 @@ "source-map": "^0.6.0" } }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -1601,6 +1709,33 @@ "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==", "dev": true }, + "typescript-esm": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typescript-esm/-/typescript-esm-1.0.1.tgz", + "integrity": "sha512-6vckyxpBp9bkZ7a1sqxcepTWJubpUJLEtIZqTxroiVc9RX04aYxoXt3KhWfRz6/voazUcafdhNGffmV4872wpA==", + "requires": { + "@kristoferbaxter/estree-walker": "2.0.2", + "acorn": "7.1.1", + "acorn-import-meta": "1.1.0", + "fast-glob": "3.2.2", + "magic-string": "0.25.7", + "mri": "1.1.5", + "promise.allsettled": "1.0.2", + "typescript": "3.8.3" + }, + "dependencies": { + "acorn": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", + "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==" + }, + "typescript": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.3.tgz", + "integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==" + } + } + }, "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", diff --git a/extension/plugin-cli/package.json b/extension/plugin-cli/package.json index f6dd9f583..4318d2ab8 100644 --- a/extension/plugin-cli/package.json +++ b/extension/plugin-cli/package.json @@ -41,14 +41,17 @@ }, "dependencies": { "@types/chai": "^4.2.12", + "@types/esm": "^3.2.0", "@types/mocha": "^8.0.1", "@typescript-eslint/parser": "^3.9.0", "chai": "^4.2.0", "eslint": "^7.6.0", "esm": "^3.2.25", + "loglevel": "^1.6.8", "mocha": "^8.1.1", "ncp": "^2.0.0", "rimraf": "^3.0.2", + "typescript-esm": "^1.0.1", "yargs": "^15.4.1" } } diff --git a/extension/plugin-cli/src/code-editor-integration/package-lock.json b/extension/plugin-cli/src/code-editor-integration/package-lock.json index 449119898..0de83d071 100644 --- a/extension/plugin-cli/src/code-editor-integration/package-lock.json +++ b/extension/plugin-cli/src/code-editor-integration/package-lock.json @@ -1790,6 +1790,11 @@ } } }, + "loglevel": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.8.tgz", + "integrity": "sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA==" + }, "lru-cache": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", diff --git a/extension/plugin-cli/src/code-editor-integration/package.json b/extension/plugin-cli/src/code-editor-integration/package.json index 2650a2c06..ef6832e37 100644 --- a/extension/plugin-cli/src/code-editor-integration/package.json +++ b/extension/plugin-cli/src/code-editor-integration/package.json @@ -16,7 +16,9 @@ "keywords": [], "author": "", "license": "ISC", - "dependencies": {}, + "dependencies": { + "loglevel": "^1.6.8" + }, "devDependencies": { "@types/chai": "^4.2.11", "@types/mocha": "^7.0.2", diff --git a/extension/plugin-cli/src/code-editor-integration/src/plugin.ts b/extension/plugin-cli/src/code-editor-integration/src/plugin.ts index 5bce2158e..f59a57f4e 100644 --- a/extension/plugin-cli/src/code-editor-integration/src/plugin.ts +++ b/extension/plugin-cli/src/code-editor-integration/src/plugin.ts @@ -1,6 +1,7 @@ 'use strict' import * as cp from 'child_process' import {once} from 'events' +import * as log from 'loglevel' import {HOWDOI_PREFIX, HowdoiObj, JSONObj, CommentChars} from './plugin_interfaces' import * as removeRegex from './remove_regexes' import * as findAttr from './find_attributes' @@ -9,6 +10,7 @@ import * as createAttr from './create_attributes' export async function retrieveHowdoiOutput(command: string, numFlagVal: number): Promise { /* This function spawns an external application in a new process to run the howdoi query and returns the howdoi query answer formatted as a JSONObj[] */ + log.setLevel('warn') const numFlag: string = '-n' + String(numFlagVal) const process = cp.spawn(HOWDOI_PREFIX, [command, numFlag, '-j']) let howdoiJSON: JSONObj[] = [{ answer: '', link: '', position: ''}] @@ -18,15 +20,15 @@ export async function retrieveHowdoiOutput(command: string, numFlagVal: number): }) process.stderr.on('dataErr', (dataErr: Buffer) => { - console.log(`stderr: ${dataErr}`) + log.warn(`stderr: ${dataErr}`) }) process.on('error', (error: Error) => { - console.log(`error: ${error.message}`) + log.warn(`error: ${error.message}`) }) process.on('close', (code: number) => { - console.log(`child process exited with code ${code}`) + log.info(`child process exited with code ${code}`) }) // Wait for the child process to exit diff --git a/extension/plugin-cli/src/create-project.ts b/extension/plugin-cli/src/create-project.ts index 5b98e69d3..a35457548 100644 --- a/extension/plugin-cli/src/create-project.ts +++ b/extension/plugin-cli/src/create-project.ts @@ -1,4 +1,4 @@ #!/usr/bin/env node -require = require("esm")(module/*, options*/) -require("../out/index.js").parseArgs(process) +require = require('esm')(module/*, options*/) +require('../out/index.js').parseArgs(process) diff --git a/extension/plugin-cli/src/index.ts b/extension/plugin-cli/src/index.ts index 43e9e49b6..790eb4229 100644 --- a/extension/plugin-cli/src/index.ts +++ b/extension/plugin-cli/src/index.ts @@ -2,9 +2,8 @@ import yargs from 'yargs' import * as wrapper from './wrapper' -import { HowdoiObj } from './code-editor-integration/src/plugin_interfaces' -export async function parseArgs(): Promise { +export async function parseArgs(): Promise { const args = yargs.options({'query': { type: 'string', demandOption: true, @@ -13,6 +12,6 @@ export async function parseArgs(): Promise { }}).help().argv const result = await wrapper.howdoiWrapper(args['query']) - return result + console.log(result) } From 72c81e32b87de7f3010e92697549330cc96906d7 Mon Sep 17 00:00:00 2001 From: Diana Arreola Date: Tue, 18 Aug 2020 22:49:10 -0700 Subject: [PATCH 09/13] added plugin-cli to gh workflow --- .github/workflows/node.js.yml | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml index 8c18324db..7b6b8f0b5 100644 --- a/.github/workflows/node.js.yml +++ b/.github/workflows/node.js.yml @@ -5,7 +5,7 @@ name: Node.js CI on: push: - branches: [ master, vscode-ext] + branches: [ master, vscode-ext, plugin-cli] paths: [ 'extension/**'] pull_request: branches: [ master ] @@ -57,3 +57,25 @@ jobs: npm run lint npm test working-directory: ./extension/vscode-howdoi + + job_3: + name: Plugin CLI + + runs-on: macos-latest + + strategy: + matrix: + node-version: [10.x, 12.x, 14.x] + + steps: + - uses: actions/checkout@v2 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - run: | + npm ci + npm run build --if-present + npm run precompile + npm run lint + working-directory: ./extension/plugin-cli From 3d632eba40122a23d122a7e586db6db4c37fc399 Mon Sep 17 00:00:00 2001 From: Diana Arreola Date: Tue, 18 Aug 2020 22:51:28 -0700 Subject: [PATCH 10/13] fixed eslint error --- extension/plugin-cli/src/create-project.ts | 6 ++++-- extension/plugin-cli/src/index.ts | 2 -- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/extension/plugin-cli/src/create-project.ts b/extension/plugin-cli/src/create-project.ts index a35457548..24d3353c1 100644 --- a/extension/plugin-cli/src/create-project.ts +++ b/extension/plugin-cli/src/create-project.ts @@ -1,4 +1,6 @@ #!/usr/bin/env node +import mod = require('esm') +import * as plugin_cli from './index' -require = require('esm')(module/*, options*/) -require('../out/index.js').parseArgs(process) +mod(module/*, options*/) +plugin_cli.parseArgs() diff --git a/extension/plugin-cli/src/index.ts b/extension/plugin-cli/src/index.ts index 790eb4229..4062c196a 100644 --- a/extension/plugin-cli/src/index.ts +++ b/extension/plugin-cli/src/index.ts @@ -1,5 +1,3 @@ -#!/usr/bin/env node - import yargs from 'yargs' import * as wrapper from './wrapper' From 583fe2f410e655ac16b8b355fecaf1fff2535e62 Mon Sep 17 00:00:00 2001 From: Diana Arreola Date: Tue, 18 Aug 2020 22:56:26 -0700 Subject: [PATCH 11/13] installed loglevel for vscode ext --- extension/vscode-howdoi/package-lock.json | 5 +++++ extension/vscode-howdoi/package.json | 7 +++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/extension/vscode-howdoi/package-lock.json b/extension/vscode-howdoi/package-lock.json index 62ea0b4cc..64ba587e2 100644 --- a/extension/vscode-howdoi/package-lock.json +++ b/extension/vscode-howdoi/package-lock.json @@ -1209,6 +1209,11 @@ "chalk": "^2.4.2" } }, + "loglevel": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.8.tgz", + "integrity": "sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA==" + }, "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", diff --git a/extension/vscode-howdoi/package.json b/extension/vscode-howdoi/package.json index 61a90cf60..b01a33036 100644 --- a/extension/vscode-howdoi/package.json +++ b/extension/vscode-howdoi/package.json @@ -53,21 +53,20 @@ }, "dependencies": { "@types/chai": "^4.2.12", + "loglevel": "^1.6.8", "ncp": "^2.0.0", "rimraf": "^3.0.2" }, "badges": [ { - "url": "https://secure.travis-ci.org/gleitz/howdoi.png?branch=master" , + "url": "https://secure.travis-ci.org/gleitz/howdoi.png?branch=master", "href": "https://travis-ci.org/github/gleitz/howdoi", "description": "Howdoi Travis CI Build" - }, { - "url": "https://github.com/gleitz/howdoi/workflows/Node.js%20CI/badge.svg" , + "url": "https://github.com/gleitz/howdoi/workflows/Node.js%20CI/badge.svg", "href": "https://github.com/gleitz/howdoi/actions?query=workflow%3A%22Node.js+CI%22", "description": "Github Actions Node.js CI" - } ], "license": "SEE LICENSE IN LICENSE.txt", From ff54d3af84e103b4cf0b8a52183d9a270610f8e3 Mon Sep 17 00:00:00 2001 From: Diana Arreola Date: Wed, 19 Aug 2020 20:27:44 -0700 Subject: [PATCH 12/13] simplified root readme --- README.rst | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/README.rst b/README.rst index d8af1f8e2..4f8b1d547 100644 --- a/README.rst +++ b/README.rst @@ -188,22 +188,14 @@ Or parse it yourself (either work): Extension Development --------------------- -To simplify the process of integrating howdoi as a code editor extension, edit the files within the ``extension/code-editor-integration`` folder. +To simplify the process of integrating howdoi as a code editor extension, edit the files within the `extension/code-editor-integration folder `_. -To improve upon the Visual Studio Code howdoi extension, edit the files within the ``extension/vscode-ext`` folder and republish the extension. +To improve upon the Visual Studio Code howdoi extension, edit the files within the ``extension/vscode-ext folder `_ and republish the extension. Code Editor Integration ~~~~~~~~~~~~~~~~~~~~~~~ -To begin development for the howdoi code editor integration plug-in, install howdoi on your machine. - -Then, install all necessary packages: - -:: - - npm install - -Continue to the ``README.md`` within the ``extension/code-editor-integration`` folder for an in depth explanation. +Head over to the `README.md `_ for an in depth explanation on beginning development for the howdoi code editor integration plug-in. Visual Studio Code Extension ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ From a7befbb31b1024093b19b3d09ec11cf6d936e96b Mon Sep 17 00:00:00 2001 From: Diana Arreola Date: Wed, 19 Aug 2020 20:46:40 -0700 Subject: [PATCH 13/13] fix typ --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index 4f8b1d547..a4ff018c9 100644 --- a/README.rst +++ b/README.rst @@ -190,7 +190,7 @@ Extension Development To simplify the process of integrating howdoi as a code editor extension, edit the files within the `extension/code-editor-integration folder `_. -To improve upon the Visual Studio Code howdoi extension, edit the files within the ``extension/vscode-ext folder `_ and republish the extension. +To improve upon the Visual Studio Code howdoi extension, edit the files within the `extension/vscode-ext folder `_ and republish the extension. Code Editor Integration ~~~~~~~~~~~~~~~~~~~~~~~