on master help sign in
Merge remote-tracking branch 'cli/mono-repo-prep' into cli

# Conflicts: # .gitmodules

commit653619b5600115fc6bc8ad7c99c20817a09b2fa5 authorHinton <hinton@users.noreply.github.com> dateWed 25 May 2022, 11:02 (4 years ago) parent7975e47980429f
103 files changed+21386
.gitmodules+5 apps/cli/.editorconfig+15 apps/cli/.eslintignore+6 apps/cli/.eslintrc.json+31 apps/cli/.git-blame-ignore-revs+5 apps/cli/.gitattributes+1 apps/cli/.github/PULL_REQUEST_TEMPLATE.md+28 apps/cli/.github/workflows/build.yml+389 apps/cli/.github/workflows/enforce-labels.yml+16 apps/cli/.github/workflows/release.yml+203 apps/cli/.github/workflows/version-bump.yml+71 apps/cli/.github/workflows/workflow-linter.yml+11 apps/cli/.gitignore+5 apps/cli/.husky/.gitignore+1 apps/cli/.husky/pre-commit+4 apps/cli/.npmignore+3 apps/cli/.prettierignore+12 apps/cli/.prettierrc.json+3 apps/cli/.vscode/launch.json+25 apps/cli/.vscode/settings.json+10 apps/cli/CONTRIBUTING.md+23 apps/cli/ISSUE_TEMPLATE.md+52 apps/cli/LICENSE.txt+674 apps/cli/README.md+120 apps/cli/SECURITY.md+21 apps/cli/config/config.js+31 apps/cli/config/development.json+5 apps/cli/config/production.json+5 apps/cli/examples/git-credential-bw.sh+56 apps/cli/jslib+1 apps/cli/package-lock.json+12969 apps/cli/package.json+137 apps/cli/scripts/brew-update.ps1+23 apps/cli/scripts/choco-pack.ps1+34 apps/cli/scripts/choco-update.ps1+26 apps/cli/scripts/snap-build.ps1+32 apps/cli/scripts/snap-update.ps1+12 apps/cli/spec/bw.spec.ts+3 apps/cli/spec/helpers.ts+4 apps/cli/spec/support/jasmine.json+7 apps/cli/spec/tsconfig.json+7 apps/cli/spec/utils.spec.ts+27 apps/cli/src/bw.ts+380 apps/cli/src/commands/completion.command.ts+119 apps/cli/src/commands/config.command.ts+53 apps/cli/src/commands/confirm.command.ts+62 apps/cli/src/commands/convertToKeyConnector.command.ts+84 apps/cli/src/commands/create.command.ts+206 apps/cli/src/commands/delete.command.ts+131 apps/cli/src/commands/download.command.ts+43 apps/cli/src/commands/edit.command.ts+186 apps/cli/src/commands/encode.command.ts+16 apps/cli/src/commands/export.command.ts+97 apps/cli/src/commands/generate.command.ts+80 apps/cli/src/commands/get.command.ts+540 apps/cli/src/commands/import.command.ts+127 apps/cli/src/commands/list.command.ts+252 apps/cli/src/commands/lock.command.ts+14 apps/cli/src/commands/login.command.ts+99 apps/cli/src/commands/restore.command.ts+36 apps/cli/src/commands/send/create.command.ts+149 apps/cli/src/commands/send/delete.command.ts+21 apps/cli/src/commands/send/edit.command.ts+90 apps/cli/src/commands/send/get.command.ts+83 apps/cli/src/commands/send/list.command.ts+36 apps/cli/src/commands/send/receive.command.ts+170 apps/cli/src/commands/send/removePassword.command.ts+21 apps/cli/src/commands/serve.command.ts+394 apps/cli/src/commands/share.command.ts+59 apps/cli/src/commands/status.command.ts+54 apps/cli/src/commands/sync.command.ts+41 apps/cli/src/commands/unlock.command.ts+132 apps/cli/src/flags.ts+5 apps/cli/src/locales/en/messages.json+44 apps/cli/src/models/request/organizationCollectionRequest.ts+16 apps/cli/src/models/response/attachmentResponse.ts+17 apps/cli/src/models/response/cipherResponse.ts+33 apps/cli/src/models/response/collectionResponse.ts+13 apps/cli/src/models/response/folderResponse.ts+13 apps/cli/src/models/response/loginResponse.ts+11 apps/cli/src/models/response/organizationCollectionResponse.ts+15 apps/cli/src/models/response/organizationResponse.ts+22 apps/cli/src/models/response/organizationUserResponse.ts+17 apps/cli/src/models/response/passwordHistoryResponse.ts+11 apps/cli/src/models/response/sendAccessResponse.ts+40 apps/cli/src/models/response/sendFileResponse.ts+36 apps/cli/src/models/response/sendResponse.ts+123 apps/cli/src/models/response/sendTextResponse.ts+30 apps/cli/src/models/response/templateResponse.ts+11 apps/cli/src/models/selectionReadOnly.ts+15 apps/cli/src/program.ts+546 apps/cli/src/send.program.ts+334 apps/cli/src/services/i18n.service.ts+20 apps/cli/src/services/lowdbStorage.service.ts+40 apps/cli/src/services/nodeEnvSecureStorage.service.ts+103 apps/cli/src/utils.ts+270 apps/cli/src/vault.program.ts+486 apps/cli/stores/chocolatey/bitwarden-cli.nuspec+41 apps/cli/stores/chocolatey/tools/VERIFICATION.txt+6 apps/cli/stores/snap/snapcraft.yaml+17 apps/cli/tsconfig.json+20 apps/cli/tslint.json+67 apps/cli/webpack.config.js+76
.gitmodules+5
@@ -7,3 +7,8 @@
77 path = apps/desktop/jslib
88 url = https://github.com/bitwarden/jslib.git
99 branch = master
10+
11+[submodule "apps/cli/jslib"]
12+ path = apps/cli/jslib
13+ url = https://github.com/bitwarden/jslib.git
14+ branch = master
apps/cli/.editorconfignew file+15
@@ -0,0 +1,15 @@
1+# EditorConfig is awesome: http://EditorConfig.org
2+
3+# top-most EditorConfig file
4+root = true
5+
6+# Unix-style newlines with a newline ending every file
7+[*]
8+end_of_line = lf
9+insert_final_newline = true
10+
11+# Set default charset
12+[*.{js,ts,scss,html}]
13+charset = utf-8
14+indent_style = space
15+indent_size = 2
apps/cli/.eslintignorenew file+6
@@ -0,0 +1,6 @@
1+dist
2+build
3+jslib
4+webpack.config.js
5+
6+**/node_modules
apps/cli/.eslintrc.jsonnew file+31
@@ -0,0 +1,31 @@
1+{
2+ "root": true,
3+ "env": {
4+ "node": true
5+ },
6+ "extends": ["./jslib/shared/eslintrc.json"],
7+ "rules": {
8+ "import/order": [
9+ "error",
10+ {
11+ "alphabetize": {
12+ "order": "asc"
13+ },
14+ "newlines-between": "always",
15+ "pathGroups": [
16+ {
17+ "pattern": "jslib-*/**",
18+ "group": "external",
19+ "position": "after"
20+ },
21+ {
22+ "pattern": "src/**/*",
23+ "group": "parent",
24+ "position": "before"
25+ }
26+ ],
27+ "pathGroupsExcludedImportTypes": ["builtin"]
28+ }
29+ ]
30+ }
31+}
apps/cli/.git-blame-ignore-revsnew file+5
@@ -0,0 +1,5 @@
1+# Apply Prettier https://github.com/bitwarden/cli/pull/426
2+910b4a24e649f21acbf4da5b2d422b121d514bd5
3+
4+# jslib Apply Prettier https://github.com/bitwarden/jslib/pull/581
5+193434461dbd9c48fe5dcbad95693470aec422ac
apps/cli/.gitattributesnew file+1
@@ -0,0 +1 @@
1+* text=auto eol=lf
apps/cli/.github/PULL_REQUEST_TEMPLATE.mdnew file+28
@@ -0,0 +1,28 @@
1+## Type of change
2+
3+- [ ] Bug fix
4+- [ ] New feature development
5+- [ ] Tech debt (refactoring, code cleanup, dependency upgrades, etc)
6+- [ ] Build/deploy pipeline (DevOps)
7+- [ ] Other
8+
9+## Objective
10+
11+<!--Describe what the purpose of this PR is. For example: what bug you're fixing or what new feature you're adding-->
12+
13+## Code changes
14+
15+<!--Explain the changes you've made to each file or major component. This should help the reviewer understand your changes-->
16+<!--Also refer to any related changes or PRs in other repositories-->
17+
18+- **file.ext:** Description of what was changed and why
19+
20+## Testing requirements
21+
22+<!--What functionality requires testing by QA? This includes testing new behavior and regression testing-->
23+
24+## Before you submit
25+
26+- [ ] I have checked for **linting** errors (`npm run lint`) (required)
27+- [ ] This change requires a **documentation update** (notify the documentation team)
28+- [ ] This change has particular **deployment requirements** (notify the DevOps team)
apps/cli/.github/workflows/build.ymlnew file+389
@@ -0,0 +1,389 @@
1+---
2+name: Build
3+
4+on:
5+ push:
6+ branches-ignore:
7+ - 'l10n_master'
8+ paths-ignore:
9+ - '.github/workflows/**'
10+ workflow_dispatch:
11+ inputs: {}
12+
13+jobs:
14+ cloc:
15+ name: CLOC
16+ runs-on: ubuntu-20.04
17+ steps:
18+ - name: Checkout repo
19+ uses: actions/checkout@a12a3943b4bdde767164f792f33f40b04645d846
20+
21+ - name: Set up cloc
22+ run: |
23+ sudo apt update
24+ sudo apt -y install cloc
25+
26+ - name: Print lines of code
27+ run: cloc --include-lang TypeScript,JavaScript --vcs git
28+
29+
30+ setup:
31+ name: Setup
32+ runs-on: ubuntu-20.04
33+ outputs:
34+ package_version: ${{ steps.retrieve-version.outputs.package_version }}
35+ steps:
36+ - name: Checkout repo
37+ uses: actions/checkout@a12a3943b4bdde767164f792f33f40b04645d846
38+
39+ - name: Get Package Version
40+ id: retrieve-version
41+ run: |
42+ PKG_VERSION=$(jq -r .version package.json)
43+ echo "::set-output name=package_version::$PKG_VERSION"
44+
45+ lint:
46+ name: Lint
47+ runs-on: ubuntu-20.04
48+ steps:
49+ - name: Checkout repo
50+ uses: actions/checkout@a12a3943b4bdde767164f792f33f40b04645d846
51+
52+ - name: Cache npm
53+ id: npm-cache
54+ uses: actions/cache@937d24475381cd9c75ae6db12cb4e79714b926ed
55+ with:
56+ path: '~/.npm'
57+ key: ${{ runner.os }}-npm-${{ hashFiles('package-lock.json') }}
58+ restore-keys: |
59+ ${{ runner.os }}-npm-
60+
61+ - name: Setup sub-module
62+ run: npm run sub:init
63+
64+ - name: Install
65+ run: npm ci
66+
67+ - name: Run linter
68+ run: npm run lint
69+
70+ cli:
71+ name: Build CLI
72+ runs-on: windows-2019
73+ needs:
74+ - setup
75+ - lint
76+ env:
77+ _PACKAGE_VERSION: ${{ needs.setup.outputs.package_version }}
78+ _WIN_PKG_FETCH_VERSION: 16.14.2
79+ _WIN_PKG_VERSION: 3.3
80+ steps:
81+ - name: Checkout repo
82+ uses: actions/checkout@a12a3943b4bdde767164f792f33f40b04645d846
83+
84+ - name: Setup Windows builder
85+ run: |
86+ choco install checksum --no-progress
87+ choco install reshack --no-progress
88+
89+ - name: Set up Node
90+ uses: actions/setup-node@9ced9a43a244f3ac94f13bfd896db8c8f30da67a # v3.0.0
91+ with:
92+ cache: 'npm'
93+ cache-dependency-path: '**/package-lock.json'
94+ node-version: '16'
95+
96+ - name: Get pkg-fetch
97+ shell: pwsh
98+ run: |
99+ cd $HOME
100+ $fetchedUrl = "https://github.com/vercel/pkg-fetch/releases/download/v$env:_WIN_PKG_VERSION/node-v$env:_WIN_PKG_FETCH_VERSION-win-x64"
101+
102+ New-Item -ItemType directory -Path .\.pkg-cache
103+ New-Item -ItemType directory -Path .\.pkg-cache\v$env:_WIN_PKG_VERSION
104+ Invoke-RestMethod -Uri $fetchedUrl `
105+ -OutFile ".\.pkg-cache\v$env:_WIN_PKG_VERSION\fetched-v$env:_WIN_PKG_FETCH_VERSION-win-x64"
106+
107+ - name: Setup Version Info
108+ shell: pwsh
109+ run: |
110+ $major,$minor,$patch = $env:_PACKAGE_VERSION.split('.')
111+
112+ $versionInfo = @"
113+
114+ 1 VERSIONINFO
115+ FILEVERSION $major,$minor,$patch,0
116+ PRODUCTVERSION $major,$minor,$patch,0
117+ FILEOS 0x40004
118+ FILETYPE 0x1
119+ {
120+ BLOCK "StringFileInfo"
121+ {
122+ BLOCK "040904b0"
123+ {
124+ VALUE "CompanyName", "Bitwarden Inc."
125+ VALUE "ProductName", "Bitwarden"
126+ VALUE "FileDescription", "Bitwarden CLI"
127+ VALUE "FileVersion", "$env:_PACKAGE_VERSION"
128+ VALUE "ProductVersion", "$env:_PACKAGE_VERSION"
129+ VALUE "OriginalFilename", "bw.exe"
130+ VALUE "InternalName", "bw"
131+ VALUE "LegalCopyright", "Copyright Bitwarden Inc."
132+ }
133+ }
134+
135+ BLOCK "VarFileInfo"
136+ {
137+ VALUE "Translation", 0x0409 0x04B0
138+ }
139+ }
140+ "@
141+
142+ $versionInfo | Out-File ./version-info.rc
143+
144+
145+ # https://github.com/vercel/pkg-fetch/issues/188
146+ - name: Resource Hacker
147+ shell: cmd
148+ run: |
149+ set PATH=%PATH%;C:\Program Files (x86)\Resource Hacker
150+ set WIN_PKG=C:\Users\runneradmin\.pkg-cache\v%_WIN_PKG_VERSION%\fetched-v%_WIN_PKG_FETCH_VERSION%-win-x64
151+ set WIN_PKG_BUILT=C:\Users\runneradmin\.pkg-cache\v%_WIN_PKG_VERSION%\built-v%_WIN_PKG_FETCH_VERSION%-win-x64
152+
153+ copy %WIN_PKG% %WIN_PKG_BUILT%
154+ ResourceHacker -open %WIN_PKG_BUILT% -save %WIN_PKG_BUILT% -action delete -mask ICONGROUP,1,
155+ ResourceHacker -open version-info.rc -save version-info.res -action compile
156+ ResourceHacker -open %WIN_PKG_BUILT% -save %WIN_PKG_BUILT% -action addoverwrite -resource version-info.res
157+
158+ - name: Setup sub-module
159+ run: npm run sub:init
160+
161+ - name: Install
162+ run: npm ci
163+
164+ - name: Run tests
165+ run: npm run test
166+
167+ - name: Build & Package
168+ run: npm run dist
169+
170+ - name: Package Chocolatey
171+ shell: pwsh
172+ run: |
173+ Copy-Item -Path stores/chocolatey -Destination dist/chocolatey -Recurse
174+ Copy-Item dist/windows/bw.exe -Destination dist/chocolatey/tools
175+ Copy-Item LICENSE.txt -Destination dist/chocolatey/tools
176+
177+ choco pack dist/chocolatey/bitwarden-cli.nuspec --version ${{ env._PACKAGE_VERSION }} --out dist/chocolatey
178+
179+ - name: Zip
180+ shell: cmd
181+ run: |
182+ 7z a ./dist/bw-windows-%_PACKAGE_VERSION%.zip ./dist/windows/bw.exe
183+ 7z a ./dist/bw-macos-%_PACKAGE_VERSION%.zip ./dist/macos/bw
184+ 7z a ./dist/bw-linux-%_PACKAGE_VERSION%.zip ./dist/linux/bw
185+
186+ - name: Version Test
187+ run: |
188+ dir ./dist/
189+ Expand-Archive -Path "./dist/bw-windows-${env:_PACKAGE_VERSION}.zip" -DestinationPath "./test/windows"
190+ $testVersion = Invoke-Expression '& ./test/windows/bw.exe -v'
191+
192+ echo "version: $env:_PACKAGE_VERSION"
193+ echo "testVersion: $testVersion"
194+ if($testVersion -ne $env:_PACKAGE_VERSION) {
195+ Throw "Version test failed."
196+ }
197+
198+ - name: Create checksums
199+ run: |
200+ checksum -f="./dist/bw-windows-${env:_PACKAGE_VERSION}.zip" `
201+ -t sha256 | Out-File -Encoding ASCII ./dist/bw-windows-sha256-${env:_PACKAGE_VERSION}.txt
202+ checksum -f="./dist/bw-macos-${env:_PACKAGE_VERSION}.zip" `
203+ -t sha256 | Out-File -Encoding ASCII ./dist/bw-macos-sha256-${env:_PACKAGE_VERSION}.txt
204+ checksum -f="./dist/bw-linux-${env:_PACKAGE_VERSION}.zip" `
205+ -t sha256 | Out-File -Encoding ASCII ./dist/bw-linux-sha256-${env:_PACKAGE_VERSION}.txt
206+
207+ - name: Upload windows zip asset
208+ uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535
209+ with:
210+ name: bw-windows-${{ env._PACKAGE_VERSION }}.zip
211+ path: ./dist/bw-windows-${{ env._PACKAGE_VERSION }}.zip
212+ if-no-files-found: error
213+
214+ - name: Upload windows checksum asset
215+ uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535
216+ with:
217+ name: bw-windows-sha256-${{ env._PACKAGE_VERSION }}.txt
218+ path: ./dist/bw-windows-sha256-${{ env._PACKAGE_VERSION }}.txt
219+ if-no-files-found: error
220+
221+ - name: Upload macos zip asset
222+ uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535
223+ with:
224+ name: bw-macos-${{ env._PACKAGE_VERSION }}.zip
225+ path: ./dist/bw-macos-${{ env._PACKAGE_VERSION }}.zip
226+ if-no-files-found: error
227+
228+ - name: Upload macos checksum asset
229+ uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535
230+ with:
231+ name: bw-macos-sha256-${{ env._PACKAGE_VERSION }}.txt
232+ path: ./dist/bw-macos-sha256-${{ env._PACKAGE_VERSION }}.txt
233+ if-no-files-found: error
234+
235+ - name: Upload linux zip asset
236+ uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535
237+ with:
238+ name: bw-linux-${{ env._PACKAGE_VERSION }}.zip
239+ path: ./dist/bw-linux-${{ env._PACKAGE_VERSION }}.zip
240+ if-no-files-found: error
241+
242+ - name: Upload linux checksum asset
243+ uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535
244+ with:
245+ name: bw-linux-sha256-${{ env._PACKAGE_VERSION }}.txt
246+ path: ./dist/bw-linux-sha256-${{ env._PACKAGE_VERSION }}.txt
247+ if-no-files-found: error
248+
249+ - name: Upload Chocolatey asset
250+ uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535
251+ with:
252+ name: bitwarden-cli.${{ env._PACKAGE_VERSION }}.nupkg
253+ path: ./dist/chocolatey/bitwarden-cli.${{ env._PACKAGE_VERSION }}.nupkg
254+ if-no-files-found: error
255+
256+ - name: Upload NPM Build Directory asset
257+ uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535
258+ with:
259+ name: bitwarden-cli-${{ env._PACKAGE_VERSION }}-npm-build.zip
260+ path: ./build
261+ if-no-files-found: error
262+
263+ snap:
264+ name: Build Snap
265+ runs-on: ubuntu-20.04
266+ needs: [setup, cli]
267+ env:
268+ _PACKAGE_VERSION: ${{ needs.setup.outputs.package_version }}
269+ steps:
270+ - name: Checkout repo
271+ uses: actions/checkout@a12a3943b4bdde767164f792f33f40b04645d846
272+
273+ - name: Print environment
274+ run: |
275+ whoami
276+ echo "GitHub ref: $GITHUB_REF"
277+ echo "GitHub event: $GITHUB_EVENT"
278+ echo "BW Package Version: $_PACKAGE_VERSION"
279+
280+ - name: Get bw linux cli
281+ uses: actions/download-artifact@fb598a63ae348fa914e94cd0ff38f362e927b741
282+ with:
283+ name: bw-linux-${{ env._PACKAGE_VERSION }}.zip
284+ path: ./dist/snap
285+
286+ - name: Setup Snap Package
287+ run: |
288+ cp -r stores/snap/* -t dist/snap
289+ sed -i s/__version__/${{ env._PACKAGE_VERSION }}/g dist/snap/snapcraft.yaml
290+
291+ cd dist/snap
292+ ls -alth
293+
294+ - name: Build snap
295+ uses: snapcore/action-build@a400bf1c2d0f23074aaacf08a144813c3c20b35d # v1.0.9
296+ with:
297+ path: dist/snap
298+
299+ - name: Create checksum
300+ run: |
301+ cd dist/snap
302+ ls -alth
303+ sha256sum bw_${{ env._PACKAGE_VERSION }}_amd64.snap \
304+ | awk '{split($0, a); print a[1]}' > bw-snap-sha256-${{ env._PACKAGE_VERSION }}.txt
305+
306+ - name: Install Snap
307+ run: sudo snap install dist/snap/bw*.snap --dangerous
308+
309+ - name: Test Snap
310+ shell: pwsh
311+ run: |
312+ $testVersion = Invoke-Expression '& bw -v'
313+ if($testVersion -ne $env:_PACKAGE_VERSION) {
314+ Throw "Version test failed."
315+ }
316+ env:
317+ BITWARDENCLI_APPDATA_DIR: "/home/runner/snap/bw/x1/.config/Bitwarden CLI"
318+
319+ - name: Cleanup Test & Update Snap for Publish
320+ shell: pwsh
321+ run: sudo snap remove bw
322+
323+ - name: Upload snap asset
324+ uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535
325+ with:
326+ name: bw_${{ env._PACKAGE_VERSION }}_amd64.snap
327+ path: ./dist/snap/bw_${{ env._PACKAGE_VERSION }}_amd64.snap
328+ if-no-files-found: error
329+
330+ - name: Upload snap checksum asset
331+ uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535
332+ with:
333+ name: bw-snap-sha256-${{ env._PACKAGE_VERSION }}.txt
334+ path: ./dist/snap/bw-snap-sha256-${{ env._PACKAGE_VERSION }}.txt
335+ if-no-files-found: error
336+
337+
338+ check-failures:
339+ name: Check for failures
340+ if: always()
341+ runs-on: ubuntu-20.04
342+ needs:
343+ - cloc
344+ - setup
345+ - lint
346+ - cli
347+ - snap
348+ steps:
349+ - name: Check if any job failed
350+ if: ${{ (github.ref == 'refs/heads/master') || (github.ref == 'refs/heads/rc') }}
351+ env:
352+ CLOC_STATUS: ${{ needs.cloc.result }}
353+ SETUP_STATUS: ${{ needs.setup.result }}
354+ LINT_STATUS: ${{ needs.lint.result }}
355+ CLI_STATUS: ${{ needs.cli.result }}
356+ SNAP_STATUS: ${{ needs.snap.result }}
357+ run: |
358+ if [ "$CLOC_STATUS" = "failure" ]; then
359+ exit 1
360+ elif [ "$SETUP_STATUS" = "failure" ]; then
361+ exit 1
362+ elif [ "$LINT_STATUS" = "failure" ]; then
363+ exit 1
364+ elif [ "$CLI_STATUS" = "failure" ]; then
365+ exit 1
366+ elif [ "$SNAP_STATUS" = "failure" ]; then
367+ exit 1
368+ fi
369+ - name: Login to Azure - Prod Subscription
370+ uses: Azure/login@1f63701bf3e6892515f1b7ce2d2bf1708b46beaf
371+ if: failure()
372+ with:
373+ creds: ${{ secrets.AZURE_PROD_KV_CREDENTIALS }}
374+
375+ - name: Retrieve secrets
376+ id: retrieve-secrets
377+ uses: Azure/get-keyvault-secrets@b5c723b9ac7870c022b8c35befe620b7009b336f
378+ if: failure()
379+ with:
380+ keyvault: "bitwarden-prod-kv"
381+ secrets: "devops-alerts-slack-webhook-url"
382+
383+ - name: Notify Slack on failure
384+ uses: act10ns/slack@da3191ebe2e67f49b46880b4633f5591a96d1d33
385+ if: failure()
386+ env:
387+ SLACK_WEBHOOK_URL: ${{ steps.retrieve-secrets.outputs.devops-alerts-slack-webhook-url }}
388+ with:
389+ status: ${{ job.status }}
apps/cli/.github/workflows/enforce-labels.ymlnew file+16
@@ -0,0 +1,16 @@
1+---
2+name: Enforce PR labels
3+
4+on:
5+ pull_request:
6+ types: [labeled, unlabeled, opened, edited, synchronize]
7+jobs:
8+ enforce-label:
9+ name: EnforceLabel
10+ runs-on: ubuntu-20.04
11+ steps:
12+ - name: Enforce Label
13+ uses: yogevbd/enforce-label-action@8d1e1709b1011e6d90400a0e6cf7c0b77aa5efeb
14+ with:
15+ BANNED_LABELS: "hold"
16+ BANNED_LABELS_DESCRIPTION: "PRs on hold cannot be merged"
apps/cli/.github/workflows/release.ymlnew file+203
@@ -0,0 +1,203 @@
1+---
2+name: Release
3+
4+on:
5+ workflow_dispatch:
6+ inputs:
7+ release_type:
8+ description: 'Release Options'
9+ required: true
10+ default: 'Initial Release'
11+ type: choice
12+ options:
13+ - Initial Release
14+ - Redeploy
15+ - Dry Run
16+
17+jobs:
18+ setup:
19+ name: Setup
20+ runs-on: ubuntu-20.04
21+ outputs:
22+ package_version: ${{ steps.retrieve-version.outputs.package_version }}
23+ branch-name: ${{ steps.branch.outputs.branch-name }}
24+ steps:
25+ - name: Branch check
26+ if: ${{ github.event.inputs.release_type != 'Dry Run' }}
27+ run: |
28+ if [[ "$GITHUB_REF" != "refs/heads/rc" ]] && [[ "$GITHUB_REF" != "refs/heads/hotfix-rc" ]]; then
29+ echo "==================================="
30+ echo "[!] Can only release from the 'rc' or 'hotfix-rc' branches"
31+ echo "==================================="
32+ exit 1
33+ fi
34+
35+ - name: Checkout repo
36+ uses: actions/checkout@ec3a7ce113134d7a93b817d10a8272cb61118579 # 2.4.0
37+
38+ - name: Retrieve CLI release version
39+ id: retrieve-version
40+ run: |
41+ PKG_VERSION=$(jq -r .version package.json)
42+ echo "::set-output name=package_version::$PKG_VERSION"
43+
44+ - name: Check to make sure CLI release version has been bumped
45+ if: ${{ github.event.inputs.release_type == 'Initial Release' }}
46+ env:
47+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
48+ run: |
49+ latest_ver=$(hub release -L 1 -f '%T')
50+ latest_ver=${latest_ver:1}
51+ echo "Latest version: $latest_ver"
52+ ver=${{ steps.retrieve-version.outputs.package_version }}
53+ echo "Version: $ver"
54+ if [ "$latest_ver" = "$ver" ]; then
55+ echo "Version has not been bumped!"
56+ exit 1
57+ fi
58+ shell: bash
59+
60+ - name: Get branch name
61+ id: branch
62+ run: |
63+ BRANCH_NAME=$(basename ${{ github.ref }})
64+ echo "::set-output name=branch-name::$BRANCH_NAME"
65+
66+ - name: Download all artifacts
67+ uses: bitwarden/gh-actions/download-artifacts@c1fa8e09871a860862d6bbe36184b06d2c7e35a8
68+ with:
69+ workflow: build.yml
70+ workflow_conclusion: success
71+ branch: ${{ steps.branch.outputs.branch-name }}
72+
73+ - name: Create release
74+ if: ${{ github.event.inputs.release_type != 'Dry Run' }}
75+ uses: ncipollo/release-action@40bb172bd05f266cf9ba4ff965cb61e9ee5f6d01 # v1.9.0
76+ env:
77+ PKG_VERSION: ${{ steps.retrieve-version.outputs.package_version }}
78+ with:
79+ artifacts: "bw-windows-${{ env.PKG_VERSION }}.zip,
80+ bw-windows-sha256-${{ env.PKG_VERSION }}.txt,
81+ bw-macos-${{ env.PKG_VERSION }}.zip,
82+ bw-macos-sha256-${{ env.PKG_VERSION }}.txt,
83+ bw-linux-${{ env.PKG_VERSION }}.zip,
84+ bw-linux-sha256-${{ env.PKG_VERSION }}.txt,
85+ bitwarden-cli.${{ env.PKG_VERSION }}.nupkg,
86+ bw_${{ env.PKG_VERSION }}_amd64.snap,
87+ bw-snap-sha256-${{ env.PKG_VERSION }}.txt"
88+ commit: ${{ github.sha }}
89+ tag: v${{ env.PKG_VERSION }}
90+ name: Version ${{ env.PKG_VERSION }}
91+ body: "<insert release notes here>"
92+ token: ${{ secrets.GITHUB_TOKEN }}
93+ draft: true
94+
95+
96+ snap:
97+ name: Deploy Snap
98+ runs-on: ubuntu-20.04
99+ needs: setup
100+ env:
101+ _PKG_VERSION: ${{ needs.setup.outputs.package_version }}
102+ steps:
103+ - name: Checkout repo
104+ uses: actions/checkout@ec3a7ce113134d7a93b817d10a8272cb61118579 # v2.4.0
105+
106+ - name: Login to Azure
107+ uses: Azure/login@1f63701bf3e6892515f1b7ce2d2bf1708b46beaf
108+ with:
109+ creds: ${{ secrets.AZURE_PROD_KV_CREDENTIALS }}
110+
111+ - name: Retrieve secrets
112+ id: retrieve-secrets
113+ uses: Azure/get-keyvault-secrets@b5c723b9ac7870c022b8c35befe620b7009b336f
114+ with:
115+ keyvault: "bitwarden-prod-kv"
116+ secrets: "snapcraft-store-token"
117+
118+ - name: Install Snap
119+ uses: samuelmeuli/action-snapcraft@10d7d0a84d9d86098b19f872257df314b0bd8e2d # v1.2.0
120+ with:
121+ snapcraft_token: ${{ steps.retrieve-secrets.outputs.snapcraft-store-token }}
122+
123+ - name: Download artifacts
124+ uses: bitwarden/gh-actions/download-artifacts@c1fa8e09871a860862d6bbe36184b06d2c7e35a8
125+ with:
126+ workflow: build.yml
127+ workflow_conclusion: success
128+ branch: ${{ needs.setup.outputs.branch-name }}
129+ artifacts: bw_${{ env._PKG_VERSION }}_amd64.snap
130+
131+ - name: Publish Snap & logout
132+ if: ${{ github.event.inputs.release_type != 'Dry Run' }}
133+ run: |
134+ snapcraft push bw_${{ env._PKG_VERSION }}_amd64.snap --release stable
135+ snapcraft logout
136+
137+
138+ choco:
139+ name: Deploy Choco
140+ runs-on: windows-2019
141+ needs: setup
142+ env:
143+ _PKG_VERSION: ${{ needs.setup.outputs.package_version }}
144+ steps:
145+ - name: Checkout repo
146+ uses: actions/checkout@ec3a7ce113134d7a93b817d10a8272cb61118579 # v2.4.0
147+
148+ - name: Setup Chocolatey
149+ run: choco apikey --key $env:CHOCO_API_KEY --source https://push.chocolatey.org/
150+ env:
151+ CHOCO_API_KEY: ${{ secrets.CHOCO_API_KEY }}
152+
153+ - name: Make dist dir
154+ shell: pwsh
155+ run: New-Item -ItemType directory -Path ./dist
156+
157+ - name: Download artifacts
158+ uses: bitwarden/gh-actions/download-artifacts@c1fa8e09871a860862d6bbe36184b06d2c7e35a8
159+ with:
160+ workflow: build.yml
161+ workflow_conclusion: success
162+ branch: ${{ needs.setup.outputs.branch-name }}
163+ artifacts: bitwarden-cli.${{ env._PKG_VERSION }}.nupkg
164+ path: ./dist
165+
166+ - name: Push to Chocolatey
167+ if: ${{ github.event.inputs.release_type != 'Dry Run' }}
168+ shell: pwsh
169+ run: |
170+ cd dist
171+ choco push
172+
173+
174+ npm:
175+ name: Publish NPM
176+ runs-on: ubuntu-20.04
177+ needs: setup
178+ env:
179+ _PKG_VERSION: ${{ needs.setup.outputs.package_version }}
180+ steps:
181+ - name: Checkout repo
182+ uses: actions/checkout@ec3a7ce113134d7a93b817d10a8272cb61118579 # v2.4.0
183+
184+ - name: Download artifacts
185+ uses: bitwarden/gh-actions/download-artifacts@c1fa8e09871a860862d6bbe36184b06d2c7e35a8
186+ with:
187+ workflow: build.yml
188+ workflow_conclusion: success
189+ branch: ${{ needs.setup.outputs.branch-name }}
190+ artifacts: bitwarden-cli-${{ env._PKG_VERSION }}-npm-build.zip
191+ path: build
192+
193+ - name: Setup NPM
194+ run: echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" > .npmrc
195+ env:
196+ NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
197+
198+ - name: Install Husky
199+ run: npm install -g husky
200+
201+ - name: Publish NPM
202+ if: ${{ github.event.inputs.release_type != 'Dry Run' }}
203+ run: npm publish --access public
apps/cli/.github/workflows/version-bump.ymlnew file+71
@@ -0,0 +1,71 @@
1+---
2+name: Version Bump
3+
4+on:
5+ workflow_dispatch:
6+ inputs:
7+ version_number:
8+ description: "New Version"
9+ required: true
10+
11+jobs:
12+ bump_version:
13+ name: "Create version_bump_${{ github.event.inputs.version_number }} branch"
14+ runs-on: ubuntu-20.04
15+ steps:
16+ - name: Checkout Branch
17+ uses: actions/checkout@ec3a7ce113134d7a93b817d10a8272cb61118579
18+
19+ - name: Create Version Branch
20+ run: |
21+ git switch -c version_bump_${{ github.event.inputs.version_number }}
22+ git push -u origin version_bump_${{ github.event.inputs.version_number }}
23+
24+ - name: Checkout Version Branch
25+ uses: actions/checkout@ec3a7ce113134d7a93b817d10a8272cb61118579
26+ with:
27+ ref: version_bump_${{ github.event.inputs.version_number }}
28+
29+ - name: Bump Version - Package
30+ uses: bitwarden/gh-actions/version-bump@03ad9a873c39cdc95dd8d77dbbda67f84db43945
31+ with:
32+ version: ${{ github.event.inputs.version_number }}
33+ file_path: "./package.json"
34+
35+ - name: Bump Version - Package-lock
36+ uses: bitwarden/gh-actions/version-bump@03ad9a873c39cdc95dd8d77dbbda67f84db43945
37+ with:
38+ version: ${{ github.event.inputs.version_number }}
39+ file_path: "./package-lock.json"
40+
41+ - name: Commit files
42+ run: |
43+ git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com"
44+ git config --local user.name "github-actions[bot]"
45+ git commit -m "Bumped version to ${{ github.event.inputs.version_number }}" -a
46+
47+ - name: Push changes
48+ run: git push -u origin version_bump_${{ github.event.inputs.version_number }}
49+
50+ - name: Create Version PR
51+ env:
52+ PR_BRANCH: "version_bump_${{ github.event.inputs.version_number }}"
53+ GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
54+ BASE_BRANCH: master
55+ TITLE: "Bump version to ${{ github.event.inputs.version_number }}"
56+ run: |
57+ gh pr create --title "$TITLE" \
58+ --base "$BASE" \
59+ --head "$PR_BRANCH" \
60+ --label "version update" \
61+ --label "automated pr" \
62+ --body "
63+ ## Type of change
64+ - [ ] Bug fix
65+ - [ ] New feature development
66+ - [ ] Tech debt (refactoring, code cleanup, dependency upgrades, etc)
67+ - [ ] Build/deploy pipeline (DevOps)
68+ - [X] Other
69+
70+ ## Objective
71+ Automated version bump to ${{ github.event.inputs.version_number }}"
apps/cli/.github/workflows/workflow-linter.ymlnew file+11
@@ -0,0 +1,11 @@
1+---
2+name: Workflow Linter
3+
4+on:
5+ pull_request:
6+ paths:
7+ - .github/workflows/**
8+
9+jobs:
10+ call-workflow:
11+ uses: bitwarden/gh-actions/.github/workflows/workflow-linter.yml@master
apps/cli/.gitignorenew file+5
@@ -0,0 +1,5 @@
1+node_modules
2+build
3+dist
4+
5+config/local.json
apps/cli/.husky/.gitignorenew file+1
@@ -0,0 +1 @@
1+_
apps/cli/.husky/pre-commitnew file+4
@@ -0,0 +1,4 @@
1+#!/bin/sh
2+. "$(dirname "$0")/_/husky.sh"
3+
4+npx lint-staged
apps/cli/.npmignorenew file+3
@@ -0,0 +1,3 @@
1+*
2+!/build
3+!/build/**/*
apps/cli/.prettierignorenew file+12
@@ -0,0 +1,12 @@
1+# Build directories
2+build
3+dist
4+coverage
5+
6+jslib
7+
8+# External libraries / auto synced locales
9+src/locales
10+
11+# Github Workflows
12+.github/workflows
apps/cli/.prettierrc.jsonnew file+3
@@ -0,0 +1,3 @@
1+{
2+ "printWidth": 100
3+}
apps/cli/.vscode/launch.jsonnew file+25
@@ -0,0 +1,25 @@
1+{
2+ "version": "0.2.0",
3+ "configurations": [
4+ {
5+ "type": "node",
6+ "request": "launch",
7+ "name": "Launch Program",
8+ "protocol": "inspector",
9+ "cwd": "${workspaceRoot}",
10+ "program": "${workspaceFolder}/build/bw.js",
11+ "env": {
12+ "BW_SESSION": "fPZb0J+1NBzQ+HB512pLhSIIt2aRoOjqs6SrbxbTHVcsZdFk1cthzjBIMqBa2X7fjOOA3VU0bnR42fYeuWj2Vw=="
13+ },
14+ "sourceMapPathOverrides": {
15+ "meteor://💻app/*": "${workspaceFolder}/*",
16+ "webpack:///./~/*": "${workspaceFolder}/node_modules/*",
17+ "webpack://?:*/*": "${workspaceFolder}/*",
18+ "webpack://@bitwarden/cli/*": "${workspaceFolder}/*"
19+ },
20+ "smartStep": true,
21+ "console": "integratedTerminal",
22+ "args": ["login", "sdfsd@sdfdf.com", "ddddddd"]
23+ }
24+ ]
25+}
apps/cli/.vscode/settings.jsonnew file+10
@@ -0,0 +1,10 @@
1+{
2+ "debug.javascript.terminalOptions": {
3+ "sourceMapPathOverrides": {
4+ "meteor://💻app/*": "${workspaceFolder}/*",
5+ "webpack:///./~/*": "${workspaceFolder}/node_modules/*",
6+ "webpack://?:*/*": "${workspaceFolder}/*",
7+ "webpack://@bitwarden/cli/*": "${workspaceFolder}/*"
8+ }
9+ }
10+}
apps/cli/CONTRIBUTING.mdnew file+23
@@ -0,0 +1,23 @@
1+# How to Contribute
2+
3+Contributions of all kinds are welcome!
4+
5+Please visit our [Community Forums](https://community.bitwarden.com/) for general community discussion and the development roadmap.
6+
7+Here is how you can get involved:
8+
9+- **Request a new feature:** Go to the [Feature Requests category](https://community.bitwarden.com/c/feature-requests/) of the Community Forums. Please search existing feature requests before making a new one
10+- **Write code for a new feature:** Make a new post in the [Github Contributions category](https://community.bitwarden.com/c/github-contributions/) of the Community Forums. Include a description of your proposed contribution, screeshots, and links to any relevant feature requests. This helps get feedback from the community and Bitwarden team members before you start writing code
11+- **Report a bug or submit a bugfix:** Use Github issues and pull requests
12+- **Write documentation:** Submit a pull request to the [Bitwarden help repository](https://github.com/bitwarden/help)
13+- **Help other users:** Go to the [User-to-User Support category](https://community.bitwarden.com/c/support/) on the Community Forums
14+
15+## Contributor Agreement
16+
17+Please sign the [Contributor Agreement](https://cla-assistant.io/bitwarden/cli) if you intend on contributing to any Github repository. Pull requests cannot be accepted and merged unless the author has signed the Contributor Agreement.
18+
19+## Pull Request Guidelines
20+
21+- use `npm run lint` and fix any linting suggestions before submitting a pull request
22+- commit any pull requests against the `master` branch
23+- include a link to your Community Forums post
apps/cli/ISSUE_TEMPLATE.mdnew file+52
@@ -0,0 +1,52 @@
1+<!--
2+Please do not submit feature requests. The [Community Forums][1] has a
3+section for submitting, voting for, and discussing product feature requests.
4+[1]: https://community.bitwarden.com
5+-->
6+
7+## Describe the Bug
8+
9+<!-- Comment:
10+A clear and concise description of what the bug is.
11+-->
12+
13+## Steps To Reproduce
14+
15+<!-- Comment:
16+How can we reproduce the behavior:
17+-->
18+
19+1. Launch using command, '...'
20+2. Copy value '....'
21+3. Pipe to '....'
22+4. Run the following command, '...'
23+
24+## Expected Result
25+
26+<!-- Comment:
27+A clear and concise description of what you expected to happen.
28+-->
29+
30+## Actual Result
31+
32+<!-- Comment:
33+A clear and concise description of what is happening.
34+-->
35+
36+## Screenshots or Videos
37+
38+<!-- Comment:
39+If applicable, add screenshots and/or a short video to help explain your problem.
40+-->
41+
42+## Environment
43+
44+- Operating system: [e.g. Windows 10, macOS BigSur, Ubuntu]
45+- Shell: [e.g. bash, zsh, PowerShell]
46+- Build Version (run `bw --version`): [e.g. 1.15.1]
47+
48+## Additional Context
49+
50+<!-- Comment:
51+Add any other context about the problem here.
52+-->
apps/cli/LICENSE.txtnew file+674
@@ -0,0 +1,674 @@
1+ GNU GENERAL PUBLIC LICENSE
2+ Version 3, 29 June 2007
3+
4+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
5+ Everyone is permitted to copy and distribute verbatim copies
6+ of this license document, but changing it is not allowed.
7+
8+ Preamble
9+
10+ The GNU General Public License is a free, copyleft license for
11+software and other kinds of works.
12+
13+ The licenses for most software and other practical works are designed
14+to take away your freedom to share and change the works. By contrast,
15+the GNU General Public License is intended to guarantee your freedom to
16+share and change all versions of a program--to make sure it remains free
17+software for all its users. We, the Free Software Foundation, use the
18+GNU General Public License for most of our software; it applies also to
19+any other work released this way by its authors. You can apply it to
20+your programs, too.
21+
22+ When we speak of free software, we are referring to freedom, not
23+price. Our General Public Licenses are designed to make sure that you
24+have the freedom to distribute copies of free software (and charge for
25+them if you wish), that you receive source code or can get it if you
26+want it, that you can change the software or use pieces of it in new
27+free programs, and that you know you can do these things.
28+
29+ To protect your rights, we need to prevent others from denying you
30+these rights or asking you to surrender the rights. Therefore, you have
31+certain responsibilities if you distribute copies of the software, or if
32+you modify it: responsibilities to respect the freedom of others.
33+
34+ For example, if you distribute copies of such a program, whether
35+gratis or for a fee, you must pass on to the recipients the same
36+freedoms that you received. You must make sure that they, too, receive
37+or can get the source code. And you must show them these terms so they
38+know their rights.
39+
40+ Developers that use the GNU GPL protect your rights with two steps:
41+(1) assert copyright on the software, and (2) offer you this License
42+giving you legal permission to copy, distribute and/or modify it.
43+
44+ For the developers' and authors' protection, the GPL clearly explains
45+that there is no warranty for this free software. For both users' and
46+authors' sake, the GPL requires that modified versions be marked as
47+changed, so that their problems will not be attributed erroneously to
48+authors of previous versions.
49+
50+ Some devices are designed to deny users access to install or run
51+modified versions of the software inside them, although the manufacturer
52+can do so. This is fundamentally incompatible with the aim of
53+protecting users' freedom to change the software. The systematic
54+pattern of such abuse occurs in the area of products for individuals to
55+use, which is precisely where it is most unacceptable. Therefore, we
56+have designed this version of the GPL to prohibit the practice for those
57+products. If such problems arise substantially in other domains, we
58+stand ready to extend this provision to those domains in future versions
59+of the GPL, as needed to protect the freedom of users.
60+
61+ Finally, every program is threatened constantly by software patents.
62+States should not allow patents to restrict development and use of
63+software on general-purpose computers, but in those that do, we wish to
64+avoid the special danger that patents applied to a free program could
65+make it effectively proprietary. To prevent this, the GPL assures that
66+patents cannot be used to render the program non-free.
67+
68+ The precise terms and conditions for copying, distribution and
69+modification follow.
70+
71+ TERMS AND CONDITIONS
72+
73+ 0. Definitions.
74+
75+ "This License" refers to version 3 of the GNU General Public License.
76+
77+ "Copyright" also means copyright-like laws that apply to other kinds of
78+works, such as semiconductor masks.
79+
80+ "The Program" refers to any copyrightable work licensed under this
81+License. Each licensee is addressed as "you". "Licensees" and
82+"recipients" may be individuals or organizations.
83+
84+ To "modify" a work means to copy from or adapt all or part of the work
85+in a fashion requiring copyright permission, other than the making of an
86+exact copy. The resulting work is called a "modified version" of the
87+earlier work or a work "based on" the earlier work.
88+
89+ A "covered work" means either the unmodified Program or a work based
90+on the Program.
91+
92+ To "propagate" a work means to do anything with it that, without
93+permission, would make you directly or secondarily liable for
94+infringement under applicable copyright law, except executing it on a
95+computer or modifying a private copy. Propagation includes copying,
96+distribution (with or without modification), making available to the
97+public, and in some countries other activities as well.
98+
99+ To "convey" a work means any kind of propagation that enables other
100+parties to make or receive copies. Mere interaction with a user through
101+a computer network, with no transfer of a copy, is not conveying.
102+
103+ An interactive user interface displays "Appropriate Legal Notices"
104+to the extent that it includes a convenient and prominently visible
105+feature that (1) displays an appropriate copyright notice, and (2)
106+tells the user that there is no warranty for the work (except to the
107+extent that warranties are provided), that licensees may convey the
108+work under this License, and how to view a copy of this License. If
109+the interface presents a list of user commands or options, such as a
110+menu, a prominent item in the list meets this criterion.
111+
112+ 1. Source Code.
113+
114+ The "source code" for a work means the preferred form of the work
115+for making modifications to it. "Object code" means any non-source
116+form of a work.
117+
118+ A "Standard Interface" means an interface that either is an official
119+standard defined by a recognized standards body, or, in the case of
120+interfaces specified for a particular programming language, one that
121+is widely used among developers working in that language.
122+
123+ The "System Libraries" of an executable work include anything, other
124+than the work as a whole, that (a) is included in the normal form of
125+packaging a Major Component, but which is not part of that Major
126+Component, and (b) serves only to enable use of the work with that
127+Major Component, or to implement a Standard Interface for which an
128+implementation is available to the public in source code form. A
129+"Major Component", in this context, means a major essential component
130+(kernel, window system, and so on) of the specific operating system
131+(if any) on which the executable work runs, or a compiler used to
132+produce the work, or an object code interpreter used to run it.
133+
134+ The "Corresponding Source" for a work in object code form means all
135+the source code needed to generate, install, and (for an executable
136+work) run the object code and to modify the work, including scripts to
137+control those activities. However, it does not include the work's
138+System Libraries, or general-purpose tools or generally available free
139+programs which are used unmodified in performing those activities but
140+which are not part of the work. For example, Corresponding Source
141+includes interface definition files associated with source files for
142+the work, and the source code for shared libraries and dynamically
143+linked subprograms that the work is specifically designed to require,
144+such as by intimate data communication or control flow between those
145+subprograms and other parts of the work.
146+
147+ The Corresponding Source need not include anything that users
148+can regenerate automatically from other parts of the Corresponding
149+Source.
150+
151+ The Corresponding Source for a work in source code form is that
152+same work.
153+
154+ 2. Basic Permissions.
155+
156+ All rights granted under this License are granted for the term of
157+copyright on the Program, and are irrevocable provided the stated
158+conditions are met. This License explicitly affirms your unlimited
159+permission to run the unmodified Program. The output from running a
160+covered work is covered by this License only if the output, given its
161+content, constitutes a covered work. This License acknowledges your
162+rights of fair use or other equivalent, as provided by copyright law.
163+
164+ You may make, run and propagate covered works that you do not
165+convey, without conditions so long as your license otherwise remains
166+in force. You may convey covered works to others for the sole purpose
167+of having them make modifications exclusively for you, or provide you
168+with facilities for running those works, provided that you comply with
169+the terms of this License in conveying all material for which you do
170+not control copyright. Those thus making or running the covered works
171+for you must do so exclusively on your behalf, under your direction
172+and control, on terms that prohibit them from making any copies of
173+your copyrighted material outside their relationship with you.
174+
175+ Conveying under any other circumstances is permitted solely under
176+the conditions stated below. Sublicensing is not allowed; section 10
177+makes it unnecessary.
178+
179+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
180+
181+ No covered work shall be deemed part of an effective technological
182+measure under any applicable law fulfilling obligations under article
183+11 of the WIPO copyright treaty adopted on 20 December 1996, or
184+similar laws prohibiting or restricting circumvention of such
185+measures.
186+
187+ When you convey a covered work, you waive any legal power to forbid
188+circumvention of technological measures to the extent such circumvention
189+is effected by exercising rights under this License with respect to
190+the covered work, and you disclaim any intention to limit operation or
191+modification of the work as a means of enforcing, against the work's
192+users, your or third parties' legal rights to forbid circumvention of
193+technological measures.
194+
195+ 4. Conveying Verbatim Copies.
196+
197+ You may convey verbatim copies of the Program's source code as you
198+receive it, in any medium, provided that you conspicuously and
199+appropriately publish on each copy an appropriate copyright notice;
200+keep intact all notices stating that this License and any
201+non-permissive terms added in accord with section 7 apply to the code;
202+keep intact all notices of the absence of any warranty; and give all
203+recipients a copy of this License along with the Program.
204+
205+ You may charge any price or no price for each copy that you convey,
206+and you may offer support or warranty protection for a fee.
207+
208+ 5. Conveying Modified Source Versions.
209+
210+ You may convey a work based on the Program, or the modifications to
211+produce it from the Program, in the form of source code under the
212+terms of section 4, provided that you also meet all of these conditions:
213+
214+ a) The work must carry prominent notices stating that you modified
215+ it, and giving a relevant date.
216+
217+ b) The work must carry prominent notices stating that it is
218+ released under this License and any conditions added under section
219+ 7. This requirement modifies the requirement in section 4 to
220+ "keep intact all notices".
221+
222+ c) You must license the entire work, as a whole, under this
223+ License to anyone who comes into possession of a copy. This
224+ License will therefore apply, along with any applicable section 7
225+ additional terms, to the whole of the work, and all its parts,
226+ regardless of how they are packaged. This License gives no
227+ permission to license the work in any other way, but it does not
228+ invalidate such permission if you have separately received it.
229+
230+ d) If the work has interactive user interfaces, each must display
231+ Appropriate Legal Notices; however, if the Program has interactive
232+ interfaces that do not display Appropriate Legal Notices, your
233+ work need not make them do so.
234+
235+ A compilation of a covered work with other separate and independent
236+works, which are not by their nature extensions of the covered work,
237+and which are not combined with it such as to form a larger program,
238+in or on a volume of a storage or distribution medium, is called an
239+"aggregate" if the compilation and its resulting copyright are not
240+used to limit the access or legal rights of the compilation's users
241+beyond what the individual works permit. Inclusion of a covered work
242+in an aggregate does not cause this License to apply to the other
243+parts of the aggregate.
244+
245+ 6. Conveying Non-Source Forms.
246+
247+ You may convey a covered work in object code form under the terms
248+of sections 4 and 5, provided that you also convey the
249+machine-readable Corresponding Source under the terms of this License,
250+in one of these ways:
251+
252+ a) Convey the object code in, or embodied in, a physical product
253+ (including a physical distribution medium), accompanied by the
254+ Corresponding Source fixed on a durable physical medium
255+ customarily used for software interchange.
256+
257+ b) Convey the object code in, or embodied in, a physical product
258+ (including a physical distribution medium), accompanied by a
259+ written offer, valid for at least three years and valid for as
260+ long as you offer spare parts or customer support for that product
261+ model, to give anyone who possesses the object code either (1) a
262+ copy of the Corresponding Source for all the software in the
263+ product that is covered by this License, on a durable physical
264+ medium customarily used for software interchange, for a price no
265+ more than your reasonable cost of physically performing this
266+ conveying of source, or (2) access to copy the
267+ Corresponding Source from a network server at no charge.
268+
269+ c) Convey individual copies of the object code with a copy of the
270+ written offer to provide the Corresponding Source. This
271+ alternative is allowed only occasionally and noncommercially, and
272+ only if you received the object code with such an offer, in accord
273+ with subsection 6b.
274+
275+ d) Convey the object code by offering access from a designated
276+ place (gratis or for a charge), and offer equivalent access to the
277+ Corresponding Source in the same way through the same place at no
278+ further charge. You need not require recipients to copy the
279+ Corresponding Source along with the object code. If the place to
280+ copy the object code is a network server, the Corresponding Source
281+ may be on a different server (operated by you or a third party)
282+ that supports equivalent copying facilities, provided you maintain
283+ clear directions next to the object code saying where to find the
284+ Corresponding Source. Regardless of what server hosts the
285+ Corresponding Source, you remain obligated to ensure that it is
286+ available for as long as needed to satisfy these requirements.
287+
288+ e) Convey the object code using peer-to-peer transmission, provided
289+ you inform other peers where the object code and Corresponding
290+ Source of the work are being offered to the general public at no
291+ charge under subsection 6d.
292+
293+ A separable portion of the object code, whose source code is excluded
294+from the Corresponding Source as a System Library, need not be
295+included in conveying the object code work.
296+
297+ A "User Product" is either (1) a "consumer product", which means any
298+tangible personal property which is normally used for personal, family,
299+or household purposes, or (2) anything designed or sold for incorporation
300+into a dwelling. In determining whether a product is a consumer product,
301+doubtful cases shall be resolved in favor of coverage. For a particular
302+product received by a particular user, "normally used" refers to a
303+typical or common use of that class of product, regardless of the status
304+of the particular user or of the way in which the particular user
305+actually uses, or expects or is expected to use, the product. A product
306+is a consumer product regardless of whether the product has substantial
307+commercial, industrial or non-consumer uses, unless such uses represent
308+the only significant mode of use of the product.
309+
310+ "Installation Information" for a User Product means any methods,
311+procedures, authorization keys, or other information required to install
312+and execute modified versions of a covered work in that User Product from
313+a modified version of its Corresponding Source. The information must
314+suffice to ensure that the continued functioning of the modified object
315+code is in no case prevented or interfered with solely because
316+modification has been made.
317+
318+ If you convey an object code work under this section in, or with, or
319+specifically for use in, a User Product, and the conveying occurs as
320+part of a transaction in which the right of possession and use of the
321+User Product is transferred to the recipient in perpetuity or for a
322+fixed term (regardless of how the transaction is characterized), the
323+Corresponding Source conveyed under this section must be accompanied
324+by the Installation Information. But this requirement does not apply
325+if neither you nor any third party retains the ability to install
326+modified object code on the User Product (for example, the work has
327+been installed in ROM).
328+
329+ The requirement to provide Installation Information does not include a
330+requirement to continue to provide support service, warranty, or updates
331+for a work that has been modified or installed by the recipient, or for
332+the User Product in which it has been modified or installed. Access to a
333+network may be denied when the modification itself materially and
334+adversely affects the operation of the network or violates the rules and
335+protocols for communication across the network.
336+
337+ Corresponding Source conveyed, and Installation Information provided,
338+in accord with this section must be in a format that is publicly
339+documented (and with an implementation available to the public in
340+source code form), and must require no special password or key for
341+unpacking, reading or copying.
342+
343+ 7. Additional Terms.
344+
345+ "Additional permissions" are terms that supplement the terms of this
346+License by making exceptions from one or more of its conditions.
347+Additional permissions that are applicable to the entire Program shall
348+be treated as though they were included in this License, to the extent
349+that they are valid under applicable law. If additional permissions
350+apply only to part of the Program, that part may be used separately
351+under those permissions, but the entire Program remains governed by
352+this License without regard to the additional permissions.
353+
354+ When you convey a copy of a covered work, you may at your option
355+remove any additional permissions from that copy, or from any part of
356+it. (Additional permissions may be written to require their own
357+removal in certain cases when you modify the work.) You may place
358+additional permissions on material, added by you to a covered work,
359+for which you have or can give appropriate copyright permission.
360+
361+ Notwithstanding any other provision of this License, for material you
362+add to a covered work, you may (if authorized by the copyright holders of
363+that material) supplement the terms of this License with terms:
364+
365+ a) Disclaiming warranty or limiting liability differently from the
366+ terms of sections 15 and 16 of this License; or
367+
368+ b) Requiring preservation of specified reasonable legal notices or
369+ author attributions in that material or in the Appropriate Legal
370+ Notices displayed by works containing it; or
371+
372+ c) Prohibiting misrepresentation of the origin of that material, or
373+ requiring that modified versions of such material be marked in
374+ reasonable ways as different from the original version; or
375+
376+ d) Limiting the use for publicity purposes of names of licensors or
377+ authors of the material; or
378+
379+ e) Declining to grant rights under trademark law for use of some
380+ trade names, trademarks, or service marks; or
381+
382+ f) Requiring indemnification of licensors and authors of that
383+ material by anyone who conveys the material (or modified versions of
384+ it) with contractual assumptions of liability to the recipient, for
385+ any liability that these contractual assumptions directly impose on
386+ those licensors and authors.
387+
388+ All other non-permissive additional terms are considered "further
389+restrictions" within the meaning of section 10. If the Program as you
390+received it, or any part of it, contains a notice stating that it is
391+governed by this License along with a term that is a further
392+restriction, you may remove that term. If a license document contains
393+a further restriction but permits relicensing or conveying under this
394+License, you may add to a covered work material governed by the terms
395+of that license document, provided that the further restriction does
396+not survive such relicensing or conveying.
397+
398+ If you add terms to a covered work in accord with this section, you
399+must place, in the relevant source files, a statement of the
400+additional terms that apply to those files, or a notice indicating
401+where to find the applicable terms.
402+
403+ Additional terms, permissive or non-permissive, may be stated in the
404+form of a separately written license, or stated as exceptions;
405+the above requirements apply either way.
406+
407+ 8. Termination.
408+
409+ You may not propagate or modify a covered work except as expressly
410+provided under this License. Any attempt otherwise to propagate or
411+modify it is void, and will automatically terminate your rights under
412+this License (including any patent licenses granted under the third
413+paragraph of section 11).
414+
415+ However, if you cease all violation of this License, then your
416+license from a particular copyright holder is reinstated (a)
417+provisionally, unless and until the copyright holder explicitly and
418+finally terminates your license, and (b) permanently, if the copyright
419+holder fails to notify you of the violation by some reasonable means
420+prior to 60 days after the cessation.
421+
422+ Moreover, your license from a particular copyright holder is
423+reinstated permanently if the copyright holder notifies you of the
424+violation by some reasonable means, this is the first time you have
425+received notice of violation of this License (for any work) from that
426+copyright holder, and you cure the violation prior to 30 days after
427+your receipt of the notice.
428+
429+ Termination of your rights under this section does not terminate the
430+licenses of parties who have received copies or rights from you under
431+this License. If your rights have been terminated and not permanently
432+reinstated, you do not qualify to receive new licenses for the same
433+material under section 10.
434+
435+ 9. Acceptance Not Required for Having Copies.
436+
437+ You are not required to accept this License in order to receive or
438+run a copy of the Program. Ancillary propagation of a covered work
439+occurring solely as a consequence of using peer-to-peer transmission
440+to receive a copy likewise does not require acceptance. However,
441+nothing other than this License grants you permission to propagate or
442+modify any covered work. These actions infringe copyright if you do
443+not accept this License. Therefore, by modifying or propagating a
444+covered work, you indicate your acceptance of this License to do so.
445+
446+ 10. Automatic Licensing of Downstream Recipients.
447+
448+ Each time you convey a covered work, the recipient automatically
449+receives a license from the original licensors, to run, modify and
450+propagate that work, subject to this License. You are not responsible
451+for enforcing compliance by third parties with this License.
452+
453+ An "entity transaction" is a transaction transferring control of an
454+organization, or substantially all assets of one, or subdividing an
455+organization, or merging organizations. If propagation of a covered
456+work results from an entity transaction, each party to that
457+transaction who receives a copy of the work also receives whatever
458+licenses to the work the party's predecessor in interest had or could
459+give under the previous paragraph, plus a right to possession of the
460+Corresponding Source of the work from the predecessor in interest, if
461+the predecessor has it or can get it with reasonable efforts.
462+
463+ You may not impose any further restrictions on the exercise of the
464+rights granted or affirmed under this License. For example, you may
465+not impose a license fee, royalty, or other charge for exercise of
466+rights granted under this License, and you may not initiate litigation
467+(including a cross-claim or counterclaim in a lawsuit) alleging that
468+any patent claim is infringed by making, using, selling, offering for
469+sale, or importing the Program or any portion of it.
470+
471+ 11. Patents.
472+
473+ A "contributor" is a copyright holder who authorizes use under this
474+License of the Program or a work on which the Program is based. The
475+work thus licensed is called the contributor's "contributor version".
476+
477+ A contributor's "essential patent claims" are all patent claims
478+owned or controlled by the contributor, whether already acquired or
479+hereafter acquired, that would be infringed by some manner, permitted
480+by this License, of making, using, or selling its contributor version,
481+but do not include claims that would be infringed only as a
482+consequence of further modification of the contributor version. For
483+purposes of this definition, "control" includes the right to grant
484+patent sublicenses in a manner consistent with the requirements of
485+this License.
486+
487+ Each contributor grants you a non-exclusive, worldwide, royalty-free
488+patent license under the contributor's essential patent claims, to
489+make, use, sell, offer for sale, import and otherwise run, modify and
490+propagate the contents of its contributor version.
491+
492+ In the following three paragraphs, a "patent license" is any express
493+agreement or commitment, however denominated, not to enforce a patent
494+(such as an express permission to practice a patent or covenant not to
495+sue for patent infringement). To "grant" such a patent license to a
496+party means to make such an agreement or commitment not to enforce a
497+patent against the party.
498+
499+ If you convey a covered work, knowingly relying on a patent license,
500+and the Corresponding Source of the work is not available for anyone
501+to copy, free of charge and under the terms of this License, through a
502+publicly available network server or other readily accessible means,
503+then you must either (1) cause the Corresponding Source to be so
504+available, or (2) arrange to deprive yourself of the benefit of the
505+patent license for this particular work, or (3) arrange, in a manner
506+consistent with the requirements of this License, to extend the patent
507+license to downstream recipients. "Knowingly relying" means you have
508+actual knowledge that, but for the patent license, your conveying the
509+covered work in a country, or your recipient's use of the covered work
510+in a country, would infringe one or more identifiable patents in that
511+country that you have reason to believe are valid.
512+
513+ If, pursuant to or in connection with a single transaction or
514+arrangement, you convey, or propagate by procuring conveyance of, a
515+covered work, and grant a patent license to some of the parties
516+receiving the covered work authorizing them to use, propagate, modify
517+or convey a specific copy of the covered work, then the patent license
518+you grant is automatically extended to all recipients of the covered
519+work and works based on it.
520+
521+ A patent license is "discriminatory" if it does not include within
522+the scope of its coverage, prohibits the exercise of, or is
523+conditioned on the non-exercise of one or more of the rights that are
524+specifically granted under this License. You may not convey a covered
525+work if you are a party to an arrangement with a third party that is
526+in the business of distributing software, under which you make payment
527+to the third party based on the extent of your activity of conveying
528+the work, and under which the third party grants, to any of the
529+parties who would receive the covered work from you, a discriminatory
530+patent license (a) in connection with copies of the covered work
531+conveyed by you (or copies made from those copies), or (b) primarily
532+for and in connection with specific products or compilations that
533+contain the covered work, unless you entered into that arrangement,
534+or that patent license was granted, prior to 28 March 2007.
535+
536+ Nothing in this License shall be construed as excluding or limiting
537+any implied license or other defenses to infringement that may
538+otherwise be available to you under applicable patent law.
539+
540+ 12. No Surrender of Others' Freedom.
541+
542+ If conditions are imposed on you (whether by court order, agreement or
543+otherwise) that contradict the conditions of this License, they do not
544+excuse you from the conditions of this License. If you cannot convey a
545+covered work so as to satisfy simultaneously your obligations under this
546+License and any other pertinent obligations, then as a consequence you may
547+not convey it at all. For example, if you agree to terms that obligate you
548+to collect a royalty for further conveying from those to whom you convey
549+the Program, the only way you could satisfy both those terms and this
550+License would be to refrain entirely from conveying the Program.
551+
552+ 13. Use with the GNU Affero General Public License.
553+
554+ Notwithstanding any other provision of this License, you have
555+permission to link or combine any covered work with a work licensed
556+under version 3 of the GNU Affero General Public License into a single
557+combined work, and to convey the resulting work. The terms of this
558+License will continue to apply to the part which is the covered work,
559+but the special requirements of the GNU Affero General Public License,
560+section 13, concerning interaction through a network will apply to the
561+combination as such.
562+
563+ 14. Revised Versions of this License.
564+
565+ The Free Software Foundation may publish revised and/or new versions of
566+the GNU General Public License from time to time. Such new versions will
567+be similar in spirit to the present version, but may differ in detail to
568+address new problems or concerns.
569+
570+ Each version is given a distinguishing version number. If the
571+Program specifies that a certain numbered version of the GNU General
572+Public License "or any later version" applies to it, you have the
573+option of following the terms and conditions either of that numbered
574+version or of any later version published by the Free Software
575+Foundation. If the Program does not specify a version number of the
576+GNU General Public License, you may choose any version ever published
577+by the Free Software Foundation.
578+
579+ If the Program specifies that a proxy can decide which future
580+versions of the GNU General Public License can be used, that proxy's
581+public statement of acceptance of a version permanently authorizes you
582+to choose that version for the Program.
583+
584+ Later license versions may give you additional or different
585+permissions. However, no additional obligations are imposed on any
586+author or copyright holder as a result of your choosing to follow a
587+later version.
588+
589+ 15. Disclaimer of Warranty.
590+
591+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
592+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
593+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
594+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
595+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
596+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
597+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
598+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
599+
600+ 16. Limitation of Liability.
601+
602+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
603+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
604+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
605+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
606+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
607+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
608+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
609+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
610+SUCH DAMAGES.
611+
612+ 17. Interpretation of Sections 15 and 16.
613+
614+ If the disclaimer of warranty and limitation of liability provided
615+above cannot be given local legal effect according to their terms,
616+reviewing courts shall apply local law that most closely approximates
617+an absolute waiver of all civil liability in connection with the
618+Program, unless a warranty or assumption of liability accompanies a
619+copy of the Program in return for a fee.
620+
621+ END OF TERMS AND CONDITIONS
622+
623+ How to Apply These Terms to Your New Programs
624+
625+ If you develop a new program, and you want it to be of the greatest
626+possible use to the public, the best way to achieve this is to make it
627+free software which everyone can redistribute and change under these terms.
628+
629+ To do so, attach the following notices to the program. It is safest
630+to attach them to the start of each source file to most effectively
631+state the exclusion of warranty; and each file should have at least
632+the "copyright" line and a pointer to where the full notice is found.
633+
634+ {one line to give the program's name and a brief idea of what it does.}
635+ Copyright (C) {year} {name of author}
636+
637+ This program is free software: you can redistribute it and/or modify
638+ it under the terms of the GNU General Public License as published by
639+ the Free Software Foundation, either version 3 of the License, or
640+ (at your option) any later version.
641+
642+ This program is distributed in the hope that it will be useful,
643+ but WITHOUT ANY WARRANTY; without even the implied warranty of
644+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
645+ GNU General Public License for more details.
646+
647+ You should have received a copy of the GNU General Public License
648+ along with this program. If not, see <http://www.gnu.org/licenses/>.
649+
650+Also add information on how to contact you by electronic and paper mail.
651+
652+ If the program does terminal interaction, make it output a short
653+notice like this when it starts in an interactive mode:
654+
655+ {project} Copyright (C) {year} {fullname}
656+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
657+ This is free software, and you are welcome to redistribute it
658+ under certain conditions; type `show c' for details.
659+
660+The hypothetical commands `show w' and `show c' should show the appropriate
661+parts of the General Public License. Of course, your program's commands
662+might be different; for a GUI interface, you would use an "about box".
663+
664+ You should also get your employer (if you work as a programmer) or school,
665+if any, to sign a "copyright disclaimer" for the program, if necessary.
666+For more information on this, and how to apply and follow the GNU GPL, see
667+<http://www.gnu.org/licenses/>.
668+
669+ The GNU General Public License does not permit incorporating your program
670+into proprietary programs. If your program is a subroutine library, you
671+may consider it more useful to permit linking proprietary applications with
672+the library. If this is what you want to do, use the GNU Lesser General
673+Public License instead of this License. But first, please read
674+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
apps/cli/README.mdnew file+120
@@ -0,0 +1,120 @@
1+> **Repository Reorganization in Progress**
2+>
3+> We are currently migrating some projects over to a mono repository. For existing PR's we will be providing documentation on how to move/migrate them. To minimize the overhead we are actively reviewing open PRs. If possible please ensure any pending comments are resolved as soon as possible.
4+>
5+> New pull requests created during this transition period may not get addressed —if needed, please create a new PR after the reorganization is complete.
6+
7+[![Github Workflow build on master](https://github.com/bitwarden/cli/actions/workflows/build.yml/badge.svg?branch=master)](https://github.com/bitwarden/cli/actions/workflows/build.yml?query=branch:master)
8+[![Join the chat at https://gitter.im/bitwarden/Lobby](https://badges.gitter.im/bitwarden/Lobby.svg)](https://gitter.im/bitwarden/Lobby)
9+
10+# Bitwarden Command-line Interface
11+
12+[![Platforms](https://imgur.com/AnTLX0S.png "Platforms")](https://help.bitwarden.com/article/cli/#download--install)
13+
14+The Bitwarden CLI is a powerful, full-featured command-line interface (CLI) tool to access and manage a Bitwarden vault. The CLI is written with TypeScript and Node.js and can be run on Windows, macOS, and Linux distributions.
15+
16+![CLI](https://raw.githubusercontent.com/bitwarden/brand/master/screenshots/cli-macos.png "CLI")
17+
18+## Download/Install
19+
20+You can install the Bitwarden CLI multiple different ways:
21+
22+**NPM**
23+
24+If you already have the Node.js runtime installed on your system, you can install the CLI using NPM. NPM makes it easy to keep your installation updated and should be the preferred installation method if you are already using Node.js.
25+
26+```bash
27+npm install -g @bitwarden/cli
28+```
29+
30+**Native Executable**
31+
32+We provide natively packaged versions of the CLI for each platform which have no requirements on installing the Node.js runtime. You can obtain these from the [downloads section](https://help.bitwarden.com/article/cli/#download--install) in the documentation.
33+
34+**Other Package Managers**
35+
36+- [Chocolatey](https://chocolatey.org/packages/bitwarden-cli)
37+ ```powershell
38+ choco install bitwarden-cli
39+ ```
40+- [Homebrew](https://formulae.brew.sh/formula/bitwarden-cli)
41+ ```bash
42+ brew install bitwarden-cli
43+ ```
44+- [Snap](https://snapcraft.io/bw)
45+ ```bash
46+ sudo snap install bw
47+ ```
48+
49+## Documentation
50+
51+The Bitwarden CLI is self-documented with `--help` content and examples for every command. You should start exploring the CLI by using the global `--help` option:
52+
53+```bash
54+bw --help
55+```
56+
57+This option will list all available commands that you can use with the CLI.
58+
59+Additionally, you can run the `--help` option on a specific command to learn more about it:
60+
61+```bash
62+bw list --help
63+bw create --help
64+```
65+
66+**Detailed Documentation**
67+
68+We provide detailed documentation and examples for using the CLI in our help center at https://help.bitwarden.com/article/cli/.
69+
70+## Build/Run
71+
72+**Requirements**
73+
74+- [Node.js](https://nodejs.org) v16.13.1.
75+ - Testing is done against Node 16, other versions may work, but are not guaranteed.
76+- NPM v8
77+
78+**Run the app**
79+
80+```bash
81+npm install
82+npm run sub:init # initialize the git submodule for jslib
83+npm run build:watch
84+```
85+
86+You can then run commands from the `./build` folder:
87+
88+```bash
89+node ./build/bw.js login
90+```
91+
92+## We're Hiring!
93+
94+Interested in contributing in a big way? Consider joining our team! We're hiring for many positions. Please take a look at our [Careers page](https://bitwarden.com/careers/) to see what opportunities are currently open as well as what it's like to work at Bitwarden.
95+
96+## Contribute
97+
98+Code contributions are welcome! Please commit any pull requests against the `master` branch. Learn more about how to contribute by reading the [`CONTRIBUTING.md`](CONTRIBUTING.md) file.
99+
100+Security audits and feedback are welcome. Please open an issue or email us privately if the report is sensitive in nature. You can read our security policy in the [`SECURITY.md`](SECURITY.md) file.
101+
102+## Prettier
103+
104+We recently migrated to using Prettier as code formatter. All previous branches will need to updated to avoid large merge conflicts using the following steps:
105+
106+1. Check out your local Branch
107+2. Run `git merge ec53a16c005e0dd9aef6845c18811e8b14067168`
108+3. Resolve any merge conflicts, commit.
109+4. Run `npm run prettier`
110+5. Commit
111+6. Run `git merge -Xours 910b4a24e649f21acbf4da5b2d422b121d514bd5`
112+7. Push
113+
114+### Git blame
115+
116+We also recommend that you configure git to ignore the prettier revision using:
117+
118+```bash
119+git config blame.ignoreRevsFile .git-blame-ignore-revs
120+```
apps/cli/SECURITY.mdnew file+21
@@ -0,0 +1,21 @@
1+Bitwarden believes that working with security researchers across the globe is crucial to keeping our users safe. If you believe you've found a security issue in our product or service, we encourage you to please submit a report through our [HackerOne Program](https://hackerone.com/bitwarden/). We welcome working with you to resolve the issue promptly. Thanks in advance!
2+
3+# Disclosure Policy
4+
5+- Let us know as soon as possible upon discovery of a potential security issue, and we'll make every effort to quickly resolve the issue.
6+- Provide us a reasonable amount of time to resolve the issue before any disclosure to the public or a third-party. We may publicly disclose the issue before resolving it, if appropriate.
7+- Make a good faith effort to avoid privacy violations, destruction of data, and interruption or degradation of our service. Only interact with accounts you own or with explicit permission of the account holder.
8+- If you would like to encrypt your report, please use the PGP key with long ID `0xDE6887086F892325FEC04CC0D847525B6931381F` (available in the public keyserver pool).
9+
10+While researching, we'd like to ask you to refrain from:
11+
12+- Denial of service
13+- Spamming
14+- Social engineering (including phishing) of Bitwarden staff or contractors
15+- Any physical attempts against Bitwarden property or data centers
16+
17+# We want to help you!
18+
19+If you have something that you feel is close to exploitation, or if you'd like some information regarding the internal API, or generally have any questions regarding the app that would help in your efforts, please email us at https://bitwarden.com/contact and ask for that information. As stated above, Bitwarden wants to help you find issues, and is more than willing to help.
20+
21+Thank you for helping keep Bitwarden and our users safe!
apps/cli/config/config.jsnew file+31
@@ -0,0 +1,31 @@
1+/* eslint-disable no-console */
2+function load(envName) {
3+ return {
4+ ...loadConfig(envName),
5+ ...loadConfig("local"),
6+ };
7+}
8+
9+function log(configObj) {
10+ const repeatNum = 50;
11+ console.log(`${"=".repeat(repeatNum)}\nenvConfig`);
12+ console.log(JSON.stringify(configObj, null, 2));
13+ console.log(`${"=".repeat(repeatNum)}`);
14+}
15+
16+function loadConfig(configName) {
17+ try {
18+ return require(`./${configName}.json`);
19+ } catch (e) {
20+ if (e instanceof Error && e.code === "MODULE_NOT_FOUND") {
21+ return {};
22+ } else {
23+ throw e;
24+ }
25+ }
26+}
27+
28+module.exports = {
29+ load,
30+ log,
31+};
apps/cli/config/development.jsonnew file+5
@@ -0,0 +1,5 @@
1+{
2+ "flags": {
3+ "serve": true
4+ }
5+}
apps/cli/config/production.jsonnew file+5
@@ -0,0 +1,5 @@
1+{
2+ "flags": {
3+ "serve": true
4+ }
5+}
apps/cli/examples/git-credential-bw.shnew file+56
@@ -0,0 +1,56 @@
1+#!/usr/bin/env bash
2+
3+# bw git-credential helper
4+# Based on:
5+# * https://github.com/lastpass/lastpass-cli/blob/master/contrib/examples/git-credential-lastpass
6+# * https://gist.github.com/mikeboiko/58ab730afd65bca0a125bc12b6f4670d
7+
8+# A credential helper for git to retrieve usernames and passwords from bw.
9+# For general usage, see https://git-scm.com/docs/gitcredentials.
10+# Here's a quick version:
11+# 1. Put this somewhere in your path.
12+# 2. git config --global credential.helper bw
13+
14+declare -A params
15+
16+if [[ "$1" == "get" ]]; then
17+ read -r line
18+ while [ -n "$line" ]; do
19+ key=${line%%=*}
20+ value=${line#*=}
21+ params[$key]=$value
22+ read -r line
23+ done
24+
25+ if [[ "${params['protocol']}" != "https" ]]; then
26+ exit
27+ fi
28+
29+ if [[ -z "${params["host"]}" ]]; then
30+ exit
31+ fi
32+
33+ if ! bw list items --search "asdf" > /dev/null 2>&1; then
34+ echo "Please login to Bitwarden to use git credential helper" > /dev/stderr
35+ exit
36+ fi
37+
38+ id=$(bw list items --search "${params["host"]}"|jq ".[] | select(.name == \"${params["host"]}\").id" -r)
39+
40+ if [[ -z "$id" ]]; then
41+ echo "Couldn't find item id in Bitwarden DB." > /dev/stderr
42+ echo "${params}"
43+ exit
44+ fi
45+
46+ user=$(bw get username "${id}")
47+ pass=$(bw get password "${id}")
48+
49+ if [[ -z "$user" ]] || [[ -z "$pass" ]]; then
50+ echo "Couldn't find host in Bitwarden DB." > /dev/stderr
51+ exit
52+ fi
53+
54+ echo username="$user"
55+ echo password="$pass"
56+fi
apps/cli/jslibnew file+1

Submodule changed.

apps/cli/package-lock.jsonnew file+12969
@@ -0,0 +1,12969 @@
1+{
2+ "name": "@bitwarden/cli",
3+ "version": "1.22.1",
4+ "lockfileVersion": 2,
5+ "requires": true,
6+ "packages": {
7+ "": {
8+ "name": "@bitwarden/cli",
9+ "version": "1.22.1",
10+ "license": "GPL-3.0-only",
11+ "dependencies": {
12+ "@koa/multer": "^3.0.0",
13+ "@koa/router": "^10.1.1",
14+ "big-integer": "1.6.48",
15+ "browser-hrtime": "^1.1.8",
16+ "chalk": "^4.1.1",
17+ "commander": "7.2.0",
18+ "form-data": "4.0.0",
19+ "https-proxy-agent": "5.0.0",
20+ "inquirer": "8.0.0",
21+ "jsdom": "^16.5.3",
22+ "jszip": "^3.7.1",
23+ "koa": "^2.13.4",
24+ "koa-bodyparser": "^4.3.0",
25+ "koa-json": "^2.0.2",
26+ "lowdb": "1.0.0",
27+ "lunr": "^2.3.9",
28+ "multer": "^1.4.4",
29+ "node-fetch": "^2.6.1",
30+ "node-forge": "1.3.1",
31+ "open": "^8.0.8",
32+ "papaparse": "^5.3.0",
33+ "proper-lockfile": "^4.1.2",
34+ "rxjs": "6.6.7",
35+ "tldjs": "^2.3.1",
36+ "zxcvbn": "^4.4.2"
37+ },
38+ "bin": {
39+ "bw": "build/bw.js"
40+ },
41+ "devDependencies": {
42+ "@fluffy-spoon/substitute": "^1.208.0",
43+ "@types/inquirer": "^7.3.1",
44+ "@types/jasmine": "^3.7.0",
45+ "@types/jsdom": "^16.2.10",
46+ "@types/koa": "^2.13.4",
47+ "@types/koa__multer": "^2.0.4",
48+ "@types/koa__router": "^8.0.11",
49+ "@types/koa-bodyparser": "^4.3.5",
50+ "@types/koa-json": "^2.0.20",
51+ "@types/lowdb": "^1.0.10",
52+ "@types/lunr": "^2.3.3",
53+ "@types/node": "^16.11.12",
54+ "@types/node-fetch": "^2.5.10",
55+ "@types/node-forge": "^1.0.1",
56+ "@types/papaparse": "^5.2.5",
57+ "@types/proper-lockfile": "^4.1.2",
58+ "@types/retry": "^0.12.1",
59+ "@types/tldjs": "^2.3.0",
60+ "@types/zxcvbn": "^4.4.1",
61+ "@typescript-eslint/eslint-plugin": "^5.12.1",
62+ "@typescript-eslint/parser": "^5.12.1",
63+ "clean-webpack-plugin": "^4.0.0",
64+ "copy-webpack-plugin": "^10.2.0",
65+ "cross-env": "^7.0.3",
66+ "eslint": "^8.9.0",
67+ "eslint-config-prettier": "^8.4.0",
68+ "eslint-import-resolver-typescript": "^2.5.0",
69+ "eslint-plugin-import": "^2.25.4",
70+ "husky": "^7.0.4",
71+ "jasmine": "^3.7.0",
72+ "jasmine-core": "^3.7.1",
73+ "jasmine-ts": "^0.4.0",
74+ "jasmine-ts-console-reporter": "^3.1.1",
75+ "lint-staged": "^12.1.3",
76+ "pkg": "^5.5.1",
77+ "prettier": "^2.5.1",
78+ "rimraf": "^3.0.2",
79+ "ts-loader": "^8.2.0",
80+ "ts-node": "^10.4.0",
81+ "tsconfig-paths": "^3.12.0",
82+ "tsconfig-paths-webpack-plugin": "^3.5.2",
83+ "typescript": "4.1.5",
84+ "webpack": "^5.65.0",
85+ "webpack-cli": "^4.9.1",
86+ "webpack-node-externals": "^3.0.0"
87+ },
88+ "engines": {
89+ "node": "~16",
90+ "npm": ">=7 <=8"
91+ }
92+ },
93+ "node_modules/@babel/helper-validator-identifier": {
94+ "version": "7.16.7",
95+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
96+ "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
97+ "dev": true,
98+ "engines": {
99+ "node": ">=6.9.0"
100+ }
101+ },
102+ "node_modules/@babel/parser": {
103+ "version": "7.16.2",
104+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.2.tgz",
105+ "integrity": "sha512-RUVpT0G2h6rOZwqLDTrKk7ksNv7YpAilTnYe1/Q+eDjxEceRMKVWbCsX7t8h6C1qCFi/1Y8WZjcEPBAFG27GPw==",
106+ "dev": true,
107+ "bin": {
108+ "parser": "bin/babel-parser.js"
109+ },
110+ "engines": {
111+ "node": ">=6.0.0"
112+ }
113+ },
114+ "node_modules/@babel/types": {
115+ "version": "7.16.0",
116+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz",
117+ "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==",
118+ "dev": true,
119+ "dependencies": {
120+ "@babel/helper-validator-identifier": "^7.15.7",
121+ "to-fast-properties": "^2.0.0"
122+ },
123+ "engines": {
124+ "node": ">=6.9.0"
125+ }
126+ },
127+ "node_modules/@cspotcode/source-map-consumer": {
128+ "version": "0.8.0",
129+ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz",
130+ "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==",
131+ "dev": true,
132+ "engines": {
133+ "node": ">= 12"
134+ }
135+ },
136+ "node_modules/@cspotcode/source-map-support": {
137+ "version": "0.7.0",
138+ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz",
139+ "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==",
140+ "dev": true,
141+ "dependencies": {
142+ "@cspotcode/source-map-consumer": "0.8.0"
143+ },
144+ "engines": {
145+ "node": ">=12"
146+ }
147+ },
148+ "node_modules/@discoveryjs/json-ext": {
149+ "version": "0.5.7",
150+ "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz",
151+ "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==",
152+ "dev": true,
153+ "engines": {
154+ "node": ">=10.0.0"
155+ }
156+ },
157+ "node_modules/@eslint/eslintrc": {
158+ "version": "1.2.1",
159+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz",
160+ "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==",
161+ "dev": true,
162+ "dependencies": {
163+ "ajv": "^6.12.4",
164+ "debug": "^4.3.2",
165+ "espree": "^9.3.1",
166+ "globals": "^13.9.0",
167+ "ignore": "^5.2.0",
168+ "import-fresh": "^3.2.1",
169+ "js-yaml": "^4.1.0",
170+ "minimatch": "^3.0.4",
171+ "strip-json-comments": "^3.1.1"
172+ },
173+ "engines": {
174+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
175+ }
176+ },
177+ "node_modules/@fluffy-spoon/substitute": {
178+ "version": "1.208.0",
179+ "resolved": "https://registry.npmjs.org/@fluffy-spoon/substitute/-/substitute-1.208.0.tgz",
180+ "integrity": "sha512-BU5vKRoK4OYlKzDtyg4HbtWnUNLOvV0ntqEZIphz+mq2G0HlVFywwJ7M+FbIcnJVDbUReS01FyL5x8R01r7zBg==",
181+ "dev": true,
182+ "engines": {
183+ "node": ">=10"
184+ },
185+ "funding": {
186+ "type": "opencollective",
187+ "url": "https://opencollective.com/substitute-js#section-contribute"
188+ }
189+ },
190+ "node_modules/@humanwhocodes/config-array": {
191+ "version": "0.9.5",
192+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz",
193+ "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==",
194+ "dev": true,
195+ "dependencies": {
196+ "@humanwhocodes/object-schema": "^1.2.1",
197+ "debug": "^4.1.1",
198+ "minimatch": "^3.0.4"
199+ },
200+ "engines": {
201+ "node": ">=10.10.0"
202+ }
203+ },
204+ "node_modules/@humanwhocodes/object-schema": {
205+ "version": "1.2.1",
206+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
207+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
208+ "dev": true
209+ },
210+ "node_modules/@koa/multer": {
211+ "version": "3.0.0",
212+ "resolved": "https://registry.npmjs.org/@koa/multer/-/multer-3.0.0.tgz",
213+ "integrity": "sha512-y+OQBmex5D1jIl723gAEUYcAWPEicIXppaAKw/zCMfpllQ08ZNweDPwoCLxEoatqd5pCu2XG6V8dl67JRq3RJw==",
214+ "engines": {
215+ "node": ">= 8"
216+ },
217+ "peerDependencies": {
218+ "multer": "*"
219+ }
220+ },
221+ "node_modules/@koa/router": {
222+ "version": "10.1.1",
223+ "resolved": "https://registry.npmjs.org/@koa/router/-/router-10.1.1.tgz",
224+ "integrity": "sha512-ORNjq5z4EmQPriKbR0ER3k4Gh7YGNhWDL7JBW+8wXDrHLbWYKYSJaOJ9aN06npF5tbTxe2JBOsurpJDAvjiXKw==",
225+ "dependencies": {
226+ "debug": "^4.1.1",
227+ "http-errors": "^1.7.3",
228+ "koa-compose": "^4.1.0",
229+ "methods": "^1.1.2",
230+ "path-to-regexp": "^6.1.0"
231+ },
232+ "engines": {
233+ "node": ">= 8.0.0"
234+ }
235+ },
236+ "node_modules/@nodelib/fs.scandir": {
237+ "version": "2.1.5",
238+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
239+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
240+ "dev": true,
241+ "dependencies": {
242+ "@nodelib/fs.stat": "2.0.5",
243+ "run-parallel": "^1.1.9"
244+ },
245+ "engines": {
246+ "node": ">= 8"
247+ }
248+ },
249+ "node_modules/@nodelib/fs.stat": {
250+ "version": "2.0.5",
251+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
252+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
253+ "dev": true,
254+ "engines": {
255+ "node": ">= 8"
256+ }
257+ },
258+ "node_modules/@nodelib/fs.walk": {
259+ "version": "1.2.8",
260+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
261+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
262+ "dev": true,
263+ "dependencies": {
264+ "@nodelib/fs.scandir": "2.1.5",
265+ "fastq": "^1.6.0"
266+ },
267+ "engines": {
268+ "node": ">= 8"
269+ }
270+ },
271+ "node_modules/@tootallnate/once": {
272+ "version": "1.1.2",
273+ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
274+ "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
275+ "engines": {
276+ "node": ">= 6"
277+ }
278+ },
279+ "node_modules/@tsconfig/node10": {
280+ "version": "1.0.8",
281+ "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz",
282+ "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==",
283+ "dev": true
284+ },
285+ "node_modules/@tsconfig/node12": {
286+ "version": "1.0.9",
287+ "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz",
288+ "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==",
289+ "dev": true
290+ },
291+ "node_modules/@tsconfig/node14": {
292+ "version": "1.0.1",
293+ "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz",
294+ "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==",
295+ "dev": true
296+ },
297+ "node_modules/@tsconfig/node16": {
298+ "version": "1.0.2",
299+ "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz",
300+ "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==",
301+ "dev": true
302+ },
303+ "node_modules/@types/accepts": {
304+ "version": "1.3.5",
305+ "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz",
306+ "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==",
307+ "dev": true,
308+ "dependencies": {
309+ "@types/node": "*"
310+ }
311+ },
312+ "node_modules/@types/body-parser": {
313+ "version": "1.19.2",
314+ "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz",
315+ "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==",
316+ "dev": true,
317+ "dependencies": {
318+ "@types/connect": "*",
319+ "@types/node": "*"
320+ }
321+ },
322+ "node_modules/@types/connect": {
323+ "version": "3.4.35",
324+ "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz",
325+ "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==",
326+ "dev": true,
327+ "dependencies": {
328+ "@types/node": "*"
329+ }
330+ },
331+ "node_modules/@types/content-disposition": {
332+ "version": "0.5.4",
333+ "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.4.tgz",
334+ "integrity": "sha512-0mPF08jn9zYI0n0Q/Pnz7C4kThdSt+6LD4amsrYDDpgBfrVWa3TcCOxKX1zkGgYniGagRv8heN2cbh+CAn+uuQ==",
335+ "dev": true
336+ },
337+ "node_modules/@types/cookies": {
338+ "version": "0.7.7",
339+ "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.7.tgz",
340+ "integrity": "sha512-h7BcvPUogWbKCzBR2lY4oqaZbO3jXZksexYJVFvkrFeLgbZjQkU4x8pRq6eg2MHXQhY0McQdqmmsxRWlVAHooA==",
341+ "dev": true,
342+ "dependencies": {
343+ "@types/connect": "*",
344+ "@types/express": "*",
345+ "@types/keygrip": "*",
346+ "@types/node": "*"
347+ }
348+ },
349+ "node_modules/@types/eslint": {
350+ "version": "8.4.1",
351+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz",
352+ "integrity": "sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==",
353+ "dev": true,
354+ "dependencies": {
355+ "@types/estree": "*",
356+ "@types/json-schema": "*"
357+ }
358+ },
359+ "node_modules/@types/eslint-scope": {
360+ "version": "3.7.3",
361+ "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz",
362+ "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==",
363+ "dev": true,
364+ "dependencies": {
365+ "@types/eslint": "*",
366+ "@types/estree": "*"
367+ }
368+ },
369+ "node_modules/@types/estree": {
370+ "version": "0.0.51",
371+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz",
372+ "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==",
373+ "dev": true
374+ },
375+ "node_modules/@types/express": {
376+ "version": "4.17.13",
377+ "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz",
378+ "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==",
379+ "dev": true,
380+ "dependencies": {
381+ "@types/body-parser": "*",
382+ "@types/express-serve-static-core": "^4.17.18",
383+ "@types/qs": "*",
384+ "@types/serve-static": "*"
385+ }
386+ },
387+ "node_modules/@types/express-serve-static-core": {
388+ "version": "4.17.28",
389+ "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz",
390+ "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==",
391+ "dev": true,
392+ "dependencies": {
393+ "@types/node": "*",
394+ "@types/qs": "*",
395+ "@types/range-parser": "*"
396+ }
397+ },
398+ "node_modules/@types/glob": {
399+ "version": "7.2.0",
400+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz",
401+ "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==",
402+ "dev": true,
403+ "dependencies": {
404+ "@types/minimatch": "*",
405+ "@types/node": "*"
406+ }
407+ },
408+ "node_modules/@types/http-assert": {
409+ "version": "1.5.3",
410+ "resolved": "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.3.tgz",
411+ "integrity": "sha512-FyAOrDuQmBi8/or3ns4rwPno7/9tJTijVW6aQQjK02+kOQ8zmoNg2XJtAuQhvQcy1ASJq38wirX5//9J1EqoUA==",
412+ "dev": true
413+ },
414+ "node_modules/@types/http-errors": {
415+ "version": "1.8.2",
416+ "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.8.2.tgz",
417+ "integrity": "sha512-EqX+YQxINb+MeXaIqYDASb6U6FCHbWjkj4a1CKDBks3d/QiB2+PqBLyO72vLDgAO1wUI4O+9gweRcQK11bTL/w==",
418+ "dev": true
419+ },
420+ "node_modules/@types/inquirer": {
421+ "version": "7.3.3",
422+ "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-7.3.3.tgz",
423+ "integrity": "sha512-HhxyLejTHMfohAuhRun4csWigAMjXTmRyiJTU1Y/I1xmggikFMkOUoMQRlFm+zQcPEGHSs3io/0FAmNZf8EymQ==",
424+ "dev": true,
425+ "dependencies": {
426+ "@types/through": "*",
427+ "rxjs": "^6.4.0"
428+ }
429+ },
430+ "node_modules/@types/jasmine": {
431+ "version": "3.10.5",
432+ "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.10.5.tgz",
433+ "integrity": "sha512-RYxEJkk/RK1S6W0nMOx9Mxm5v2bKwAVjzTHiBcHkQskwKDqHKHjSU46jx/q9IffyuctNl8ebaAjb5/461faKqQ==",
434+ "dev": true
435+ },
436+ "node_modules/@types/jsdom": {
437+ "version": "16.2.14",
438+ "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-16.2.14.tgz",
439+ "integrity": "sha512-6BAy1xXEmMuHeAJ4Fv4yXKwBDTGTOseExKE3OaHiNycdHdZw59KfYzrt0DkDluvwmik1HRt6QS7bImxUmpSy+w==",
440+ "dev": true,
441+ "dependencies": {
442+ "@types/node": "*",
443+ "@types/parse5": "*",
444+ "@types/tough-cookie": "*"
445+ }
446+ },
447+ "node_modules/@types/json-schema": {
448+ "version": "7.0.11",
449+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
450+ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
451+ "dev": true
452+ },
453+ "node_modules/@types/json5": {
454+ "version": "0.0.29",
455+ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
456+ "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=",
457+ "dev": true
458+ },
459+ "node_modules/@types/keygrip": {
460+ "version": "1.0.2",
461+ "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.2.tgz",
462+ "integrity": "sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==",
463+ "dev": true
464+ },
465+ "node_modules/@types/koa": {
466+ "version": "2.13.4",
467+ "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.13.4.tgz",
468+ "integrity": "sha512-dfHYMfU+z/vKtQB7NUrthdAEiSvnLebvBjwHtfFmpZmB7em2N3WVQdHgnFq+xvyVgxW5jKDmjWfLD3lw4g4uTw==",
469+ "dev": true,
470+ "dependencies": {
471+ "@types/accepts": "*",
472+ "@types/content-disposition": "*",
473+ "@types/cookies": "*",
474+ "@types/http-assert": "*",
475+ "@types/http-errors": "*",
476+ "@types/keygrip": "*",
477+ "@types/koa-compose": "*",
478+ "@types/node": "*"
479+ }
480+ },
481+ "node_modules/@types/koa__multer": {
482+ "version": "2.0.4",
483+ "resolved": "https://registry.npmjs.org/@types/koa__multer/-/koa__multer-2.0.4.tgz",
484+ "integrity": "sha512-WRkshXhE5rpYFUbbtAjyMhdOOSdbu1XX+2AQlRNM6AZtgxd0/WXMU4lrP7e9tk5HWVTWbx8DOOsVBmfHjSGJ4w==",
485+ "dev": true,
486+ "dependencies": {
487+ "@types/koa": "*"
488+ }
489+ },
490+ "node_modules/@types/koa__router": {
491+ "version": "8.0.11",
492+ "resolved": "https://registry.npmjs.org/@types/koa__router/-/koa__router-8.0.11.tgz",
493+ "integrity": "sha512-WXgKWpBsbS14kzmzD9LeFapOIa678h7zvUHxDwXwSx4ETKXhXLVUAToX6jZ/U7EihM7qwyD9W/BZvB0MRu7MTQ==",
494+ "dev": true,
495+ "dependencies": {
496+ "@types/koa": "*"
497+ }
498+ },
499+ "node_modules/@types/koa-bodyparser": {
500+ "version": "4.3.7",
501+ "resolved": "https://registry.npmjs.org/@types/koa-bodyparser/-/koa-bodyparser-4.3.7.tgz",
502+ "integrity": "sha512-21NhEp7LjZm4zbNV5alHHmrNY4J+S7B8lYTO6CzRL8ShTMnl20Gd14dRgVhAxraLaW5iZMofox+BycbuiDvj2Q==",
503+ "dev": true,
504+ "dependencies": {
505+ "@types/koa": "*"
506+ }
507+ },
508+ "node_modules/@types/koa-compose": {
509+ "version": "3.2.5",
510+ "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.5.tgz",
511+ "integrity": "sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==",
512+ "dev": true,
513+ "dependencies": {
514+ "@types/koa": "*"
515+ }
516+ },
517+ "node_modules/@types/koa-json": {
518+ "version": "2.0.20",
519+ "resolved": "https://registry.npmjs.org/@types/koa-json/-/koa-json-2.0.20.tgz",
520+ "integrity": "sha512-RuQ1Vlpsm/EC5wo2oWCgNnwneixnSQ9aHQAE7nwnbSiCibgfUO2wwSQN6rn8SfF97cRdN9hKAtoc9KSIuiGP6Q==",
521+ "dev": true,
522+ "dependencies": {
523+ "@types/koa": "*"
524+ }
525+ },
526+ "node_modules/@types/lodash": {
527+ "version": "4.14.181",
528+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.181.tgz",
529+ "integrity": "sha512-n3tyKthHJbkiWhDZs3DkhkCzt2MexYHXlX0td5iMplyfwketaOeKboEVBqzceH7juqvEg3q5oUoBFxSLu7zFag==",
530+ "dev": true
531+ },
532+ "node_modules/@types/lowdb": {
533+ "version": "1.0.11",
534+ "resolved": "https://registry.npmjs.org/@types/lowdb/-/lowdb-1.0.11.tgz",
535+ "integrity": "sha512-h99VMxvTuz+VsXUVCCJo4dsps4vbkXwvU71TpmxDoiBU24bJ0VBygIHgmMm+UPoQIFihmV6euRik4z8J7XDJWg==",
536+ "dev": true,
537+ "dependencies": {
538+ "@types/lodash": "*"
539+ }
540+ },
541+ "node_modules/@types/lunr": {
542+ "version": "2.3.4",
543+ "resolved": "https://registry.npmjs.org/@types/lunr/-/lunr-2.3.4.tgz",
544+ "integrity": "sha512-j4x4XJwZvorEUbA519VdQ5b9AOU9TSvfi8tvxMAfP8XzNLtFex7A8vFQwqOx3WACbV0KMXbACV3cZl4/gynQ7g==",
545+ "dev": true
546+ },
547+ "node_modules/@types/mime": {
548+ "version": "1.3.2",
549+ "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
550+ "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==",
551+ "dev": true
552+ },
553+ "node_modules/@types/minimatch": {
554+ "version": "3.0.5",
555+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
556+ "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==",
557+ "dev": true
558+ },
559+ "node_modules/@types/node": {
560+ "version": "16.11.26",
561+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.26.tgz",
562+ "integrity": "sha512-GZ7bu5A6+4DtG7q9GsoHXy3ALcgeIHP4NnL0Vv2wu0uUB/yQex26v0tf6/na1mm0+bS9Uw+0DFex7aaKr2qawQ==",
563+ "dev": true
564+ },
565+ "node_modules/@types/node-fetch": {
566+ "version": "2.6.1",
567+ "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.1.tgz",
568+ "integrity": "sha512-oMqjURCaxoSIsHSr1E47QHzbmzNR5rK8McHuNb11BOM9cHcIK3Avy0s/b2JlXHoQGTYS3NsvWzV1M0iK7l0wbA==",
569+ "dev": true,
570+ "dependencies": {
571+ "@types/node": "*",
572+ "form-data": "^3.0.0"
573+ }
574+ },
575+ "node_modules/@types/node-fetch/node_modules/form-data": {
576+ "version": "3.0.1",
577+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
578+ "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
579+ "dev": true,
580+ "dependencies": {
581+ "asynckit": "^0.4.0",
582+ "combined-stream": "^1.0.8",
583+ "mime-types": "^2.1.12"
584+ },
585+ "engines": {
586+ "node": ">= 6"
587+ }
588+ },
589+ "node_modules/@types/node-forge": {
590+ "version": "1.0.1",
591+ "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.0.1.tgz",
592+ "integrity": "sha512-96ELNKv9tQJ19afdBUiM5iDw7OYEc53iUc51gAPR2aGaqRsO1DBROjqgZRjZa1tkPj7TnEOR0EnyAX6iryGkzA==",
593+ "dev": true,
594+ "dependencies": {
595+ "@types/node": "*"
596+ }
597+ },
598+ "node_modules/@types/papaparse": {
599+ "version": "5.3.2",
600+ "resolved": "https://registry.npmjs.org/@types/papaparse/-/papaparse-5.3.2.tgz",
601+ "integrity": "sha512-BNbCHJkTE4RwmAFkCxEalET4mDvGr/1ld7ZtQ4i/laWI/iiVt+GL07stdvufle4KfywyvloqqpIiJscXNCrKxA==",
602+ "dev": true,
603+ "dependencies": {
604+ "@types/node": "*"
605+ }
606+ },
607+ "node_modules/@types/parse5": {
608+ "version": "6.0.3",
609+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz",
610+ "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==",
611+ "dev": true
612+ },
613+ "node_modules/@types/proper-lockfile": {
614+ "version": "4.1.2",
615+ "resolved": "https://registry.npmjs.org/@types/proper-lockfile/-/proper-lockfile-4.1.2.tgz",
616+ "integrity": "sha512-kd4LMvcnpYkspDcp7rmXKedn8iJSCoa331zRRamUp5oanKt/CefbEGPQP7G89enz7sKD4bvsr8mHSsC8j5WOvA==",
617+ "dev": true,
618+ "dependencies": {
619+ "@types/retry": "*"
620+ }
621+ },
622+ "node_modules/@types/qs": {
623+ "version": "6.9.7",
624+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz",
625+ "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==",
626+ "dev": true
627+ },
628+ "node_modules/@types/range-parser": {
629+ "version": "1.2.4",
630+ "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz",
631+ "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==",
632+ "dev": true
633+ },
634+ "node_modules/@types/retry": {
635+ "version": "0.12.1",
636+ "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz",
637+ "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==",
638+ "dev": true
639+ },
640+ "node_modules/@types/serve-static": {
641+ "version": "1.13.10",
642+ "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz",
643+ "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==",
644+ "dev": true,
645+ "dependencies": {
646+ "@types/mime": "^1",
647+ "@types/node": "*"
648+ }
649+ },
650+ "node_modules/@types/through": {
651+ "version": "0.0.30",
652+ "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.30.tgz",
653+ "integrity": "sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==",
654+ "dev": true,
655+ "dependencies": {
656+ "@types/node": "*"
657+ }
658+ },
659+ "node_modules/@types/tldjs": {
660+ "version": "2.3.1",
661+ "resolved": "https://registry.npmjs.org/@types/tldjs/-/tldjs-2.3.1.tgz",
662+ "integrity": "sha512-BQR04zLE0ve2eNrqxXw/Qp/f6LxvNrj/4A8ZgdQi3SzbBqxFhleI7N4DS/mSjDnODrUaEGgoWg4grAZR1kVj8w==",
663+ "dev": true
664+ },
665+ "node_modules/@types/tough-cookie": {
666+ "version": "4.0.1",
667+ "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.1.tgz",
668+ "integrity": "sha512-Y0K95ThC3esLEYD6ZuqNek29lNX2EM1qxV8y2FTLUB0ff5wWrk7az+mLrnNFUnaXcgKye22+sFBRXOgpPILZNg==",
669+ "dev": true
670+ },
671+ "node_modules/@types/zxcvbn": {
672+ "version": "4.4.1",
673+ "resolved": "https://registry.npmjs.org/@types/zxcvbn/-/zxcvbn-4.4.1.tgz",
674+ "integrity": "sha512-3NoqvZC2W5gAC5DZbTpCeJ251vGQmgcWIHQJGq2J240HY6ErQ9aWKkwfoKJlHLx+A83WPNTZ9+3cd2ILxbvr1w==",
675+ "dev": true
676+ },
677+ "node_modules/@typescript-eslint/eslint-plugin": {
678+ "version": "5.18.0",
679+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.18.0.tgz",
680+ "integrity": "sha512-tzrmdGMJI/uii9/V6lurMo4/o+dMTKDH82LkNjhJ3adCW22YQydoRs5MwTiqxGF9CSYxPxQ7EYb4jLNlIs+E+A==",
681+ "dev": true,
682+ "dependencies": {
683+ "@typescript-eslint/scope-manager": "5.18.0",
684+ "@typescript-eslint/type-utils": "5.18.0",
685+ "@typescript-eslint/utils": "5.18.0",
686+ "debug": "^4.3.2",
687+ "functional-red-black-tree": "^1.0.1",
688+ "ignore": "^5.1.8",
689+ "regexpp": "^3.2.0",
690+ "semver": "^7.3.5",
691+ "tsutils": "^3.21.0"
692+ },
693+ "engines": {
694+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
695+ },
696+ "funding": {
697+ "type": "opencollective",
698+ "url": "https://opencollective.com/typescript-eslint"
699+ },
700+ "peerDependencies": {
701+ "@typescript-eslint/parser": "^5.0.0",
702+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
703+ },
704+ "peerDependenciesMeta": {
705+ "typescript": {
706+ "optional": true
707+ }
708+ }
709+ },
710+ "node_modules/@typescript-eslint/parser": {
711+ "version": "5.18.0",
712+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.18.0.tgz",
713+ "integrity": "sha512-+08nYfurBzSSPndngnHvFw/fniWYJ5ymOrn/63oMIbgomVQOvIDhBoJmYZ9lwQOCnQV9xHGvf88ze3jFGUYooQ==",
714+ "dev": true,
715+ "dependencies": {
716+ "@typescript-eslint/scope-manager": "5.18.0",
717+ "@typescript-eslint/types": "5.18.0",
718+ "@typescript-eslint/typescript-estree": "5.18.0",
719+ "debug": "^4.3.2"
720+ },
721+ "engines": {
722+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
723+ },
724+ "funding": {
725+ "type": "opencollective",
726+ "url": "https://opencollective.com/typescript-eslint"
727+ },
728+ "peerDependencies": {
729+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
730+ },
731+ "peerDependenciesMeta": {
732+ "typescript": {
733+ "optional": true
734+ }
735+ }
736+ },
737+ "node_modules/@typescript-eslint/scope-manager": {
738+ "version": "5.18.0",
739+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.18.0.tgz",
740+ "integrity": "sha512-C0CZML6NyRDj+ZbMqh9FnPscg2PrzSaVQg3IpTmpe0NURMVBXlghGZgMYqBw07YW73i0MCqSDqv2SbywnCS8jQ==",
741+ "dev": true,
742+ "dependencies": {
743+ "@typescript-eslint/types": "5.18.0",
744+ "@typescript-eslint/visitor-keys": "5.18.0"
745+ },
746+ "engines": {
747+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
748+ },
749+ "funding": {
750+ "type": "opencollective",
751+ "url": "https://opencollective.com/typescript-eslint"
752+ }
753+ },
754+ "node_modules/@typescript-eslint/type-utils": {
755+ "version": "5.18.0",
756+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.18.0.tgz",
757+ "integrity": "sha512-vcn9/6J5D6jtHxpEJrgK8FhaM8r6J1/ZiNu70ZUJN554Y3D9t3iovi6u7JF8l/e7FcBIxeuTEidZDR70UuCIfA==",
758+ "dev": true,
759+ "dependencies": {
760+ "@typescript-eslint/utils": "5.18.0",
761+ "debug": "^4.3.2",
762+ "tsutils": "^3.21.0"
763+ },
764+ "engines": {
765+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
766+ },
767+ "funding": {
768+ "type": "opencollective",
769+ "url": "https://opencollective.com/typescript-eslint"
770+ },
771+ "peerDependencies": {
772+ "eslint": "*"
773+ },
774+ "peerDependenciesMeta": {
775+ "typescript": {
776+ "optional": true
777+ }
778+ }
779+ },
780+ "node_modules/@typescript-eslint/types": {
781+ "version": "5.18.0",
782+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.18.0.tgz",
783+ "integrity": "sha512-bhV1+XjM+9bHMTmXi46p1Led5NP6iqQcsOxgx7fvk6gGiV48c6IynY0apQb7693twJDsXiVzNXTflhplmaiJaw==",
784+ "dev": true,
785+ "engines": {
786+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
787+ },
788+ "funding": {
789+ "type": "opencollective",
790+ "url": "https://opencollective.com/typescript-eslint"
791+ }
792+ },
793+ "node_modules/@typescript-eslint/typescript-estree": {
794+ "version": "5.18.0",
795+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.18.0.tgz",
796+ "integrity": "sha512-wa+2VAhOPpZs1bVij9e5gyVu60ReMi/KuOx4LKjGx2Y3XTNUDJgQ+5f77D49pHtqef/klglf+mibuHs9TrPxdQ==",
797+ "dev": true,
798+ "dependencies": {
799+ "@typescript-eslint/types": "5.18.0",
800+ "@typescript-eslint/visitor-keys": "5.18.0",
801+ "debug": "^4.3.2",
802+ "globby": "^11.0.4",
803+ "is-glob": "^4.0.3",
804+ "semver": "^7.3.5",
805+ "tsutils": "^3.21.0"
806+ },
807+ "engines": {
808+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
809+ },
810+ "funding": {
811+ "type": "opencollective",
812+ "url": "https://opencollective.com/typescript-eslint"
813+ },
814+ "peerDependenciesMeta": {
815+ "typescript": {
816+ "optional": true
817+ }
818+ }
819+ },
820+ "node_modules/@typescript-eslint/utils": {
821+ "version": "5.18.0",
822+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.18.0.tgz",
823+ "integrity": "sha512-+hFGWUMMri7OFY26TsOlGa+zgjEy1ssEipxpLjtl4wSll8zy85x0GrUSju/FHdKfVorZPYJLkF3I4XPtnCTewA==",
824+ "dev": true,
825+ "dependencies": {
826+ "@types/json-schema": "^7.0.9",
827+ "@typescript-eslint/scope-manager": "5.18.0",
828+ "@typescript-eslint/types": "5.18.0",
829+ "@typescript-eslint/typescript-estree": "5.18.0",
830+ "eslint-scope": "^5.1.1",
831+ "eslint-utils": "^3.0.0"
832+ },
833+ "engines": {
834+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
835+ },
836+ "funding": {
837+ "type": "opencollective",
838+ "url": "https://opencollective.com/typescript-eslint"
839+ },
840+ "peerDependencies": {
841+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
842+ }
843+ },
844+ "node_modules/@typescript-eslint/visitor-keys": {
845+ "version": "5.18.0",
846+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.18.0.tgz",
847+ "integrity": "sha512-Hf+t+dJsjAKpKSkg3EHvbtEpFFb/1CiOHnvI8bjHgOD4/wAw3gKrA0i94LrbekypiZVanJu3McWJg7rWDMzRTg==",
848+ "dev": true,
849+ "dependencies": {
850+ "@typescript-eslint/types": "5.18.0",
851+ "eslint-visitor-keys": "^3.0.0"
852+ },
853+ "engines": {
854+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
855+ },
856+ "funding": {
857+ "type": "opencollective",
858+ "url": "https://opencollective.com/typescript-eslint"
859+ }
860+ },
861+ "node_modules/@webassemblyjs/ast": {
862+ "version": "1.11.1",
863+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz",
864+ "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==",
865+ "dev": true,
866+ "dependencies": {
867+ "@webassemblyjs/helper-numbers": "1.11.1",
868+ "@webassemblyjs/helper-wasm-bytecode": "1.11.1"
869+ }
870+ },
871+ "node_modules/@webassemblyjs/floating-point-hex-parser": {
872+ "version": "1.11.1",
873+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz",
874+ "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==",
875+ "dev": true
876+ },
877+ "node_modules/@webassemblyjs/helper-api-error": {
878+ "version": "1.11.1",
879+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz",
880+ "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==",
881+ "dev": true
882+ },
883+ "node_modules/@webassemblyjs/helper-buffer": {
884+ "version": "1.11.1",
885+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz",
886+ "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==",
887+ "dev": true
888+ },
889+ "node_modules/@webassemblyjs/helper-numbers": {
890+ "version": "1.11.1",
891+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz",
892+ "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==",
893+ "dev": true,
894+ "dependencies": {
895+ "@webassemblyjs/floating-point-hex-parser": "1.11.1",
896+ "@webassemblyjs/helper-api-error": "1.11.1",
897+ "@xtuc/long": "4.2.2"
898+ }
899+ },
900+ "node_modules/@webassemblyjs/helper-wasm-bytecode": {
901+ "version": "1.11.1",
902+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz",
903+ "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==",
904+ "dev": true
905+ },
906+ "node_modules/@webassemblyjs/helper-wasm-section": {
907+ "version": "1.11.1",
908+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz",
909+ "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==",
910+ "dev": true,
911+ "dependencies": {
912+ "@webassemblyjs/ast": "1.11.1",
913+ "@webassemblyjs/helper-buffer": "1.11.1",
914+ "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
915+ "@webassemblyjs/wasm-gen": "1.11.1"
916+ }
917+ },
918+ "node_modules/@webassemblyjs/ieee754": {
919+ "version": "1.11.1",
920+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz",
921+ "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==",
922+ "dev": true,
923+ "dependencies": {
924+ "@xtuc/ieee754": "^1.2.0"
925+ }
926+ },
927+ "node_modules/@webassemblyjs/leb128": {
928+ "version": "1.11.1",
929+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz",
930+ "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==",
931+ "dev": true,
932+ "dependencies": {
933+ "@xtuc/long": "4.2.2"
934+ }
935+ },
936+ "node_modules/@webassemblyjs/utf8": {
937+ "version": "1.11.1",
938+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz",
939+ "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==",
940+ "dev": true
941+ },
942+ "node_modules/@webassemblyjs/wasm-edit": {
943+ "version": "1.11.1",
944+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz",
945+ "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==",
946+ "dev": true,
947+ "dependencies": {
948+ "@webassemblyjs/ast": "1.11.1",
949+ "@webassemblyjs/helper-buffer": "1.11.1",
950+ "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
951+ "@webassemblyjs/helper-wasm-section": "1.11.1",
952+ "@webassemblyjs/wasm-gen": "1.11.1",
953+ "@webassemblyjs/wasm-opt": "1.11.1",
954+ "@webassemblyjs/wasm-parser": "1.11.1",
955+ "@webassemblyjs/wast-printer": "1.11.1"
956+ }
957+ },
958+ "node_modules/@webassemblyjs/wasm-gen": {
959+ "version": "1.11.1",
960+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz",
961+ "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==",
962+ "dev": true,
963+ "dependencies": {
964+ "@webassemblyjs/ast": "1.11.1",
965+ "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
966+ "@webassemblyjs/ieee754": "1.11.1",
967+ "@webassemblyjs/leb128": "1.11.1",
968+ "@webassemblyjs/utf8": "1.11.1"
969+ }
970+ },
971+ "node_modules/@webassemblyjs/wasm-opt": {
972+ "version": "1.11.1",
973+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz",
974+ "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==",
975+ "dev": true,
976+ "dependencies": {
977+ "@webassemblyjs/ast": "1.11.1",
978+ "@webassemblyjs/helper-buffer": "1.11.1",
979+ "@webassemblyjs/wasm-gen": "1.11.1",
980+ "@webassemblyjs/wasm-parser": "1.11.1"
981+ }
982+ },
983+ "node_modules/@webassemblyjs/wasm-parser": {
984+ "version": "1.11.1",
985+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz",
986+ "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==",
987+ "dev": true,
988+ "dependencies": {
989+ "@webassemblyjs/ast": "1.11.1",
990+ "@webassemblyjs/helper-api-error": "1.11.1",
991+ "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
992+ "@webassemblyjs/ieee754": "1.11.1",
993+ "@webassemblyjs/leb128": "1.11.1",
994+ "@webassemblyjs/utf8": "1.11.1"
995+ }
996+ },
997+ "node_modules/@webassemblyjs/wast-printer": {
998+ "version": "1.11.1",
999+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz",
1000+ "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==",
1001+ "dev": true,
1002+ "dependencies": {
1003+ "@webassemblyjs/ast": "1.11.1",
1004+ "@xtuc/long": "4.2.2"
1005+ }
1006+ },
1007+ "node_modules/@webpack-cli/configtest": {
1008+ "version": "1.1.1",
1009+ "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.1.tgz",
1010+ "integrity": "sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg==",
1011+ "dev": true,
1012+ "peerDependencies": {
1013+ "webpack": "4.x.x || 5.x.x",
1014+ "webpack-cli": "4.x.x"
1015+ }
1016+ },
1017+ "node_modules/@webpack-cli/info": {
1018+ "version": "1.4.1",
1019+ "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.1.tgz",
1020+ "integrity": "sha512-PKVGmazEq3oAo46Q63tpMr4HipI3OPfP7LiNOEJg963RMgT0rqheag28NCML0o3GIzA3DmxP1ZIAv9oTX1CUIA==",
1021+ "dev": true,
1022+ "dependencies": {
1023+ "envinfo": "^7.7.3"
1024+ },
1025+ "peerDependencies": {
1026+ "webpack-cli": "4.x.x"
1027+ }
1028+ },
1029+ "node_modules/@webpack-cli/serve": {
1030+ "version": "1.6.1",
1031+ "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.1.tgz",
1032+ "integrity": "sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw==",
1033+ "dev": true,
1034+ "peerDependencies": {
1035+ "webpack-cli": "4.x.x"
1036+ },
1037+ "peerDependenciesMeta": {
1038+ "webpack-dev-server": {
1039+ "optional": true
1040+ }
1041+ }
1042+ },
1043+ "node_modules/@xtuc/ieee754": {
1044+ "version": "1.2.0",
1045+ "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
1046+ "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
1047+ "dev": true
1048+ },
1049+ "node_modules/@xtuc/long": {
1050+ "version": "4.2.2",
1051+ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
1052+ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
1053+ "dev": true
1054+ },
1055+ "node_modules/abab": {
1056+ "version": "2.0.5",
1057+ "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz",
1058+ "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q=="
1059+ },
1060+ "node_modules/accepts": {
1061+ "version": "1.3.8",
1062+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
1063+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
1064+ "dependencies": {
1065+ "mime-types": "~2.1.34",
1066+ "negotiator": "0.6.3"
1067+ },
1068+ "engines": {
1069+ "node": ">= 0.6"
1070+ }
1071+ },
1072+ "node_modules/acorn": {
1073+ "version": "8.7.0",
1074+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
1075+ "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
1076+ "bin": {
1077+ "acorn": "bin/acorn"
1078+ },
1079+ "engines": {
1080+ "node": ">=0.4.0"
1081+ }
1082+ },
1083+ "node_modules/acorn-globals": {
1084+ "version": "6.0.0",
1085+ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
1086+ "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
1087+ "dependencies": {
1088+ "acorn": "^7.1.1",
1089+ "acorn-walk": "^7.1.1"
1090+ }
1091+ },
1092+ "node_modules/acorn-globals/node_modules/acorn": {
1093+ "version": "7.4.1",
1094+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
1095+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
1096+ "bin": {
1097+ "acorn": "bin/acorn"
1098+ },
1099+ "engines": {
1100+ "node": ">=0.4.0"
1101+ }
1102+ },
1103+ "node_modules/acorn-import-assertions": {
1104+ "version": "1.8.0",
1105+ "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz",
1106+ "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==",
1107+ "dev": true,
1108+ "peerDependencies": {
1109+ "acorn": "^8"
1110+ }
1111+ },
1112+ "node_modules/acorn-jsx": {
1113+ "version": "5.3.2",
1114+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
1115+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
1116+ "dev": true,
1117+ "peerDependencies": {
1118+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
1119+ }
1120+ },
1121+ "node_modules/acorn-walk": {
1122+ "version": "7.2.0",
1123+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
1124+ "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
1125+ "engines": {
1126+ "node": ">=0.4.0"
1127+ }
1128+ },
1129+ "node_modules/agent-base": {
1130+ "version": "6.0.2",
1131+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
1132+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
1133+ "dependencies": {
1134+ "debug": "4"
1135+ },
1136+ "engines": {
1137+ "node": ">= 6.0.0"
1138+ }
1139+ },
1140+ "node_modules/aggregate-error": {
1141+ "version": "3.1.0",
1142+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
1143+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
1144+ "dev": true,
1145+ "dependencies": {
1146+ "clean-stack": "^2.0.0",
1147+ "indent-string": "^4.0.0"
1148+ },
1149+ "engines": {
1150+ "node": ">=8"
1151+ }
1152+ },
1153+ "node_modules/ajv": {
1154+ "version": "6.12.6",
1155+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
1156+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
1157+ "dev": true,
1158+ "dependencies": {
1159+ "fast-deep-equal": "^3.1.1",
1160+ "fast-json-stable-stringify": "^2.0.0",
1161+ "json-schema-traverse": "^0.4.1",
1162+ "uri-js": "^4.2.2"
1163+ },
1164+ "funding": {
1165+ "type": "github",
1166+ "url": "https://github.com/sponsors/epoberezkin"
1167+ }
1168+ },
1169+ "node_modules/ajv-formats": {
1170+ "version": "2.1.1",
1171+ "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
1172+ "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
1173+ "dev": true,
1174+ "dependencies": {
1175+ "ajv": "^8.0.0"
1176+ },
1177+ "peerDependencies": {
1178+ "ajv": "^8.0.0"
1179+ },
1180+ "peerDependenciesMeta": {
1181+ "ajv": {
1182+ "optional": true
1183+ }
1184+ }
1185+ },
1186+ "node_modules/ajv-formats/node_modules/ajv": {
1187+ "version": "8.11.0",
1188+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz",
1189+ "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==",
1190+ "dev": true,
1191+ "dependencies": {
1192+ "fast-deep-equal": "^3.1.1",
1193+ "json-schema-traverse": "^1.0.0",
1194+ "require-from-string": "^2.0.2",
1195+ "uri-js": "^4.2.2"
1196+ },
1197+ "funding": {
1198+ "type": "github",
1199+ "url": "https://github.com/sponsors/epoberezkin"
1200+ }
1201+ },
1202+ "node_modules/ajv-formats/node_modules/json-schema-traverse": {
1203+ "version": "1.0.0",
1204+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
1205+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
1206+ "dev": true
1207+ },
1208+ "node_modules/ajv-keywords": {
1209+ "version": "3.5.2",
1210+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
1211+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
1212+ "dev": true,
1213+ "peerDependencies": {
1214+ "ajv": "^6.9.1"
1215+ }
1216+ },
1217+ "node_modules/ansi-escapes": {
1218+ "version": "4.3.2",
1219+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
1220+ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
1221+ "dependencies": {
1222+ "type-fest": "^0.21.3"
1223+ },
1224+ "engines": {
1225+ "node": ">=8"
1226+ },
1227+ "funding": {
1228+ "url": "https://github.com/sponsors/sindresorhus"
1229+ }
1230+ },
1231+ "node_modules/ansi-escapes/node_modules/type-fest": {
1232+ "version": "0.21.3",
1233+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
1234+ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
1235+ "engines": {
1236+ "node": ">=10"
1237+ },
1238+ "funding": {
1239+ "url": "https://github.com/sponsors/sindresorhus"
1240+ }
1241+ },
1242+ "node_modules/ansi-regex": {
1243+ "version": "5.0.1",
1244+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
1245+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
1246+ "engines": {
1247+ "node": ">=8"
1248+ }
1249+ },
1250+ "node_modules/ansi-styles": {
1251+ "version": "4.3.0",
1252+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
1253+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
1254+ "dependencies": {
1255+ "color-convert": "^2.0.1"
1256+ },
1257+ "engines": {
1258+ "node": ">=8"
1259+ },
1260+ "funding": {
1261+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
1262+ }
1263+ },
1264+ "node_modules/append-field": {
1265+ "version": "1.0.0",
1266+ "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz",
1267+ "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY="
1268+ },
1269+ "node_modules/aproba": {
1270+ "version": "1.2.0",
1271+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
1272+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
1273+ "dev": true
1274+ },
1275+ "node_modules/are-we-there-yet": {
1276+ "version": "1.1.7",
1277+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz",
1278+ "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==",
1279+ "dev": true,
1280+ "dependencies": {
1281+ "delegates": "^1.0.0",
1282+ "readable-stream": "^2.0.6"
1283+ }
1284+ },
1285+ "node_modules/arg": {
1286+ "version": "4.1.3",
1287+ "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
1288+ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
1289+ "dev": true
1290+ },
1291+ "node_modules/argparse": {
1292+ "version": "2.0.1",
1293+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
1294+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
1295+ "dev": true
1296+ },
1297+ "node_modules/array-includes": {
1298+ "version": "3.1.4",
1299+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz",
1300+ "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==",
1301+ "dev": true,
1302+ "dependencies": {
1303+ "call-bind": "^1.0.2",
1304+ "define-properties": "^1.1.3",
1305+ "es-abstract": "^1.19.1",
1306+ "get-intrinsic": "^1.1.1",
1307+ "is-string": "^1.0.7"
1308+ },
1309+ "engines": {
1310+ "node": ">= 0.4"
1311+ },
1312+ "funding": {
1313+ "url": "https://github.com/sponsors/ljharb"
1314+ }
1315+ },
1316+ "node_modules/array-union": {
1317+ "version": "2.1.0",
1318+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
1319+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
1320+ "dev": true,
1321+ "engines": {
1322+ "node": ">=8"
1323+ }
1324+ },
1325+ "node_modules/array-uniq": {
1326+ "version": "1.0.3",
1327+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
1328+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
1329+ "dev": true,
1330+ "engines": {
1331+ "node": ">=0.10.0"
1332+ }
1333+ },
1334+ "node_modules/array.prototype.flat": {
1335+ "version": "1.2.5",
1336+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz",
1337+ "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==",
1338+ "dev": true,
1339+ "dependencies": {
1340+ "call-bind": "^1.0.2",
1341+ "define-properties": "^1.1.3",
1342+ "es-abstract": "^1.19.0"
1343+ },
1344+ "engines": {
1345+ "node": ">= 0.4"
1346+ },
1347+ "funding": {
1348+ "url": "https://github.com/sponsors/ljharb"
1349+ }
1350+ },
1351+ "node_modules/astral-regex": {
1352+ "version": "2.0.0",
1353+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
1354+ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
1355+ "dev": true,
1356+ "engines": {
1357+ "node": ">=8"
1358+ }
1359+ },
1360+ "node_modules/asynckit": {
1361+ "version": "0.4.0",
1362+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
1363+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
1364+ },
1365+ "node_modules/at-least-node": {
1366+ "version": "1.0.0",
1367+ "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
1368+ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
1369+ "dev": true,
1370+ "engines": {
1371+ "node": ">= 4.0.0"
1372+ }
1373+ },
1374+ "node_modules/atob": {
1375+ "version": "2.1.2",
1376+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
1377+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
1378+ "dev": true,
1379+ "bin": {
1380+ "atob": "bin/atob.js"
1381+ },
1382+ "engines": {
1383+ "node": ">= 4.5.0"
1384+ }
1385+ },
1386+ "node_modules/balanced-match": {
1387+ "version": "1.0.2",
1388+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
1389+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
1390+ "dev": true
1391+ },
1392+ "node_modules/base64-js": {
1393+ "version": "1.5.1",
1394+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
1395+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
1396+ "dev": true,
1397+ "funding": [
1398+ {
1399+ "type": "github",
1400+ "url": "https://github.com/sponsors/feross"
1401+ },
1402+ {
1403+ "type": "patreon",
1404+ "url": "https://www.patreon.com/feross"
1405+ },
1406+ {
1407+ "type": "consulting",
1408+ "url": "https://feross.org/support"
1409+ }
1410+ ]
1411+ },
1412+ "node_modules/big-integer": {
1413+ "version": "1.6.48",
1414+ "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz",
1415+ "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==",
1416+ "engines": {
1417+ "node": ">=0.6"
1418+ }
1419+ },
1420+ "node_modules/big.js": {
1421+ "version": "5.2.2",
1422+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
1423+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
1424+ "dev": true,
1425+ "engines": {
1426+ "node": "*"
1427+ }
1428+ },
1429+ "node_modules/bl": {
1430+ "version": "4.1.0",
1431+ "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
1432+ "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
1433+ "dev": true,
1434+ "dependencies": {
1435+ "buffer": "^5.5.0",
1436+ "inherits": "^2.0.4",
1437+ "readable-stream": "^3.4.0"
1438+ }
1439+ },
1440+ "node_modules/bl/node_modules/readable-stream": {
1441+ "version": "3.6.0",
1442+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
1443+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
1444+ "dev": true,
1445+ "dependencies": {
1446+ "inherits": "^2.0.3",
1447+ "string_decoder": "^1.1.1",
1448+ "util-deprecate": "^1.0.1"
1449+ },
1450+ "engines": {
1451+ "node": ">= 6"
1452+ }
1453+ },
1454+ "node_modules/brace-expansion": {
1455+ "version": "1.1.11",
1456+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
1457+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
1458+ "dev": true,
1459+ "dependencies": {
1460+ "balanced-match": "^1.0.0",
1461+ "concat-map": "0.0.1"
1462+ }
1463+ },
1464+ "node_modules/braces": {
1465+ "version": "3.0.2",
1466+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
1467+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
1468+ "dev": true,
1469+ "dependencies": {
1470+ "fill-range": "^7.0.1"
1471+ },
1472+ "engines": {
1473+ "node": ">=8"
1474+ }
1475+ },
1476+ "node_modules/browser-hrtime": {
1477+ "version": "1.1.8",
1478+ "resolved": "https://registry.npmjs.org/browser-hrtime/-/browser-hrtime-1.1.8.tgz",
1479+ "integrity": "sha512-kzXheikaJsBtzUBlyVtPIY5r0soQePzjwVwT4IlDpU2RvfB5Py52gpU98M77rgqMCheoSSZvrcrdj3t6cZ3suA=="
1480+ },
1481+ "node_modules/browser-process-hrtime": {
1482+ "version": "1.0.0",
1483+ "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
1484+ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow=="
1485+ },
1486+ "node_modules/browserslist": {
1487+ "version": "4.20.2",
1488+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz",
1489+ "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==",
1490+ "dev": true,
1491+ "funding": [
1492+ {
1493+ "type": "opencollective",
1494+ "url": "https://opencollective.com/browserslist"
1495+ },
1496+ {
1497+ "type": "tidelift",
1498+ "url": "https://tidelift.com/funding/github/npm/browserslist"
1499+ }
1500+ ],
1501+ "dependencies": {
1502+ "caniuse-lite": "^1.0.30001317",
1503+ "electron-to-chromium": "^1.4.84",
1504+ "escalade": "^3.1.1",
1505+ "node-releases": "^2.0.2",
1506+ "picocolors": "^1.0.0"
1507+ },
1508+ "bin": {
1509+ "browserslist": "cli.js"
1510+ },
1511+ "engines": {
1512+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
1513+ }
1514+ },
1515+ "node_modules/buffer": {
1516+ "version": "5.7.1",
1517+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
1518+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
1519+ "dev": true,
1520+ "funding": [
1521+ {
1522+ "type": "github",
1523+ "url": "https://github.com/sponsors/feross"
1524+ },
1525+ {
1526+ "type": "patreon",
1527+ "url": "https://www.patreon.com/feross"
1528+ },
1529+ {
1530+ "type": "consulting",
1531+ "url": "https://feross.org/support"
1532+ }
1533+ ],
1534+ "dependencies": {
1535+ "base64-js": "^1.3.1",
1536+ "ieee754": "^1.1.13"
1537+ }
1538+ },
1539+ "node_modules/buffer-from": {
1540+ "version": "1.1.2",
1541+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
1542+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
1543+ },
1544+ "node_modules/busboy": {
1545+ "version": "0.2.14",
1546+ "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz",
1547+ "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=",
1548+ "dependencies": {
1549+ "dicer": "0.2.5",
1550+ "readable-stream": "1.1.x"
1551+ },
1552+ "engines": {
1553+ "node": ">=0.8.0"
1554+ }
1555+ },
1556+ "node_modules/busboy/node_modules/isarray": {
1557+ "version": "0.0.1",
1558+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
1559+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
1560+ },
1561+ "node_modules/busboy/node_modules/readable-stream": {
1562+ "version": "1.1.14",
1563+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
1564+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
1565+ "dependencies": {
1566+ "core-util-is": "~1.0.0",
1567+ "inherits": "~2.0.1",
1568+ "isarray": "0.0.1",
1569+ "string_decoder": "~0.10.x"
1570+ }
1571+ },
1572+ "node_modules/busboy/node_modules/string_decoder": {
1573+ "version": "0.10.31",
1574+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
1575+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
1576+ },
1577+ "node_modules/bytes": {
1578+ "version": "3.1.2",
1579+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
1580+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
1581+ "engines": {
1582+ "node": ">= 0.8"
1583+ }
1584+ },
1585+ "node_modules/cache-content-type": {
1586+ "version": "1.0.1",
1587+ "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz",
1588+ "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==",
1589+ "dependencies": {
1590+ "mime-types": "^2.1.18",
1591+ "ylru": "^1.2.0"
1592+ },
1593+ "engines": {
1594+ "node": ">= 6.0.0"
1595+ }
1596+ },
1597+ "node_modules/call-bind": {
1598+ "version": "1.0.2",
1599+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
1600+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
1601+ "dependencies": {
1602+ "function-bind": "^1.1.1",
1603+ "get-intrinsic": "^1.0.2"
1604+ },
1605+ "funding": {
1606+ "url": "https://github.com/sponsors/ljharb"
1607+ }
1608+ },
1609+ "node_modules/callsites": {
1610+ "version": "3.1.0",
1611+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
1612+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
1613+ "dev": true,
1614+ "engines": {
1615+ "node": ">=6"
1616+ }
1617+ },
1618+ "node_modules/caniuse-lite": {
1619+ "version": "1.0.30001327",
1620+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001327.tgz",
1621+ "integrity": "sha512-1/Cg4jlD9qjZzhbzkzEaAC2JHsP0WrOc8Rd/3a3LuajGzGWR/hD7TVyvq99VqmTy99eVh8Zkmdq213OgvgXx7w==",
1622+ "dev": true,
1623+ "funding": [
1624+ {
1625+ "type": "opencollective",
1626+ "url": "https://opencollective.com/browserslist"
1627+ },
1628+ {
1629+ "type": "tidelift",
1630+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
1631+ }
1632+ ]
1633+ },
1634+ "node_modules/chalk": {
1635+ "version": "4.1.2",
1636+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
1637+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
1638+ "dependencies": {
1639+ "ansi-styles": "^4.1.0",
1640+ "supports-color": "^7.1.0"
1641+ },
1642+ "engines": {
1643+ "node": ">=10"
1644+ },
1645+ "funding": {
1646+ "url": "https://github.com/chalk/chalk?sponsor=1"
1647+ }
1648+ },
1649+ "node_modules/chardet": {
1650+ "version": "0.7.0",
1651+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
1652+ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA=="
1653+ },
1654+ "node_modules/chownr": {
1655+ "version": "1.1.4",
1656+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
1657+ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
1658+ "dev": true
1659+ },
1660+ "node_modules/chrome-trace-event": {
1661+ "version": "1.0.3",
1662+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
1663+ "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
1664+ "dev": true,
1665+ "engines": {
1666+ "node": ">=6.0"
1667+ }
1668+ },
1669+ "node_modules/clean-stack": {
1670+ "version": "2.2.0",
1671+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
1672+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
1673+ "dev": true,
1674+ "engines": {
1675+ "node": ">=6"
1676+ }
1677+ },
1678+ "node_modules/clean-webpack-plugin": {
1679+ "version": "4.0.0",
1680+ "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-4.0.0.tgz",
1681+ "integrity": "sha512-WuWE1nyTNAyW5T7oNyys2EN0cfP2fdRxhxnIQWiAp0bMabPdHhoGxM8A6YL2GhqwgrPnnaemVE7nv5XJ2Fhh2w==",
1682+ "dev": true,
1683+ "dependencies": {
1684+ "del": "^4.1.1"
1685+ },
1686+ "engines": {
1687+ "node": ">=10.0.0"
1688+ },
1689+ "peerDependencies": {
1690+ "webpack": ">=4.0.0 <6.0.0"
1691+ }
1692+ },
1693+ "node_modules/cli-cursor": {
1694+ "version": "3.1.0",
1695+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
1696+ "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
1697+ "dependencies": {
1698+ "restore-cursor": "^3.1.0"
1699+ },
1700+ "engines": {
1701+ "node": ">=8"
1702+ }
1703+ },
1704+ "node_modules/cli-truncate": {
1705+ "version": "3.1.0",
1706+ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz",
1707+ "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==",
1708+ "dev": true,
1709+ "dependencies": {
1710+ "slice-ansi": "^5.0.0",
1711+ "string-width": "^5.0.0"
1712+ },
1713+ "engines": {
1714+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
1715+ },
1716+ "funding": {
1717+ "url": "https://github.com/sponsors/sindresorhus"
1718+ }
1719+ },
1720+ "node_modules/cli-truncate/node_modules/ansi-regex": {
1721+ "version": "6.0.1",
1722+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
1723+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
1724+ "dev": true,
1725+ "engines": {
1726+ "node": ">=12"
1727+ },
1728+ "funding": {
1729+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
1730+ }
1731+ },
1732+ "node_modules/cli-truncate/node_modules/emoji-regex": {
1733+ "version": "9.2.2",
1734+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
1735+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
1736+ "dev": true
1737+ },
1738+ "node_modules/cli-truncate/node_modules/string-width": {
1739+ "version": "5.1.2",
1740+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
1741+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
1742+ "dev": true,
1743+ "dependencies": {
1744+ "eastasianwidth": "^0.2.0",
1745+ "emoji-regex": "^9.2.2",
1746+ "strip-ansi": "^7.0.1"
1747+ },
1748+ "engines": {
1749+ "node": ">=12"
1750+ },
1751+ "funding": {
1752+ "url": "https://github.com/sponsors/sindresorhus"
1753+ }
1754+ },
1755+ "node_modules/cli-truncate/node_modules/strip-ansi": {
1756+ "version": "7.0.1",
1757+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz",
1758+ "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==",
1759+ "dev": true,
1760+ "dependencies": {
1761+ "ansi-regex": "^6.0.1"
1762+ },
1763+ "engines": {
1764+ "node": ">=12"
1765+ },
1766+ "funding": {
1767+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
1768+ }
1769+ },
1770+ "node_modules/cli-width": {
1771+ "version": "3.0.0",
1772+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz",
1773+ "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==",
1774+ "engines": {
1775+ "node": ">= 10"
1776+ }
1777+ },
1778+ "node_modules/cliui": {
1779+ "version": "7.0.4",
1780+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
1781+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
1782+ "dev": true,
1783+ "dependencies": {
1784+ "string-width": "^4.2.0",
1785+ "strip-ansi": "^6.0.0",
1786+ "wrap-ansi": "^7.0.0"
1787+ }
1788+ },
1789+ "node_modules/clone-deep": {
1790+ "version": "4.0.1",
1791+ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
1792+ "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
1793+ "dev": true,
1794+ "dependencies": {
1795+ "is-plain-object": "^2.0.4",
1796+ "kind-of": "^6.0.2",
1797+ "shallow-clone": "^3.0.0"
1798+ },
1799+ "engines": {
1800+ "node": ">=6"
1801+ }
1802+ },
1803+ "node_modules/co": {
1804+ "version": "4.6.0",
1805+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
1806+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
1807+ "engines": {
1808+ "iojs": ">= 1.0.0",
1809+ "node": ">= 0.12.0"
1810+ }
1811+ },
1812+ "node_modules/co-body": {
1813+ "version": "6.1.0",
1814+ "resolved": "https://registry.npmjs.org/co-body/-/co-body-6.1.0.tgz",
1815+ "integrity": "sha512-m7pOT6CdLN7FuXUcpuz/8lfQ/L77x8SchHCF4G0RBTJO20Wzmhn5Sp4/5WsKy8OSpifBSUrmg83qEqaDHdyFuQ==",
1816+ "dependencies": {
1817+ "inflation": "^2.0.0",
1818+ "qs": "^6.5.2",
1819+ "raw-body": "^2.3.3",
1820+ "type-is": "^1.6.16"
1821+ }
1822+ },
1823+ "node_modules/code-point-at": {
1824+ "version": "1.1.0",
1825+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
1826+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
1827+ "dev": true,
1828+ "engines": {
1829+ "node": ">=0.10.0"
1830+ }
1831+ },
1832+ "node_modules/color-convert": {
1833+ "version": "2.0.1",
1834+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
1835+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
1836+ "dependencies": {
1837+ "color-name": "~1.1.4"
1838+ },
1839+ "engines": {
1840+ "node": ">=7.0.0"
1841+ }
1842+ },
1843+ "node_modules/color-name": {
1844+ "version": "1.1.4",
1845+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
1846+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
1847+ },
1848+ "node_modules/colorette": {
1849+ "version": "2.0.16",
1850+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz",
1851+ "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==",
1852+ "dev": true
1853+ },
1854+ "node_modules/combined-stream": {
1855+ "version": "1.0.8",
1856+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
1857+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
1858+ "dependencies": {
1859+ "delayed-stream": "~1.0.0"
1860+ },
1861+ "engines": {
1862+ "node": ">= 0.8"
1863+ }
1864+ },
1865+ "node_modules/commander": {
1866+ "version": "7.2.0",
1867+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
1868+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
1869+ "engines": {
1870+ "node": ">= 10"
1871+ }
1872+ },
1873+ "node_modules/concat-map": {
1874+ "version": "0.0.1",
1875+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
1876+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
1877+ "dev": true
1878+ },
1879+ "node_modules/concat-stream": {
1880+ "version": "1.6.2",
1881+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
1882+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
1883+ "engines": [
1884+ "node >= 0.8"
1885+ ],
1886+ "dependencies": {
1887+ "buffer-from": "^1.0.0",
1888+ "inherits": "^2.0.3",
1889+ "readable-stream": "^2.2.2",
1890+ "typedarray": "^0.0.6"
1891+ }
1892+ },
1893+ "node_modules/console-control-strings": {
1894+ "version": "1.1.0",
1895+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
1896+ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
1897+ "dev": true
1898+ },
1899+ "node_modules/content-disposition": {
1900+ "version": "0.5.4",
1901+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
1902+ "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
1903+ "dependencies": {
1904+ "safe-buffer": "5.2.1"
1905+ },
1906+ "engines": {
1907+ "node": ">= 0.6"
1908+ }
1909+ },
1910+ "node_modules/content-type": {
1911+ "version": "1.0.4",
1912+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
1913+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
1914+ "engines": {
1915+ "node": ">= 0.6"
1916+ }
1917+ },
1918+ "node_modules/cookies": {
1919+ "version": "0.8.0",
1920+ "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.8.0.tgz",
1921+ "integrity": "sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==",
1922+ "dependencies": {
1923+ "depd": "~2.0.0",
1924+ "keygrip": "~1.1.0"
1925+ },
1926+ "engines": {
1927+ "node": ">= 0.8"
1928+ }
1929+ },
1930+ "node_modules/cookies/node_modules/depd": {
1931+ "version": "2.0.0",
1932+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
1933+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
1934+ "engines": {
1935+ "node": ">= 0.8"
1936+ }
1937+ },
1938+ "node_modules/copy-to": {
1939+ "version": "2.0.1",
1940+ "resolved": "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz",
1941+ "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU="
1942+ },
1943+ "node_modules/copy-webpack-plugin": {
1944+ "version": "10.2.4",
1945+ "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.2.4.tgz",
1946+ "integrity": "sha512-xFVltahqlsRcyyJqQbDY6EYTtyQZF9rf+JPjwHObLdPFMEISqkFkr7mFoVOC6BfYS/dNThyoQKvziugm+OnwBg==",
1947+ "dev": true,
1948+ "dependencies": {
1949+ "fast-glob": "^3.2.7",
1950+ "glob-parent": "^6.0.1",
1951+ "globby": "^12.0.2",
1952+ "normalize-path": "^3.0.0",
1953+ "schema-utils": "^4.0.0",
1954+ "serialize-javascript": "^6.0.0"
1955+ },
1956+ "engines": {
1957+ "node": ">= 12.20.0"
1958+ },
1959+ "funding": {
1960+ "type": "opencollective",
1961+ "url": "https://opencollective.com/webpack"
1962+ },
1963+ "peerDependencies": {
1964+ "webpack": "^5.1.0"
1965+ }
1966+ },
1967+ "node_modules/copy-webpack-plugin/node_modules/array-union": {
1968+ "version": "3.0.1",
1969+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz",
1970+ "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==",
1971+ "dev": true,
1972+ "engines": {
1973+ "node": ">=12"
1974+ },
1975+ "funding": {
1976+ "url": "https://github.com/sponsors/sindresorhus"
1977+ }
1978+ },
1979+ "node_modules/copy-webpack-plugin/node_modules/globby": {
1980+ "version": "12.2.0",
1981+ "resolved": "https://registry.npmjs.org/globby/-/globby-12.2.0.tgz",
1982+ "integrity": "sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA==",
1983+ "dev": true,
1984+ "dependencies": {
1985+ "array-union": "^3.0.1",
1986+ "dir-glob": "^3.0.1",
1987+ "fast-glob": "^3.2.7",
1988+ "ignore": "^5.1.9",
1989+ "merge2": "^1.4.1",
1990+ "slash": "^4.0.0"
1991+ },
1992+ "engines": {
1993+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
1994+ },
1995+ "funding": {
1996+ "url": "https://github.com/sponsors/sindresorhus"
1997+ }
1998+ },
1999+ "node_modules/copy-webpack-plugin/node_modules/slash": {
2000+ "version": "4.0.0",
2001+ "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
2002+ "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==",
2003+ "dev": true,
2004+ "engines": {
2005+ "node": ">=12"
2006+ },
2007+ "funding": {
2008+ "url": "https://github.com/sponsors/sindresorhus"
2009+ }
2010+ },
2011+ "node_modules/core-util-is": {
2012+ "version": "1.0.3",
2013+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
2014+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
2015+ },
2016+ "node_modules/create-require": {
2017+ "version": "1.1.1",
2018+ "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
2019+ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
2020+ "dev": true
2021+ },
2022+ "node_modules/cross-env": {
2023+ "version": "7.0.3",
2024+ "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz",
2025+ "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==",
2026+ "dev": true,
2027+ "dependencies": {
2028+ "cross-spawn": "^7.0.1"
2029+ },
2030+ "bin": {
2031+ "cross-env": "src/bin/cross-env.js",
2032+ "cross-env-shell": "src/bin/cross-env-shell.js"
2033+ },
2034+ "engines": {
2035+ "node": ">=10.14",
2036+ "npm": ">=6",
2037+ "yarn": ">=1"
2038+ }
2039+ },
2040+ "node_modules/cross-spawn": {
2041+ "version": "7.0.3",
2042+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
2043+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
2044+ "dev": true,
2045+ "dependencies": {
2046+ "path-key": "^3.1.0",
2047+ "shebang-command": "^2.0.0",
2048+ "which": "^2.0.1"
2049+ },
2050+ "engines": {
2051+ "node": ">= 8"
2052+ }
2053+ },
2054+ "node_modules/cssom": {
2055+ "version": "0.4.4",
2056+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz",
2057+ "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw=="
2058+ },
2059+ "node_modules/cssstyle": {
2060+ "version": "2.3.0",
2061+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
2062+ "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
2063+ "dependencies": {
2064+ "cssom": "~0.3.6"
2065+ },
2066+ "engines": {
2067+ "node": ">=8"
2068+ }
2069+ },
2070+ "node_modules/cssstyle/node_modules/cssom": {
2071+ "version": "0.3.8",
2072+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
2073+ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg=="
2074+ },
2075+ "node_modules/data-urls": {
2076+ "version": "2.0.0",
2077+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz",
2078+ "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==",
2079+ "dependencies": {
2080+ "abab": "^2.0.3",
2081+ "whatwg-mimetype": "^2.3.0",
2082+ "whatwg-url": "^8.0.0"
2083+ },
2084+ "engines": {
2085+ "node": ">=10"
2086+ }
2087+ },
2088+ "node_modules/debug": {
2089+ "version": "4.3.4",
2090+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
2091+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
2092+ "dependencies": {
2093+ "ms": "2.1.2"
2094+ },
2095+ "engines": {
2096+ "node": ">=6.0"
2097+ },
2098+ "peerDependenciesMeta": {
2099+ "supports-color": {
2100+ "optional": true
2101+ }
2102+ }
2103+ },
2104+ "node_modules/decimal.js": {
2105+ "version": "10.3.1",
2106+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz",
2107+ "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ=="
2108+ },
2109+ "node_modules/decode-uri-component": {
2110+ "version": "0.2.0",
2111+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
2112+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
2113+ "dev": true,
2114+ "engines": {
2115+ "node": ">=0.10"
2116+ }
2117+ },
2118+ "node_modules/decompress-response": {
2119+ "version": "4.2.1",
2120+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz",
2121+ "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==",
2122+ "dev": true,
2123+ "dependencies": {
2124+ "mimic-response": "^2.0.0"
2125+ },
2126+ "engines": {
2127+ "node": ">=8"
2128+ }
2129+ },
2130+ "node_modules/deep-equal": {
2131+ "version": "1.0.1",
2132+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
2133+ "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU="
2134+ },
2135+ "node_modules/deep-extend": {
2136+ "version": "0.6.0",
2137+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
2138+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
2139+ "dev": true,
2140+ "engines": {
2141+ "node": ">=4.0.0"
2142+ }
2143+ },
2144+ "node_modules/deep-is": {
2145+ "version": "0.1.4",
2146+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
2147+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
2148+ },
2149+ "node_modules/define-lazy-prop": {
2150+ "version": "2.0.0",
2151+ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
2152+ "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
2153+ "engines": {
2154+ "node": ">=8"
2155+ }
2156+ },
2157+ "node_modules/define-properties": {
2158+ "version": "1.1.3",
2159+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
2160+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
2161+ "dev": true,
2162+ "dependencies": {
2163+ "object-keys": "^1.0.12"
2164+ },
2165+ "engines": {
2166+ "node": ">= 0.4"
2167+ }
2168+ },
2169+ "node_modules/del": {
2170+ "version": "4.1.1",
2171+ "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz",
2172+ "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==",
2173+ "dev": true,
2174+ "dependencies": {
2175+ "@types/glob": "^7.1.1",
2176+ "globby": "^6.1.0",
2177+ "is-path-cwd": "^2.0.0",
2178+ "is-path-in-cwd": "^2.0.0",
2179+ "p-map": "^2.0.0",
2180+ "pify": "^4.0.1",
2181+ "rimraf": "^2.6.3"
2182+ },
2183+ "engines": {
2184+ "node": ">=6"
2185+ }
2186+ },
2187+ "node_modules/del/node_modules/array-union": {
2188+ "version": "1.0.2",
2189+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
2190+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
2191+ "dev": true,
2192+ "dependencies": {
2193+ "array-uniq": "^1.0.1"
2194+ },
2195+ "engines": {
2196+ "node": ">=0.10.0"
2197+ }
2198+ },
2199+ "node_modules/del/node_modules/globby": {
2200+ "version": "6.1.0",
2201+ "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
2202+ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
2203+ "dev": true,
2204+ "dependencies": {
2205+ "array-union": "^1.0.1",
2206+ "glob": "^7.0.3",
2207+ "object-assign": "^4.0.1",
2208+ "pify": "^2.0.0",
2209+ "pinkie-promise": "^2.0.0"
2210+ },
2211+ "engines": {
2212+ "node": ">=0.10.0"
2213+ }
2214+ },
2215+ "node_modules/del/node_modules/globby/node_modules/pify": {
2216+ "version": "2.3.0",
2217+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
2218+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
2219+ "dev": true,
2220+ "engines": {
2221+ "node": ">=0.10.0"
2222+ }
2223+ },
2224+ "node_modules/del/node_modules/rimraf": {
2225+ "version": "2.7.1",
2226+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
2227+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
2228+ "dev": true,
2229+ "dependencies": {
2230+ "glob": "^7.1.3"
2231+ },
2232+ "bin": {
2233+ "rimraf": "bin.js"
2234+ }
2235+ },
2236+ "node_modules/delayed-stream": {
2237+ "version": "1.0.0",
2238+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
2239+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
2240+ "engines": {
2241+ "node": ">=0.4.0"
2242+ }
2243+ },
2244+ "node_modules/delegates": {
2245+ "version": "1.0.0",
2246+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
2247+ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
2248+ },
2249+ "node_modules/depd": {
2250+ "version": "1.1.2",
2251+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
2252+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
2253+ "engines": {
2254+ "node": ">= 0.6"
2255+ }
2256+ },
2257+ "node_modules/destroy": {
2258+ "version": "1.2.0",
2259+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
2260+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
2261+ "engines": {
2262+ "node": ">= 0.8",
2263+ "npm": "1.2.8000 || >= 1.4.16"
2264+ }
2265+ },
2266+ "node_modules/detect-libc": {
2267+ "version": "1.0.3",
2268+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
2269+ "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
2270+ "dev": true,
2271+ "bin": {
2272+ "detect-libc": "bin/detect-libc.js"
2273+ },
2274+ "engines": {
2275+ "node": ">=0.10"
2276+ }
2277+ },
2278+ "node_modules/dicer": {
2279+ "version": "0.2.5",
2280+ "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz",
2281+ "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=",
2282+ "dependencies": {
2283+ "readable-stream": "1.1.x",
2284+ "streamsearch": "0.1.2"
2285+ },
2286+ "engines": {
2287+ "node": ">=0.8.0"
2288+ }
2289+ },
2290+ "node_modules/dicer/node_modules/isarray": {
2291+ "version": "0.0.1",
2292+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
2293+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
2294+ },
2295+ "node_modules/dicer/node_modules/readable-stream": {
2296+ "version": "1.1.14",
2297+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
2298+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
2299+ "dependencies": {
2300+ "core-util-is": "~1.0.0",
2301+ "inherits": "~2.0.1",
2302+ "isarray": "0.0.1",
2303+ "string_decoder": "~0.10.x"
2304+ }
2305+ },
2306+ "node_modules/dicer/node_modules/string_decoder": {
2307+ "version": "0.10.31",
2308+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
2309+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
2310+ },
2311+ "node_modules/diff": {
2312+ "version": "4.0.2",
2313+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
2314+ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
2315+ "dev": true,
2316+ "engines": {
2317+ "node": ">=0.3.1"
2318+ }
2319+ },
2320+ "node_modules/dir-glob": {
2321+ "version": "3.0.1",
2322+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
2323+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
2324+ "dev": true,
2325+ "dependencies": {
2326+ "path-type": "^4.0.0"
2327+ },
2328+ "engines": {
2329+ "node": ">=8"
2330+ }
2331+ },
2332+ "node_modules/doctrine": {
2333+ "version": "3.0.0",
2334+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
2335+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
2336+ "dev": true,
2337+ "dependencies": {
2338+ "esutils": "^2.0.2"
2339+ },
2340+ "engines": {
2341+ "node": ">=6.0.0"
2342+ }
2343+ },
2344+ "node_modules/domexception": {
2345+ "version": "2.0.1",
2346+ "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz",
2347+ "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==",
2348+ "dependencies": {
2349+ "webidl-conversions": "^5.0.0"
2350+ },
2351+ "engines": {
2352+ "node": ">=8"
2353+ }
2354+ },
2355+ "node_modules/domexception/node_modules/webidl-conversions": {
2356+ "version": "5.0.0",
2357+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz",
2358+ "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==",
2359+ "engines": {
2360+ "node": ">=8"
2361+ }
2362+ },
2363+ "node_modules/eastasianwidth": {
2364+ "version": "0.2.0",
2365+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
2366+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
2367+ "dev": true
2368+ },
2369+ "node_modules/ee-first": {
2370+ "version": "1.1.1",
2371+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
2372+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
2373+ },
2374+ "node_modules/electron-to-chromium": {
2375+ "version": "1.4.106",
2376+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.106.tgz",
2377+ "integrity": "sha512-ZYfpVLULm67K7CaaGP7DmjyeMY4naxsbTy+syVVxT6QHI1Ww8XbJjmr9fDckrhq44WzCrcC5kH3zGpdusxwwqg==",
2378+ "dev": true
2379+ },
2380+ "node_modules/emoji-regex": {
2381+ "version": "8.0.0",
2382+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
2383+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
2384+ },
2385+ "node_modules/emojis-list": {
2386+ "version": "3.0.0",
2387+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
2388+ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
2389+ "dev": true,
2390+ "engines": {
2391+ "node": ">= 4"
2392+ }
2393+ },
2394+ "node_modules/encodeurl": {
2395+ "version": "1.0.2",
2396+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
2397+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
2398+ "engines": {
2399+ "node": ">= 0.8"
2400+ }
2401+ },
2402+ "node_modules/end-of-stream": {
2403+ "version": "1.4.4",
2404+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
2405+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
2406+ "dev": true,
2407+ "dependencies": {
2408+ "once": "^1.4.0"
2409+ }
2410+ },
2411+ "node_modules/enhanced-resolve": {
2412+ "version": "4.5.0",
2413+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz",
2414+ "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==",
2415+ "dev": true,
2416+ "dependencies": {
2417+ "graceful-fs": "^4.1.2",
2418+ "memory-fs": "^0.5.0",
2419+ "tapable": "^1.0.0"
2420+ },
2421+ "engines": {
2422+ "node": ">=6.9.0"
2423+ }
2424+ },
2425+ "node_modules/envinfo": {
2426+ "version": "7.8.1",
2427+ "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz",
2428+ "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==",
2429+ "dev": true,
2430+ "bin": {
2431+ "envinfo": "dist/cli.js"
2432+ },
2433+ "engines": {
2434+ "node": ">=4"
2435+ }
2436+ },
2437+ "node_modules/errno": {
2438+ "version": "0.1.8",
2439+ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
2440+ "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==",
2441+ "dev": true,
2442+ "dependencies": {
2443+ "prr": "~1.0.1"
2444+ },
2445+ "bin": {
2446+ "errno": "cli.js"
2447+ }
2448+ },
2449+ "node_modules/error-stack-parser": {
2450+ "version": "2.0.7",
2451+ "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.7.tgz",
2452+ "integrity": "sha512-chLOW0ZGRf4s8raLrDxa5sdkvPec5YdvwbFnqJme4rk0rFajP8mPtrDL1+I+CwrQDCjswDA5sREX7jYQDQs9vA==",
2453+ "dev": true,
2454+ "dependencies": {
2455+ "stackframe": "^1.1.1"
2456+ }
2457+ },
2458+ "node_modules/es-abstract": {
2459+ "version": "1.19.2",
2460+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.2.tgz",
2461+ "integrity": "sha512-gfSBJoZdlL2xRiOCy0g8gLMryhoe1TlimjzU99L/31Z8QEGIhVQI+EWwt5lT+AuU9SnorVupXFqqOGqGfsyO6w==",
2462+ "dev": true,
2463+ "dependencies": {
2464+ "call-bind": "^1.0.2",
2465+ "es-to-primitive": "^1.2.1",
2466+ "function-bind": "^1.1.1",
2467+ "get-intrinsic": "^1.1.1",
2468+ "get-symbol-description": "^1.0.0",
2469+ "has": "^1.0.3",
2470+ "has-symbols": "^1.0.3",
2471+ "internal-slot": "^1.0.3",
2472+ "is-callable": "^1.2.4",
2473+ "is-negative-zero": "^2.0.2",
2474+ "is-regex": "^1.1.4",
2475+ "is-shared-array-buffer": "^1.0.1",
2476+ "is-string": "^1.0.7",
2477+ "is-weakref": "^1.0.2",
2478+ "object-inspect": "^1.12.0",
2479+ "object-keys": "^1.1.1",
2480+ "object.assign": "^4.1.2",
2481+ "string.prototype.trimend": "^1.0.4",
2482+ "string.prototype.trimstart": "^1.0.4",
2483+ "unbox-primitive": "^1.0.1"
2484+ },
2485+ "engines": {
2486+ "node": ">= 0.4"
2487+ },
2488+ "funding": {
2489+ "url": "https://github.com/sponsors/ljharb"
2490+ }
2491+ },
2492+ "node_modules/es-module-lexer": {
2493+ "version": "0.9.3",
2494+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz",
2495+ "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==",
2496+ "dev": true
2497+ },
2498+ "node_modules/es-to-primitive": {
2499+ "version": "1.2.1",
2500+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
2501+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
2502+ "dev": true,
2503+ "dependencies": {
2504+ "is-callable": "^1.1.4",
2505+ "is-date-object": "^1.0.1",
2506+ "is-symbol": "^1.0.2"
2507+ },
2508+ "engines": {
2509+ "node": ">= 0.4"
2510+ },
2511+ "funding": {
2512+ "url": "https://github.com/sponsors/ljharb"
2513+ }
2514+ },
2515+ "node_modules/escalade": {
2516+ "version": "3.1.1",
2517+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
2518+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
2519+ "dev": true,
2520+ "engines": {
2521+ "node": ">=6"
2522+ }
2523+ },
2524+ "node_modules/escape-html": {
2525+ "version": "1.0.3",
2526+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
2527+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
2528+ },
2529+ "node_modules/escape-string-regexp": {
2530+ "version": "4.0.0",
2531+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
2532+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
2533+ "dev": true,
2534+ "engines": {
2535+ "node": ">=10"
2536+ },
2537+ "funding": {
2538+ "url": "https://github.com/sponsors/sindresorhus"
2539+ }
2540+ },
2541+ "node_modules/escodegen": {
2542+ "version": "2.0.0",
2543+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz",
2544+ "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==",
2545+ "dependencies": {
2546+ "esprima": "^4.0.1",
2547+ "estraverse": "^5.2.0",
2548+ "esutils": "^2.0.2",
2549+ "optionator": "^0.8.1"
2550+ },
2551+ "bin": {
2552+ "escodegen": "bin/escodegen.js",
2553+ "esgenerate": "bin/esgenerate.js"
2554+ },
2555+ "engines": {
2556+ "node": ">=6.0"
2557+ },
2558+ "optionalDependencies": {
2559+ "source-map": "~0.6.1"
2560+ }
2561+ },
2562+ "node_modules/escodegen/node_modules/estraverse": {
2563+ "version": "5.3.0",
2564+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
2565+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
2566+ "engines": {
2567+ "node": ">=4.0"
2568+ }
2569+ },
2570+ "node_modules/escodegen/node_modules/levn": {
2571+ "version": "0.3.0",
2572+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
2573+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
2574+ "dependencies": {
2575+ "prelude-ls": "~1.1.2",
2576+ "type-check": "~0.3.2"
2577+ },
2578+ "engines": {
2579+ "node": ">= 0.8.0"
2580+ }
2581+ },
2582+ "node_modules/escodegen/node_modules/optionator": {
2583+ "version": "0.8.3",
2584+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
2585+ "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
2586+ "dependencies": {
2587+ "deep-is": "~0.1.3",
2588+ "fast-levenshtein": "~2.0.6",
2589+ "levn": "~0.3.0",
2590+ "prelude-ls": "~1.1.2",
2591+ "type-check": "~0.3.2",
2592+ "word-wrap": "~1.2.3"
2593+ },
2594+ "engines": {
2595+ "node": ">= 0.8.0"
2596+ }
2597+ },
2598+ "node_modules/escodegen/node_modules/prelude-ls": {
2599+ "version": "1.1.2",
2600+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
2601+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
2602+ "engines": {
2603+ "node": ">= 0.8.0"
2604+ }
2605+ },
2606+ "node_modules/escodegen/node_modules/source-map": {
2607+ "version": "0.6.1",
2608+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
2609+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
2610+ "optional": true,
2611+ "engines": {
2612+ "node": ">=0.10.0"
2613+ }
2614+ },
2615+ "node_modules/escodegen/node_modules/type-check": {
2616+ "version": "0.3.2",
2617+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
2618+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
2619+ "dependencies": {
2620+ "prelude-ls": "~1.1.2"
2621+ },
2622+ "engines": {
2623+ "node": ">= 0.8.0"
2624+ }
2625+ },
2626+ "node_modules/eslint": {
2627+ "version": "8.13.0",
2628+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.13.0.tgz",
2629+ "integrity": "sha512-D+Xei61eInqauAyTJ6C0q6x9mx7kTUC1KZ0m0LSEexR0V+e94K12LmWX076ZIsldwfQ2RONdaJe0re0TRGQbRQ==",
2630+ "dev": true,
2631+ "dependencies": {
2632+ "@eslint/eslintrc": "^1.2.1",
2633+ "@humanwhocodes/config-array": "^0.9.2",
2634+ "ajv": "^6.10.0",
2635+ "chalk": "^4.0.0",
2636+ "cross-spawn": "^7.0.2",
2637+ "debug": "^4.3.2",
2638+ "doctrine": "^3.0.0",
2639+ "escape-string-regexp": "^4.0.0",
2640+ "eslint-scope": "^7.1.1",
2641+ "eslint-utils": "^3.0.0",
2642+ "eslint-visitor-keys": "^3.3.0",
2643+ "espree": "^9.3.1",
2644+ "esquery": "^1.4.0",
2645+ "esutils": "^2.0.2",
2646+ "fast-deep-equal": "^3.1.3",
2647+ "file-entry-cache": "^6.0.1",
2648+ "functional-red-black-tree": "^1.0.1",
2649+ "glob-parent": "^6.0.1",
2650+ "globals": "^13.6.0",
2651+ "ignore": "^5.2.0",
2652+ "import-fresh": "^3.0.0",
2653+ "imurmurhash": "^0.1.4",
2654+ "is-glob": "^4.0.0",
2655+ "js-yaml": "^4.1.0",
2656+ "json-stable-stringify-without-jsonify": "^1.0.1",
2657+ "levn": "^0.4.1",
2658+ "lodash.merge": "^4.6.2",
2659+ "minimatch": "^3.0.4",
2660+ "natural-compare": "^1.4.0",
2661+ "optionator": "^0.9.1",
2662+ "regexpp": "^3.2.0",
2663+ "strip-ansi": "^6.0.1",
2664+ "strip-json-comments": "^3.1.0",
2665+ "text-table": "^0.2.0",
2666+ "v8-compile-cache": "^2.0.3"
2667+ },
2668+ "bin": {
2669+ "eslint": "bin/eslint.js"
2670+ },
2671+ "engines": {
2672+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
2673+ },
2674+ "funding": {
2675+ "url": "https://opencollective.com/eslint"
2676+ }
2677+ },
2678+ "node_modules/eslint-config-prettier": {
2679+ "version": "8.5.0",
2680+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz",
2681+ "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==",
2682+ "dev": true,
2683+ "bin": {
2684+ "eslint-config-prettier": "bin/cli.js"
2685+ },
2686+ "peerDependencies": {
2687+ "eslint": ">=7.0.0"
2688+ }
2689+ },
2690+ "node_modules/eslint-import-resolver-node": {
2691+ "version": "0.3.6",
2692+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz",
2693+ "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==",
2694+ "dev": true,
2695+ "dependencies": {
2696+ "debug": "^3.2.7",
2697+ "resolve": "^1.20.0"
2698+ }
2699+ },
2700+ "node_modules/eslint-import-resolver-node/node_modules/debug": {
2701+ "version": "3.2.7",
2702+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
2703+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
2704+ "dev": true,
2705+ "dependencies": {
2706+ "ms": "^2.1.1"
2707+ }
2708+ },
2709+ "node_modules/eslint-import-resolver-typescript": {
2710+ "version": "2.7.1",
2711+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz",
2712+ "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==",
2713+ "dev": true,
2714+ "dependencies": {
2715+ "debug": "^4.3.4",
2716+ "glob": "^7.2.0",
2717+ "is-glob": "^4.0.3",
2718+ "resolve": "^1.22.0",
2719+ "tsconfig-paths": "^3.14.1"
2720+ },
2721+ "engines": {
2722+ "node": ">=4"
2723+ },
2724+ "peerDependencies": {
2725+ "eslint": "*",
2726+ "eslint-plugin-import": "*"
2727+ }
2728+ },
2729+ "node_modules/eslint-module-utils": {
2730+ "version": "2.7.3",
2731+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz",
2732+ "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==",
2733+ "dev": true,
2734+ "dependencies": {
2735+ "debug": "^3.2.7",
2736+ "find-up": "^2.1.0"
2737+ },
2738+ "engines": {
2739+ "node": ">=4"
2740+ }
2741+ },
2742+ "node_modules/eslint-module-utils/node_modules/debug": {
2743+ "version": "3.2.7",
2744+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
2745+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
2746+ "dev": true,
2747+ "dependencies": {
2748+ "ms": "^2.1.1"
2749+ }
2750+ },
2751+ "node_modules/eslint-plugin-import": {
2752+ "version": "2.26.0",
2753+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz",
2754+ "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==",
2755+ "dev": true,
2756+ "dependencies": {
2757+ "array-includes": "^3.1.4",
2758+ "array.prototype.flat": "^1.2.5",
2759+ "debug": "^2.6.9",
2760+ "doctrine": "^2.1.0",
2761+ "eslint-import-resolver-node": "^0.3.6",
2762+ "eslint-module-utils": "^2.7.3",
2763+ "has": "^1.0.3",
2764+ "is-core-module": "^2.8.1",
2765+ "is-glob": "^4.0.3",
2766+ "minimatch": "^3.1.2",
2767+ "object.values": "^1.1.5",
2768+ "resolve": "^1.22.0",
2769+ "tsconfig-paths": "^3.14.1"
2770+ },
2771+ "engines": {
2772+ "node": ">=4"
2773+ },
2774+ "peerDependencies": {
2775+ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
2776+ }
2777+ },
2778+ "node_modules/eslint-plugin-import/node_modules/debug": {
2779+ "version": "2.6.9",
2780+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
2781+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
2782+ "dev": true,
2783+ "dependencies": {
2784+ "ms": "2.0.0"
2785+ }
2786+ },
2787+ "node_modules/eslint-plugin-import/node_modules/doctrine": {
2788+ "version": "2.1.0",
2789+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
2790+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
2791+ "dev": true,
2792+ "dependencies": {
2793+ "esutils": "^2.0.2"
2794+ },
2795+ "engines": {
2796+ "node": ">=0.10.0"
2797+ }
2798+ },
2799+ "node_modules/eslint-plugin-import/node_modules/ms": {
2800+ "version": "2.0.0",
2801+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
2802+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
2803+ "dev": true
2804+ },
2805+ "node_modules/eslint-scope": {
2806+ "version": "5.1.1",
2807+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
2808+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
2809+ "dev": true,
2810+ "dependencies": {
2811+ "esrecurse": "^4.3.0",
2812+ "estraverse": "^4.1.1"
2813+ },
2814+ "engines": {
2815+ "node": ">=8.0.0"
2816+ }
2817+ },
2818+ "node_modules/eslint-utils": {
2819+ "version": "3.0.0",
2820+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
2821+ "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
2822+ "dev": true,
2823+ "dependencies": {
2824+ "eslint-visitor-keys": "^2.0.0"
2825+ },
2826+ "engines": {
2827+ "node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
2828+ },
2829+ "funding": {
2830+ "url": "https://github.com/sponsors/mysticatea"
2831+ },
2832+ "peerDependencies": {
2833+ "eslint": ">=5"
2834+ }
2835+ },
2836+ "node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
2837+ "version": "2.1.0",
2838+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
2839+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
2840+ "dev": true,
2841+ "engines": {
2842+ "node": ">=10"
2843+ }
2844+ },
2845+ "node_modules/eslint-visitor-keys": {
2846+ "version": "3.3.0",
2847+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
2848+ "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
2849+ "dev": true,
2850+ "engines": {
2851+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
2852+ }
2853+ },
2854+ "node_modules/eslint/node_modules/eslint-scope": {
2855+ "version": "7.1.1",
2856+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
2857+ "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
2858+ "dev": true,
2859+ "dependencies": {
2860+ "esrecurse": "^4.3.0",
2861+ "estraverse": "^5.2.0"
2862+ },
2863+ "engines": {
2864+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
2865+ }
2866+ },
2867+ "node_modules/eslint/node_modules/estraverse": {
2868+ "version": "5.3.0",
2869+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
2870+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
2871+ "dev": true,
2872+ "engines": {
2873+ "node": ">=4.0"
2874+ }
2875+ },
2876+ "node_modules/espree": {
2877+ "version": "9.3.1",
2878+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz",
2879+ "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==",
2880+ "dev": true,
2881+ "dependencies": {
2882+ "acorn": "^8.7.0",
2883+ "acorn-jsx": "^5.3.1",
2884+ "eslint-visitor-keys": "^3.3.0"
2885+ },
2886+ "engines": {
2887+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
2888+ }
2889+ },
2890+ "node_modules/esprima": {
2891+ "version": "4.0.1",
2892+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
2893+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
2894+ "bin": {
2895+ "esparse": "bin/esparse.js",
2896+ "esvalidate": "bin/esvalidate.js"
2897+ },
2898+ "engines": {
2899+ "node": ">=4"
2900+ }
2901+ },
2902+ "node_modules/esquery": {
2903+ "version": "1.4.0",
2904+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
2905+ "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
2906+ "dev": true,
2907+ "dependencies": {
2908+ "estraverse": "^5.1.0"
2909+ },
2910+ "engines": {
2911+ "node": ">=0.10"
2912+ }
2913+ },
2914+ "node_modules/esquery/node_modules/estraverse": {
2915+ "version": "5.3.0",
2916+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
2917+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
2918+ "dev": true,
2919+ "engines": {
2920+ "node": ">=4.0"
2921+ }
2922+ },
2923+ "node_modules/esrecurse": {
2924+ "version": "4.3.0",
2925+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
2926+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
2927+ "dev": true,
2928+ "dependencies": {
2929+ "estraverse": "^5.2.0"
2930+ },
2931+ "engines": {
2932+ "node": ">=4.0"
2933+ }
2934+ },
2935+ "node_modules/esrecurse/node_modules/estraverse": {
2936+ "version": "5.3.0",
2937+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
2938+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
2939+ "dev": true,
2940+ "engines": {
2941+ "node": ">=4.0"
2942+ }
2943+ },
2944+ "node_modules/estraverse": {
2945+ "version": "4.3.0",
2946+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
2947+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
2948+ "dev": true,
2949+ "engines": {
2950+ "node": ">=4.0"
2951+ }
2952+ },
2953+ "node_modules/esutils": {
2954+ "version": "2.0.3",
2955+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
2956+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
2957+ "engines": {
2958+ "node": ">=0.10.0"
2959+ }
2960+ },
2961+ "node_modules/events": {
2962+ "version": "3.3.0",
2963+ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
2964+ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
2965+ "dev": true,
2966+ "engines": {
2967+ "node": ">=0.8.x"
2968+ }
2969+ },
2970+ "node_modules/execa": {
2971+ "version": "5.1.1",
2972+ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
2973+ "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
2974+ "dev": true,
2975+ "dependencies": {
2976+ "cross-spawn": "^7.0.3",
2977+ "get-stream": "^6.0.0",
2978+ "human-signals": "^2.1.0",
2979+ "is-stream": "^2.0.0",
2980+ "merge-stream": "^2.0.0",
2981+ "npm-run-path": "^4.0.1",
2982+ "onetime": "^5.1.2",
2983+ "signal-exit": "^3.0.3",
2984+ "strip-final-newline": "^2.0.0"
2985+ },
2986+ "engines": {
2987+ "node": ">=10"
2988+ },
2989+ "funding": {
2990+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
2991+ }
2992+ },
2993+ "node_modules/expand-template": {
2994+ "version": "2.0.3",
2995+ "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
2996+ "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==",
2997+ "dev": true,
2998+ "engines": {
2999+ "node": ">=6"
3000+ }
3001+ },
3002+ "node_modules/external-editor": {
3003+ "version": "3.1.0",
3004+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
3005+ "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
3006+ "dependencies": {
3007+ "chardet": "^0.7.0",
3008+ "iconv-lite": "^0.4.24",
3009+ "tmp": "^0.0.33"
3010+ },
3011+ "engines": {
3012+ "node": ">=4"
3013+ }
3014+ },
3015+ "node_modules/fast-deep-equal": {
3016+ "version": "3.1.3",
3017+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
3018+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
3019+ "dev": true
3020+ },
3021+ "node_modules/fast-glob": {
3022+ "version": "3.2.11",
3023+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
3024+ "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
3025+ "dev": true,
3026+ "dependencies": {
3027+ "@nodelib/fs.stat": "^2.0.2",
3028+ "@nodelib/fs.walk": "^1.2.3",
3029+ "glob-parent": "^5.1.2",
3030+ "merge2": "^1.3.0",
3031+ "micromatch": "^4.0.4"
3032+ },
3033+ "engines": {
3034+ "node": ">=8.6.0"
3035+ }
3036+ },
3037+ "node_modules/fast-glob/node_modules/glob-parent": {
3038+ "version": "5.1.2",
3039+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
3040+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
3041+ "dev": true,
3042+ "dependencies": {
3043+ "is-glob": "^4.0.1"
3044+ },
3045+ "engines": {
3046+ "node": ">= 6"
3047+ }
3048+ },
3049+ "node_modules/fast-json-stable-stringify": {
3050+ "version": "2.1.0",
3051+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
3052+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
3053+ "dev": true
3054+ },
3055+ "node_modules/fast-levenshtein": {
3056+ "version": "2.0.6",
3057+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
3058+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
3059+ },
3060+ "node_modules/fastest-levenshtein": {
3061+ "version": "1.0.12",
3062+ "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz",
3063+ "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==",
3064+ "dev": true
3065+ },
3066+ "node_modules/fastq": {
3067+ "version": "1.13.0",
3068+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
3069+ "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
3070+ "dev": true,
3071+ "dependencies": {
3072+ "reusify": "^1.0.4"
3073+ }
3074+ },
3075+ "node_modules/figures": {
3076+ "version": "3.2.0",
3077+ "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
3078+ "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
3079+ "dependencies": {
3080+ "escape-string-regexp": "^1.0.5"
3081+ },
3082+ "engines": {
3083+ "node": ">=8"
3084+ },
3085+ "funding": {
3086+ "url": "https://github.com/sponsors/sindresorhus"
3087+ }
3088+ },
3089+ "node_modules/figures/node_modules/escape-string-regexp": {
3090+ "version": "1.0.5",
3091+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
3092+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
3093+ "engines": {
3094+ "node": ">=0.8.0"
3095+ }
3096+ },
3097+ "node_modules/file-entry-cache": {
3098+ "version": "6.0.1",
3099+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
3100+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
3101+ "dev": true,
3102+ "dependencies": {
3103+ "flat-cache": "^3.0.4"
3104+ },
3105+ "engines": {
3106+ "node": "^10.12.0 || >=12.0.0"
3107+ }
3108+ },
3109+ "node_modules/fill-range": {
3110+ "version": "7.0.1",
3111+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
3112+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
3113+ "dev": true,
3114+ "dependencies": {
3115+ "to-regex-range": "^5.0.1"
3116+ },
3117+ "engines": {
3118+ "node": ">=8"
3119+ }
3120+ },
3121+ "node_modules/find-up": {
3122+ "version": "2.1.0",
3123+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
3124+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
3125+ "dev": true,
3126+ "dependencies": {
3127+ "locate-path": "^2.0.0"
3128+ },
3129+ "engines": {
3130+ "node": ">=4"
3131+ }
3132+ },
3133+ "node_modules/flat-cache": {
3134+ "version": "3.0.4",
3135+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
3136+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
3137+ "dev": true,
3138+ "dependencies": {
3139+ "flatted": "^3.1.0",
3140+ "rimraf": "^3.0.2"
3141+ },
3142+ "engines": {
3143+ "node": "^10.12.0 || >=12.0.0"
3144+ }
3145+ },
3146+ "node_modules/flatted": {
3147+ "version": "3.2.5",
3148+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz",
3149+ "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==",
3150+ "dev": true
3151+ },
3152+ "node_modules/form-data": {
3153+ "version": "4.0.0",
3154+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
3155+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
3156+ "dependencies": {
3157+ "asynckit": "^0.4.0",
3158+ "combined-stream": "^1.0.8",
3159+ "mime-types": "^2.1.12"
3160+ },
3161+ "engines": {
3162+ "node": ">= 6"
3163+ }
3164+ },
3165+ "node_modules/fresh": {
3166+ "version": "0.5.2",
3167+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
3168+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
3169+ "engines": {
3170+ "node": ">= 0.6"
3171+ }
3172+ },
3173+ "node_modules/from2": {
3174+ "version": "2.3.0",
3175+ "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
3176+ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
3177+ "dev": true,
3178+ "dependencies": {
3179+ "inherits": "^2.0.1",
3180+ "readable-stream": "^2.0.0"
3181+ }
3182+ },
3183+ "node_modules/fs-constants": {
3184+ "version": "1.0.0",
3185+ "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
3186+ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
3187+ "dev": true
3188+ },
3189+ "node_modules/fs-extra": {
3190+ "version": "9.1.0",
3191+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
3192+ "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
3193+ "dev": true,
3194+ "dependencies": {
3195+ "at-least-node": "^1.0.0",
3196+ "graceful-fs": "^4.2.0",
3197+ "jsonfile": "^6.0.1",
3198+ "universalify": "^2.0.0"
3199+ },
3200+ "engines": {
3201+ "node": ">=10"
3202+ }
3203+ },
3204+ "node_modules/fs.realpath": {
3205+ "version": "1.0.0",
3206+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
3207+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
3208+ "dev": true
3209+ },
3210+ "node_modules/function-bind": {
3211+ "version": "1.1.1",
3212+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
3213+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
3214+ },
3215+ "node_modules/functional-red-black-tree": {
3216+ "version": "1.0.1",
3217+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
3218+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
3219+ "dev": true
3220+ },
3221+ "node_modules/gauge": {
3222+ "version": "2.7.4",
3223+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
3224+ "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
3225+ "dev": true,
3226+ "dependencies": {
3227+ "aproba": "^1.0.3",
3228+ "console-control-strings": "^1.0.0",
3229+ "has-unicode": "^2.0.0",
3230+ "object-assign": "^4.1.0",
3231+ "signal-exit": "^3.0.0",
3232+ "string-width": "^1.0.1",
3233+ "strip-ansi": "^3.0.1",
3234+ "wide-align": "^1.1.0"
3235+ }
3236+ },
3237+ "node_modules/gauge/node_modules/ansi-regex": {
3238+ "version": "2.1.1",
3239+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
3240+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
3241+ "dev": true,
3242+ "engines": {
3243+ "node": ">=0.10.0"
3244+ }
3245+ },
3246+ "node_modules/gauge/node_modules/is-fullwidth-code-point": {
3247+ "version": "1.0.0",
3248+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
3249+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
3250+ "dev": true,
3251+ "dependencies": {
3252+ "number-is-nan": "^1.0.0"
3253+ },
3254+ "engines": {
3255+ "node": ">=0.10.0"
3256+ }
3257+ },
3258+ "node_modules/gauge/node_modules/string-width": {
3259+ "version": "1.0.2",
3260+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
3261+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
3262+ "dev": true,
3263+ "dependencies": {
3264+ "code-point-at": "^1.0.0",
3265+ "is-fullwidth-code-point": "^1.0.0",
3266+ "strip-ansi": "^3.0.0"
3267+ },
3268+ "engines": {
3269+ "node": ">=0.10.0"
3270+ }
3271+ },
3272+ "node_modules/gauge/node_modules/strip-ansi": {
3273+ "version": "3.0.1",
3274+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
3275+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
3276+ "dev": true,
3277+ "dependencies": {
3278+ "ansi-regex": "^2.0.0"
3279+ },
3280+ "engines": {
3281+ "node": ">=0.10.0"
3282+ }
3283+ },
3284+ "node_modules/get-caller-file": {
3285+ "version": "2.0.5",
3286+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
3287+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
3288+ "dev": true,
3289+ "engines": {
3290+ "node": "6.* || 8.* || >= 10.*"
3291+ }
3292+ },
3293+ "node_modules/get-intrinsic": {
3294+ "version": "1.1.1",
3295+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
3296+ "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
3297+ "dependencies": {
3298+ "function-bind": "^1.1.1",
3299+ "has": "^1.0.3",
3300+ "has-symbols": "^1.0.1"
3301+ },
3302+ "funding": {
3303+ "url": "https://github.com/sponsors/ljharb"
3304+ }
3305+ },
3306+ "node_modules/get-stream": {
3307+ "version": "6.0.1",
3308+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
3309+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
3310+ "dev": true,
3311+ "engines": {
3312+ "node": ">=10"
3313+ },
3314+ "funding": {
3315+ "url": "https://github.com/sponsors/sindresorhus"
3316+ }
3317+ },
3318+ "node_modules/get-symbol-description": {
3319+ "version": "1.0.0",
3320+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
3321+ "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
3322+ "dev": true,
3323+ "dependencies": {
3324+ "call-bind": "^1.0.2",
3325+ "get-intrinsic": "^1.1.1"
3326+ },
3327+ "engines": {
3328+ "node": ">= 0.4"
3329+ },
3330+ "funding": {
3331+ "url": "https://github.com/sponsors/ljharb"
3332+ }
3333+ },
3334+ "node_modules/github-from-package": {
3335+ "version": "0.0.0",
3336+ "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
3337+ "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=",
3338+ "dev": true
3339+ },
3340+ "node_modules/glob": {
3341+ "version": "7.2.0",
3342+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
3343+ "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
3344+ "dev": true,
3345+ "dependencies": {
3346+ "fs.realpath": "^1.0.0",
3347+ "inflight": "^1.0.4",
3348+ "inherits": "2",
3349+ "minimatch": "^3.0.4",
3350+ "once": "^1.3.0",
3351+ "path-is-absolute": "^1.0.0"
3352+ },
3353+ "engines": {
3354+ "node": "*"
3355+ },
3356+ "funding": {
3357+ "url": "https://github.com/sponsors/isaacs"
3358+ }
3359+ },
3360+ "node_modules/glob-parent": {
3361+ "version": "6.0.2",
3362+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
3363+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
3364+ "dev": true,
3365+ "dependencies": {
3366+ "is-glob": "^4.0.3"
3367+ },
3368+ "engines": {
3369+ "node": ">=10.13.0"
3370+ }
3371+ },
3372+ "node_modules/glob-to-regexp": {
3373+ "version": "0.4.1",
3374+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
3375+ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
3376+ "dev": true
3377+ },
3378+ "node_modules/globals": {
3379+ "version": "13.13.0",
3380+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz",
3381+ "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==",
3382+ "dev": true,
3383+ "dependencies": {
3384+ "type-fest": "^0.20.2"
3385+ },
3386+ "engines": {
3387+ "node": ">=8"
3388+ },
3389+ "funding": {
3390+ "url": "https://github.com/sponsors/sindresorhus"
3391+ }
3392+ },
3393+ "node_modules/globby": {
3394+ "version": "11.1.0",
3395+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
3396+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
3397+ "dev": true,
3398+ "dependencies": {
3399+ "array-union": "^2.1.0",
3400+ "dir-glob": "^3.0.1",
3401+ "fast-glob": "^3.2.9",
3402+ "ignore": "^5.2.0",
3403+ "merge2": "^1.4.1",
3404+ "slash": "^3.0.0"
3405+ },
3406+ "engines": {
3407+ "node": ">=10"
3408+ },
3409+ "funding": {
3410+ "url": "https://github.com/sponsors/sindresorhus"
3411+ }
3412+ },
3413+ "node_modules/graceful-fs": {
3414+ "version": "4.2.10",
3415+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
3416+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
3417+ },
3418+ "node_modules/has": {
3419+ "version": "1.0.3",
3420+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
3421+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
3422+ "dependencies": {
3423+ "function-bind": "^1.1.1"
3424+ },
3425+ "engines": {
3426+ "node": ">= 0.4.0"
3427+ }
3428+ },
3429+ "node_modules/has-bigints": {
3430+ "version": "1.0.1",
3431+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz",
3432+ "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==",
3433+ "dev": true,
3434+ "funding": {
3435+ "url": "https://github.com/sponsors/ljharb"
3436+ }
3437+ },
3438+ "node_modules/has-flag": {
3439+ "version": "4.0.0",
3440+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
3441+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
3442+ "engines": {
3443+ "node": ">=8"
3444+ }
3445+ },
3446+ "node_modules/has-symbols": {
3447+ "version": "1.0.3",
3448+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
3449+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
3450+ "engines": {
3451+ "node": ">= 0.4"
3452+ },
3453+ "funding": {
3454+ "url": "https://github.com/sponsors/ljharb"
3455+ }
3456+ },
3457+ "node_modules/has-tostringtag": {
3458+ "version": "1.0.0",
3459+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
3460+ "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
3461+ "dependencies": {
3462+ "has-symbols": "^1.0.2"
3463+ },
3464+ "engines": {
3465+ "node": ">= 0.4"
3466+ },
3467+ "funding": {
3468+ "url": "https://github.com/sponsors/ljharb"
3469+ }
3470+ },
3471+ "node_modules/has-unicode": {
3472+ "version": "2.0.1",
3473+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
3474+ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
3475+ "dev": true
3476+ },
3477+ "node_modules/html-encoding-sniffer": {
3478+ "version": "2.0.1",
3479+ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz",
3480+ "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==",
3481+ "dependencies": {
3482+ "whatwg-encoding": "^1.0.5"
3483+ },
3484+ "engines": {
3485+ "node": ">=10"
3486+ }
3487+ },
3488+ "node_modules/http-assert": {
3489+ "version": "1.5.0",
3490+ "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz",
3491+ "integrity": "sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==",
3492+ "dependencies": {
3493+ "deep-equal": "~1.0.1",
3494+ "http-errors": "~1.8.0"
3495+ },
3496+ "engines": {
3497+ "node": ">= 0.8"
3498+ }
3499+ },
3500+ "node_modules/http-errors": {
3501+ "version": "1.8.1",
3502+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
3503+ "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
3504+ "dependencies": {
3505+ "depd": "~1.1.2",
3506+ "inherits": "2.0.4",
3507+ "setprototypeof": "1.2.0",
3508+ "statuses": ">= 1.5.0 < 2",
3509+ "toidentifier": "1.0.1"
3510+ },
3511+ "engines": {
3512+ "node": ">= 0.6"
3513+ }
3514+ },
3515+ "node_modules/http-proxy-agent": {
3516+ "version": "4.0.1",
3517+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
3518+ "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
3519+ "dependencies": {
3520+ "@tootallnate/once": "1",
3521+ "agent-base": "6",
3522+ "debug": "4"
3523+ },
3524+ "engines": {
3525+ "node": ">= 6"
3526+ }
3527+ },
3528+ "node_modules/https-proxy-agent": {
3529+ "version": "5.0.0",
3530+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
3531+ "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
3532+ "dependencies": {
3533+ "agent-base": "6",
3534+ "debug": "4"
3535+ },
3536+ "engines": {
3537+ "node": ">= 6"
3538+ }
3539+ },
3540+ "node_modules/human-signals": {
3541+ "version": "2.1.0",
3542+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
3543+ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
3544+ "dev": true,
3545+ "engines": {
3546+ "node": ">=10.17.0"
3547+ }
3548+ },
3549+ "node_modules/husky": {
3550+ "version": "7.0.4",
3551+ "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz",
3552+ "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==",
3553+ "dev": true,
3554+ "bin": {
3555+ "husky": "lib/bin.js"
3556+ },
3557+ "engines": {
3558+ "node": ">=12"
3559+ },
3560+ "funding": {
3561+ "url": "https://github.com/sponsors/typicode"
3562+ }
3563+ },
3564+ "node_modules/iconv-lite": {
3565+ "version": "0.4.24",
3566+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
3567+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
3568+ "dependencies": {
3569+ "safer-buffer": ">= 2.1.2 < 3"
3570+ },
3571+ "engines": {
3572+ "node": ">=0.10.0"
3573+ }
3574+ },
3575+ "node_modules/ieee754": {
3576+ "version": "1.2.1",
3577+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
3578+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
3579+ "dev": true,
3580+ "funding": [
3581+ {
3582+ "type": "github",
3583+ "url": "https://github.com/sponsors/feross"
3584+ },
3585+ {
3586+ "type": "patreon",
3587+ "url": "https://www.patreon.com/feross"
3588+ },
3589+ {
3590+ "type": "consulting",
3591+ "url": "https://feross.org/support"
3592+ }
3593+ ]
3594+ },
3595+ "node_modules/ignore": {
3596+ "version": "5.2.0",
3597+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
3598+ "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
3599+ "dev": true,
3600+ "engines": {
3601+ "node": ">= 4"
3602+ }
3603+ },
3604+ "node_modules/immediate": {
3605+ "version": "3.0.6",
3606+ "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
3607+ "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
3608+ },
3609+ "node_modules/import-fresh": {
3610+ "version": "3.3.0",
3611+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
3612+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
3613+ "dev": true,
3614+ "dependencies": {
3615+ "parent-module": "^1.0.0",
3616+ "resolve-from": "^4.0.0"
3617+ },
3618+ "engines": {
3619+ "node": ">=6"
3620+ },
3621+ "funding": {
3622+ "url": "https://github.com/sponsors/sindresorhus"
3623+ }
3624+ },
3625+ "node_modules/import-local": {
3626+ "version": "3.1.0",
3627+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
3628+ "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
3629+ "dev": true,
3630+ "dependencies": {
3631+ "pkg-dir": "^4.2.0",
3632+ "resolve-cwd": "^3.0.0"
3633+ },
3634+ "bin": {
3635+ "import-local-fixture": "fixtures/cli.js"
3636+ },
3637+ "engines": {
3638+ "node": ">=8"
3639+ },
3640+ "funding": {
3641+ "url": "https://github.com/sponsors/sindresorhus"
3642+ }
3643+ },
3644+ "node_modules/imurmurhash": {
3645+ "version": "0.1.4",
3646+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
3647+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
3648+ "dev": true,
3649+ "engines": {
3650+ "node": ">=0.8.19"
3651+ }
3652+ },
3653+ "node_modules/indent-string": {
3654+ "version": "4.0.0",
3655+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
3656+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
3657+ "dev": true,
3658+ "engines": {
3659+ "node": ">=8"
3660+ }
3661+ },
3662+ "node_modules/inflation": {
3663+ "version": "2.0.0",
3664+ "resolved": "https://registry.npmjs.org/inflation/-/inflation-2.0.0.tgz",
3665+ "integrity": "sha1-i0F+R8KPklpFEz2RTKH9OJEH8w8=",
3666+ "engines": {
3667+ "node": ">= 0.8.0"
3668+ }
3669+ },
3670+ "node_modules/inflight": {
3671+ "version": "1.0.6",
3672+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
3673+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
3674+ "dev": true,
3675+ "dependencies": {
3676+ "once": "^1.3.0",
3677+ "wrappy": "1"
3678+ }
3679+ },
3680+ "node_modules/inherits": {
3681+ "version": "2.0.4",
3682+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
3683+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
3684+ },
3685+ "node_modules/ini": {
3686+ "version": "1.3.8",
3687+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
3688+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
3689+ "dev": true
3690+ },
3691+ "node_modules/inquirer": {
3692+ "version": "8.0.0",
3693+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.0.0.tgz",
3694+ "integrity": "sha512-ON8pEJPPCdyjxj+cxsYRe6XfCJepTxANdNnTebsTuQgXpRyZRRT9t4dJwjRubgmvn20CLSEnozRUayXyM9VTXA==",
3695+ "dependencies": {
3696+ "ansi-escapes": "^4.2.1",
3697+ "chalk": "^4.1.0",
3698+ "cli-cursor": "^3.1.0",
3699+ "cli-width": "^3.0.0",
3700+ "external-editor": "^3.0.3",
3701+ "figures": "^3.0.0",
3702+ "lodash": "^4.17.21",
3703+ "mute-stream": "0.0.8",
3704+ "run-async": "^2.4.0",
3705+ "rxjs": "^6.6.6",
3706+ "string-width": "^4.1.0",
3707+ "strip-ansi": "^6.0.0",
3708+ "through": "^2.3.6"
3709+ },
3710+ "engines": {
3711+ "node": ">=8.0.0"
3712+ }
3713+ },
3714+ "node_modules/internal-slot": {
3715+ "version": "1.0.3",
3716+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
3717+ "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==",
3718+ "dev": true,
3719+ "dependencies": {
3720+ "get-intrinsic": "^1.1.0",
3721+ "has": "^1.0.3",
3722+ "side-channel": "^1.0.4"
3723+ },
3724+ "engines": {
3725+ "node": ">= 0.4"
3726+ }
3727+ },
3728+ "node_modules/interpret": {
3729+ "version": "2.2.0",
3730+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz",
3731+ "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==",
3732+ "dev": true,
3733+ "engines": {
3734+ "node": ">= 0.10"
3735+ }
3736+ },
3737+ "node_modules/into-stream": {
3738+ "version": "6.0.0",
3739+ "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-6.0.0.tgz",
3740+ "integrity": "sha512-XHbaOAvP+uFKUFsOgoNPRjLkwB+I22JFPFe5OjTkQ0nwgj6+pSjb4NmB6VMxaPshLiOf+zcpOCBQuLwC1KHhZA==",
3741+ "dev": true,
3742+ "dependencies": {
3743+ "from2": "^2.3.0",
3744+ "p-is-promise": "^3.0.0"
3745+ },
3746+ "engines": {
3747+ "node": ">=10"
3748+ },
3749+ "funding": {
3750+ "url": "https://github.com/sponsors/sindresorhus"
3751+ }
3752+ },
3753+ "node_modules/is-bigint": {
3754+ "version": "1.0.4",
3755+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
3756+ "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
3757+ "dev": true,
3758+ "dependencies": {
3759+ "has-bigints": "^1.0.1"
3760+ },
3761+ "funding": {
3762+ "url": "https://github.com/sponsors/ljharb"
3763+ }
3764+ },
3765+ "node_modules/is-boolean-object": {
3766+ "version": "1.1.2",
3767+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
3768+ "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
3769+ "dev": true,
3770+ "dependencies": {
3771+ "call-bind": "^1.0.2",
3772+ "has-tostringtag": "^1.0.0"
3773+ },
3774+ "engines": {
3775+ "node": ">= 0.4"
3776+ },
3777+ "funding": {
3778+ "url": "https://github.com/sponsors/ljharb"
3779+ }
3780+ },
3781+ "node_modules/is-callable": {
3782+ "version": "1.2.4",
3783+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz",
3784+ "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==",
3785+ "dev": true,
3786+ "engines": {
3787+ "node": ">= 0.4"
3788+ },
3789+ "funding": {
3790+ "url": "https://github.com/sponsors/ljharb"
3791+ }
3792+ },
3793+ "node_modules/is-core-module": {
3794+ "version": "2.8.1",
3795+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
3796+ "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==",
3797+ "dev": true,
3798+ "dependencies": {
3799+ "has": "^1.0.3"
3800+ },
3801+ "funding": {
3802+ "url": "https://github.com/sponsors/ljharb"
3803+ }
3804+ },
3805+ "node_modules/is-date-object": {
3806+ "version": "1.0.5",
3807+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
3808+ "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
3809+ "dev": true,
3810+ "dependencies": {
3811+ "has-tostringtag": "^1.0.0"
3812+ },
3813+ "engines": {
3814+ "node": ">= 0.4"
3815+ },
3816+ "funding": {
3817+ "url": "https://github.com/sponsors/ljharb"
3818+ }
3819+ },
3820+ "node_modules/is-docker": {
3821+ "version": "2.2.1",
3822+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
3823+ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
3824+ "bin": {
3825+ "is-docker": "cli.js"
3826+ },
3827+ "engines": {
3828+ "node": ">=8"
3829+ },
3830+ "funding": {
3831+ "url": "https://github.com/sponsors/sindresorhus"
3832+ }
3833+ },
3834+ "node_modules/is-extglob": {
3835+ "version": "2.1.1",
3836+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
3837+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
3838+ "dev": true,
3839+ "engines": {
3840+ "node": ">=0.10.0"
3841+ }
3842+ },
3843+ "node_modules/is-fullwidth-code-point": {
3844+ "version": "4.0.0",
3845+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz",
3846+ "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==",
3847+ "dev": true,
3848+ "engines": {
3849+ "node": ">=12"
3850+ },
3851+ "funding": {
3852+ "url": "https://github.com/sponsors/sindresorhus"
3853+ }
3854+ },
3855+ "node_modules/is-generator-function": {
3856+ "version": "1.0.10",
3857+ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz",
3858+ "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==",
3859+ "dependencies": {
3860+ "has-tostringtag": "^1.0.0"
3861+ },
3862+ "engines": {
3863+ "node": ">= 0.4"
3864+ },
3865+ "funding": {
3866+ "url": "https://github.com/sponsors/ljharb"
3867+ }
3868+ },
3869+ "node_modules/is-glob": {
3870+ "version": "4.0.3",
3871+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
3872+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
3873+ "dev": true,
3874+ "dependencies": {
3875+ "is-extglob": "^2.1.1"
3876+ },
3877+ "engines": {
3878+ "node": ">=0.10.0"
3879+ }
3880+ },
3881+ "node_modules/is-negative-zero": {
3882+ "version": "2.0.2",
3883+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
3884+ "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
3885+ "dev": true,
3886+ "engines": {
3887+ "node": ">= 0.4"
3888+ },
3889+ "funding": {
3890+ "url": "https://github.com/sponsors/ljharb"
3891+ }
3892+ },
3893+ "node_modules/is-number": {
3894+ "version": "7.0.0",
3895+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
3896+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
3897+ "dev": true,
3898+ "engines": {
3899+ "node": ">=0.12.0"
3900+ }
3901+ },
3902+ "node_modules/is-number-object": {
3903+ "version": "1.0.7",
3904+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
3905+ "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
3906+ "dev": true,
3907+ "dependencies": {
3908+ "has-tostringtag": "^1.0.0"
3909+ },
3910+ "engines": {
3911+ "node": ">= 0.4"
3912+ },
3913+ "funding": {
3914+ "url": "https://github.com/sponsors/ljharb"
3915+ }
3916+ },
3917+ "node_modules/is-path-cwd": {
3918+ "version": "2.2.0",
3919+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
3920+ "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
3921+ "dev": true,
3922+ "engines": {
3923+ "node": ">=6"
3924+ }
3925+ },
3926+ "node_modules/is-path-in-cwd": {
3927+ "version": "2.1.0",
3928+ "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz",
3929+ "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==",
3930+ "dev": true,
3931+ "dependencies": {
3932+ "is-path-inside": "^2.1.0"
3933+ },
3934+ "engines": {
3935+ "node": ">=6"
3936+ }
3937+ },
3938+ "node_modules/is-path-inside": {
3939+ "version": "2.1.0",
3940+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz",
3941+ "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==",
3942+ "dev": true,
3943+ "dependencies": {
3944+ "path-is-inside": "^1.0.2"
3945+ },
3946+ "engines": {
3947+ "node": ">=6"
3948+ }
3949+ },
3950+ "node_modules/is-plain-object": {
3951+ "version": "2.0.4",
3952+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
3953+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
3954+ "dev": true,
3955+ "dependencies": {
3956+ "isobject": "^3.0.1"
3957+ },
3958+ "engines": {
3959+ "node": ">=0.10.0"
3960+ }
3961+ },
3962+ "node_modules/is-potential-custom-element-name": {
3963+ "version": "1.0.1",
3964+ "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
3965+ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ=="
3966+ },
3967+ "node_modules/is-promise": {
3968+ "version": "2.2.2",
3969+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz",
3970+ "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ=="
3971+ },
3972+ "node_modules/is-regex": {
3973+ "version": "1.1.4",
3974+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
3975+ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
3976+ "dev": true,
3977+ "dependencies": {
3978+ "call-bind": "^1.0.2",
3979+ "has-tostringtag": "^1.0.0"
3980+ },
3981+ "engines": {
3982+ "node": ">= 0.4"
3983+ },
3984+ "funding": {
3985+ "url": "https://github.com/sponsors/ljharb"
3986+ }
3987+ },
3988+ "node_modules/is-shared-array-buffer": {
3989+ "version": "1.0.2",
3990+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
3991+ "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
3992+ "dev": true,
3993+ "dependencies": {
3994+ "call-bind": "^1.0.2"
3995+ },
3996+ "funding": {
3997+ "url": "https://github.com/sponsors/ljharb"
3998+ }
3999+ },
4000+ "node_modules/is-stream": {
4001+ "version": "2.0.1",
4002+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
4003+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
4004+ "dev": true,
4005+ "engines": {
4006+ "node": ">=8"
4007+ },
4008+ "funding": {
4009+ "url": "https://github.com/sponsors/sindresorhus"
4010+ }
4011+ },
4012+ "node_modules/is-string": {
4013+ "version": "1.0.7",
4014+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
4015+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
4016+ "dev": true,
4017+ "dependencies": {
4018+ "has-tostringtag": "^1.0.0"
4019+ },
4020+ "engines": {
4021+ "node": ">= 0.4"
4022+ },
4023+ "funding": {
4024+ "url": "https://github.com/sponsors/ljharb"
4025+ }
4026+ },
4027+ "node_modules/is-symbol": {
4028+ "version": "1.0.4",
4029+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
4030+ "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
4031+ "dev": true,
4032+ "dependencies": {
4033+ "has-symbols": "^1.0.2"
4034+ },
4035+ "engines": {
4036+ "node": ">= 0.4"
4037+ },
4038+ "funding": {
4039+ "url": "https://github.com/sponsors/ljharb"
4040+ }
4041+ },
4042+ "node_modules/is-weakref": {
4043+ "version": "1.0.2",
4044+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
4045+ "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
4046+ "dev": true,
4047+ "dependencies": {
4048+ "call-bind": "^1.0.2"
4049+ },
4050+ "funding": {
4051+ "url": "https://github.com/sponsors/ljharb"
4052+ }
4053+ },
4054+ "node_modules/is-wsl": {
4055+ "version": "2.2.0",
4056+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
4057+ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
4058+ "dependencies": {
4059+ "is-docker": "^2.0.0"
4060+ },
4061+ "engines": {
4062+ "node": ">=8"
4063+ }
4064+ },
4065+ "node_modules/isarray": {
4066+ "version": "1.0.0",
4067+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
4068+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
4069+ },
4070+ "node_modules/isexe": {
4071+ "version": "2.0.0",
4072+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
4073+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
4074+ "dev": true
4075+ },
4076+ "node_modules/isobject": {
4077+ "version": "3.0.1",
4078+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
4079+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
4080+ "dev": true,
4081+ "engines": {
4082+ "node": ">=0.10.0"
4083+ }
4084+ },
4085+ "node_modules/jasmine": {
4086+ "version": "3.99.0",
4087+ "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-3.99.0.tgz",
4088+ "integrity": "sha512-YIThBuHzaIIcjxeuLmPD40SjxkEcc8i//sGMDKCgkRMVgIwRJf5qyExtlJpQeh7pkeoBSOe6lQEdg+/9uKg9mw==",
4089+ "dev": true,
4090+ "dependencies": {
4091+ "glob": "^7.1.6",
4092+ "jasmine-core": "~3.99.0"
4093+ },
4094+ "bin": {
4095+ "jasmine": "bin/jasmine.js"
4096+ }
4097+ },
4098+ "node_modules/jasmine-core": {
4099+ "version": "3.99.1",
4100+ "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.99.1.tgz",
4101+ "integrity": "sha512-Hu1dmuoGcZ7AfyynN3LsfruwMbxMALMka+YtZeGoLuDEySVmVAPaonkNoBRIw/ectu8b9tVQCJNgp4a4knp+tg==",
4102+ "dev": true
4103+ },
4104+ "node_modules/jasmine-ts": {
4105+ "version": "0.4.0",
4106+ "resolved": "https://registry.npmjs.org/jasmine-ts/-/jasmine-ts-0.4.0.tgz",
4107+ "integrity": "sha512-bIAWJKUwxfuZfGI1ctEbny7+dsyFzsN0eLzOokxh0qIUCofai2WUEKoe3MMllkGEBXJzbEVYr2IyhJBv4j7SBA==",
4108+ "dev": true,
4109+ "dependencies": {
4110+ "yargs": "^17.0.1"
4111+ },
4112+ "bin": {
4113+ "jasmine-ts": "lib/index.js"
4114+ },
4115+ "peerDependencies": {
4116+ "jasmine": ">=3.4",
4117+ "ts-node": ">=3.2.0 <=11",
4118+ "typescript": ">=3.5.2"
4119+ }
4120+ },
4121+ "node_modules/jasmine-ts-console-reporter": {
4122+ "version": "3.1.1",
4123+ "resolved": "https://registry.npmjs.org/jasmine-ts-console-reporter/-/jasmine-ts-console-reporter-3.1.1.tgz",
4124+ "integrity": "sha512-sKR3Dj2VkPbNBxN65KEYIKL5O+/6sG+j4zyhvUUUMuN4CjsuDiUhoneaj4xsIY8XvyTD4l/b9jtJ1uwSb/mZPg==",
4125+ "dev": true,
4126+ "dependencies": {
4127+ "error-stack-parser": "^2.0.1",
4128+ "minimatch": "^3.0.4",
4129+ "source-map": "^0.5.7",
4130+ "source-map-resolve": "^0.5.0"
4131+ }
4132+ },
4133+ "node_modules/jest-worker": {
4134+ "version": "27.5.1",
4135+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
4136+ "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
4137+ "dev": true,
4138+ "dependencies": {
4139+ "@types/node": "*",
4140+ "merge-stream": "^2.0.0",
4141+ "supports-color": "^8.0.0"
4142+ },
4143+ "engines": {
4144+ "node": ">= 10.13.0"
4145+ }
4146+ },
4147+ "node_modules/jest-worker/node_modules/supports-color": {
4148+ "version": "8.1.1",
4149+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
4150+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
4151+ "dev": true,
4152+ "dependencies": {
4153+ "has-flag": "^4.0.0"
4154+ },
4155+ "engines": {
4156+ "node": ">=10"
4157+ },
4158+ "funding": {
4159+ "url": "https://github.com/chalk/supports-color?sponsor=1"
4160+ }
4161+ },
4162+ "node_modules/js-yaml": {
4163+ "version": "4.1.0",
4164+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
4165+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
4166+ "dev": true,
4167+ "dependencies": {
4168+ "argparse": "^2.0.1"
4169+ },
4170+ "bin": {
4171+ "js-yaml": "bin/js-yaml.js"
4172+ }
4173+ },
4174+ "node_modules/jsdom": {
4175+ "version": "16.7.0",
4176+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz",
4177+ "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==",
4178+ "dependencies": {
4179+ "abab": "^2.0.5",
4180+ "acorn": "^8.2.4",
4181+ "acorn-globals": "^6.0.0",
4182+ "cssom": "^0.4.4",
4183+ "cssstyle": "^2.3.0",
4184+ "data-urls": "^2.0.0",
4185+ "decimal.js": "^10.2.1",
4186+ "domexception": "^2.0.1",
4187+ "escodegen": "^2.0.0",
4188+ "form-data": "^3.0.0",
4189+ "html-encoding-sniffer": "^2.0.1",
4190+ "http-proxy-agent": "^4.0.1",
4191+ "https-proxy-agent": "^5.0.0",
4192+ "is-potential-custom-element-name": "^1.0.1",
4193+ "nwsapi": "^2.2.0",
4194+ "parse5": "6.0.1",
4195+ "saxes": "^5.0.1",
4196+ "symbol-tree": "^3.2.4",
4197+ "tough-cookie": "^4.0.0",
4198+ "w3c-hr-time": "^1.0.2",
4199+ "w3c-xmlserializer": "^2.0.0",
4200+ "webidl-conversions": "^6.1.0",
4201+ "whatwg-encoding": "^1.0.5",
4202+ "whatwg-mimetype": "^2.3.0",
4203+ "whatwg-url": "^8.5.0",
4204+ "ws": "^7.4.6",
4205+ "xml-name-validator": "^3.0.0"
4206+ },
4207+ "engines": {
4208+ "node": ">=10"
4209+ },
4210+ "peerDependencies": {
4211+ "canvas": "^2.5.0"
4212+ },
4213+ "peerDependenciesMeta": {
4214+ "canvas": {
4215+ "optional": true
4216+ }
4217+ }
4218+ },
4219+ "node_modules/jsdom/node_modules/form-data": {
4220+ "version": "3.0.1",
4221+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
4222+ "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
4223+ "dependencies": {
4224+ "asynckit": "^0.4.0",
4225+ "combined-stream": "^1.0.8",
4226+ "mime-types": "^2.1.12"
4227+ },
4228+ "engines": {
4229+ "node": ">= 6"
4230+ }
4231+ },
4232+ "node_modules/json-parse-better-errors": {
4233+ "version": "1.0.2",
4234+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
4235+ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
4236+ "dev": true
4237+ },
4238+ "node_modules/json-schema-traverse": {
4239+ "version": "0.4.1",
4240+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
4241+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
4242+ "dev": true
4243+ },
4244+ "node_modules/json-stable-stringify-without-jsonify": {
4245+ "version": "1.0.1",
4246+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
4247+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
4248+ "dev": true
4249+ },
4250+ "node_modules/json-stringify-safe": {
4251+ "version": "5.0.1",
4252+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
4253+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
4254+ },
4255+ "node_modules/json5": {
4256+ "version": "2.2.1",
4257+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
4258+ "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==",
4259+ "dev": true,
4260+ "bin": {
4261+ "json5": "lib/cli.js"
4262+ },
4263+ "engines": {
4264+ "node": ">=6"
4265+ }
4266+ },
4267+ "node_modules/jsonfile": {
4268+ "version": "6.1.0",
4269+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
4270+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
4271+ "dev": true,
4272+ "dependencies": {
4273+ "universalify": "^2.0.0"
4274+ },
4275+ "optionalDependencies": {
4276+ "graceful-fs": "^4.1.6"
4277+ }
4278+ },
4279+ "node_modules/jszip": {
4280+ "version": "3.9.1",
4281+ "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.9.1.tgz",
4282+ "integrity": "sha512-H9A60xPqJ1CuC4Ka6qxzXZeU8aNmgOeP5IFqwJbQQwtu2EUYxota3LdsiZWplF7Wgd9tkAd0mdu36nceSaPuYw==",
4283+ "dependencies": {
4284+ "lie": "~3.3.0",
4285+ "pako": "~1.0.2",
4286+ "readable-stream": "~2.3.6",
4287+ "set-immediate-shim": "~1.0.1"
4288+ }
4289+ },
4290+ "node_modules/keygrip": {
4291+ "version": "1.1.0",
4292+ "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz",
4293+ "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==",
4294+ "dependencies": {
4295+ "tsscmp": "1.0.6"
4296+ },
4297+ "engines": {
4298+ "node": ">= 0.6"
4299+ }
4300+ },
4301+ "node_modules/kind-of": {
4302+ "version": "6.0.3",
4303+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
4304+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
4305+ "dev": true,
4306+ "engines": {
4307+ "node": ">=0.10.0"
4308+ }
4309+ },
4310+ "node_modules/koa": {
4311+ "version": "2.13.4",
4312+ "resolved": "https://registry.npmjs.org/koa/-/koa-2.13.4.tgz",
4313+ "integrity": "sha512-43zkIKubNbnrULWlHdN5h1g3SEKXOEzoAlRsHOTFpnlDu8JlAOZSMJBLULusuXRequboiwJcj5vtYXKB3k7+2g==",
4314+ "dependencies": {
4315+ "accepts": "^1.3.5",
4316+ "cache-content-type": "^1.0.0",
4317+ "content-disposition": "~0.5.2",
4318+ "content-type": "^1.0.4",
4319+ "cookies": "~0.8.0",
4320+ "debug": "^4.3.2",
4321+ "delegates": "^1.0.0",
4322+ "depd": "^2.0.0",
4323+ "destroy": "^1.0.4",
4324+ "encodeurl": "^1.0.2",
4325+ "escape-html": "^1.0.3",
4326+ "fresh": "~0.5.2",
4327+ "http-assert": "^1.3.0",
4328+ "http-errors": "^1.6.3",
4329+ "is-generator-function": "^1.0.7",
4330+ "koa-compose": "^4.1.0",
4331+ "koa-convert": "^2.0.0",
4332+ "on-finished": "^2.3.0",
4333+ "only": "~0.0.2",
4334+ "parseurl": "^1.3.2",
4335+ "statuses": "^1.5.0",
4336+ "type-is": "^1.6.16",
4337+ "vary": "^1.1.2"
4338+ },
4339+ "engines": {
4340+ "node": "^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4"
4341+ }
4342+ },
4343+ "node_modules/koa-bodyparser": {
4344+ "version": "4.3.0",
4345+ "resolved": "https://registry.npmjs.org/koa-bodyparser/-/koa-bodyparser-4.3.0.tgz",
4346+ "integrity": "sha512-uyV8G29KAGwZc4q/0WUAjH+Tsmuv9ImfBUF2oZVyZtaeo0husInagyn/JH85xMSxM0hEk/mbCII5ubLDuqW/Rw==",
4347+ "dependencies": {
4348+ "co-body": "^6.0.0",
4349+ "copy-to": "^2.0.1"
4350+ },
4351+ "engines": {
4352+ "node": ">=8.0.0"
4353+ }
4354+ },
4355+ "node_modules/koa-compose": {
4356+ "version": "4.1.0",
4357+ "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz",
4358+ "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw=="
4359+ },
4360+ "node_modules/koa-convert": {
4361+ "version": "2.0.0",
4362+ "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-2.0.0.tgz",
4363+ "integrity": "sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==",
4364+ "dependencies": {
4365+ "co": "^4.6.0",
4366+ "koa-compose": "^4.1.0"
4367+ },
4368+ "engines": {
4369+ "node": ">= 10"
4370+ }
4371+ },
4372+ "node_modules/koa-is-json": {
4373+ "version": "1.0.0",
4374+ "resolved": "https://registry.npmjs.org/koa-is-json/-/koa-is-json-1.0.0.tgz",
4375+ "integrity": "sha1-JzwH7c3Ljfaiwat9We52SRRR7BQ="
4376+ },
4377+ "node_modules/koa-json": {
4378+ "version": "2.0.2",
4379+ "resolved": "https://registry.npmjs.org/koa-json/-/koa-json-2.0.2.tgz",
4380+ "integrity": "sha1-Nq8U5uofXWRtfESihXAcb4Wk/eQ=",
4381+ "dependencies": {
4382+ "koa-is-json": "1",
4383+ "streaming-json-stringify": "3"
4384+ }
4385+ },
4386+ "node_modules/koa/node_modules/depd": {
4387+ "version": "2.0.0",
4388+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
4389+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
4390+ "engines": {
4391+ "node": ">= 0.8"
4392+ }
4393+ },
4394+ "node_modules/levn": {
4395+ "version": "0.4.1",
4396+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
4397+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
4398+ "dev": true,
4399+ "dependencies": {
4400+ "prelude-ls": "^1.2.1",
4401+ "type-check": "~0.4.0"
4402+ },
4403+ "engines": {
4404+ "node": ">= 0.8.0"
4405+ }
4406+ },
4407+ "node_modules/lie": {
4408+ "version": "3.3.0",
4409+ "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
4410+ "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
4411+ "dependencies": {
4412+ "immediate": "~3.0.5"
4413+ }
4414+ },
4415+ "node_modules/lilconfig": {
4416+ "version": "2.0.4",
4417+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz",
4418+ "integrity": "sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==",
4419+ "dev": true,
4420+ "engines": {
4421+ "node": ">=10"
4422+ }
4423+ },
4424+ "node_modules/lint-staged": {
4425+ "version": "12.3.7",
4426+ "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.3.7.tgz",
4427+ "integrity": "sha512-/S4D726e2GIsDVWIk1XGvheCaDm1SJRQp8efamZFWJxQMVEbOwSysp7xb49Oo73KYCdy97mIWinhlxcoNqIfIQ==",
4428+ "dev": true,
4429+ "dependencies": {
4430+ "cli-truncate": "^3.1.0",
4431+ "colorette": "^2.0.16",
4432+ "commander": "^8.3.0",
4433+ "debug": "^4.3.3",
4434+ "execa": "^5.1.1",
4435+ "lilconfig": "2.0.4",
4436+ "listr2": "^4.0.1",
4437+ "micromatch": "^4.0.4",
4438+ "normalize-path": "^3.0.0",
4439+ "object-inspect": "^1.12.0",
4440+ "pidtree": "^0.5.0",
4441+ "string-argv": "^0.3.1",
4442+ "supports-color": "^9.2.1",
4443+ "yaml": "^1.10.2"
4444+ },
4445+ "bin": {
4446+ "lint-staged": "bin/lint-staged.js"
4447+ },
4448+ "engines": {
4449+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
4450+ },
4451+ "funding": {
4452+ "url": "https://opencollective.com/lint-staged"
4453+ }
4454+ },
4455+ "node_modules/lint-staged/node_modules/commander": {
4456+ "version": "8.3.0",
4457+ "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
4458+ "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
4459+ "dev": true,
4460+ "engines": {
4461+ "node": ">= 12"
4462+ }
4463+ },
4464+ "node_modules/lint-staged/node_modules/supports-color": {
4465+ "version": "9.2.2",
4466+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.2.2.tgz",
4467+ "integrity": "sha512-XC6g/Kgux+rJXmwokjm9ECpD6k/smUoS5LKlUCcsYr4IY3rW0XyAympon2RmxGrlnZURMpg5T18gWDP9CsHXFA==",
4468+ "dev": true,
4469+ "engines": {
4470+ "node": ">=12"
4471+ },
4472+ "funding": {
4473+ "url": "https://github.com/chalk/supports-color?sponsor=1"
4474+ }
4475+ },
4476+ "node_modules/listr2": {
4477+ "version": "4.0.5",
4478+ "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz",
4479+ "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==",
4480+ "dev": true,
4481+ "dependencies": {
4482+ "cli-truncate": "^2.1.0",
4483+ "colorette": "^2.0.16",
4484+ "log-update": "^4.0.0",
4485+ "p-map": "^4.0.0",
4486+ "rfdc": "^1.3.0",
4487+ "rxjs": "^7.5.5",
4488+ "through": "^2.3.8",
4489+ "wrap-ansi": "^7.0.0"
4490+ },
4491+ "engines": {
4492+ "node": ">=12"
4493+ },
4494+ "peerDependencies": {
4495+ "enquirer": ">= 2.3.0 < 3"
4496+ },
4497+ "peerDependenciesMeta": {
4498+ "enquirer": {
4499+ "optional": true
4500+ }
4501+ }
4502+ },
4503+ "node_modules/listr2/node_modules/cli-truncate": {
4504+ "version": "2.1.0",
4505+ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz",
4506+ "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==",
4507+ "dev": true,
4508+ "dependencies": {
4509+ "slice-ansi": "^3.0.0",
4510+ "string-width": "^4.2.0"
4511+ },
4512+ "engines": {
4513+ "node": ">=8"
4514+ },
4515+ "funding": {
4516+ "url": "https://github.com/sponsors/sindresorhus"
4517+ }
4518+ },
4519+ "node_modules/listr2/node_modules/is-fullwidth-code-point": {
4520+ "version": "3.0.0",
4521+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
4522+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
4523+ "dev": true,
4524+ "engines": {
4525+ "node": ">=8"
4526+ }
4527+ },
4528+ "node_modules/listr2/node_modules/p-map": {
4529+ "version": "4.0.0",
4530+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
4531+ "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
4532+ "dev": true,
4533+ "dependencies": {
4534+ "aggregate-error": "^3.0.0"
4535+ },
4536+ "engines": {
4537+ "node": ">=10"
4538+ },
4539+ "funding": {
4540+ "url": "https://github.com/sponsors/sindresorhus"
4541+ }
4542+ },
4543+ "node_modules/listr2/node_modules/rxjs": {
4544+ "version": "7.5.5",
4545+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz",
4546+ "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==",
4547+ "dev": true,
4548+ "dependencies": {
4549+ "tslib": "^2.1.0"
4550+ }
4551+ },
4552+ "node_modules/listr2/node_modules/slice-ansi": {
4553+ "version": "3.0.0",
4554+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz",
4555+ "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==",
4556+ "dev": true,
4557+ "dependencies": {
4558+ "ansi-styles": "^4.0.0",
4559+ "astral-regex": "^2.0.0",
4560+ "is-fullwidth-code-point": "^3.0.0"
4561+ },
4562+ "engines": {
4563+ "node": ">=8"
4564+ }
4565+ },
4566+ "node_modules/loader-runner": {
4567+ "version": "4.2.0",
4568+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz",
4569+ "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==",
4570+ "dev": true,
4571+ "engines": {
4572+ "node": ">=6.11.5"
4573+ }
4574+ },
4575+ "node_modules/loader-utils": {
4576+ "version": "2.0.2",
4577+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz",
4578+ "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==",
4579+ "dev": true,
4580+ "dependencies": {
4581+ "big.js": "^5.2.2",
4582+ "emojis-list": "^3.0.0",
4583+ "json5": "^2.1.2"
4584+ },
4585+ "engines": {
4586+ "node": ">=8.9.0"
4587+ }
4588+ },
4589+ "node_modules/locate-path": {
4590+ "version": "2.0.0",
4591+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
4592+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
4593+ "dev": true,
4594+ "dependencies": {
4595+ "p-locate": "^2.0.0",
4596+ "path-exists": "^3.0.0"
4597+ },
4598+ "engines": {
4599+ "node": ">=4"
4600+ }
4601+ },
4602+ "node_modules/lodash": {
4603+ "version": "4.17.21",
4604+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
4605+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
4606+ },
4607+ "node_modules/lodash.merge": {
4608+ "version": "4.6.2",
4609+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
4610+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
4611+ "dev": true
4612+ },
4613+ "node_modules/log-update": {
4614+ "version": "4.0.0",
4615+ "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz",
4616+ "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==",
4617+ "dev": true,
4618+ "dependencies": {
4619+ "ansi-escapes": "^4.3.0",
4620+ "cli-cursor": "^3.1.0",
4621+ "slice-ansi": "^4.0.0",
4622+ "wrap-ansi": "^6.2.0"
4623+ },
4624+ "engines": {
4625+ "node": ">=10"
4626+ },
4627+ "funding": {
4628+ "url": "https://github.com/sponsors/sindresorhus"
4629+ }
4630+ },
4631+ "node_modules/log-update/node_modules/is-fullwidth-code-point": {
4632+ "version": "3.0.0",
4633+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
4634+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
4635+ "dev": true,
4636+ "engines": {
4637+ "node": ">=8"
4638+ }
4639+ },
4640+ "node_modules/log-update/node_modules/slice-ansi": {
4641+ "version": "4.0.0",
4642+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
4643+ "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
4644+ "dev": true,
4645+ "dependencies": {
4646+ "ansi-styles": "^4.0.0",
4647+ "astral-regex": "^2.0.0",
4648+ "is-fullwidth-code-point": "^3.0.0"
4649+ },
4650+ "engines": {
4651+ "node": ">=10"
4652+ },
4653+ "funding": {
4654+ "url": "https://github.com/chalk/slice-ansi?sponsor=1"
4655+ }
4656+ },
4657+ "node_modules/log-update/node_modules/wrap-ansi": {
4658+ "version": "6.2.0",
4659+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
4660+ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
4661+ "dev": true,
4662+ "dependencies": {
4663+ "ansi-styles": "^4.0.0",
4664+ "string-width": "^4.1.0",
4665+ "strip-ansi": "^6.0.0"
4666+ },
4667+ "engines": {
4668+ "node": ">=8"
4669+ }
4670+ },
4671+ "node_modules/lowdb": {
4672+ "version": "1.0.0",
4673+ "resolved": "https://registry.npmjs.org/lowdb/-/lowdb-1.0.0.tgz",
4674+ "integrity": "sha512-2+x8esE/Wb9SQ1F9IHaYWfsC9FIecLOPrK4g17FGEayjUWH172H6nwicRovGvSE2CPZouc2MCIqCI7h9d+GftQ==",
4675+ "dependencies": {
4676+ "graceful-fs": "^4.1.3",
4677+ "is-promise": "^2.1.0",
4678+ "lodash": "4",
4679+ "pify": "^3.0.0",
4680+ "steno": "^0.4.1"
4681+ },
4682+ "engines": {
4683+ "node": ">=4"
4684+ }
4685+ },
4686+ "node_modules/lowdb/node_modules/pify": {
4687+ "version": "3.0.0",
4688+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
4689+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
4690+ "engines": {
4691+ "node": ">=4"
4692+ }
4693+ },
4694+ "node_modules/lru-cache": {
4695+ "version": "7.8.1",
4696+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.1.tgz",
4697+ "integrity": "sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==",
4698+ "dev": true,
4699+ "engines": {
4700+ "node": ">=12"
4701+ }
4702+ },
4703+ "node_modules/lunr": {
4704+ "version": "2.3.9",
4705+ "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz",
4706+ "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow=="
4707+ },
4708+ "node_modules/make-error": {
4709+ "version": "1.3.6",
4710+ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
4711+ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
4712+ "dev": true
4713+ },
4714+ "node_modules/media-typer": {
4715+ "version": "0.3.0",
4716+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
4717+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
4718+ "engines": {
4719+ "node": ">= 0.6"
4720+ }
4721+ },
4722+ "node_modules/memory-fs": {
4723+ "version": "0.5.0",
4724+ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
4725+ "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
4726+ "dev": true,
4727+ "dependencies": {
4728+ "errno": "^0.1.3",
4729+ "readable-stream": "^2.0.1"
4730+ },
4731+ "engines": {
4732+ "node": ">=4.3.0 <5.0.0 || >=5.10"
4733+ }
4734+ },
4735+ "node_modules/merge-stream": {
4736+ "version": "2.0.0",
4737+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
4738+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
4739+ "dev": true
4740+ },
4741+ "node_modules/merge2": {
4742+ "version": "1.4.1",
4743+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
4744+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
4745+ "dev": true,
4746+ "engines": {
4747+ "node": ">= 8"
4748+ }
4749+ },
4750+ "node_modules/methods": {
4751+ "version": "1.1.2",
4752+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
4753+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
4754+ "engines": {
4755+ "node": ">= 0.6"
4756+ }
4757+ },
4758+ "node_modules/micromatch": {
4759+ "version": "4.0.5",
4760+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
4761+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
4762+ "dev": true,
4763+ "dependencies": {
4764+ "braces": "^3.0.2",
4765+ "picomatch": "^2.3.1"
4766+ },
4767+ "engines": {
4768+ "node": ">=8.6"
4769+ }
4770+ },
4771+ "node_modules/mime-db": {
4772+ "version": "1.52.0",
4773+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
4774+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
4775+ "engines": {
4776+ "node": ">= 0.6"
4777+ }
4778+ },
4779+ "node_modules/mime-types": {
4780+ "version": "2.1.35",
4781+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
4782+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
4783+ "dependencies": {
4784+ "mime-db": "1.52.0"
4785+ },
4786+ "engines": {
4787+ "node": ">= 0.6"
4788+ }
4789+ },
4790+ "node_modules/mimic-fn": {
4791+ "version": "2.1.0",
4792+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
4793+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
4794+ "engines": {
4795+ "node": ">=6"
4796+ }
4797+ },
4798+ "node_modules/mimic-response": {
4799+ "version": "2.1.0",
4800+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz",
4801+ "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==",
4802+ "dev": true,
4803+ "engines": {
4804+ "node": ">=8"
4805+ },
4806+ "funding": {
4807+ "url": "https://github.com/sponsors/sindresorhus"
4808+ }
4809+ },
4810+ "node_modules/minimatch": {
4811+ "version": "3.1.2",
4812+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
4813+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
4814+ "dev": true,
4815+ "dependencies": {
4816+ "brace-expansion": "^1.1.7"
4817+ },
4818+ "engines": {
4819+ "node": "*"
4820+ }
4821+ },
4822+ "node_modules/minimist": {
4823+ "version": "1.2.6",
4824+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
4825+ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q=="
4826+ },
4827+ "node_modules/mkdirp": {
4828+ "version": "0.5.6",
4829+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
4830+ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
4831+ "dependencies": {
4832+ "minimist": "^1.2.6"
4833+ },
4834+ "bin": {
4835+ "mkdirp": "bin/cmd.js"
4836+ }
4837+ },
4838+ "node_modules/mkdirp-classic": {
4839+ "version": "0.5.3",
4840+ "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
4841+ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
4842+ "dev": true
4843+ },
4844+ "node_modules/ms": {
4845+ "version": "2.1.2",
4846+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
4847+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
4848+ },
4849+ "node_modules/multer": {
4850+ "version": "1.4.4",
4851+ "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4.tgz",
4852+ "integrity": "sha512-2wY2+xD4udX612aMqMcB8Ws2Voq6NIUPEtD1be6m411T4uDH/VtL9i//xvcyFlTVfRdaBsk7hV5tgrGQqhuBiw==",
4853+ "dependencies": {
4854+ "append-field": "^1.0.0",
4855+ "busboy": "^0.2.11",
4856+ "concat-stream": "^1.5.2",
4857+ "mkdirp": "^0.5.4",
4858+ "object-assign": "^4.1.1",
4859+ "on-finished": "^2.3.0",
4860+ "type-is": "^1.6.4",
4861+ "xtend": "^4.0.0"
4862+ },
4863+ "engines": {
4864+ "node": ">= 0.10.0"
4865+ }
4866+ },
4867+ "node_modules/multistream": {
4868+ "version": "4.1.0",
4869+ "resolved": "https://registry.npmjs.org/multistream/-/multistream-4.1.0.tgz",
4870+ "integrity": "sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw==",
4871+ "dev": true,
4872+ "funding": [
4873+ {
4874+ "type": "github",
4875+ "url": "https://github.com/sponsors/feross"
4876+ },
4877+ {
4878+ "type": "patreon",
4879+ "url": "https://www.patreon.com/feross"
4880+ },
4881+ {
4882+ "type": "consulting",
4883+ "url": "https://feross.org/support"
4884+ }
4885+ ],
4886+ "dependencies": {
4887+ "once": "^1.4.0",
4888+ "readable-stream": "^3.6.0"
4889+ }
4890+ },
4891+ "node_modules/multistream/node_modules/readable-stream": {
4892+ "version": "3.6.0",
4893+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
4894+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
4895+ "dev": true,
4896+ "dependencies": {
4897+ "inherits": "^2.0.3",
4898+ "string_decoder": "^1.1.1",
4899+ "util-deprecate": "^1.0.1"
4900+ },
4901+ "engines": {
4902+ "node": ">= 6"
4903+ }
4904+ },
4905+ "node_modules/mute-stream": {
4906+ "version": "0.0.8",
4907+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
4908+ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA=="
4909+ },
4910+ "node_modules/napi-build-utils": {
4911+ "version": "1.0.2",
4912+ "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz",
4913+ "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==",
4914+ "dev": true
4915+ },
4916+ "node_modules/natural-compare": {
4917+ "version": "1.4.0",
4918+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
4919+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
4920+ "dev": true
4921+ },
4922+ "node_modules/negotiator": {
4923+ "version": "0.6.3",
4924+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
4925+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
4926+ "engines": {
4927+ "node": ">= 0.6"
4928+ }
4929+ },
4930+ "node_modules/neo-async": {
4931+ "version": "2.6.2",
4932+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
4933+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
4934+ "dev": true
4935+ },
4936+ "node_modules/node-abi": {
4937+ "version": "2.30.1",
4938+ "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz",
4939+ "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==",
4940+ "dev": true,
4941+ "dependencies": {
4942+ "semver": "^5.4.1"
4943+ }
4944+ },
4945+ "node_modules/node-abi/node_modules/semver": {
4946+ "version": "5.7.1",
4947+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
4948+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
4949+ "dev": true,
4950+ "bin": {
4951+ "semver": "bin/semver"
4952+ }
4953+ },
4954+ "node_modules/node-fetch": {
4955+ "version": "2.6.7",
4956+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
4957+ "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
4958+ "dependencies": {
4959+ "whatwg-url": "^5.0.0"
4960+ },
4961+ "engines": {
4962+ "node": "4.x || >=6.0.0"
4963+ },
4964+ "peerDependencies": {
4965+ "encoding": "^0.1.0"
4966+ },
4967+ "peerDependenciesMeta": {
4968+ "encoding": {
4969+ "optional": true
4970+ }
4971+ }
4972+ },
4973+ "node_modules/node-fetch/node_modules/tr46": {
4974+ "version": "0.0.3",
4975+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
4976+ "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
4977+ },
4978+ "node_modules/node-fetch/node_modules/webidl-conversions": {
4979+ "version": "3.0.1",
4980+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
4981+ "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
4982+ },
4983+ "node_modules/node-fetch/node_modules/whatwg-url": {
4984+ "version": "5.0.0",
4985+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
4986+ "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
4987+ "dependencies": {
4988+ "tr46": "~0.0.3",
4989+ "webidl-conversions": "^3.0.0"
4990+ }
4991+ },
4992+ "node_modules/node-forge": {
4993+ "version": "1.3.1",
4994+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz",
4995+ "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==",
4996+ "engines": {
4997+ "node": ">= 6.13.0"
4998+ }
4999+ },
5000+ "node_modules/node-releases": {
5001+ "version": "2.0.2",
5002+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz",
5003+ "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==",
5004+ "dev": true
5005+ },
5006+ "node_modules/normalize-path": {
5007+ "version": "3.0.0",
5008+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
5009+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
5010+ "dev": true,
5011+ "engines": {
5012+ "node": ">=0.10.0"
5013+ }
5014+ },
5015+ "node_modules/npm-run-path": {
5016+ "version": "4.0.1",
5017+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
5018+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
5019+ "dev": true,
5020+ "dependencies": {
5021+ "path-key": "^3.0.0"
5022+ },
5023+ "engines": {
5024+ "node": ">=8"
5025+ }
5026+ },
5027+ "node_modules/npmlog": {
5028+ "version": "4.1.2",
5029+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
5030+ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
5031+ "dev": true,
5032+ "dependencies": {
5033+ "are-we-there-yet": "~1.1.2",
5034+ "console-control-strings": "~1.1.0",
5035+ "gauge": "~2.7.3",
5036+ "set-blocking": "~2.0.0"
5037+ }
5038+ },
5039+ "node_modules/number-is-nan": {
5040+ "version": "1.0.1",
5041+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
5042+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
5043+ "dev": true,
5044+ "engines": {
5045+ "node": ">=0.10.0"
5046+ }
5047+ },
5048+ "node_modules/nwsapi": {
5049+ "version": "2.2.0",
5050+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
5051+ "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ=="
5052+ },
5053+ "node_modules/object-assign": {
5054+ "version": "4.1.1",
5055+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
5056+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
5057+ "engines": {
5058+ "node": ">=0.10.0"
5059+ }
5060+ },
5061+ "node_modules/object-inspect": {
5062+ "version": "1.12.0",
5063+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz",
5064+ "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==",
5065+ "funding": {
5066+ "url": "https://github.com/sponsors/ljharb"
5067+ }
5068+ },
5069+ "node_modules/object-keys": {
5070+ "version": "1.1.1",
5071+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
5072+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
5073+ "dev": true,
5074+ "engines": {
5075+ "node": ">= 0.4"
5076+ }
5077+ },
5078+ "node_modules/object.assign": {
5079+ "version": "4.1.2",
5080+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
5081+ "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
5082+ "dev": true,
5083+ "dependencies": {
5084+ "call-bind": "^1.0.0",
5085+ "define-properties": "^1.1.3",
5086+ "has-symbols": "^1.0.1",
5087+ "object-keys": "^1.1.1"
5088+ },
5089+ "engines": {
5090+ "node": ">= 0.4"
5091+ },
5092+ "funding": {
5093+ "url": "https://github.com/sponsors/ljharb"
5094+ }
5095+ },
5096+ "node_modules/object.values": {
5097+ "version": "1.1.5",
5098+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz",
5099+ "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==",
5100+ "dev": true,
5101+ "dependencies": {
5102+ "call-bind": "^1.0.2",
5103+ "define-properties": "^1.1.3",
5104+ "es-abstract": "^1.19.1"
5105+ },
5106+ "engines": {
5107+ "node": ">= 0.4"
5108+ },
5109+ "funding": {
5110+ "url": "https://github.com/sponsors/ljharb"
5111+ }
5112+ },
5113+ "node_modules/on-finished": {
5114+ "version": "2.4.1",
5115+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
5116+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
5117+ "dependencies": {
5118+ "ee-first": "1.1.1"
5119+ },
5120+ "engines": {
5121+ "node": ">= 0.8"
5122+ }
5123+ },
5124+ "node_modules/once": {
5125+ "version": "1.4.0",
5126+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
5127+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
5128+ "dev": true,
5129+ "dependencies": {
5130+ "wrappy": "1"
5131+ }
5132+ },
5133+ "node_modules/onetime": {
5134+ "version": "5.1.2",
5135+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
5136+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
5137+ "dependencies": {
5138+ "mimic-fn": "^2.1.0"
5139+ },
5140+ "engines": {
5141+ "node": ">=6"
5142+ },
5143+ "funding": {
5144+ "url": "https://github.com/sponsors/sindresorhus"
5145+ }
5146+ },
5147+ "node_modules/only": {
5148+ "version": "0.0.2",
5149+ "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz",
5150+ "integrity": "sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q="
5151+ },
5152+ "node_modules/open": {
5153+ "version": "8.4.0",
5154+ "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz",
5155+ "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==",
5156+ "dependencies": {
5157+ "define-lazy-prop": "^2.0.0",
5158+ "is-docker": "^2.1.1",
5159+ "is-wsl": "^2.2.0"
5160+ },
5161+ "engines": {
5162+ "node": ">=12"
5163+ },
5164+ "funding": {
5165+ "url": "https://github.com/sponsors/sindresorhus"
5166+ }
5167+ },
5168+ "node_modules/optionator": {
5169+ "version": "0.9.1",
5170+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
5171+ "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
5172+ "dev": true,
5173+ "dependencies": {
5174+ "deep-is": "^0.1.3",
5175+ "fast-levenshtein": "^2.0.6",
5176+ "levn": "^0.4.1",
5177+ "prelude-ls": "^1.2.1",
5178+ "type-check": "^0.4.0",
5179+ "word-wrap": "^1.2.3"
5180+ },
5181+ "engines": {
5182+ "node": ">= 0.8.0"
5183+ }
5184+ },
5185+ "node_modules/os-tmpdir": {
5186+ "version": "1.0.2",
5187+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
5188+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
5189+ "engines": {
5190+ "node": ">=0.10.0"
5191+ }
5192+ },
5193+ "node_modules/p-is-promise": {
5194+ "version": "3.0.0",
5195+ "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz",
5196+ "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==",
5197+ "dev": true,
5198+ "engines": {
5199+ "node": ">=8"
5200+ }
5201+ },
5202+ "node_modules/p-limit": {
5203+ "version": "1.3.0",
5204+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
5205+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
5206+ "dev": true,
5207+ "dependencies": {
5208+ "p-try": "^1.0.0"
5209+ },
5210+ "engines": {
5211+ "node": ">=4"
5212+ }
5213+ },
5214+ "node_modules/p-locate": {
5215+ "version": "2.0.0",
5216+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
5217+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
5218+ "dev": true,
5219+ "dependencies": {
5220+ "p-limit": "^1.1.0"
5221+ },
5222+ "engines": {
5223+ "node": ">=4"
5224+ }
5225+ },
5226+ "node_modules/p-map": {
5227+ "version": "2.1.0",
5228+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
5229+ "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
5230+ "dev": true,
5231+ "engines": {
5232+ "node": ">=6"
5233+ }
5234+ },
5235+ "node_modules/p-try": {
5236+ "version": "1.0.0",
5237+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
5238+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
5239+ "dev": true,
5240+ "engines": {
5241+ "node": ">=4"
5242+ }
5243+ },
5244+ "node_modules/pako": {
5245+ "version": "1.0.11",
5246+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
5247+ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
5248+ },
5249+ "node_modules/papaparse": {
5250+ "version": "5.3.2",
5251+ "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.3.2.tgz",
5252+ "integrity": "sha512-6dNZu0Ki+gyV0eBsFKJhYr+MdQYAzFUGlBMNj3GNrmHxmz1lfRa24CjFObPXtjcetlOv5Ad299MhIK0znp3afw=="
5253+ },
5254+ "node_modules/parent-module": {
5255+ "version": "1.0.1",
5256+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
5257+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
5258+ "dev": true,
5259+ "dependencies": {
5260+ "callsites": "^3.0.0"
5261+ },
5262+ "engines": {
5263+ "node": ">=6"
5264+ }
5265+ },
5266+ "node_modules/parse5": {
5267+ "version": "6.0.1",
5268+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
5269+ "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw=="
5270+ },
5271+ "node_modules/parseurl": {
5272+ "version": "1.3.3",
5273+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
5274+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
5275+ "engines": {
5276+ "node": ">= 0.8"
5277+ }
5278+ },
5279+ "node_modules/path-exists": {
5280+ "version": "3.0.0",
5281+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
5282+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
5283+ "dev": true,
5284+ "engines": {
5285+ "node": ">=4"
5286+ }
5287+ },
5288+ "node_modules/path-is-absolute": {
5289+ "version": "1.0.1",
5290+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
5291+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
5292+ "dev": true,
5293+ "engines": {
5294+ "node": ">=0.10.0"
5295+ }
5296+ },
5297+ "node_modules/path-is-inside": {
5298+ "version": "1.0.2",
5299+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
5300+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
5301+ "dev": true
5302+ },
5303+ "node_modules/path-key": {
5304+ "version": "3.1.1",
5305+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
5306+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
5307+ "dev": true,
5308+ "engines": {
5309+ "node": ">=8"
5310+ }
5311+ },
5312+ "node_modules/path-parse": {
5313+ "version": "1.0.7",
5314+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
5315+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
5316+ "dev": true
5317+ },
5318+ "node_modules/path-to-regexp": {
5319+ "version": "6.2.0",
5320+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.0.tgz",
5321+ "integrity": "sha512-f66KywYG6+43afgE/8j/GoiNyygk/bnoCbps++3ErRKsIYkGGupyv07R2Ok5m9i67Iqc+T2g1eAUGUPzWhYTyg=="
5322+ },
5323+ "node_modules/path-type": {
5324+ "version": "4.0.0",
5325+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
5326+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
5327+ "dev": true,
5328+ "engines": {
5329+ "node": ">=8"
5330+ }
5331+ },
5332+ "node_modules/picocolors": {
5333+ "version": "1.0.0",
5334+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
5335+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
5336+ "dev": true
5337+ },
5338+ "node_modules/picomatch": {
5339+ "version": "2.3.1",
5340+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
5341+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
5342+ "dev": true,
5343+ "engines": {
5344+ "node": ">=8.6"
5345+ },
5346+ "funding": {
5347+ "url": "https://github.com/sponsors/jonschlinkert"
5348+ }
5349+ },
5350+ "node_modules/pidtree": {
5351+ "version": "0.5.0",
5352+ "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.5.0.tgz",
5353+ "integrity": "sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==",
5354+ "dev": true,
5355+ "bin": {
5356+ "pidtree": "bin/pidtree.js"
5357+ },
5358+ "engines": {
5359+ "node": ">=0.10"
5360+ }
5361+ },
5362+ "node_modules/pify": {
5363+ "version": "4.0.1",
5364+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
5365+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
5366+ "dev": true,
5367+ "engines": {
5368+ "node": ">=6"
5369+ }
5370+ },
5371+ "node_modules/pinkie": {
5372+ "version": "2.0.4",
5373+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
5374+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
5375+ "dev": true,
5376+ "engines": {
5377+ "node": ">=0.10.0"
5378+ }
5379+ },
5380+ "node_modules/pinkie-promise": {
5381+ "version": "2.0.1",
5382+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
5383+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
5384+ "dev": true,
5385+ "dependencies": {
5386+ "pinkie": "^2.0.0"
5387+ },
5388+ "engines": {
5389+ "node": ">=0.10.0"
5390+ }
5391+ },
5392+ "node_modules/pkg": {
5393+ "version": "5.6.0",
5394+ "resolved": "https://registry.npmjs.org/pkg/-/pkg-5.6.0.tgz",
5395+ "integrity": "sha512-mHrAVSQWmHA41RnUmRpC7pK9lNnMfdA16CF3cqOI22a8LZxOQzF7M8YWtA2nfs+d7I0MTDXOtkDsAsFXeCpYjg==",
5396+ "dev": true,
5397+ "dependencies": {
5398+ "@babel/parser": "7.16.2",
5399+ "@babel/types": "7.16.0",
5400+ "chalk": "^4.1.2",
5401+ "escodegen": "^2.0.0",
5402+ "fs-extra": "^9.1.0",
5403+ "globby": "^11.0.4",
5404+ "into-stream": "^6.0.0",
5405+ "minimist": "^1.2.5",
5406+ "multistream": "^4.1.0",
5407+ "pkg-fetch": "3.3.0",
5408+ "prebuild-install": "6.1.4",
5409+ "progress": "^2.0.3",
5410+ "resolve": "^1.20.0",
5411+ "stream-meter": "^1.0.4",
5412+ "tslib": "2.3.1"
5413+ },
5414+ "bin": {
5415+ "pkg": "lib-es5/bin.js"
5416+ },
5417+ "peerDependencies": {
5418+ "node-notifier": ">=9.0.1"
5419+ },
5420+ "peerDependenciesMeta": {
5421+ "node-notifier": {
5422+ "optional": true
5423+ }
5424+ }
5425+ },
5426+ "node_modules/pkg-dir": {
5427+ "version": "4.2.0",
5428+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
5429+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
5430+ "dev": true,
5431+ "dependencies": {
5432+ "find-up": "^4.0.0"
5433+ },
5434+ "engines": {
5435+ "node": ">=8"
5436+ }
5437+ },
5438+ "node_modules/pkg-dir/node_modules/find-up": {
5439+ "version": "4.1.0",
5440+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
5441+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
5442+ "dev": true,
5443+ "dependencies": {
5444+ "locate-path": "^5.0.0",
5445+ "path-exists": "^4.0.0"
5446+ },
5447+ "engines": {
5448+ "node": ">=8"
5449+ }
5450+ },
5451+ "node_modules/pkg-dir/node_modules/locate-path": {
5452+ "version": "5.0.0",
5453+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
5454+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
5455+ "dev": true,
5456+ "dependencies": {
5457+ "p-locate": "^4.1.0"
5458+ },
5459+ "engines": {
5460+ "node": ">=8"
5461+ }
5462+ },
5463+ "node_modules/pkg-dir/node_modules/p-limit": {
5464+ "version": "2.3.0",
5465+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
5466+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
5467+ "dev": true,
5468+ "dependencies": {
5469+ "p-try": "^2.0.0"
5470+ },
5471+ "engines": {
5472+ "node": ">=6"
5473+ },
5474+ "funding": {
5475+ "url": "https://github.com/sponsors/sindresorhus"
5476+ }
5477+ },
5478+ "node_modules/pkg-dir/node_modules/p-locate": {
5479+ "version": "4.1.0",
5480+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
5481+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
5482+ "dev": true,
5483+ "dependencies": {
5484+ "p-limit": "^2.2.0"
5485+ },
5486+ "engines": {
5487+ "node": ">=8"
5488+ }
5489+ },
5490+ "node_modules/pkg-dir/node_modules/p-try": {
5491+ "version": "2.2.0",
5492+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
5493+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
5494+ "dev": true,
5495+ "engines": {
5496+ "node": ">=6"
5497+ }
5498+ },
5499+ "node_modules/pkg-dir/node_modules/path-exists": {
5500+ "version": "4.0.0",
5501+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
5502+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
5503+ "dev": true,
5504+ "engines": {
5505+ "node": ">=8"
5506+ }
5507+ },
5508+ "node_modules/pkg-fetch": {
5509+ "version": "3.3.0",
5510+ "resolved": "https://registry.npmjs.org/pkg-fetch/-/pkg-fetch-3.3.0.tgz",
5511+ "integrity": "sha512-xJnIZ1KP+8rNN+VLafwu4tEeV4m8IkFBDdCFqmAJz9K1aiXEtbARmdbEe6HlXWGSVuShSHjFXpfkKRkDBQ5kiA==",
5512+ "dev": true,
5513+ "dependencies": {
5514+ "chalk": "^4.1.2",
5515+ "fs-extra": "^9.1.0",
5516+ "https-proxy-agent": "^5.0.0",
5517+ "node-fetch": "^2.6.6",
5518+ "progress": "^2.0.3",
5519+ "semver": "^7.3.5",
5520+ "tar-fs": "^2.1.1",
5521+ "yargs": "^16.2.0"
5522+ },
5523+ "bin": {
5524+ "pkg-fetch": "lib-es5/bin.js"
5525+ }
5526+ },
5527+ "node_modules/pkg-fetch/node_modules/yargs": {
5528+ "version": "16.2.0",
5529+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
5530+ "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
5531+ "dev": true,
5532+ "dependencies": {
5533+ "cliui": "^7.0.2",
5534+ "escalade": "^3.1.1",
5535+ "get-caller-file": "^2.0.5",
5536+ "require-directory": "^2.1.1",
5537+ "string-width": "^4.2.0",
5538+ "y18n": "^5.0.5",
5539+ "yargs-parser": "^20.2.2"
5540+ },
5541+ "engines": {
5542+ "node": ">=10"
5543+ }
5544+ },
5545+ "node_modules/pkg-fetch/node_modules/yargs-parser": {
5546+ "version": "20.2.9",
5547+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
5548+ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
5549+ "dev": true,
5550+ "engines": {
5551+ "node": ">=10"
5552+ }
5553+ },
5554+ "node_modules/prebuild-install": {
5555+ "version": "6.1.4",
5556+ "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz",
5557+ "integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==",
5558+ "dev": true,
5559+ "dependencies": {
5560+ "detect-libc": "^1.0.3",
5561+ "expand-template": "^2.0.3",
5562+ "github-from-package": "0.0.0",
5563+ "minimist": "^1.2.3",
5564+ "mkdirp-classic": "^0.5.3",
5565+ "napi-build-utils": "^1.0.1",
5566+ "node-abi": "^2.21.0",
5567+ "npmlog": "^4.0.1",
5568+ "pump": "^3.0.0",
5569+ "rc": "^1.2.7",
5570+ "simple-get": "^3.0.3",
5571+ "tar-fs": "^2.0.0",
5572+ "tunnel-agent": "^0.6.0"
5573+ },
5574+ "bin": {
5575+ "prebuild-install": "bin.js"
5576+ },
5577+ "engines": {
5578+ "node": ">=6"
5579+ }
5580+ },
5581+ "node_modules/prelude-ls": {
5582+ "version": "1.2.1",
5583+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
5584+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
5585+ "dev": true,
5586+ "engines": {
5587+ "node": ">= 0.8.0"
5588+ }
5589+ },
5590+ "node_modules/prettier": {
5591+ "version": "2.6.2",
5592+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz",
5593+ "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==",
5594+ "dev": true,
5595+ "bin": {
5596+ "prettier": "bin-prettier.js"
5597+ },
5598+ "engines": {
5599+ "node": ">=10.13.0"
5600+ },
5601+ "funding": {
5602+ "url": "https://github.com/prettier/prettier?sponsor=1"
5603+ }
5604+ },
5605+ "node_modules/process-nextick-args": {
5606+ "version": "2.0.1",
5607+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
5608+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
5609+ },
5610+ "node_modules/progress": {
5611+ "version": "2.0.3",
5612+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
5613+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
5614+ "dev": true,
5615+ "engines": {
5616+ "node": ">=0.4.0"
5617+ }
5618+ },
5619+ "node_modules/proper-lockfile": {
5620+ "version": "4.1.2",
5621+ "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz",
5622+ "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==",
5623+ "dependencies": {
5624+ "graceful-fs": "^4.2.4",
5625+ "retry": "^0.12.0",
5626+ "signal-exit": "^3.0.2"
5627+ }
5628+ },
5629+ "node_modules/prr": {
5630+ "version": "1.0.1",
5631+ "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
5632+ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
5633+ "dev": true
5634+ },
5635+ "node_modules/psl": {
5636+ "version": "1.8.0",
5637+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
5638+ "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
5639+ },
5640+ "node_modules/pump": {
5641+ "version": "3.0.0",
5642+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
5643+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
5644+ "dev": true,
5645+ "dependencies": {
5646+ "end-of-stream": "^1.1.0",
5647+ "once": "^1.3.1"
5648+ }
5649+ },
5650+ "node_modules/punycode": {
5651+ "version": "1.4.1",
5652+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
5653+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
5654+ },
5655+ "node_modules/qs": {
5656+ "version": "6.10.3",
5657+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz",
5658+ "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==",
5659+ "dependencies": {
5660+ "side-channel": "^1.0.4"
5661+ },
5662+ "engines": {
5663+ "node": ">=0.6"
5664+ },
5665+ "funding": {
5666+ "url": "https://github.com/sponsors/ljharb"
5667+ }
5668+ },
5669+ "node_modules/queue-microtask": {
5670+ "version": "1.2.3",
5671+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
5672+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
5673+ "dev": true,
5674+ "funding": [
5675+ {
5676+ "type": "github",
5677+ "url": "https://github.com/sponsors/feross"
5678+ },
5679+ {
5680+ "type": "patreon",
5681+ "url": "https://www.patreon.com/feross"
5682+ },
5683+ {
5684+ "type": "consulting",
5685+ "url": "https://feross.org/support"
5686+ }
5687+ ]
5688+ },
5689+ "node_modules/randombytes": {
5690+ "version": "2.1.0",
5691+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
5692+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
5693+ "dev": true,
5694+ "dependencies": {
5695+ "safe-buffer": "^5.1.0"
5696+ }
5697+ },
5698+ "node_modules/raw-body": {
5699+ "version": "2.5.1",
5700+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
5701+ "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
5702+ "dependencies": {
5703+ "bytes": "3.1.2",
5704+ "http-errors": "2.0.0",
5705+ "iconv-lite": "0.4.24",
5706+ "unpipe": "1.0.0"
5707+ },
5708+ "engines": {
5709+ "node": ">= 0.8"
5710+ }
5711+ },
5712+ "node_modules/raw-body/node_modules/depd": {
5713+ "version": "2.0.0",
5714+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
5715+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
5716+ "engines": {
5717+ "node": ">= 0.8"
5718+ }
5719+ },
5720+ "node_modules/raw-body/node_modules/http-errors": {
5721+ "version": "2.0.0",
5722+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
5723+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
5724+ "dependencies": {
5725+ "depd": "2.0.0",
5726+ "inherits": "2.0.4",
5727+ "setprototypeof": "1.2.0",
5728+ "statuses": "2.0.1",
5729+ "toidentifier": "1.0.1"
5730+ },
5731+ "engines": {
5732+ "node": ">= 0.8"
5733+ }
5734+ },
5735+ "node_modules/raw-body/node_modules/statuses": {
5736+ "version": "2.0.1",
5737+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
5738+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
5739+ "engines": {
5740+ "node": ">= 0.8"
5741+ }
5742+ },
5743+ "node_modules/rc": {
5744+ "version": "1.2.8",
5745+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
5746+ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
5747+ "dev": true,
5748+ "dependencies": {
5749+ "deep-extend": "^0.6.0",
5750+ "ini": "~1.3.0",
5751+ "minimist": "^1.2.0",
5752+ "strip-json-comments": "~2.0.1"
5753+ },
5754+ "bin": {
5755+ "rc": "cli.js"
5756+ }
5757+ },
5758+ "node_modules/rc/node_modules/strip-json-comments": {
5759+ "version": "2.0.1",
5760+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
5761+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
5762+ "dev": true,
5763+ "engines": {
5764+ "node": ">=0.10.0"
5765+ }
5766+ },
5767+ "node_modules/readable-stream": {
5768+ "version": "2.3.7",
5769+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
5770+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
5771+ "dependencies": {
5772+ "core-util-is": "~1.0.0",
5773+ "inherits": "~2.0.3",
5774+ "isarray": "~1.0.0",
5775+ "process-nextick-args": "~2.0.0",
5776+ "safe-buffer": "~5.1.1",
5777+ "string_decoder": "~1.1.1",
5778+ "util-deprecate": "~1.0.1"
5779+ }
5780+ },
5781+ "node_modules/readable-stream/node_modules/safe-buffer": {
5782+ "version": "5.1.2",
5783+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
5784+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
5785+ },
5786+ "node_modules/rechoir": {
5787+ "version": "0.7.1",
5788+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz",
5789+ "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==",
5790+ "dev": true,
5791+ "dependencies": {
5792+ "resolve": "^1.9.0"
5793+ },
5794+ "engines": {
5795+ "node": ">= 0.10"
5796+ }
5797+ },
5798+ "node_modules/regexpp": {
5799+ "version": "3.2.0",
5800+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
5801+ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
5802+ "dev": true,
5803+ "engines": {
5804+ "node": ">=8"
5805+ },
5806+ "funding": {
5807+ "url": "https://github.com/sponsors/mysticatea"
5808+ }
5809+ },
5810+ "node_modules/require-directory": {
5811+ "version": "2.1.1",
5812+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
5813+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
5814+ "dev": true,
5815+ "engines": {
5816+ "node": ">=0.10.0"
5817+ }
5818+ },
5819+ "node_modules/require-from-string": {
5820+ "version": "2.0.2",
5821+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
5822+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
5823+ "dev": true,
5824+ "engines": {
5825+ "node": ">=0.10.0"
5826+ }
5827+ },
5828+ "node_modules/resolve": {
5829+ "version": "1.22.0",
5830+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
5831+ "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
5832+ "dev": true,
5833+ "dependencies": {
5834+ "is-core-module": "^2.8.1",
5835+ "path-parse": "^1.0.7",
5836+ "supports-preserve-symlinks-flag": "^1.0.0"
5837+ },
5838+ "bin": {
5839+ "resolve": "bin/resolve"
5840+ },
5841+ "funding": {
5842+ "url": "https://github.com/sponsors/ljharb"
5843+ }
5844+ },
5845+ "node_modules/resolve-cwd": {
5846+ "version": "3.0.0",
5847+ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
5848+ "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
5849+ "dev": true,
5850+ "dependencies": {
5851+ "resolve-from": "^5.0.0"
5852+ },
5853+ "engines": {
5854+ "node": ">=8"
5855+ }
5856+ },
5857+ "node_modules/resolve-cwd/node_modules/resolve-from": {
5858+ "version": "5.0.0",
5859+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
5860+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
5861+ "dev": true,
5862+ "engines": {
5863+ "node": ">=8"
5864+ }
5865+ },
5866+ "node_modules/resolve-from": {
5867+ "version": "4.0.0",
5868+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
5869+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
5870+ "dev": true,
5871+ "engines": {
5872+ "node": ">=4"
5873+ }
5874+ },
5875+ "node_modules/resolve-url": {
5876+ "version": "0.2.1",
5877+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
5878+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
5879+ "deprecated": "https://github.com/lydell/resolve-url#deprecated",
5880+ "dev": true
5881+ },
5882+ "node_modules/restore-cursor": {
5883+ "version": "3.1.0",
5884+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
5885+ "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
5886+ "dependencies": {
5887+ "onetime": "^5.1.0",
5888+ "signal-exit": "^3.0.2"
5889+ },
5890+ "engines": {
5891+ "node": ">=8"
5892+ }
5893+ },
5894+ "node_modules/retry": {
5895+ "version": "0.12.0",
5896+ "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
5897+ "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=",
5898+ "engines": {
5899+ "node": ">= 4"
5900+ }
5901+ },
5902+ "node_modules/reusify": {
5903+ "version": "1.0.4",
5904+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
5905+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
5906+ "dev": true,
5907+ "engines": {
5908+ "iojs": ">=1.0.0",
5909+ "node": ">=0.10.0"
5910+ }
5911+ },
5912+ "node_modules/rfdc": {
5913+ "version": "1.3.0",
5914+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz",
5915+ "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==",
5916+ "dev": true
5917+ },
5918+ "node_modules/rimraf": {
5919+ "version": "3.0.2",
5920+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
5921+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
5922+ "dev": true,
5923+ "dependencies": {
5924+ "glob": "^7.1.3"
5925+ },
5926+ "bin": {
5927+ "rimraf": "bin.js"
5928+ },
5929+ "funding": {
5930+ "url": "https://github.com/sponsors/isaacs"
5931+ }
5932+ },
5933+ "node_modules/run-async": {
5934+ "version": "2.4.1",
5935+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
5936+ "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
5937+ "engines": {
5938+ "node": ">=0.12.0"
5939+ }
5940+ },
5941+ "node_modules/run-parallel": {
5942+ "version": "1.2.0",
5943+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
5944+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
5945+ "dev": true,
5946+ "funding": [
5947+ {
5948+ "type": "github",
5949+ "url": "https://github.com/sponsors/feross"
5950+ },
5951+ {
5952+ "type": "patreon",
5953+ "url": "https://www.patreon.com/feross"
5954+ },
5955+ {
5956+ "type": "consulting",
5957+ "url": "https://feross.org/support"
5958+ }
5959+ ],
5960+ "dependencies": {
5961+ "queue-microtask": "^1.2.2"
5962+ }
5963+ },
5964+ "node_modules/rxjs": {
5965+ "version": "6.6.7",
5966+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
5967+ "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
5968+ "dependencies": {
5969+ "tslib": "^1.9.0"
5970+ },
5971+ "engines": {
5972+ "npm": ">=2.0.0"
5973+ }
5974+ },
5975+ "node_modules/rxjs/node_modules/tslib": {
5976+ "version": "1.14.1",
5977+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
5978+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
5979+ },
5980+ "node_modules/safe-buffer": {
5981+ "version": "5.2.1",
5982+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
5983+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
5984+ "funding": [
5985+ {
5986+ "type": "github",
5987+ "url": "https://github.com/sponsors/feross"
5988+ },
5989+ {
5990+ "type": "patreon",
5991+ "url": "https://www.patreon.com/feross"
5992+ },
5993+ {
5994+ "type": "consulting",
5995+ "url": "https://feross.org/support"
5996+ }
5997+ ]
5998+ },
5999+ "node_modules/safer-buffer": {
6000+ "version": "2.1.2",
6001+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
6002+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
6003+ },
6004+ "node_modules/saxes": {
6005+ "version": "5.0.1",
6006+ "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
6007+ "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
6008+ "dependencies": {
6009+ "xmlchars": "^2.2.0"
6010+ },
6011+ "engines": {
6012+ "node": ">=10"
6013+ }
6014+ },
6015+ "node_modules/schema-utils": {
6016+ "version": "4.0.0",
6017+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz",
6018+ "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==",
6019+ "dev": true,
6020+ "dependencies": {
6021+ "@types/json-schema": "^7.0.9",
6022+ "ajv": "^8.8.0",
6023+ "ajv-formats": "^2.1.1",
6024+ "ajv-keywords": "^5.0.0"
6025+ },
6026+ "engines": {
6027+ "node": ">= 12.13.0"
6028+ },
6029+ "funding": {
6030+ "type": "opencollective",
6031+ "url": "https://opencollective.com/webpack"
6032+ }
6033+ },
6034+ "node_modules/schema-utils/node_modules/ajv": {
6035+ "version": "8.11.0",
6036+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz",
6037+ "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==",
6038+ "dev": true,
6039+ "dependencies": {
6040+ "fast-deep-equal": "^3.1.1",
6041+ "json-schema-traverse": "^1.0.0",
6042+ "require-from-string": "^2.0.2",
6043+ "uri-js": "^4.2.2"
6044+ },
6045+ "funding": {
6046+ "type": "github",
6047+ "url": "https://github.com/sponsors/epoberezkin"
6048+ }
6049+ },
6050+ "node_modules/schema-utils/node_modules/ajv-keywords": {
6051+ "version": "5.1.0",
6052+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
6053+ "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
6054+ "dev": true,
6055+ "dependencies": {
6056+ "fast-deep-equal": "^3.1.3"
6057+ },
6058+ "peerDependencies": {
6059+ "ajv": "^8.8.2"
6060+ }
6061+ },
6062+ "node_modules/schema-utils/node_modules/json-schema-traverse": {
6063+ "version": "1.0.0",
6064+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
6065+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
6066+ "dev": true
6067+ },
6068+ "node_modules/semver": {
6069+ "version": "7.3.6",
6070+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz",
6071+ "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==",
6072+ "dev": true,
6073+ "dependencies": {
6074+ "lru-cache": "^7.4.0"
6075+ },
6076+ "bin": {
6077+ "semver": "bin/semver.js"
6078+ },
6079+ "engines": {
6080+ "node": "^10.0.0 || ^12.0.0 || ^14.0.0 || >=16.0.0"
6081+ }
6082+ },
6083+ "node_modules/serialize-javascript": {
6084+ "version": "6.0.0",
6085+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
6086+ "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
6087+ "dev": true,
6088+ "dependencies": {
6089+ "randombytes": "^2.1.0"
6090+ }
6091+ },
6092+ "node_modules/set-blocking": {
6093+ "version": "2.0.0",
6094+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
6095+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
6096+ "dev": true
6097+ },
6098+ "node_modules/set-immediate-shim": {
6099+ "version": "1.0.1",
6100+ "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
6101+ "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=",
6102+ "engines": {
6103+ "node": ">=0.10.0"
6104+ }
6105+ },
6106+ "node_modules/setprototypeof": {
6107+ "version": "1.2.0",
6108+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
6109+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
6110+ },
6111+ "node_modules/shallow-clone": {
6112+ "version": "3.0.1",
6113+ "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
6114+ "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
6115+ "dev": true,
6116+ "dependencies": {
6117+ "kind-of": "^6.0.2"
6118+ },
6119+ "engines": {
6120+ "node": ">=8"
6121+ }
6122+ },
6123+ "node_modules/shebang-command": {
6124+ "version": "2.0.0",
6125+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
6126+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
6127+ "dev": true,
6128+ "dependencies": {
6129+ "shebang-regex": "^3.0.0"
6130+ },
6131+ "engines": {
6132+ "node": ">=8"
6133+ }
6134+ },
6135+ "node_modules/shebang-regex": {
6136+ "version": "3.0.0",
6137+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
6138+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
6139+ "dev": true,
6140+ "engines": {
6141+ "node": ">=8"
6142+ }
6143+ },
6144+ "node_modules/side-channel": {
6145+ "version": "1.0.4",
6146+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
6147+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
6148+ "dependencies": {
6149+ "call-bind": "^1.0.0",
6150+ "get-intrinsic": "^1.0.2",
6151+ "object-inspect": "^1.9.0"
6152+ },
6153+ "funding": {
6154+ "url": "https://github.com/sponsors/ljharb"
6155+ }
6156+ },
6157+ "node_modules/signal-exit": {
6158+ "version": "3.0.7",
6159+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
6160+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
6161+ },
6162+ "node_modules/simple-concat": {
6163+ "version": "1.0.1",
6164+ "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
6165+ "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",
6166+ "dev": true,
6167+ "funding": [
6168+ {
6169+ "type": "github",
6170+ "url": "https://github.com/sponsors/feross"
6171+ },
6172+ {
6173+ "type": "patreon",
6174+ "url": "https://www.patreon.com/feross"
6175+ },
6176+ {
6177+ "type": "consulting",
6178+ "url": "https://feross.org/support"
6179+ }
6180+ ]
6181+ },
6182+ "node_modules/simple-get": {
6183+ "version": "3.1.1",
6184+ "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz",
6185+ "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==",
6186+ "dev": true,
6187+ "dependencies": {
6188+ "decompress-response": "^4.2.0",
6189+ "once": "^1.3.1",
6190+ "simple-concat": "^1.0.0"
6191+ }
6192+ },
6193+ "node_modules/slash": {
6194+ "version": "3.0.0",
6195+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
6196+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
6197+ "dev": true,
6198+ "engines": {
6199+ "node": ">=8"
6200+ }
6201+ },
6202+ "node_modules/slice-ansi": {
6203+ "version": "5.0.0",
6204+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz",
6205+ "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==",
6206+ "dev": true,
6207+ "dependencies": {
6208+ "ansi-styles": "^6.0.0",
6209+ "is-fullwidth-code-point": "^4.0.0"
6210+ },
6211+ "engines": {
6212+ "node": ">=12"
6213+ },
6214+ "funding": {
6215+ "url": "https://github.com/chalk/slice-ansi?sponsor=1"
6216+ }
6217+ },
6218+ "node_modules/slice-ansi/node_modules/ansi-styles": {
6219+ "version": "6.1.0",
6220+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz",
6221+ "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==",
6222+ "dev": true,
6223+ "engines": {
6224+ "node": ">=12"
6225+ },
6226+ "funding": {
6227+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
6228+ }
6229+ },
6230+ "node_modules/source-map": {
6231+ "version": "0.5.7",
6232+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
6233+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
6234+ "dev": true,
6235+ "engines": {
6236+ "node": ">=0.10.0"
6237+ }
6238+ },
6239+ "node_modules/source-map-resolve": {
6240+ "version": "0.5.3",
6241+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
6242+ "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
6243+ "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated",
6244+ "dev": true,
6245+ "dependencies": {
6246+ "atob": "^2.1.2",
6247+ "decode-uri-component": "^0.2.0",
6248+ "resolve-url": "^0.2.1",
6249+ "source-map-url": "^0.4.0",
6250+ "urix": "^0.1.0"
6251+ }
6252+ },
6253+ "node_modules/source-map-support": {
6254+ "version": "0.5.21",
6255+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
6256+ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
6257+ "dev": true,
6258+ "dependencies": {
6259+ "buffer-from": "^1.0.0",
6260+ "source-map": "^0.6.0"
6261+ }
6262+ },
6263+ "node_modules/source-map-support/node_modules/source-map": {
6264+ "version": "0.6.1",
6265+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
6266+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
6267+ "dev": true,
6268+ "engines": {
6269+ "node": ">=0.10.0"
6270+ }
6271+ },
6272+ "node_modules/source-map-url": {
6273+ "version": "0.4.1",
6274+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz",
6275+ "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==",
6276+ "deprecated": "See https://github.com/lydell/source-map-url#deprecated",
6277+ "dev": true
6278+ },
6279+ "node_modules/stackframe": {
6280+ "version": "1.2.1",
6281+ "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.1.tgz",
6282+ "integrity": "sha512-h88QkzREN/hy8eRdyNhhsO7RSJ5oyTqxxmmn0dzBIMUclZsjpfmrsg81vp8mjjAs2vAZ72nyWxRUwSwmh0e4xg==",
6283+ "dev": true
6284+ },
6285+ "node_modules/statuses": {
6286+ "version": "1.5.0",
6287+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
6288+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
6289+ "engines": {
6290+ "node": ">= 0.6"
6291+ }
6292+ },
6293+ "node_modules/steno": {
6294+ "version": "0.4.4",
6295+ "resolved": "https://registry.npmjs.org/steno/-/steno-0.4.4.tgz",
6296+ "integrity": "sha1-BxEFvfwobmYVwEA8J+nXtdy4Vcs=",
6297+ "dependencies": {
6298+ "graceful-fs": "^4.1.3"
6299+ }
6300+ },
6301+ "node_modules/stream-meter": {
6302+ "version": "1.0.4",
6303+ "resolved": "https://registry.npmjs.org/stream-meter/-/stream-meter-1.0.4.tgz",
6304+ "integrity": "sha1-Uq+Vql6nYKJJFxZwTb/5D3Ov3R0=",
6305+ "dev": true,
6306+ "dependencies": {
6307+ "readable-stream": "^2.1.4"
6308+ }
6309+ },
6310+ "node_modules/streaming-json-stringify": {
6311+ "version": "3.1.0",
6312+ "resolved": "https://registry.npmjs.org/streaming-json-stringify/-/streaming-json-stringify-3.1.0.tgz",
6313+ "integrity": "sha1-gCAEN6mTzDnE/gAmO3s7kDrIevU=",
6314+ "dependencies": {
6315+ "json-stringify-safe": "5",
6316+ "readable-stream": "2"
6317+ }
6318+ },
6319+ "node_modules/streamsearch": {
6320+ "version": "0.1.2",
6321+ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz",
6322+ "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=",
6323+ "engines": {
6324+ "node": ">=0.8.0"
6325+ }
6326+ },
6327+ "node_modules/string_decoder": {
6328+ "version": "1.1.1",
6329+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
6330+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
6331+ "dependencies": {
6332+ "safe-buffer": "~5.1.0"
6333+ }
6334+ },
6335+ "node_modules/string_decoder/node_modules/safe-buffer": {
6336+ "version": "5.1.2",
6337+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
6338+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
6339+ },
6340+ "node_modules/string-argv": {
6341+ "version": "0.3.1",
6342+ "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz",
6343+ "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==",
6344+ "dev": true,
6345+ "engines": {
6346+ "node": ">=0.6.19"
6347+ }
6348+ },
6349+ "node_modules/string-width": {
6350+ "version": "4.2.3",
6351+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
6352+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
6353+ "dependencies": {
6354+ "emoji-regex": "^8.0.0",
6355+ "is-fullwidth-code-point": "^3.0.0",
6356+ "strip-ansi": "^6.0.1"
6357+ },
6358+ "engines": {
6359+ "node": ">=8"
6360+ }
6361+ },
6362+ "node_modules/string-width/node_modules/is-fullwidth-code-point": {
6363+ "version": "3.0.0",
6364+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
6365+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
6366+ "engines": {
6367+ "node": ">=8"
6368+ }
6369+ },
6370+ "node_modules/string.prototype.trimend": {
6371+ "version": "1.0.4",
6372+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz",
6373+ "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==",
6374+ "dev": true,
6375+ "dependencies": {
6376+ "call-bind": "^1.0.2",
6377+ "define-properties": "^1.1.3"
6378+ },
6379+ "funding": {
6380+ "url": "https://github.com/sponsors/ljharb"
6381+ }
6382+ },
6383+ "node_modules/string.prototype.trimstart": {
6384+ "version": "1.0.4",
6385+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz",
6386+ "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==",
6387+ "dev": true,
6388+ "dependencies": {
6389+ "call-bind": "^1.0.2",
6390+ "define-properties": "^1.1.3"
6391+ },
6392+ "funding": {
6393+ "url": "https://github.com/sponsors/ljharb"
6394+ }
6395+ },
6396+ "node_modules/strip-ansi": {
6397+ "version": "6.0.1",
6398+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
6399+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
6400+ "dependencies": {
6401+ "ansi-regex": "^5.0.1"
6402+ },
6403+ "engines": {
6404+ "node": ">=8"
6405+ }
6406+ },
6407+ "node_modules/strip-bom": {
6408+ "version": "3.0.0",
6409+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
6410+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
6411+ "dev": true,
6412+ "engines": {
6413+ "node": ">=4"
6414+ }
6415+ },
6416+ "node_modules/strip-final-newline": {
6417+ "version": "2.0.0",
6418+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
6419+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
6420+ "dev": true,
6421+ "engines": {
6422+ "node": ">=6"
6423+ }
6424+ },
6425+ "node_modules/strip-json-comments": {
6426+ "version": "3.1.1",
6427+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
6428+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
6429+ "dev": true,
6430+ "engines": {
6431+ "node": ">=8"
6432+ },
6433+ "funding": {
6434+ "url": "https://github.com/sponsors/sindresorhus"
6435+ }
6436+ },
6437+ "node_modules/supports-color": {
6438+ "version": "7.2.0",
6439+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
6440+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
6441+ "dependencies": {
6442+ "has-flag": "^4.0.0"
6443+ },
6444+ "engines": {
6445+ "node": ">=8"
6446+ }
6447+ },
6448+ "node_modules/supports-preserve-symlinks-flag": {
6449+ "version": "1.0.0",
6450+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
6451+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
6452+ "dev": true,
6453+ "engines": {
6454+ "node": ">= 0.4"
6455+ },
6456+ "funding": {
6457+ "url": "https://github.com/sponsors/ljharb"
6458+ }
6459+ },
6460+ "node_modules/symbol-tree": {
6461+ "version": "3.2.4",
6462+ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
6463+ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="
6464+ },
6465+ "node_modules/tapable": {
6466+ "version": "1.1.3",
6467+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
6468+ "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==",
6469+ "dev": true,
6470+ "engines": {
6471+ "node": ">=6"
6472+ }
6473+ },
6474+ "node_modules/tar-fs": {
6475+ "version": "2.1.1",
6476+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
6477+ "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
6478+ "dev": true,
6479+ "dependencies": {
6480+ "chownr": "^1.1.1",
6481+ "mkdirp-classic": "^0.5.2",
6482+ "pump": "^3.0.0",
6483+ "tar-stream": "^2.1.4"
6484+ }
6485+ },
6486+ "node_modules/tar-stream": {
6487+ "version": "2.2.0",
6488+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
6489+ "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
6490+ "dev": true,
6491+ "dependencies": {
6492+ "bl": "^4.0.3",
6493+ "end-of-stream": "^1.4.1",
6494+ "fs-constants": "^1.0.0",
6495+ "inherits": "^2.0.3",
6496+ "readable-stream": "^3.1.1"
6497+ },
6498+ "engines": {
6499+ "node": ">=6"
6500+ }
6501+ },
6502+ "node_modules/tar-stream/node_modules/readable-stream": {
6503+ "version": "3.6.0",
6504+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
6505+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
6506+ "dev": true,
6507+ "dependencies": {
6508+ "inherits": "^2.0.3",
6509+ "string_decoder": "^1.1.1",
6510+ "util-deprecate": "^1.0.1"
6511+ },
6512+ "engines": {
6513+ "node": ">= 6"
6514+ }
6515+ },
6516+ "node_modules/terser": {
6517+ "version": "5.12.1",
6518+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.12.1.tgz",
6519+ "integrity": "sha512-NXbs+7nisos5E+yXwAD+y7zrcTkMqb0dEJxIGtSKPdCBzopf7ni4odPul2aechpV7EXNvOudYOX2bb5tln1jbQ==",
6520+ "dev": true,
6521+ "dependencies": {
6522+ "acorn": "^8.5.0",
6523+ "commander": "^2.20.0",
6524+ "source-map": "~0.7.2",
6525+ "source-map-support": "~0.5.20"
6526+ },
6527+ "bin": {
6528+ "terser": "bin/terser"
6529+ },
6530+ "engines": {
6531+ "node": ">=10"
6532+ }
6533+ },
6534+ "node_modules/terser-webpack-plugin": {
6535+ "version": "5.3.1",
6536+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz",
6537+ "integrity": "sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g==",
6538+ "dev": true,
6539+ "dependencies": {
6540+ "jest-worker": "^27.4.5",
6541+ "schema-utils": "^3.1.1",
6542+ "serialize-javascript": "^6.0.0",
6543+ "source-map": "^0.6.1",
6544+ "terser": "^5.7.2"
6545+ },
6546+ "engines": {
6547+ "node": ">= 10.13.0"
6548+ },
6549+ "funding": {
6550+ "type": "opencollective",
6551+ "url": "https://opencollective.com/webpack"
6552+ },
6553+ "peerDependencies": {
6554+ "webpack": "^5.1.0"
6555+ },
6556+ "peerDependenciesMeta": {
6557+ "@swc/core": {
6558+ "optional": true
6559+ },
6560+ "esbuild": {
6561+ "optional": true
6562+ },
6563+ "uglify-js": {
6564+ "optional": true
6565+ }
6566+ }
6567+ },
6568+ "node_modules/terser-webpack-plugin/node_modules/schema-utils": {
6569+ "version": "3.1.1",
6570+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
6571+ "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
6572+ "dev": true,
6573+ "dependencies": {
6574+ "@types/json-schema": "^7.0.8",
6575+ "ajv": "^6.12.5",
6576+ "ajv-keywords": "^3.5.2"
6577+ },
6578+ "engines": {
6579+ "node": ">= 10.13.0"
6580+ },
6581+ "funding": {
6582+ "type": "opencollective",
6583+ "url": "https://opencollective.com/webpack"
6584+ }
6585+ },
6586+ "node_modules/terser-webpack-plugin/node_modules/source-map": {
6587+ "version": "0.6.1",
6588+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
6589+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
6590+ "dev": true,
6591+ "engines": {
6592+ "node": ">=0.10.0"
6593+ }
6594+ },
6595+ "node_modules/terser/node_modules/commander": {
6596+ "version": "2.20.3",
6597+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
6598+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
6599+ "dev": true
6600+ },
6601+ "node_modules/terser/node_modules/source-map": {
6602+ "version": "0.7.3",
6603+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
6604+ "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
6605+ "dev": true,
6606+ "engines": {
6607+ "node": ">= 8"
6608+ }
6609+ },
6610+ "node_modules/text-table": {
6611+ "version": "0.2.0",
6612+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
6613+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
6614+ "dev": true
6615+ },
6616+ "node_modules/through": {
6617+ "version": "2.3.8",
6618+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
6619+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
6620+ },
6621+ "node_modules/tldjs": {
6622+ "version": "2.3.1",
6623+ "resolved": "https://registry.npmjs.org/tldjs/-/tldjs-2.3.1.tgz",
6624+ "integrity": "sha512-W/YVH/QczLUxVjnQhFC61Iq232NWu3TqDdO0S/MtXVz4xybejBov4ud+CIwN9aYqjOecEqIy0PscGkwpG9ZyTw==",
6625+ "hasInstallScript": true,
6626+ "dependencies": {
6627+ "punycode": "^1.4.1"
6628+ },
6629+ "engines": {
6630+ "node": ">= 4"
6631+ }
6632+ },
6633+ "node_modules/tmp": {
6634+ "version": "0.0.33",
6635+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
6636+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
6637+ "dependencies": {
6638+ "os-tmpdir": "~1.0.2"
6639+ },
6640+ "engines": {
6641+ "node": ">=0.6.0"
6642+ }
6643+ },
6644+ "node_modules/to-fast-properties": {
6645+ "version": "2.0.0",
6646+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
6647+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
6648+ "dev": true,
6649+ "engines": {
6650+ "node": ">=4"
6651+ }
6652+ },
6653+ "node_modules/to-regex-range": {
6654+ "version": "5.0.1",
6655+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
6656+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
6657+ "dev": true,
6658+ "dependencies": {
6659+ "is-number": "^7.0.0"
6660+ },
6661+ "engines": {
6662+ "node": ">=8.0"
6663+ }
6664+ },
6665+ "node_modules/toidentifier": {
6666+ "version": "1.0.1",
6667+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
6668+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
6669+ "engines": {
6670+ "node": ">=0.6"
6671+ }
6672+ },
6673+ "node_modules/tough-cookie": {
6674+ "version": "4.0.0",
6675+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz",
6676+ "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==",
6677+ "dependencies": {
6678+ "psl": "^1.1.33",
6679+ "punycode": "^2.1.1",
6680+ "universalify": "^0.1.2"
6681+ },
6682+ "engines": {
6683+ "node": ">=6"
6684+ }
6685+ },
6686+ "node_modules/tough-cookie/node_modules/punycode": {
6687+ "version": "2.1.1",
6688+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
6689+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
6690+ "engines": {
6691+ "node": ">=6"
6692+ }
6693+ },
6694+ "node_modules/tough-cookie/node_modules/universalify": {
6695+ "version": "0.1.2",
6696+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
6697+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
6698+ "engines": {
6699+ "node": ">= 4.0.0"
6700+ }
6701+ },
6702+ "node_modules/tr46": {
6703+ "version": "2.1.0",
6704+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz",
6705+ "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==",
6706+ "dependencies": {
6707+ "punycode": "^2.1.1"
6708+ },
6709+ "engines": {
6710+ "node": ">=8"
6711+ }
6712+ },
6713+ "node_modules/tr46/node_modules/punycode": {
6714+ "version": "2.1.1",
6715+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
6716+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
6717+ "engines": {
6718+ "node": ">=6"
6719+ }
6720+ },
6721+ "node_modules/ts-loader": {
6722+ "version": "8.3.0",
6723+ "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.3.0.tgz",
6724+ "integrity": "sha512-MgGly4I6cStsJy27ViE32UoqxPTN9Xly4anxxVyaIWR+9BGxboV4EyJBGfR3RePV7Ksjj3rHmPZJeIt+7o4Vag==",
6725+ "dev": true,
6726+ "dependencies": {
6727+ "chalk": "^4.1.0",
6728+ "enhanced-resolve": "^4.0.0",
6729+ "loader-utils": "^2.0.0",
6730+ "micromatch": "^4.0.0",
6731+ "semver": "^7.3.4"
6732+ },
6733+ "engines": {
6734+ "node": ">=10.0.0"
6735+ },
6736+ "peerDependencies": {
6737+ "typescript": "*",
6738+ "webpack": "*"
6739+ }
6740+ },
6741+ "node_modules/ts-node": {
6742+ "version": "10.7.0",
6743+ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.7.0.tgz",
6744+ "integrity": "sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==",
6745+ "dev": true,
6746+ "dependencies": {
6747+ "@cspotcode/source-map-support": "0.7.0",
6748+ "@tsconfig/node10": "^1.0.7",
6749+ "@tsconfig/node12": "^1.0.7",
6750+ "@tsconfig/node14": "^1.0.0",
6751+ "@tsconfig/node16": "^1.0.2",
6752+ "acorn": "^8.4.1",
6753+ "acorn-walk": "^8.1.1",
6754+ "arg": "^4.1.0",
6755+ "create-require": "^1.1.0",
6756+ "diff": "^4.0.1",
6757+ "make-error": "^1.1.1",
6758+ "v8-compile-cache-lib": "^3.0.0",
6759+ "yn": "3.1.1"
6760+ },
6761+ "bin": {
6762+ "ts-node": "dist/bin.js",
6763+ "ts-node-cwd": "dist/bin-cwd.js",
6764+ "ts-node-esm": "dist/bin-esm.js",
6765+ "ts-node-script": "dist/bin-script.js",
6766+ "ts-node-transpile-only": "dist/bin-transpile.js",
6767+ "ts-script": "dist/bin-script-deprecated.js"
6768+ },
6769+ "peerDependencies": {
6770+ "@swc/core": ">=1.2.50",
6771+ "@swc/wasm": ">=1.2.50",
6772+ "@types/node": "*",
6773+ "typescript": ">=2.7"
6774+ },
6775+ "peerDependenciesMeta": {
6776+ "@swc/core": {
6777+ "optional": true
6778+ },
6779+ "@swc/wasm": {
6780+ "optional": true
6781+ }
6782+ }
6783+ },
6784+ "node_modules/ts-node/node_modules/acorn-walk": {
6785+ "version": "8.2.0",
6786+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
6787+ "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
6788+ "dev": true,
6789+ "engines": {
6790+ "node": ">=0.4.0"
6791+ }
6792+ },
6793+ "node_modules/tsconfig-paths": {
6794+ "version": "3.14.1",
6795+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz",
6796+ "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==",
6797+ "dev": true,
6798+ "dependencies": {
6799+ "@types/json5": "^0.0.29",
6800+ "json5": "^1.0.1",
6801+ "minimist": "^1.2.6",
6802+ "strip-bom": "^3.0.0"
6803+ }
6804+ },
6805+ "node_modules/tsconfig-paths-webpack-plugin": {
6806+ "version": "3.5.2",
6807+ "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-3.5.2.tgz",
6808+ "integrity": "sha512-EhnfjHbzm5IYI9YPNVIxx1moxMI4bpHD2e0zTXeDNQcwjjRaGepP7IhTHJkyDBG0CAOoxRfe7jCG630Ou+C6Pw==",
6809+ "dev": true,
6810+ "dependencies": {
6811+ "chalk": "^4.1.0",
6812+ "enhanced-resolve": "^5.7.0",
6813+ "tsconfig-paths": "^3.9.0"
6814+ }
6815+ },
6816+ "node_modules/tsconfig-paths-webpack-plugin/node_modules/enhanced-resolve": {
6817+ "version": "5.9.2",
6818+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.2.tgz",
6819+ "integrity": "sha512-GIm3fQfwLJ8YZx2smuHpBKkXC1yOk+OBEmKckVyL0i/ea8mqDEykK3ld5dgH1QYPNyT/lIllxV2LULnxCHaHkA==",
6820+ "dev": true,
6821+ "dependencies": {
6822+ "graceful-fs": "^4.2.4",
6823+ "tapable": "^2.2.0"
6824+ },
6825+ "engines": {
6826+ "node": ">=10.13.0"
6827+ }
6828+ },
6829+ "node_modules/tsconfig-paths-webpack-plugin/node_modules/tapable": {
6830+ "version": "2.2.1",
6831+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
6832+ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
6833+ "dev": true,
6834+ "engines": {
6835+ "node": ">=6"
6836+ }
6837+ },
6838+ "node_modules/tsconfig-paths/node_modules/json5": {
6839+ "version": "1.0.1",
6840+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
6841+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
6842+ "dev": true,
6843+ "dependencies": {
6844+ "minimist": "^1.2.0"
6845+ },
6846+ "bin": {
6847+ "json5": "lib/cli.js"
6848+ }
6849+ },
6850+ "node_modules/tslib": {
6851+ "version": "2.3.1",
6852+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
6853+ "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==",
6854+ "dev": true
6855+ },
6856+ "node_modules/tsscmp": {
6857+ "version": "1.0.6",
6858+ "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz",
6859+ "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==",
6860+ "engines": {
6861+ "node": ">=0.6.x"
6862+ }
6863+ },
6864+ "node_modules/tsutils": {
6865+ "version": "3.21.0",
6866+ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
6867+ "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
6868+ "dev": true,
6869+ "dependencies": {
6870+ "tslib": "^1.8.1"
6871+ },
6872+ "engines": {
6873+ "node": ">= 6"
6874+ },
6875+ "peerDependencies": {
6876+ "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
6877+ }
6878+ },
6879+ "node_modules/tsutils/node_modules/tslib": {
6880+ "version": "1.14.1",
6881+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
6882+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
6883+ "dev": true
6884+ },
6885+ "node_modules/tunnel-agent": {
6886+ "version": "0.6.0",
6887+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
6888+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
6889+ "dev": true,
6890+ "dependencies": {
6891+ "safe-buffer": "^5.0.1"
6892+ },
6893+ "engines": {
6894+ "node": "*"
6895+ }
6896+ },
6897+ "node_modules/type-check": {
6898+ "version": "0.4.0",
6899+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
6900+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
6901+ "dev": true,
6902+ "dependencies": {
6903+ "prelude-ls": "^1.2.1"
6904+ },
6905+ "engines": {
6906+ "node": ">= 0.8.0"
6907+ }
6908+ },
6909+ "node_modules/type-fest": {
6910+ "version": "0.20.2",
6911+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
6912+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
6913+ "dev": true,
6914+ "engines": {
6915+ "node": ">=10"
6916+ },
6917+ "funding": {
6918+ "url": "https://github.com/sponsors/sindresorhus"
6919+ }
6920+ },
6921+ "node_modules/type-is": {
6922+ "version": "1.6.18",
6923+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
6924+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
6925+ "dependencies": {
6926+ "media-typer": "0.3.0",
6927+ "mime-types": "~2.1.24"
6928+ },
6929+ "engines": {
6930+ "node": ">= 0.6"
6931+ }
6932+ },
6933+ "node_modules/typedarray": {
6934+ "version": "0.0.6",
6935+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
6936+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
6937+ },
6938+ "node_modules/typescript": {
6939+ "version": "4.1.5",
6940+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.5.tgz",
6941+ "integrity": "sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA==",
6942+ "dev": true,
6943+ "bin": {
6944+ "tsc": "bin/tsc",
6945+ "tsserver": "bin/tsserver"
6946+ },
6947+ "engines": {
6948+ "node": ">=4.2.0"
6949+ }
6950+ },
6951+ "node_modules/unbox-primitive": {
6952+ "version": "1.0.1",
6953+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz",
6954+ "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==",
6955+ "dev": true,
6956+ "dependencies": {
6957+ "function-bind": "^1.1.1",
6958+ "has-bigints": "^1.0.1",
6959+ "has-symbols": "^1.0.2",
6960+ "which-boxed-primitive": "^1.0.2"
6961+ },
6962+ "funding": {
6963+ "url": "https://github.com/sponsors/ljharb"
6964+ }
6965+ },
6966+ "node_modules/universalify": {
6967+ "version": "2.0.0",
6968+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
6969+ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
6970+ "dev": true,
6971+ "engines": {
6972+ "node": ">= 10.0.0"
6973+ }
6974+ },
6975+ "node_modules/unpipe": {
6976+ "version": "1.0.0",
6977+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
6978+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
6979+ "engines": {
6980+ "node": ">= 0.8"
6981+ }
6982+ },
6983+ "node_modules/uri-js": {
6984+ "version": "4.4.1",
6985+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
6986+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
6987+ "dev": true,
6988+ "dependencies": {
6989+ "punycode": "^2.1.0"
6990+ }
6991+ },
6992+ "node_modules/uri-js/node_modules/punycode": {
6993+ "version": "2.1.1",
6994+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
6995+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
6996+ "dev": true,
6997+ "engines": {
6998+ "node": ">=6"
6999+ }
7000+ },
7001+ "node_modules/urix": {
7002+ "version": "0.1.0",
7003+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
7004+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
7005+ "deprecated": "Please see https://github.com/lydell/urix#deprecated",
7006+ "dev": true
7007+ },
7008+ "node_modules/util-deprecate": {
7009+ "version": "1.0.2",
7010+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
7011+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
7012+ },
7013+ "node_modules/v8-compile-cache": {
7014+ "version": "2.3.0",
7015+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
7016+ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
7017+ "dev": true
7018+ },
7019+ "node_modules/v8-compile-cache-lib": {
7020+ "version": "3.0.0",
7021+ "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.0.tgz",
7022+ "integrity": "sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA==",
7023+ "dev": true
7024+ },
7025+ "node_modules/vary": {
7026+ "version": "1.1.2",
7027+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
7028+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
7029+ "engines": {
7030+ "node": ">= 0.8"
7031+ }
7032+ },
7033+ "node_modules/w3c-hr-time": {
7034+ "version": "1.0.2",
7035+ "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
7036+ "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
7037+ "dependencies": {
7038+ "browser-process-hrtime": "^1.0.0"
7039+ }
7040+ },
7041+ "node_modules/w3c-xmlserializer": {
7042+ "version": "2.0.0",
7043+ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz",
7044+ "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==",
7045+ "dependencies": {
7046+ "xml-name-validator": "^3.0.0"
7047+ },
7048+ "engines": {
7049+ "node": ">=10"
7050+ }
7051+ },
7052+ "node_modules/watchpack": {
7053+ "version": "2.3.1",
7054+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz",
7055+ "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==",
7056+ "dev": true,
7057+ "dependencies": {
7058+ "glob-to-regexp": "^0.4.1",
7059+ "graceful-fs": "^4.1.2"
7060+ },
7061+ "engines": {
7062+ "node": ">=10.13.0"
7063+ }
7064+ },
7065+ "node_modules/webidl-conversions": {
7066+ "version": "6.1.0",
7067+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
7068+ "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==",
7069+ "engines": {
7070+ "node": ">=10.4"
7071+ }
7072+ },
7073+ "node_modules/webpack": {
7074+ "version": "5.72.0",
7075+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.72.0.tgz",
7076+ "integrity": "sha512-qmSmbspI0Qo5ld49htys8GY9XhS9CGqFoHTsOVAnjBdg0Zn79y135R+k4IR4rKK6+eKaabMhJwiVB7xw0SJu5w==",
7077+ "dev": true,
7078+ "dependencies": {
7079+ "@types/eslint-scope": "^3.7.3",
7080+ "@types/estree": "^0.0.51",
7081+ "@webassemblyjs/ast": "1.11.1",
7082+ "@webassemblyjs/wasm-edit": "1.11.1",
7083+ "@webassemblyjs/wasm-parser": "1.11.1",
7084+ "acorn": "^8.4.1",
7085+ "acorn-import-assertions": "^1.7.6",
7086+ "browserslist": "^4.14.5",
7087+ "chrome-trace-event": "^1.0.2",
7088+ "enhanced-resolve": "^5.9.2",
7089+ "es-module-lexer": "^0.9.0",
7090+ "eslint-scope": "5.1.1",
7091+ "events": "^3.2.0",
7092+ "glob-to-regexp": "^0.4.1",
7093+ "graceful-fs": "^4.2.9",
7094+ "json-parse-better-errors": "^1.0.2",
7095+ "loader-runner": "^4.2.0",
7096+ "mime-types": "^2.1.27",
7097+ "neo-async": "^2.6.2",
7098+ "schema-utils": "^3.1.0",
7099+ "tapable": "^2.1.1",
7100+ "terser-webpack-plugin": "^5.1.3",
7101+ "watchpack": "^2.3.1",
7102+ "webpack-sources": "^3.2.3"
7103+ },
7104+ "bin": {
7105+ "webpack": "bin/webpack.js"
7106+ },
7107+ "engines": {
7108+ "node": ">=10.13.0"
7109+ },
7110+ "funding": {
7111+ "type": "opencollective",
7112+ "url": "https://opencollective.com/webpack"
7113+ },
7114+ "peerDependenciesMeta": {
7115+ "webpack-cli": {
7116+ "optional": true
7117+ }
7118+ }
7119+ },
7120+ "node_modules/webpack-cli": {
7121+ "version": "4.9.2",
7122+ "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.2.tgz",
7123+ "integrity": "sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ==",
7124+ "dev": true,
7125+ "dependencies": {
7126+ "@discoveryjs/json-ext": "^0.5.0",
7127+ "@webpack-cli/configtest": "^1.1.1",
7128+ "@webpack-cli/info": "^1.4.1",
7129+ "@webpack-cli/serve": "^1.6.1",
7130+ "colorette": "^2.0.14",
7131+ "commander": "^7.0.0",
7132+ "execa": "^5.0.0",
7133+ "fastest-levenshtein": "^1.0.12",
7134+ "import-local": "^3.0.2",
7135+ "interpret": "^2.2.0",
7136+ "rechoir": "^0.7.0",
7137+ "webpack-merge": "^5.7.3"
7138+ },
7139+ "bin": {
7140+ "webpack-cli": "bin/cli.js"
7141+ },
7142+ "engines": {
7143+ "node": ">=10.13.0"
7144+ },
7145+ "peerDependencies": {
7146+ "webpack": "4.x.x || 5.x.x"
7147+ },
7148+ "peerDependenciesMeta": {
7149+ "@webpack-cli/generators": {
7150+ "optional": true
7151+ },
7152+ "@webpack-cli/migrate": {
7153+ "optional": true
7154+ },
7155+ "webpack-bundle-analyzer": {
7156+ "optional": true
7157+ },
7158+ "webpack-dev-server": {
7159+ "optional": true
7160+ }
7161+ }
7162+ },
7163+ "node_modules/webpack-merge": {
7164+ "version": "5.8.0",
7165+ "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz",
7166+ "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==",
7167+ "dev": true,
7168+ "dependencies": {
7169+ "clone-deep": "^4.0.1",
7170+ "wildcard": "^2.0.0"
7171+ },
7172+ "engines": {
7173+ "node": ">=10.0.0"
7174+ }
7175+ },
7176+ "node_modules/webpack-node-externals": {
7177+ "version": "3.0.0",
7178+ "resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz",
7179+ "integrity": "sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==",
7180+ "dev": true,
7181+ "engines": {
7182+ "node": ">=6"
7183+ }
7184+ },
7185+ "node_modules/webpack-sources": {
7186+ "version": "3.2.3",
7187+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
7188+ "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
7189+ "dev": true,
7190+ "engines": {
7191+ "node": ">=10.13.0"
7192+ }
7193+ },
7194+ "node_modules/webpack/node_modules/enhanced-resolve": {
7195+ "version": "5.9.2",
7196+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.2.tgz",
7197+ "integrity": "sha512-GIm3fQfwLJ8YZx2smuHpBKkXC1yOk+OBEmKckVyL0i/ea8mqDEykK3ld5dgH1QYPNyT/lIllxV2LULnxCHaHkA==",
7198+ "dev": true,
7199+ "dependencies": {
7200+ "graceful-fs": "^4.2.4",
7201+ "tapable": "^2.2.0"
7202+ },
7203+ "engines": {
7204+ "node": ">=10.13.0"
7205+ }
7206+ },
7207+ "node_modules/webpack/node_modules/schema-utils": {
7208+ "version": "3.1.1",
7209+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
7210+ "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
7211+ "dev": true,
7212+ "dependencies": {
7213+ "@types/json-schema": "^7.0.8",
7214+ "ajv": "^6.12.5",
7215+ "ajv-keywords": "^3.5.2"
7216+ },
7217+ "engines": {
7218+ "node": ">= 10.13.0"
7219+ },
7220+ "funding": {
7221+ "type": "opencollective",
7222+ "url": "https://opencollective.com/webpack"
7223+ }
7224+ },
7225+ "node_modules/webpack/node_modules/tapable": {
7226+ "version": "2.2.1",
7227+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
7228+ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
7229+ "dev": true,
7230+ "engines": {
7231+ "node": ">=6"
7232+ }
7233+ },
7234+ "node_modules/whatwg-encoding": {
7235+ "version": "1.0.5",
7236+ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
7237+ "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
7238+ "dependencies": {
7239+ "iconv-lite": "0.4.24"
7240+ }
7241+ },
7242+ "node_modules/whatwg-mimetype": {
7243+ "version": "2.3.0",
7244+ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
7245+ "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g=="
7246+ },
7247+ "node_modules/whatwg-url": {
7248+ "version": "8.7.0",
7249+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz",
7250+ "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==",
7251+ "dependencies": {
7252+ "lodash": "^4.7.0",
7253+ "tr46": "^2.1.0",
7254+ "webidl-conversions": "^6.1.0"
7255+ },
7256+ "engines": {
7257+ "node": ">=10"
7258+ }
7259+ },
7260+ "node_modules/which": {
7261+ "version": "2.0.2",
7262+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
7263+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
7264+ "dev": true,
7265+ "dependencies": {
7266+ "isexe": "^2.0.0"
7267+ },
7268+ "bin": {
7269+ "node-which": "bin/node-which"
7270+ },
7271+ "engines": {
7272+ "node": ">= 8"
7273+ }
7274+ },
7275+ "node_modules/which-boxed-primitive": {
7276+ "version": "1.0.2",
7277+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
7278+ "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
7279+ "dev": true,
7280+ "dependencies": {
7281+ "is-bigint": "^1.0.1",
7282+ "is-boolean-object": "^1.1.0",
7283+ "is-number-object": "^1.0.4",
7284+ "is-string": "^1.0.5",
7285+ "is-symbol": "^1.0.3"
7286+ },
7287+ "funding": {
7288+ "url": "https://github.com/sponsors/ljharb"
7289+ }
7290+ },
7291+ "node_modules/wide-align": {
7292+ "version": "1.1.5",
7293+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
7294+ "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
7295+ "dev": true,
7296+ "dependencies": {
7297+ "string-width": "^1.0.2 || 2 || 3 || 4"
7298+ }
7299+ },
7300+ "node_modules/wildcard": {
7301+ "version": "2.0.0",
7302+ "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz",
7303+ "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==",
7304+ "dev": true
7305+ },
7306+ "node_modules/word-wrap": {
7307+ "version": "1.2.3",
7308+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
7309+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
7310+ "engines": {
7311+ "node": ">=0.10.0"
7312+ }
7313+ },
7314+ "node_modules/wrap-ansi": {
7315+ "version": "7.0.0",
7316+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
7317+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
7318+ "dev": true,
7319+ "dependencies": {
7320+ "ansi-styles": "^4.0.0",
7321+ "string-width": "^4.1.0",
7322+ "strip-ansi": "^6.0.0"
7323+ },
7324+ "engines": {
7325+ "node": ">=10"
7326+ },
7327+ "funding": {
7328+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
7329+ }
7330+ },
7331+ "node_modules/wrappy": {
7332+ "version": "1.0.2",
7333+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
7334+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
7335+ "dev": true
7336+ },
7337+ "node_modules/ws": {
7338+ "version": "7.5.7",
7339+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz",
7340+ "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==",
7341+ "engines": {
7342+ "node": ">=8.3.0"
7343+ },
7344+ "peerDependencies": {
7345+ "bufferutil": "^4.0.1",
7346+ "utf-8-validate": "^5.0.2"
7347+ },
7348+ "peerDependenciesMeta": {
7349+ "bufferutil": {
7350+ "optional": true
7351+ },
7352+ "utf-8-validate": {
7353+ "optional": true
7354+ }
7355+ }
7356+ },
7357+ "node_modules/xml-name-validator": {
7358+ "version": "3.0.0",
7359+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
7360+ "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw=="
7361+ },
7362+ "node_modules/xmlchars": {
7363+ "version": "2.2.0",
7364+ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
7365+ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw=="
7366+ },
7367+ "node_modules/xtend": {
7368+ "version": "4.0.2",
7369+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
7370+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
7371+ "engines": {
7372+ "node": ">=0.4"
7373+ }
7374+ },
7375+ "node_modules/y18n": {
7376+ "version": "5.0.8",
7377+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
7378+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
7379+ "dev": true,
7380+ "engines": {
7381+ "node": ">=10"
7382+ }
7383+ },
7384+ "node_modules/yaml": {
7385+ "version": "1.10.2",
7386+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
7387+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
7388+ "dev": true,
7389+ "engines": {
7390+ "node": ">= 6"
7391+ }
7392+ },
7393+ "node_modules/yargs": {
7394+ "version": "17.4.1",
7395+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.4.1.tgz",
7396+ "integrity": "sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g==",
7397+ "dev": true,
7398+ "dependencies": {
7399+ "cliui": "^7.0.2",
7400+ "escalade": "^3.1.1",
7401+ "get-caller-file": "^2.0.5",
7402+ "require-directory": "^2.1.1",
7403+ "string-width": "^4.2.3",
7404+ "y18n": "^5.0.5",
7405+ "yargs-parser": "^21.0.0"
7406+ },
7407+ "engines": {
7408+ "node": ">=12"
7409+ }
7410+ },
7411+ "node_modules/yargs-parser": {
7412+ "version": "21.0.1",
7413+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz",
7414+ "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==",
7415+ "dev": true,
7416+ "engines": {
7417+ "node": ">=12"
7418+ }
7419+ },
7420+ "node_modules/ylru": {
7421+ "version": "1.3.2",
7422+ "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.3.2.tgz",
7423+ "integrity": "sha512-RXRJzMiK6U2ye0BlGGZnmpwJDPgakn6aNQ0A7gHRbD4I0uvK4TW6UqkK1V0pp9jskjJBAXd3dRrbzWkqJ+6cxA==",
7424+ "engines": {
7425+ "node": ">= 4.0.0"
7426+ }
7427+ },
7428+ "node_modules/yn": {
7429+ "version": "3.1.1",
7430+ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
7431+ "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
7432+ "dev": true,
7433+ "engines": {
7434+ "node": ">=6"
7435+ }
7436+ },
7437+ "node_modules/zxcvbn": {
7438+ "version": "4.4.2",
7439+ "resolved": "https://registry.npmjs.org/zxcvbn/-/zxcvbn-4.4.2.tgz",
7440+ "integrity": "sha1-KOwXzwl0PtyrBW3dixsGJizHPDA="
7441+ }
7442+ },
7443+ "dependencies": {
7444+ "@babel/helper-validator-identifier": {
7445+ "version": "7.16.7",
7446+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
7447+ "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
7448+ "dev": true
7449+ },
7450+ "@babel/parser": {
7451+ "version": "7.16.2",
7452+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.2.tgz",
7453+ "integrity": "sha512-RUVpT0G2h6rOZwqLDTrKk7ksNv7YpAilTnYe1/Q+eDjxEceRMKVWbCsX7t8h6C1qCFi/1Y8WZjcEPBAFG27GPw==",
7454+ "dev": true
7455+ },
7456+ "@babel/types": {
7457+ "version": "7.16.0",
7458+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz",
7459+ "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==",
7460+ "dev": true,
7461+ "requires": {
7462+ "@babel/helper-validator-identifier": "^7.15.7",
7463+ "to-fast-properties": "^2.0.0"
7464+ }
7465+ },
7466+ "@cspotcode/source-map-consumer": {
7467+ "version": "0.8.0",
7468+ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz",
7469+ "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==",
7470+ "dev": true
7471+ },
7472+ "@cspotcode/source-map-support": {
7473+ "version": "0.7.0",
7474+ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz",
7475+ "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==",
7476+ "dev": true,
7477+ "requires": {
7478+ "@cspotcode/source-map-consumer": "0.8.0"
7479+ }
7480+ },
7481+ "@discoveryjs/json-ext": {
7482+ "version": "0.5.7",
7483+ "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz",
7484+ "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==",
7485+ "dev": true
7486+ },
7487+ "@eslint/eslintrc": {
7488+ "version": "1.2.1",
7489+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz",
7490+ "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==",
7491+ "dev": true,
7492+ "requires": {
7493+ "ajv": "^6.12.4",
7494+ "debug": "^4.3.2",
7495+ "espree": "^9.3.1",
7496+ "globals": "^13.9.0",
7497+ "ignore": "^5.2.0",
7498+ "import-fresh": "^3.2.1",
7499+ "js-yaml": "^4.1.0",
7500+ "minimatch": "^3.0.4",
7501+ "strip-json-comments": "^3.1.1"
7502+ }
7503+ },
7504+ "@fluffy-spoon/substitute": {
7505+ "version": "1.208.0",
7506+ "resolved": "https://registry.npmjs.org/@fluffy-spoon/substitute/-/substitute-1.208.0.tgz",
7507+ "integrity": "sha512-BU5vKRoK4OYlKzDtyg4HbtWnUNLOvV0ntqEZIphz+mq2G0HlVFywwJ7M+FbIcnJVDbUReS01FyL5x8R01r7zBg==",
7508+ "dev": true
7509+ },
7510+ "@humanwhocodes/config-array": {
7511+ "version": "0.9.5",
7512+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz",
7513+ "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==",
7514+ "dev": true,
7515+ "requires": {
7516+ "@humanwhocodes/object-schema": "^1.2.1",
7517+ "debug": "^4.1.1",
7518+ "minimatch": "^3.0.4"
7519+ }
7520+ },
7521+ "@humanwhocodes/object-schema": {
7522+ "version": "1.2.1",
7523+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
7524+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
7525+ "dev": true
7526+ },
7527+ "@koa/multer": {
7528+ "version": "3.0.0",
7529+ "resolved": "https://registry.npmjs.org/@koa/multer/-/multer-3.0.0.tgz",
7530+ "integrity": "sha512-y+OQBmex5D1jIl723gAEUYcAWPEicIXppaAKw/zCMfpllQ08ZNweDPwoCLxEoatqd5pCu2XG6V8dl67JRq3RJw==",
7531+ "requires": {}
7532+ },
7533+ "@koa/router": {
7534+ "version": "10.1.1",
7535+ "resolved": "https://registry.npmjs.org/@koa/router/-/router-10.1.1.tgz",
7536+ "integrity": "sha512-ORNjq5z4EmQPriKbR0ER3k4Gh7YGNhWDL7JBW+8wXDrHLbWYKYSJaOJ9aN06npF5tbTxe2JBOsurpJDAvjiXKw==",
7537+ "requires": {
7538+ "debug": "^4.1.1",
7539+ "http-errors": "^1.7.3",
7540+ "koa-compose": "^4.1.0",
7541+ "methods": "^1.1.2",
7542+ "path-to-regexp": "^6.1.0"
7543+ }
7544+ },
7545+ "@nodelib/fs.scandir": {
7546+ "version": "2.1.5",
7547+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
7548+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
7549+ "dev": true,
7550+ "requires": {
7551+ "@nodelib/fs.stat": "2.0.5",
7552+ "run-parallel": "^1.1.9"
7553+ }
7554+ },
7555+ "@nodelib/fs.stat": {
7556+ "version": "2.0.5",
7557+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
7558+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
7559+ "dev": true
7560+ },
7561+ "@nodelib/fs.walk": {
7562+ "version": "1.2.8",
7563+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
7564+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
7565+ "dev": true,
7566+ "requires": {
7567+ "@nodelib/fs.scandir": "2.1.5",
7568+ "fastq": "^1.6.0"
7569+ }
7570+ },
7571+ "@tootallnate/once": {
7572+ "version": "1.1.2",
7573+ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
7574+ "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw=="
7575+ },
7576+ "@tsconfig/node10": {
7577+ "version": "1.0.8",
7578+ "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz",
7579+ "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==",
7580+ "dev": true
7581+ },
7582+ "@tsconfig/node12": {
7583+ "version": "1.0.9",
7584+ "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz",
7585+ "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==",
7586+ "dev": true
7587+ },
7588+ "@tsconfig/node14": {
7589+ "version": "1.0.1",
7590+ "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz",
7591+ "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==",
7592+ "dev": true
7593+ },
7594+ "@tsconfig/node16": {
7595+ "version": "1.0.2",
7596+ "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz",
7597+ "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==",
7598+ "dev": true
7599+ },
7600+ "@types/accepts": {
7601+ "version": "1.3.5",
7602+ "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz",
7603+ "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==",
7604+ "dev": true,
7605+ "requires": {
7606+ "@types/node": "*"
7607+ }
7608+ },
7609+ "@types/body-parser": {
7610+ "version": "1.19.2",
7611+ "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz",
7612+ "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==",
7613+ "dev": true,
7614+ "requires": {
7615+ "@types/connect": "*",
7616+ "@types/node": "*"
7617+ }
7618+ },
7619+ "@types/connect": {
7620+ "version": "3.4.35",
7621+ "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz",
7622+ "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==",
7623+ "dev": true,
7624+ "requires": {
7625+ "@types/node": "*"
7626+ }
7627+ },
7628+ "@types/content-disposition": {
7629+ "version": "0.5.4",
7630+ "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.4.tgz",
7631+ "integrity": "sha512-0mPF08jn9zYI0n0Q/Pnz7C4kThdSt+6LD4amsrYDDpgBfrVWa3TcCOxKX1zkGgYniGagRv8heN2cbh+CAn+uuQ==",
7632+ "dev": true
7633+ },
7634+ "@types/cookies": {
7635+ "version": "0.7.7",
7636+ "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.7.tgz",
7637+ "integrity": "sha512-h7BcvPUogWbKCzBR2lY4oqaZbO3jXZksexYJVFvkrFeLgbZjQkU4x8pRq6eg2MHXQhY0McQdqmmsxRWlVAHooA==",
7638+ "dev": true,
7639+ "requires": {
7640+ "@types/connect": "*",
7641+ "@types/express": "*",
7642+ "@types/keygrip": "*",
7643+ "@types/node": "*"
7644+ }
7645+ },
7646+ "@types/eslint": {
7647+ "version": "8.4.1",
7648+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz",
7649+ "integrity": "sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==",
7650+ "dev": true,
7651+ "requires": {
7652+ "@types/estree": "*",
7653+ "@types/json-schema": "*"
7654+ }
7655+ },
7656+ "@types/eslint-scope": {
7657+ "version": "3.7.3",
7658+ "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz",
7659+ "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==",
7660+ "dev": true,
7661+ "requires": {
7662+ "@types/eslint": "*",
7663+ "@types/estree": "*"
7664+ }
7665+ },
7666+ "@types/estree": {
7667+ "version": "0.0.51",
7668+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz",
7669+ "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==",
7670+ "dev": true
7671+ },
7672+ "@types/express": {
7673+ "version": "4.17.13",
7674+ "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz",
7675+ "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==",
7676+ "dev": true,
7677+ "requires": {
7678+ "@types/body-parser": "*",
7679+ "@types/express-serve-static-core": "^4.17.18",
7680+ "@types/qs": "*",
7681+ "@types/serve-static": "*"
7682+ }
7683+ },
7684+ "@types/express-serve-static-core": {
7685+ "version": "4.17.28",
7686+ "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz",
7687+ "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==",
7688+ "dev": true,
7689+ "requires": {
7690+ "@types/node": "*",
7691+ "@types/qs": "*",
7692+ "@types/range-parser": "*"
7693+ }
7694+ },
7695+ "@types/glob": {
7696+ "version": "7.2.0",
7697+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz",
7698+ "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==",
7699+ "dev": true,
7700+ "requires": {
7701+ "@types/minimatch": "*",
7702+ "@types/node": "*"
7703+ }
7704+ },
7705+ "@types/http-assert": {
7706+ "version": "1.5.3",
7707+ "resolved": "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.3.tgz",
7708+ "integrity": "sha512-FyAOrDuQmBi8/or3ns4rwPno7/9tJTijVW6aQQjK02+kOQ8zmoNg2XJtAuQhvQcy1ASJq38wirX5//9J1EqoUA==",
7709+ "dev": true
7710+ },
7711+ "@types/http-errors": {
7712+ "version": "1.8.2",
7713+ "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.8.2.tgz",
7714+ "integrity": "sha512-EqX+YQxINb+MeXaIqYDASb6U6FCHbWjkj4a1CKDBks3d/QiB2+PqBLyO72vLDgAO1wUI4O+9gweRcQK11bTL/w==",
7715+ "dev": true
7716+ },
7717+ "@types/inquirer": {
7718+ "version": "7.3.3",
7719+ "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-7.3.3.tgz",
7720+ "integrity": "sha512-HhxyLejTHMfohAuhRun4csWigAMjXTmRyiJTU1Y/I1xmggikFMkOUoMQRlFm+zQcPEGHSs3io/0FAmNZf8EymQ==",
7721+ "dev": true,
7722+ "requires": {
7723+ "@types/through": "*",
7724+ "rxjs": "^6.4.0"
7725+ }
7726+ },
7727+ "@types/jasmine": {
7728+ "version": "3.10.5",
7729+ "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.10.5.tgz",
7730+ "integrity": "sha512-RYxEJkk/RK1S6W0nMOx9Mxm5v2bKwAVjzTHiBcHkQskwKDqHKHjSU46jx/q9IffyuctNl8ebaAjb5/461faKqQ==",
7731+ "dev": true
7732+ },
7733+ "@types/jsdom": {
7734+ "version": "16.2.14",
7735+ "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-16.2.14.tgz",
7736+ "integrity": "sha512-6BAy1xXEmMuHeAJ4Fv4yXKwBDTGTOseExKE3OaHiNycdHdZw59KfYzrt0DkDluvwmik1HRt6QS7bImxUmpSy+w==",
7737+ "dev": true,
7738+ "requires": {
7739+ "@types/node": "*",
7740+ "@types/parse5": "*",
7741+ "@types/tough-cookie": "*"
7742+ }
7743+ },
7744+ "@types/json-schema": {
7745+ "version": "7.0.11",
7746+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
7747+ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
7748+ "dev": true
7749+ },
7750+ "@types/json5": {
7751+ "version": "0.0.29",
7752+ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
7753+ "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=",
7754+ "dev": true
7755+ },
7756+ "@types/keygrip": {
7757+ "version": "1.0.2",
7758+ "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.2.tgz",
7759+ "integrity": "sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==",
7760+ "dev": true
7761+ },
7762+ "@types/koa": {
7763+ "version": "2.13.4",
7764+ "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.13.4.tgz",
7765+ "integrity": "sha512-dfHYMfU+z/vKtQB7NUrthdAEiSvnLebvBjwHtfFmpZmB7em2N3WVQdHgnFq+xvyVgxW5jKDmjWfLD3lw4g4uTw==",
7766+ "dev": true,
7767+ "requires": {
7768+ "@types/accepts": "*",
7769+ "@types/content-disposition": "*",
7770+ "@types/cookies": "*",
7771+ "@types/http-assert": "*",
7772+ "@types/http-errors": "*",
7773+ "@types/keygrip": "*",
7774+ "@types/koa-compose": "*",
7775+ "@types/node": "*"
7776+ }
7777+ },
7778+ "@types/koa__multer": {
7779+ "version": "2.0.4",
7780+ "resolved": "https://registry.npmjs.org/@types/koa__multer/-/koa__multer-2.0.4.tgz",
7781+ "integrity": "sha512-WRkshXhE5rpYFUbbtAjyMhdOOSdbu1XX+2AQlRNM6AZtgxd0/WXMU4lrP7e9tk5HWVTWbx8DOOsVBmfHjSGJ4w==",
7782+ "dev": true,
7783+ "requires": {
7784+ "@types/koa": "*"
7785+ }
7786+ },
7787+ "@types/koa__router": {
7788+ "version": "8.0.11",
7789+ "resolved": "https://registry.npmjs.org/@types/koa__router/-/koa__router-8.0.11.tgz",
7790+ "integrity": "sha512-WXgKWpBsbS14kzmzD9LeFapOIa678h7zvUHxDwXwSx4ETKXhXLVUAToX6jZ/U7EihM7qwyD9W/BZvB0MRu7MTQ==",
7791+ "dev": true,
7792+ "requires": {
7793+ "@types/koa": "*"
7794+ }
7795+ },
7796+ "@types/koa-bodyparser": {
7797+ "version": "4.3.7",
7798+ "resolved": "https://registry.npmjs.org/@types/koa-bodyparser/-/koa-bodyparser-4.3.7.tgz",
7799+ "integrity": "sha512-21NhEp7LjZm4zbNV5alHHmrNY4J+S7B8lYTO6CzRL8ShTMnl20Gd14dRgVhAxraLaW5iZMofox+BycbuiDvj2Q==",
7800+ "dev": true,
7801+ "requires": {
7802+ "@types/koa": "*"
7803+ }
7804+ },
7805+ "@types/koa-compose": {
7806+ "version": "3.2.5",
7807+ "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.5.tgz",
7808+ "integrity": "sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==",
7809+ "dev": true,
7810+ "requires": {
7811+ "@types/koa": "*"
7812+ }
7813+ },
7814+ "@types/koa-json": {
7815+ "version": "2.0.20",
7816+ "resolved": "https://registry.npmjs.org/@types/koa-json/-/koa-json-2.0.20.tgz",
7817+ "integrity": "sha512-RuQ1Vlpsm/EC5wo2oWCgNnwneixnSQ9aHQAE7nwnbSiCibgfUO2wwSQN6rn8SfF97cRdN9hKAtoc9KSIuiGP6Q==",
7818+ "dev": true,
7819+ "requires": {
7820+ "@types/koa": "*"
7821+ }
7822+ },
7823+ "@types/lodash": {
7824+ "version": "4.14.181",
7825+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.181.tgz",
7826+ "integrity": "sha512-n3tyKthHJbkiWhDZs3DkhkCzt2MexYHXlX0td5iMplyfwketaOeKboEVBqzceH7juqvEg3q5oUoBFxSLu7zFag==",
7827+ "dev": true
7828+ },
7829+ "@types/lowdb": {
7830+ "version": "1.0.11",
7831+ "resolved": "https://registry.npmjs.org/@types/lowdb/-/lowdb-1.0.11.tgz",
7832+ "integrity": "sha512-h99VMxvTuz+VsXUVCCJo4dsps4vbkXwvU71TpmxDoiBU24bJ0VBygIHgmMm+UPoQIFihmV6euRik4z8J7XDJWg==",
7833+ "dev": true,
7834+ "requires": {
7835+ "@types/lodash": "*"
7836+ }
7837+ },
7838+ "@types/lunr": {
7839+ "version": "2.3.4",
7840+ "resolved": "https://registry.npmjs.org/@types/lunr/-/lunr-2.3.4.tgz",
7841+ "integrity": "sha512-j4x4XJwZvorEUbA519VdQ5b9AOU9TSvfi8tvxMAfP8XzNLtFex7A8vFQwqOx3WACbV0KMXbACV3cZl4/gynQ7g==",
7842+ "dev": true
7843+ },
7844+ "@types/mime": {
7845+ "version": "1.3.2",
7846+ "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
7847+ "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==",
7848+ "dev": true
7849+ },
7850+ "@types/minimatch": {
7851+ "version": "3.0.5",
7852+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
7853+ "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==",
7854+ "dev": true
7855+ },
7856+ "@types/node": {
7857+ "version": "16.11.26",
7858+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.26.tgz",
7859+ "integrity": "sha512-GZ7bu5A6+4DtG7q9GsoHXy3ALcgeIHP4NnL0Vv2wu0uUB/yQex26v0tf6/na1mm0+bS9Uw+0DFex7aaKr2qawQ==",
7860+ "dev": true
7861+ },
7862+ "@types/node-fetch": {
7863+ "version": "2.6.1",
7864+ "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.1.tgz",
7865+ "integrity": "sha512-oMqjURCaxoSIsHSr1E47QHzbmzNR5rK8McHuNb11BOM9cHcIK3Avy0s/b2JlXHoQGTYS3NsvWzV1M0iK7l0wbA==",
7866+ "dev": true,
7867+ "requires": {
7868+ "@types/node": "*",
7869+ "form-data": "^3.0.0"
7870+ },
7871+ "dependencies": {
7872+ "form-data": {
7873+ "version": "3.0.1",
7874+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
7875+ "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
7876+ "dev": true,
7877+ "requires": {
7878+ "asynckit": "^0.4.0",
7879+ "combined-stream": "^1.0.8",
7880+ "mime-types": "^2.1.12"
7881+ }
7882+ }
7883+ }
7884+ },
7885+ "@types/node-forge": {
7886+ "version": "1.0.1",
7887+ "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.0.1.tgz",
7888+ "integrity": "sha512-96ELNKv9tQJ19afdBUiM5iDw7OYEc53iUc51gAPR2aGaqRsO1DBROjqgZRjZa1tkPj7TnEOR0EnyAX6iryGkzA==",
7889+ "dev": true,
7890+ "requires": {
7891+ "@types/node": "*"
7892+ }
7893+ },
7894+ "@types/papaparse": {
7895+ "version": "5.3.2",
7896+ "resolved": "https://registry.npmjs.org/@types/papaparse/-/papaparse-5.3.2.tgz",
7897+ "integrity": "sha512-BNbCHJkTE4RwmAFkCxEalET4mDvGr/1ld7ZtQ4i/laWI/iiVt+GL07stdvufle4KfywyvloqqpIiJscXNCrKxA==",
7898+ "dev": true,
7899+ "requires": {
7900+ "@types/node": "*"
7901+ }
7902+ },
7903+ "@types/parse5": {
7904+ "version": "6.0.3",
7905+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz",
7906+ "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==",
7907+ "dev": true
7908+ },
7909+ "@types/proper-lockfile": {
7910+ "version": "4.1.2",
7911+ "resolved": "https://registry.npmjs.org/@types/proper-lockfile/-/proper-lockfile-4.1.2.tgz",
7912+ "integrity": "sha512-kd4LMvcnpYkspDcp7rmXKedn8iJSCoa331zRRamUp5oanKt/CefbEGPQP7G89enz7sKD4bvsr8mHSsC8j5WOvA==",
7913+ "dev": true,
7914+ "requires": {
7915+ "@types/retry": "*"
7916+ }
7917+ },
7918+ "@types/qs": {
7919+ "version": "6.9.7",
7920+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz",
7921+ "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==",
7922+ "dev": true
7923+ },
7924+ "@types/range-parser": {
7925+ "version": "1.2.4",
7926+ "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz",
7927+ "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==",
7928+ "dev": true
7929+ },
7930+ "@types/retry": {
7931+ "version": "0.12.1",
7932+ "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz",
7933+ "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==",
7934+ "dev": true
7935+ },
7936+ "@types/serve-static": {
7937+ "version": "1.13.10",
7938+ "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz",
7939+ "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==",
7940+ "dev": true,
7941+ "requires": {
7942+ "@types/mime": "^1",
7943+ "@types/node": "*"
7944+ }
7945+ },
7946+ "@types/through": {
7947+ "version": "0.0.30",
7948+ "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.30.tgz",
7949+ "integrity": "sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==",
7950+ "dev": true,
7951+ "requires": {
7952+ "@types/node": "*"
7953+ }
7954+ },
7955+ "@types/tldjs": {
7956+ "version": "2.3.1",
7957+ "resolved": "https://registry.npmjs.org/@types/tldjs/-/tldjs-2.3.1.tgz",
7958+ "integrity": "sha512-BQR04zLE0ve2eNrqxXw/Qp/f6LxvNrj/4A8ZgdQi3SzbBqxFhleI7N4DS/mSjDnODrUaEGgoWg4grAZR1kVj8w==",
7959+ "dev": true
7960+ },
7961+ "@types/tough-cookie": {
7962+ "version": "4.0.1",
7963+ "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.1.tgz",
7964+ "integrity": "sha512-Y0K95ThC3esLEYD6ZuqNek29lNX2EM1qxV8y2FTLUB0ff5wWrk7az+mLrnNFUnaXcgKye22+sFBRXOgpPILZNg==",
7965+ "dev": true
7966+ },
7967+ "@types/zxcvbn": {
7968+ "version": "4.4.1",
7969+ "resolved": "https://registry.npmjs.org/@types/zxcvbn/-/zxcvbn-4.4.1.tgz",
7970+ "integrity": "sha512-3NoqvZC2W5gAC5DZbTpCeJ251vGQmgcWIHQJGq2J240HY6ErQ9aWKkwfoKJlHLx+A83WPNTZ9+3cd2ILxbvr1w==",
7971+ "dev": true
7972+ },
7973+ "@typescript-eslint/eslint-plugin": {
7974+ "version": "5.18.0",
7975+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.18.0.tgz",
7976+ "integrity": "sha512-tzrmdGMJI/uii9/V6lurMo4/o+dMTKDH82LkNjhJ3adCW22YQydoRs5MwTiqxGF9CSYxPxQ7EYb4jLNlIs+E+A==",
7977+ "dev": true,
7978+ "requires": {
7979+ "@typescript-eslint/scope-manager": "5.18.0",
7980+ "@typescript-eslint/type-utils": "5.18.0",
7981+ "@typescript-eslint/utils": "5.18.0",
7982+ "debug": "^4.3.2",
7983+ "functional-red-black-tree": "^1.0.1",
7984+ "ignore": "^5.1.8",
7985+ "regexpp": "^3.2.0",
7986+ "semver": "^7.3.5",
7987+ "tsutils": "^3.21.0"
7988+ }
7989+ },
7990+ "@typescript-eslint/parser": {
7991+ "version": "5.18.0",
7992+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.18.0.tgz",
7993+ "integrity": "sha512-+08nYfurBzSSPndngnHvFw/fniWYJ5ymOrn/63oMIbgomVQOvIDhBoJmYZ9lwQOCnQV9xHGvf88ze3jFGUYooQ==",
7994+ "dev": true,
7995+ "requires": {
7996+ "@typescript-eslint/scope-manager": "5.18.0",
7997+ "@typescript-eslint/types": "5.18.0",
7998+ "@typescript-eslint/typescript-estree": "5.18.0",
7999+ "debug": "^4.3.2"
8000+ }
8001+ },
8002+ "@typescript-eslint/scope-manager": {
8003+ "version": "5.18.0",
8004+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.18.0.tgz",
8005+ "integrity": "sha512-C0CZML6NyRDj+ZbMqh9FnPscg2PrzSaVQg3IpTmpe0NURMVBXlghGZgMYqBw07YW73i0MCqSDqv2SbywnCS8jQ==",
8006+ "dev": true,
8007+ "requires": {
8008+ "@typescript-eslint/types": "5.18.0",
8009+ "@typescript-eslint/visitor-keys": "5.18.0"
8010+ }
8011+ },
8012+ "@typescript-eslint/type-utils": {
8013+ "version": "5.18.0",
8014+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.18.0.tgz",
8015+ "integrity": "sha512-vcn9/6J5D6jtHxpEJrgK8FhaM8r6J1/ZiNu70ZUJN554Y3D9t3iovi6u7JF8l/e7FcBIxeuTEidZDR70UuCIfA==",
8016+ "dev": true,
8017+ "requires": {
8018+ "@typescript-eslint/utils": "5.18.0",
8019+ "debug": "^4.3.2",
8020+ "tsutils": "^3.21.0"
8021+ }
8022+ },
8023+ "@typescript-eslint/types": {
8024+ "version": "5.18.0",
8025+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.18.0.tgz",
8026+ "integrity": "sha512-bhV1+XjM+9bHMTmXi46p1Led5NP6iqQcsOxgx7fvk6gGiV48c6IynY0apQb7693twJDsXiVzNXTflhplmaiJaw==",
8027+ "dev": true
8028+ },
8029+ "@typescript-eslint/typescript-estree": {
8030+ "version": "5.18.0",
8031+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.18.0.tgz",
8032+ "integrity": "sha512-wa+2VAhOPpZs1bVij9e5gyVu60ReMi/KuOx4LKjGx2Y3XTNUDJgQ+5f77D49pHtqef/klglf+mibuHs9TrPxdQ==",
8033+ "dev": true,
8034+ "requires": {
8035+ "@typescript-eslint/types": "5.18.0",
8036+ "@typescript-eslint/visitor-keys": "5.18.0",
8037+ "debug": "^4.3.2",
8038+ "globby": "^11.0.4",
8039+ "is-glob": "^4.0.3",
8040+ "semver": "^7.3.5",
8041+ "tsutils": "^3.21.0"
8042+ }
8043+ },
8044+ "@typescript-eslint/utils": {
8045+ "version": "5.18.0",
8046+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.18.0.tgz",
8047+ "integrity": "sha512-+hFGWUMMri7OFY26TsOlGa+zgjEy1ssEipxpLjtl4wSll8zy85x0GrUSju/FHdKfVorZPYJLkF3I4XPtnCTewA==",
8048+ "dev": true,
8049+ "requires": {
8050+ "@types/json-schema": "^7.0.9",
8051+ "@typescript-eslint/scope-manager": "5.18.0",
8052+ "@typescript-eslint/types": "5.18.0",
8053+ "@typescript-eslint/typescript-estree": "5.18.0",
8054+ "eslint-scope": "^5.1.1",
8055+ "eslint-utils": "^3.0.0"
8056+ }
8057+ },
8058+ "@typescript-eslint/visitor-keys": {
8059+ "version": "5.18.0",
8060+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.18.0.tgz",
8061+ "integrity": "sha512-Hf+t+dJsjAKpKSkg3EHvbtEpFFb/1CiOHnvI8bjHgOD4/wAw3gKrA0i94LrbekypiZVanJu3McWJg7rWDMzRTg==",
8062+ "dev": true,
8063+ "requires": {
8064+ "@typescript-eslint/types": "5.18.0",
8065+ "eslint-visitor-keys": "^3.0.0"
8066+ }
8067+ },
8068+ "@webassemblyjs/ast": {
8069+ "version": "1.11.1",
8070+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz",
8071+ "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==",
8072+ "dev": true,
8073+ "requires": {
8074+ "@webassemblyjs/helper-numbers": "1.11.1",
8075+ "@webassemblyjs/helper-wasm-bytecode": "1.11.1"
8076+ }
8077+ },
8078+ "@webassemblyjs/floating-point-hex-parser": {
8079+ "version": "1.11.1",
8080+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz",
8081+ "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==",
8082+ "dev": true
8083+ },
8084+ "@webassemblyjs/helper-api-error": {
8085+ "version": "1.11.1",
8086+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz",
8087+ "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==",
8088+ "dev": true
8089+ },
8090+ "@webassemblyjs/helper-buffer": {
8091+ "version": "1.11.1",
8092+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz",
8093+ "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==",
8094+ "dev": true
8095+ },
8096+ "@webassemblyjs/helper-numbers": {
8097+ "version": "1.11.1",
8098+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz",
8099+ "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==",
8100+ "dev": true,
8101+ "requires": {
8102+ "@webassemblyjs/floating-point-hex-parser": "1.11.1",
8103+ "@webassemblyjs/helper-api-error": "1.11.1",
8104+ "@xtuc/long": "4.2.2"
8105+ }
8106+ },
8107+ "@webassemblyjs/helper-wasm-bytecode": {
8108+ "version": "1.11.1",
8109+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz",
8110+ "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==",
8111+ "dev": true
8112+ },
8113+ "@webassemblyjs/helper-wasm-section": {
8114+ "version": "1.11.1",
8115+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz",
8116+ "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==",
8117+ "dev": true,
8118+ "requires": {
8119+ "@webassemblyjs/ast": "1.11.1",
8120+ "@webassemblyjs/helper-buffer": "1.11.1",
8121+ "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
8122+ "@webassemblyjs/wasm-gen": "1.11.1"
8123+ }
8124+ },
8125+ "@webassemblyjs/ieee754": {
8126+ "version": "1.11.1",
8127+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz",
8128+ "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==",
8129+ "dev": true,
8130+ "requires": {
8131+ "@xtuc/ieee754": "^1.2.0"
8132+ }
8133+ },
8134+ "@webassemblyjs/leb128": {
8135+ "version": "1.11.1",
8136+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz",
8137+ "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==",
8138+ "dev": true,
8139+ "requires": {
8140+ "@xtuc/long": "4.2.2"
8141+ }
8142+ },
8143+ "@webassemblyjs/utf8": {
8144+ "version": "1.11.1",
8145+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz",
8146+ "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==",
8147+ "dev": true
8148+ },
8149+ "@webassemblyjs/wasm-edit": {
8150+ "version": "1.11.1",
8151+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz",
8152+ "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==",
8153+ "dev": true,
8154+ "requires": {
8155+ "@webassemblyjs/ast": "1.11.1",
8156+ "@webassemblyjs/helper-buffer": "1.11.1",
8157+ "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
8158+ "@webassemblyjs/helper-wasm-section": "1.11.1",
8159+ "@webassemblyjs/wasm-gen": "1.11.1",
8160+ "@webassemblyjs/wasm-opt": "1.11.1",
8161+ "@webassemblyjs/wasm-parser": "1.11.1",
8162+ "@webassemblyjs/wast-printer": "1.11.1"
8163+ }
8164+ },
8165+ "@webassemblyjs/wasm-gen": {
8166+ "version": "1.11.1",
8167+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz",
8168+ "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==",
8169+ "dev": true,
8170+ "requires": {
8171+ "@webassemblyjs/ast": "1.11.1",
8172+ "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
8173+ "@webassemblyjs/ieee754": "1.11.1",
8174+ "@webassemblyjs/leb128": "1.11.1",
8175+ "@webassemblyjs/utf8": "1.11.1"
8176+ }
8177+ },
8178+ "@webassemblyjs/wasm-opt": {
8179+ "version": "1.11.1",
8180+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz",
8181+ "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==",
8182+ "dev": true,
8183+ "requires": {
8184+ "@webassemblyjs/ast": "1.11.1",
8185+ "@webassemblyjs/helper-buffer": "1.11.1",
8186+ "@webassemblyjs/wasm-gen": "1.11.1",
8187+ "@webassemblyjs/wasm-parser": "1.11.1"
8188+ }
8189+ },
8190+ "@webassemblyjs/wasm-parser": {
8191+ "version": "1.11.1",
8192+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz",
8193+ "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==",
8194+ "dev": true,
8195+ "requires": {
8196+ "@webassemblyjs/ast": "1.11.1",
8197+ "@webassemblyjs/helper-api-error": "1.11.1",
8198+ "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
8199+ "@webassemblyjs/ieee754": "1.11.1",
8200+ "@webassemblyjs/leb128": "1.11.1",
8201+ "@webassemblyjs/utf8": "1.11.1"
8202+ }
8203+ },
8204+ "@webassemblyjs/wast-printer": {
8205+ "version": "1.11.1",
8206+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz",
8207+ "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==",
8208+ "dev": true,
8209+ "requires": {
8210+ "@webassemblyjs/ast": "1.11.1",
8211+ "@xtuc/long": "4.2.2"
8212+ }
8213+ },
8214+ "@webpack-cli/configtest": {
8215+ "version": "1.1.1",
8216+ "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.1.tgz",
8217+ "integrity": "sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg==",
8218+ "dev": true,
8219+ "requires": {}
8220+ },
8221+ "@webpack-cli/info": {
8222+ "version": "1.4.1",
8223+ "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.1.tgz",
8224+ "integrity": "sha512-PKVGmazEq3oAo46Q63tpMr4HipI3OPfP7LiNOEJg963RMgT0rqheag28NCML0o3GIzA3DmxP1ZIAv9oTX1CUIA==",
8225+ "dev": true,
8226+ "requires": {
8227+ "envinfo": "^7.7.3"
8228+ }
8229+ },
8230+ "@webpack-cli/serve": {
8231+ "version": "1.6.1",
8232+ "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.1.tgz",
8233+ "integrity": "sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw==",
8234+ "dev": true,
8235+ "requires": {}
8236+ },
8237+ "@xtuc/ieee754": {
8238+ "version": "1.2.0",
8239+ "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
8240+ "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
8241+ "dev": true
8242+ },
8243+ "@xtuc/long": {
8244+ "version": "4.2.2",
8245+ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
8246+ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
8247+ "dev": true
8248+ },
8249+ "abab": {
8250+ "version": "2.0.5",
8251+ "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz",
8252+ "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q=="
8253+ },
8254+ "accepts": {
8255+ "version": "1.3.8",
8256+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
8257+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
8258+ "requires": {
8259+ "mime-types": "~2.1.34",
8260+ "negotiator": "0.6.3"
8261+ }
8262+ },
8263+ "acorn": {
8264+ "version": "8.7.0",
8265+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
8266+ "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ=="
8267+ },
8268+ "acorn-globals": {
8269+ "version": "6.0.0",
8270+ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
8271+ "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
8272+ "requires": {
8273+ "acorn": "^7.1.1",
8274+ "acorn-walk": "^7.1.1"
8275+ },
8276+ "dependencies": {
8277+ "acorn": {
8278+ "version": "7.4.1",
8279+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
8280+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
8281+ }
8282+ }
8283+ },
8284+ "acorn-import-assertions": {
8285+ "version": "1.8.0",
8286+ "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz",
8287+ "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==",
8288+ "dev": true,
8289+ "requires": {}
8290+ },
8291+ "acorn-jsx": {
8292+ "version": "5.3.2",
8293+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
8294+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
8295+ "dev": true,
8296+ "requires": {}
8297+ },
8298+ "acorn-walk": {
8299+ "version": "7.2.0",
8300+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
8301+ "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA=="
8302+ },
8303+ "agent-base": {
8304+ "version": "6.0.2",
8305+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
8306+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
8307+ "requires": {
8308+ "debug": "4"
8309+ }
8310+ },
8311+ "aggregate-error": {
8312+ "version": "3.1.0",
8313+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
8314+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
8315+ "dev": true,
8316+ "requires": {
8317+ "clean-stack": "^2.0.0",
8318+ "indent-string": "^4.0.0"
8319+ }
8320+ },
8321+ "ajv": {
8322+ "version": "6.12.6",
8323+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
8324+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
8325+ "dev": true,
8326+ "requires": {
8327+ "fast-deep-equal": "^3.1.1",
8328+ "fast-json-stable-stringify": "^2.0.0",
8329+ "json-schema-traverse": "^0.4.1",
8330+ "uri-js": "^4.2.2"
8331+ }
8332+ },
8333+ "ajv-formats": {
8334+ "version": "2.1.1",
8335+ "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
8336+ "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
8337+ "dev": true,
8338+ "requires": {
8339+ "ajv": "^8.0.0"
8340+ },
8341+ "dependencies": {
8342+ "ajv": {
8343+ "version": "8.11.0",
8344+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz",
8345+ "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==",
8346+ "dev": true,
8347+ "requires": {
8348+ "fast-deep-equal": "^3.1.1",
8349+ "json-schema-traverse": "^1.0.0",
8350+ "require-from-string": "^2.0.2",
8351+ "uri-js": "^4.2.2"
8352+ }
8353+ },
8354+ "json-schema-traverse": {
8355+ "version": "1.0.0",
8356+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
8357+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
8358+ "dev": true
8359+ }
8360+ }
8361+ },
8362+ "ajv-keywords": {
8363+ "version": "3.5.2",
8364+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
8365+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
8366+ "dev": true,
8367+ "requires": {}
8368+ },
8369+ "ansi-escapes": {
8370+ "version": "4.3.2",
8371+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
8372+ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
8373+ "requires": {
8374+ "type-fest": "^0.21.3"
8375+ },
8376+ "dependencies": {
8377+ "type-fest": {
8378+ "version": "0.21.3",
8379+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
8380+ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w=="
8381+ }
8382+ }
8383+ },
8384+ "ansi-regex": {
8385+ "version": "5.0.1",
8386+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
8387+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
8388+ },
8389+ "ansi-styles": {
8390+ "version": "4.3.0",
8391+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
8392+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
8393+ "requires": {
8394+ "color-convert": "^2.0.1"
8395+ }
8396+ },
8397+ "append-field": {
8398+ "version": "1.0.0",
8399+ "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz",
8400+ "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY="
8401+ },
8402+ "aproba": {
8403+ "version": "1.2.0",
8404+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
8405+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
8406+ "dev": true
8407+ },
8408+ "are-we-there-yet": {
8409+ "version": "1.1.7",
8410+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz",
8411+ "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==",
8412+ "dev": true,
8413+ "requires": {
8414+ "delegates": "^1.0.0",
8415+ "readable-stream": "^2.0.6"
8416+ }
8417+ },
8418+ "arg": {
8419+ "version": "4.1.3",
8420+ "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
8421+ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
8422+ "dev": true
8423+ },
8424+ "argparse": {
8425+ "version": "2.0.1",
8426+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
8427+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
8428+ "dev": true
8429+ },
8430+ "array-includes": {
8431+ "version": "3.1.4",
8432+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz",
8433+ "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==",
8434+ "dev": true,
8435+ "requires": {
8436+ "call-bind": "^1.0.2",
8437+ "define-properties": "^1.1.3",
8438+ "es-abstract": "^1.19.1",
8439+ "get-intrinsic": "^1.1.1",
8440+ "is-string": "^1.0.7"
8441+ }
8442+ },
8443+ "array-union": {
8444+ "version": "2.1.0",
8445+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
8446+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
8447+ "dev": true
8448+ },
8449+ "array-uniq": {
8450+ "version": "1.0.3",
8451+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
8452+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
8453+ "dev": true
8454+ },
8455+ "array.prototype.flat": {
8456+ "version": "1.2.5",
8457+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz",
8458+ "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==",
8459+ "dev": true,
8460+ "requires": {
8461+ "call-bind": "^1.0.2",
8462+ "define-properties": "^1.1.3",
8463+ "es-abstract": "^1.19.0"
8464+ }
8465+ },
8466+ "astral-regex": {
8467+ "version": "2.0.0",
8468+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
8469+ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
8470+ "dev": true
8471+ },
8472+ "asynckit": {
8473+ "version": "0.4.0",
8474+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
8475+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
8476+ },
8477+ "at-least-node": {
8478+ "version": "1.0.0",
8479+ "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
8480+ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
8481+ "dev": true
8482+ },
8483+ "atob": {
8484+ "version": "2.1.2",
8485+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
8486+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
8487+ "dev": true
8488+ },
8489+ "balanced-match": {
8490+ "version": "1.0.2",
8491+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
8492+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
8493+ "dev": true
8494+ },
8495+ "base64-js": {
8496+ "version": "1.5.1",
8497+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
8498+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
8499+ "dev": true
8500+ },
8501+ "big-integer": {
8502+ "version": "1.6.48",
8503+ "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz",
8504+ "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w=="
8505+ },
8506+ "big.js": {
8507+ "version": "5.2.2",
8508+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
8509+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
8510+ "dev": true
8511+ },
8512+ "bl": {
8513+ "version": "4.1.0",
8514+ "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
8515+ "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
8516+ "dev": true,
8517+ "requires": {
8518+ "buffer": "^5.5.0",
8519+ "inherits": "^2.0.4",
8520+ "readable-stream": "^3.4.0"
8521+ },
8522+ "dependencies": {
8523+ "readable-stream": {
8524+ "version": "3.6.0",
8525+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
8526+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
8527+ "dev": true,
8528+ "requires": {
8529+ "inherits": "^2.0.3",
8530+ "string_decoder": "^1.1.1",
8531+ "util-deprecate": "^1.0.1"
8532+ }
8533+ }
8534+ }
8535+ },
8536+ "brace-expansion": {
8537+ "version": "1.1.11",
8538+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
8539+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
8540+ "dev": true,
8541+ "requires": {
8542+ "balanced-match": "^1.0.0",
8543+ "concat-map": "0.0.1"
8544+ }
8545+ },
8546+ "braces": {
8547+ "version": "3.0.2",
8548+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
8549+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
8550+ "dev": true,
8551+ "requires": {
8552+ "fill-range": "^7.0.1"
8553+ }
8554+ },
8555+ "browser-hrtime": {
8556+ "version": "1.1.8",
8557+ "resolved": "https://registry.npmjs.org/browser-hrtime/-/browser-hrtime-1.1.8.tgz",
8558+ "integrity": "sha512-kzXheikaJsBtzUBlyVtPIY5r0soQePzjwVwT4IlDpU2RvfB5Py52gpU98M77rgqMCheoSSZvrcrdj3t6cZ3suA=="
8559+ },
8560+ "browser-process-hrtime": {
8561+ "version": "1.0.0",
8562+ "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
8563+ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow=="
8564+ },
8565+ "browserslist": {
8566+ "version": "4.20.2",
8567+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz",
8568+ "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==",
8569+ "dev": true,
8570+ "requires": {
8571+ "caniuse-lite": "^1.0.30001317",
8572+ "electron-to-chromium": "^1.4.84",
8573+ "escalade": "^3.1.1",
8574+ "node-releases": "^2.0.2",
8575+ "picocolors": "^1.0.0"
8576+ }
8577+ },
8578+ "buffer": {
8579+ "version": "5.7.1",
8580+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
8581+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
8582+ "dev": true,
8583+ "requires": {
8584+ "base64-js": "^1.3.1",
8585+ "ieee754": "^1.1.13"
8586+ }
8587+ },
8588+ "buffer-from": {
8589+ "version": "1.1.2",
8590+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
8591+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
8592+ },
8593+ "busboy": {
8594+ "version": "0.2.14",
8595+ "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz",
8596+ "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=",
8597+ "requires": {
8598+ "dicer": "0.2.5",
8599+ "readable-stream": "1.1.x"
8600+ },
8601+ "dependencies": {
8602+ "isarray": {
8603+ "version": "0.0.1",
8604+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
8605+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
8606+ },
8607+ "readable-stream": {
8608+ "version": "1.1.14",
8609+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
8610+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
8611+ "requires": {
8612+ "core-util-is": "~1.0.0",
8613+ "inherits": "~2.0.1",
8614+ "isarray": "0.0.1",
8615+ "string_decoder": "~0.10.x"
8616+ }
8617+ },
8618+ "string_decoder": {
8619+ "version": "0.10.31",
8620+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
8621+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
8622+ }
8623+ }
8624+ },
8625+ "bytes": {
8626+ "version": "3.1.2",
8627+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
8628+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="
8629+ },
8630+ "cache-content-type": {
8631+ "version": "1.0.1",
8632+ "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz",
8633+ "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==",
8634+ "requires": {
8635+ "mime-types": "^2.1.18",
8636+ "ylru": "^1.2.0"
8637+ }
8638+ },
8639+ "call-bind": {
8640+ "version": "1.0.2",
8641+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
8642+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
8643+ "requires": {
8644+ "function-bind": "^1.1.1",
8645+ "get-intrinsic": "^1.0.2"
8646+ }
8647+ },
8648+ "callsites": {
8649+ "version": "3.1.0",
8650+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
8651+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
8652+ "dev": true
8653+ },
8654+ "caniuse-lite": {
8655+ "version": "1.0.30001327",
8656+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001327.tgz",
8657+ "integrity": "sha512-1/Cg4jlD9qjZzhbzkzEaAC2JHsP0WrOc8Rd/3a3LuajGzGWR/hD7TVyvq99VqmTy99eVh8Zkmdq213OgvgXx7w==",
8658+ "dev": true
8659+ },
8660+ "chalk": {
8661+ "version": "4.1.2",
8662+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
8663+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
8664+ "requires": {
8665+ "ansi-styles": "^4.1.0",
8666+ "supports-color": "^7.1.0"
8667+ }
8668+ },
8669+ "chardet": {
8670+ "version": "0.7.0",
8671+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
8672+ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA=="
8673+ },
8674+ "chownr": {
8675+ "version": "1.1.4",
8676+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
8677+ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
8678+ "dev": true
8679+ },
8680+ "chrome-trace-event": {
8681+ "version": "1.0.3",
8682+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
8683+ "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
8684+ "dev": true
8685+ },
8686+ "clean-stack": {
8687+ "version": "2.2.0",
8688+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
8689+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
8690+ "dev": true
8691+ },
8692+ "clean-webpack-plugin": {
8693+ "version": "4.0.0",
8694+ "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-4.0.0.tgz",
8695+ "integrity": "sha512-WuWE1nyTNAyW5T7oNyys2EN0cfP2fdRxhxnIQWiAp0bMabPdHhoGxM8A6YL2GhqwgrPnnaemVE7nv5XJ2Fhh2w==",
8696+ "dev": true,
8697+ "requires": {
8698+ "del": "^4.1.1"
8699+ }
8700+ },
8701+ "cli-cursor": {
8702+ "version": "3.1.0",
8703+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
8704+ "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
8705+ "requires": {
8706+ "restore-cursor": "^3.1.0"
8707+ }
8708+ },
8709+ "cli-truncate": {
8710+ "version": "3.1.0",
8711+ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz",
8712+ "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==",
8713+ "dev": true,
8714+ "requires": {
8715+ "slice-ansi": "^5.0.0",
8716+ "string-width": "^5.0.0"
8717+ },
8718+ "dependencies": {
8719+ "ansi-regex": {
8720+ "version": "6.0.1",
8721+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
8722+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
8723+ "dev": true
8724+ },
8725+ "emoji-regex": {
8726+ "version": "9.2.2",
8727+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
8728+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
8729+ "dev": true
8730+ },
8731+ "string-width": {
8732+ "version": "5.1.2",
8733+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
8734+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
8735+ "dev": true,
8736+ "requires": {
8737+ "eastasianwidth": "^0.2.0",
8738+ "emoji-regex": "^9.2.2",
8739+ "strip-ansi": "^7.0.1"
8740+ }
8741+ },
8742+ "strip-ansi": {
8743+ "version": "7.0.1",
8744+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz",
8745+ "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==",
8746+ "dev": true,
8747+ "requires": {
8748+ "ansi-regex": "^6.0.1"
8749+ }
8750+ }
8751+ }
8752+ },
8753+ "cli-width": {
8754+ "version": "3.0.0",
8755+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz",
8756+ "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw=="
8757+ },
8758+ "cliui": {
8759+ "version": "7.0.4",
8760+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
8761+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
8762+ "dev": true,
8763+ "requires": {
8764+ "string-width": "^4.2.0",
8765+ "strip-ansi": "^6.0.0",
8766+ "wrap-ansi": "^7.0.0"
8767+ }
8768+ },
8769+ "clone-deep": {
8770+ "version": "4.0.1",
8771+ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
8772+ "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
8773+ "dev": true,
8774+ "requires": {
8775+ "is-plain-object": "^2.0.4",
8776+ "kind-of": "^6.0.2",
8777+ "shallow-clone": "^3.0.0"
8778+ }
8779+ },
8780+ "co": {
8781+ "version": "4.6.0",
8782+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
8783+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
8784+ },
8785+ "co-body": {
8786+ "version": "6.1.0",
8787+ "resolved": "https://registry.npmjs.org/co-body/-/co-body-6.1.0.tgz",
8788+ "integrity": "sha512-m7pOT6CdLN7FuXUcpuz/8lfQ/L77x8SchHCF4G0RBTJO20Wzmhn5Sp4/5WsKy8OSpifBSUrmg83qEqaDHdyFuQ==",
8789+ "requires": {
8790+ "inflation": "^2.0.0",
8791+ "qs": "^6.5.2",
8792+ "raw-body": "^2.3.3",
8793+ "type-is": "^1.6.16"
8794+ }
8795+ },
8796+ "code-point-at": {
8797+ "version": "1.1.0",
8798+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
8799+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
8800+ "dev": true
8801+ },
8802+ "color-convert": {
8803+ "version": "2.0.1",
8804+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
8805+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
8806+ "requires": {
8807+ "color-name": "~1.1.4"
8808+ }
8809+ },
8810+ "color-name": {
8811+ "version": "1.1.4",
8812+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
8813+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
8814+ },
8815+ "colorette": {
8816+ "version": "2.0.16",
8817+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz",
8818+ "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==",
8819+ "dev": true
8820+ },
8821+ "combined-stream": {
8822+ "version": "1.0.8",
8823+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
8824+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
8825+ "requires": {
8826+ "delayed-stream": "~1.0.0"
8827+ }
8828+ },
8829+ "commander": {
8830+ "version": "7.2.0",
8831+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
8832+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="
8833+ },
8834+ "concat-map": {
8835+ "version": "0.0.1",
8836+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
8837+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
8838+ "dev": true
8839+ },
8840+ "concat-stream": {
8841+ "version": "1.6.2",
8842+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
8843+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
8844+ "requires": {
8845+ "buffer-from": "^1.0.0",
8846+ "inherits": "^2.0.3",
8847+ "readable-stream": "^2.2.2",
8848+ "typedarray": "^0.0.6"
8849+ }
8850+ },
8851+ "console-control-strings": {
8852+ "version": "1.1.0",
8853+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
8854+ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
8855+ "dev": true
8856+ },
8857+ "content-disposition": {
8858+ "version": "0.5.4",
8859+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
8860+ "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
8861+ "requires": {
8862+ "safe-buffer": "5.2.1"
8863+ }
8864+ },
8865+ "content-type": {
8866+ "version": "1.0.4",
8867+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
8868+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
8869+ },
8870+ "cookies": {
8871+ "version": "0.8.0",
8872+ "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.8.0.tgz",
8873+ "integrity": "sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==",
8874+ "requires": {
8875+ "depd": "~2.0.0",
8876+ "keygrip": "~1.1.0"
8877+ },
8878+ "dependencies": {
8879+ "depd": {
8880+ "version": "2.0.0",
8881+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
8882+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
8883+ }
8884+ }
8885+ },
8886+ "copy-to": {
8887+ "version": "2.0.1",
8888+ "resolved": "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz",
8889+ "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU="
8890+ },
8891+ "copy-webpack-plugin": {
8892+ "version": "10.2.4",
8893+ "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.2.4.tgz",
8894+ "integrity": "sha512-xFVltahqlsRcyyJqQbDY6EYTtyQZF9rf+JPjwHObLdPFMEISqkFkr7mFoVOC6BfYS/dNThyoQKvziugm+OnwBg==",
8895+ "dev": true,
8896+ "requires": {
8897+ "fast-glob": "^3.2.7",
8898+ "glob-parent": "^6.0.1",
8899+ "globby": "^12.0.2",
8900+ "normalize-path": "^3.0.0",
8901+ "schema-utils": "^4.0.0",
8902+ "serialize-javascript": "^6.0.0"
8903+ },
8904+ "dependencies": {
8905+ "array-union": {
8906+ "version": "3.0.1",
8907+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz",
8908+ "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==",
8909+ "dev": true
8910+ },
8911+ "globby": {
8912+ "version": "12.2.0",
8913+ "resolved": "https://registry.npmjs.org/globby/-/globby-12.2.0.tgz",
8914+ "integrity": "sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA==",
8915+ "dev": true,
8916+ "requires": {
8917+ "array-union": "^3.0.1",
8918+ "dir-glob": "^3.0.1",
8919+ "fast-glob": "^3.2.7",
8920+ "ignore": "^5.1.9",
8921+ "merge2": "^1.4.1",
8922+ "slash": "^4.0.0"
8923+ }
8924+ },
8925+ "slash": {
8926+ "version": "4.0.0",
8927+ "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
8928+ "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==",
8929+ "dev": true
8930+ }
8931+ }
8932+ },
8933+ "core-util-is": {
8934+ "version": "1.0.3",
8935+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
8936+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
8937+ },
8938+ "create-require": {
8939+ "version": "1.1.1",
8940+ "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
8941+ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
8942+ "dev": true
8943+ },
8944+ "cross-env": {
8945+ "version": "7.0.3",
8946+ "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz",
8947+ "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==",
8948+ "dev": true,
8949+ "requires": {
8950+ "cross-spawn": "^7.0.1"
8951+ }
8952+ },
8953+ "cross-spawn": {
8954+ "version": "7.0.3",
8955+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
8956+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
8957+ "dev": true,
8958+ "requires": {
8959+ "path-key": "^3.1.0",
8960+ "shebang-command": "^2.0.0",
8961+ "which": "^2.0.1"
8962+ }
8963+ },
8964+ "cssom": {
8965+ "version": "0.4.4",
8966+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz",
8967+ "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw=="
8968+ },
8969+ "cssstyle": {
8970+ "version": "2.3.0",
8971+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
8972+ "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
8973+ "requires": {
8974+ "cssom": "~0.3.6"
8975+ },
8976+ "dependencies": {
8977+ "cssom": {
8978+ "version": "0.3.8",
8979+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
8980+ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg=="
8981+ }
8982+ }
8983+ },
8984+ "data-urls": {
8985+ "version": "2.0.0",
8986+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz",
8987+ "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==",
8988+ "requires": {
8989+ "abab": "^2.0.3",
8990+ "whatwg-mimetype": "^2.3.0",
8991+ "whatwg-url": "^8.0.0"
8992+ }
8993+ },
8994+ "debug": {
8995+ "version": "4.3.4",
8996+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
8997+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
8998+ "requires": {
8999+ "ms": "2.1.2"
9000+ }
9001+ },
9002+ "decimal.js": {
9003+ "version": "10.3.1",
9004+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz",
9005+ "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ=="
9006+ },
9007+ "decode-uri-component": {
9008+ "version": "0.2.0",
9009+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
9010+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
9011+ "dev": true
9012+ },
9013+ "decompress-response": {
9014+ "version": "4.2.1",
9015+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz",
9016+ "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==",
9017+ "dev": true,
9018+ "requires": {
9019+ "mimic-response": "^2.0.0"
9020+ }
9021+ },
9022+ "deep-equal": {
9023+ "version": "1.0.1",
9024+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
9025+ "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU="
9026+ },
9027+ "deep-extend": {
9028+ "version": "0.6.0",
9029+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
9030+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
9031+ "dev": true
9032+ },
9033+ "deep-is": {
9034+ "version": "0.1.4",
9035+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
9036+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
9037+ },
9038+ "define-lazy-prop": {
9039+ "version": "2.0.0",
9040+ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
9041+ "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og=="
9042+ },
9043+ "define-properties": {
9044+ "version": "1.1.3",
9045+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
9046+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
9047+ "dev": true,
9048+ "requires": {
9049+ "object-keys": "^1.0.12"
9050+ }
9051+ },
9052+ "del": {
9053+ "version": "4.1.1",
9054+ "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz",
9055+ "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==",
9056+ "dev": true,
9057+ "requires": {
9058+ "@types/glob": "^7.1.1",
9059+ "globby": "^6.1.0",
9060+ "is-path-cwd": "^2.0.0",
9061+ "is-path-in-cwd": "^2.0.0",
9062+ "p-map": "^2.0.0",
9063+ "pify": "^4.0.1",
9064+ "rimraf": "^2.6.3"
9065+ },
9066+ "dependencies": {
9067+ "array-union": {
9068+ "version": "1.0.2",
9069+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
9070+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
9071+ "dev": true,
9072+ "requires": {
9073+ "array-uniq": "^1.0.1"
9074+ }
9075+ },
9076+ "globby": {
9077+ "version": "6.1.0",
9078+ "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
9079+ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
9080+ "dev": true,
9081+ "requires": {
9082+ "array-union": "^1.0.1",
9083+ "glob": "^7.0.3",
9084+ "object-assign": "^4.0.1",
9085+ "pify": "^2.0.0",
9086+ "pinkie-promise": "^2.0.0"
9087+ },
9088+ "dependencies": {
9089+ "pify": {
9090+ "version": "2.3.0",
9091+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
9092+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
9093+ "dev": true
9094+ }
9095+ }
9096+ },
9097+ "rimraf": {
9098+ "version": "2.7.1",
9099+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
9100+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
9101+ "dev": true,
9102+ "requires": {
9103+ "glob": "^7.1.3"
9104+ }
9105+ }
9106+ }
9107+ },
9108+ "delayed-stream": {
9109+ "version": "1.0.0",
9110+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
9111+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
9112+ },
9113+ "delegates": {
9114+ "version": "1.0.0",
9115+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
9116+ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
9117+ },
9118+ "depd": {
9119+ "version": "1.1.2",
9120+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
9121+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
9122+ },
9123+ "destroy": {
9124+ "version": "1.2.0",
9125+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
9126+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg=="
9127+ },
9128+ "detect-libc": {
9129+ "version": "1.0.3",
9130+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
9131+ "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
9132+ "dev": true
9133+ },
9134+ "dicer": {
9135+ "version": "0.2.5",
9136+ "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz",
9137+ "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=",
9138+ "requires": {
9139+ "readable-stream": "1.1.x",
9140+ "streamsearch": "0.1.2"
9141+ },
9142+ "dependencies": {
9143+ "isarray": {
9144+ "version": "0.0.1",
9145+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
9146+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
9147+ },
9148+ "readable-stream": {
9149+ "version": "1.1.14",
9150+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
9151+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
9152+ "requires": {
9153+ "core-util-is": "~1.0.0",
9154+ "inherits": "~2.0.1",
9155+ "isarray": "0.0.1",
9156+ "string_decoder": "~0.10.x"
9157+ }
9158+ },
9159+ "string_decoder": {
9160+ "version": "0.10.31",
9161+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
9162+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
9163+ }
9164+ }
9165+ },
9166+ "diff": {
9167+ "version": "4.0.2",
9168+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
9169+ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
9170+ "dev": true
9171+ },
9172+ "dir-glob": {
9173+ "version": "3.0.1",
9174+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
9175+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
9176+ "dev": true,
9177+ "requires": {
9178+ "path-type": "^4.0.0"
9179+ }
9180+ },
9181+ "doctrine": {
9182+ "version": "3.0.0",
9183+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
9184+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
9185+ "dev": true,
9186+ "requires": {
9187+ "esutils": "^2.0.2"
9188+ }
9189+ },
9190+ "domexception": {
9191+ "version": "2.0.1",
9192+ "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz",
9193+ "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==",
9194+ "requires": {
9195+ "webidl-conversions": "^5.0.0"
9196+ },
9197+ "dependencies": {
9198+ "webidl-conversions": {
9199+ "version": "5.0.0",
9200+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz",
9201+ "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA=="
9202+ }
9203+ }
9204+ },
9205+ "eastasianwidth": {
9206+ "version": "0.2.0",
9207+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
9208+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
9209+ "dev": true
9210+ },
9211+ "ee-first": {
9212+ "version": "1.1.1",
9213+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
9214+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
9215+ },
9216+ "electron-to-chromium": {
9217+ "version": "1.4.106",
9218+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.106.tgz",
9219+ "integrity": "sha512-ZYfpVLULm67K7CaaGP7DmjyeMY4naxsbTy+syVVxT6QHI1Ww8XbJjmr9fDckrhq44WzCrcC5kH3zGpdusxwwqg==",
9220+ "dev": true
9221+ },
9222+ "emoji-regex": {
9223+ "version": "8.0.0",
9224+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
9225+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
9226+ },
9227+ "emojis-list": {
9228+ "version": "3.0.0",
9229+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
9230+ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
9231+ "dev": true
9232+ },
9233+ "encodeurl": {
9234+ "version": "1.0.2",
9235+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
9236+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
9237+ },
9238+ "end-of-stream": {
9239+ "version": "1.4.4",
9240+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
9241+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
9242+ "dev": true,
9243+ "requires": {
9244+ "once": "^1.4.0"
9245+ }
9246+ },
9247+ "enhanced-resolve": {
9248+ "version": "4.5.0",
9249+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz",
9250+ "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==",
9251+ "dev": true,
9252+ "requires": {
9253+ "graceful-fs": "^4.1.2",
9254+ "memory-fs": "^0.5.0",
9255+ "tapable": "^1.0.0"
9256+ }
9257+ },
9258+ "envinfo": {
9259+ "version": "7.8.1",
9260+ "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz",
9261+ "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==",
9262+ "dev": true
9263+ },
9264+ "errno": {
9265+ "version": "0.1.8",
9266+ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
9267+ "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==",
9268+ "dev": true,
9269+ "requires": {
9270+ "prr": "~1.0.1"
9271+ }
9272+ },
9273+ "error-stack-parser": {
9274+ "version": "2.0.7",
9275+ "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.7.tgz",
9276+ "integrity": "sha512-chLOW0ZGRf4s8raLrDxa5sdkvPec5YdvwbFnqJme4rk0rFajP8mPtrDL1+I+CwrQDCjswDA5sREX7jYQDQs9vA==",
9277+ "dev": true,
9278+ "requires": {
9279+ "stackframe": "^1.1.1"
9280+ }
9281+ },
9282+ "es-abstract": {
9283+ "version": "1.19.2",
9284+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.2.tgz",
9285+ "integrity": "sha512-gfSBJoZdlL2xRiOCy0g8gLMryhoe1TlimjzU99L/31Z8QEGIhVQI+EWwt5lT+AuU9SnorVupXFqqOGqGfsyO6w==",
9286+ "dev": true,
9287+ "requires": {
9288+ "call-bind": "^1.0.2",
9289+ "es-to-primitive": "^1.2.1",
9290+ "function-bind": "^1.1.1",
9291+ "get-intrinsic": "^1.1.1",
9292+ "get-symbol-description": "^1.0.0",
9293+ "has": "^1.0.3",
9294+ "has-symbols": "^1.0.3",
9295+ "internal-slot": "^1.0.3",
9296+ "is-callable": "^1.2.4",
9297+ "is-negative-zero": "^2.0.2",
9298+ "is-regex": "^1.1.4",
9299+ "is-shared-array-buffer": "^1.0.1",
9300+ "is-string": "^1.0.7",
9301+ "is-weakref": "^1.0.2",
9302+ "object-inspect": "^1.12.0",
9303+ "object-keys": "^1.1.1",
9304+ "object.assign": "^4.1.2",
9305+ "string.prototype.trimend": "^1.0.4",
9306+ "string.prototype.trimstart": "^1.0.4",
9307+ "unbox-primitive": "^1.0.1"
9308+ }
9309+ },
9310+ "es-module-lexer": {
9311+ "version": "0.9.3",
9312+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz",
9313+ "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==",
9314+ "dev": true
9315+ },
9316+ "es-to-primitive": {
9317+ "version": "1.2.1",
9318+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
9319+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
9320+ "dev": true,
9321+ "requires": {
9322+ "is-callable": "^1.1.4",
9323+ "is-date-object": "^1.0.1",
9324+ "is-symbol": "^1.0.2"
9325+ }
9326+ },
9327+ "escalade": {
9328+ "version": "3.1.1",
9329+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
9330+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
9331+ "dev": true
9332+ },
9333+ "escape-html": {
9334+ "version": "1.0.3",
9335+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
9336+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
9337+ },
9338+ "escape-string-regexp": {
9339+ "version": "4.0.0",
9340+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
9341+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
9342+ "dev": true
9343+ },
9344+ "escodegen": {
9345+ "version": "2.0.0",
9346+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz",
9347+ "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==",
9348+ "requires": {
9349+ "esprima": "^4.0.1",
9350+ "estraverse": "^5.2.0",
9351+ "esutils": "^2.0.2",
9352+ "optionator": "^0.8.1",
9353+ "source-map": "~0.6.1"
9354+ },
9355+ "dependencies": {
9356+ "estraverse": {
9357+ "version": "5.3.0",
9358+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
9359+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="
9360+ },
9361+ "levn": {
9362+ "version": "0.3.0",
9363+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
9364+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
9365+ "requires": {
9366+ "prelude-ls": "~1.1.2",
9367+ "type-check": "~0.3.2"
9368+ }
9369+ },
9370+ "optionator": {
9371+ "version": "0.8.3",
9372+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
9373+ "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
9374+ "requires": {
9375+ "deep-is": "~0.1.3",
9376+ "fast-levenshtein": "~2.0.6",
9377+ "levn": "~0.3.0",
9378+ "prelude-ls": "~1.1.2",
9379+ "type-check": "~0.3.2",
9380+ "word-wrap": "~1.2.3"
9381+ }
9382+ },
9383+ "prelude-ls": {
9384+ "version": "1.1.2",
9385+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
9386+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
9387+ },
9388+ "source-map": {
9389+ "version": "0.6.1",
9390+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
9391+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
9392+ "optional": true
9393+ },
9394+ "type-check": {
9395+ "version": "0.3.2",
9396+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
9397+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
9398+ "requires": {
9399+ "prelude-ls": "~1.1.2"
9400+ }
9401+ }
9402+ }
9403+ },
9404+ "eslint": {
9405+ "version": "8.13.0",
9406+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.13.0.tgz",
9407+ "integrity": "sha512-D+Xei61eInqauAyTJ6C0q6x9mx7kTUC1KZ0m0LSEexR0V+e94K12LmWX076ZIsldwfQ2RONdaJe0re0TRGQbRQ==",
9408+ "dev": true,
9409+ "requires": {
9410+ "@eslint/eslintrc": "^1.2.1",
9411+ "@humanwhocodes/config-array": "^0.9.2",
9412+ "ajv": "^6.10.0",
9413+ "chalk": "^4.0.0",
9414+ "cross-spawn": "^7.0.2",
9415+ "debug": "^4.3.2",
9416+ "doctrine": "^3.0.0",
9417+ "escape-string-regexp": "^4.0.0",
9418+ "eslint-scope": "^7.1.1",
9419+ "eslint-utils": "^3.0.0",
9420+ "eslint-visitor-keys": "^3.3.0",
9421+ "espree": "^9.3.1",
9422+ "esquery": "^1.4.0",
9423+ "esutils": "^2.0.2",
9424+ "fast-deep-equal": "^3.1.3",
9425+ "file-entry-cache": "^6.0.1",
9426+ "functional-red-black-tree": "^1.0.1",
9427+ "glob-parent": "^6.0.1",
9428+ "globals": "^13.6.0",
9429+ "ignore": "^5.2.0",
9430+ "import-fresh": "^3.0.0",
9431+ "imurmurhash": "^0.1.4",
9432+ "is-glob": "^4.0.0",
9433+ "js-yaml": "^4.1.0",
9434+ "json-stable-stringify-without-jsonify": "^1.0.1",
9435+ "levn": "^0.4.1",
9436+ "lodash.merge": "^4.6.2",
9437+ "minimatch": "^3.0.4",
9438+ "natural-compare": "^1.4.0",
9439+ "optionator": "^0.9.1",
9440+ "regexpp": "^3.2.0",
9441+ "strip-ansi": "^6.0.1",
9442+ "strip-json-comments": "^3.1.0",
9443+ "text-table": "^0.2.0",
9444+ "v8-compile-cache": "^2.0.3"
9445+ },
9446+ "dependencies": {
9447+ "eslint-scope": {
9448+ "version": "7.1.1",
9449+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
9450+ "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
9451+ "dev": true,
9452+ "requires": {
9453+ "esrecurse": "^4.3.0",
9454+ "estraverse": "^5.2.0"
9455+ }
9456+ },
9457+ "estraverse": {
9458+ "version": "5.3.0",
9459+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
9460+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
9461+ "dev": true
9462+ }
9463+ }
9464+ },
9465+ "eslint-config-prettier": {
9466+ "version": "8.5.0",
9467+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz",
9468+ "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==",
9469+ "dev": true,
9470+ "requires": {}
9471+ },
9472+ "eslint-import-resolver-node": {
9473+ "version": "0.3.6",
9474+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz",
9475+ "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==",
9476+ "dev": true,
9477+ "requires": {
9478+ "debug": "^3.2.7",
9479+ "resolve": "^1.20.0"
9480+ },
9481+ "dependencies": {
9482+ "debug": {
9483+ "version": "3.2.7",
9484+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
9485+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
9486+ "dev": true,
9487+ "requires": {
9488+ "ms": "^2.1.1"
9489+ }
9490+ }
9491+ }
9492+ },
9493+ "eslint-import-resolver-typescript": {
9494+ "version": "2.7.1",
9495+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz",
9496+ "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==",
9497+ "dev": true,
9498+ "requires": {
9499+ "debug": "^4.3.4",
9500+ "glob": "^7.2.0",
9501+ "is-glob": "^4.0.3",
9502+ "resolve": "^1.22.0",
9503+ "tsconfig-paths": "^3.14.1"
9504+ }
9505+ },
9506+ "eslint-module-utils": {
9507+ "version": "2.7.3",
9508+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz",
9509+ "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==",
9510+ "dev": true,
9511+ "requires": {
9512+ "debug": "^3.2.7",
9513+ "find-up": "^2.1.0"
9514+ },
9515+ "dependencies": {
9516+ "debug": {
9517+ "version": "3.2.7",
9518+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
9519+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
9520+ "dev": true,
9521+ "requires": {
9522+ "ms": "^2.1.1"
9523+ }
9524+ }
9525+ }
9526+ },
9527+ "eslint-plugin-import": {
9528+ "version": "2.26.0",
9529+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz",
9530+ "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==",
9531+ "dev": true,
9532+ "requires": {
9533+ "array-includes": "^3.1.4",
9534+ "array.prototype.flat": "^1.2.5",
9535+ "debug": "^2.6.9",
9536+ "doctrine": "^2.1.0",
9537+ "eslint-import-resolver-node": "^0.3.6",
9538+ "eslint-module-utils": "^2.7.3",
9539+ "has": "^1.0.3",
9540+ "is-core-module": "^2.8.1",
9541+ "is-glob": "^4.0.3",
9542+ "minimatch": "^3.1.2",
9543+ "object.values": "^1.1.5",
9544+ "resolve": "^1.22.0",
9545+ "tsconfig-paths": "^3.14.1"
9546+ },
9547+ "dependencies": {
9548+ "debug": {
9549+ "version": "2.6.9",
9550+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
9551+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
9552+ "dev": true,
9553+ "requires": {
9554+ "ms": "2.0.0"
9555+ }
9556+ },
9557+ "doctrine": {
9558+ "version": "2.1.0",
9559+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
9560+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
9561+ "dev": true,
9562+ "requires": {
9563+ "esutils": "^2.0.2"
9564+ }
9565+ },
9566+ "ms": {
9567+ "version": "2.0.0",
9568+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
9569+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
9570+ "dev": true
9571+ }
9572+ }
9573+ },
9574+ "eslint-scope": {
9575+ "version": "5.1.1",
9576+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
9577+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
9578+ "dev": true,
9579+ "requires": {
9580+ "esrecurse": "^4.3.0",
9581+ "estraverse": "^4.1.1"
9582+ }
9583+ },
9584+ "eslint-utils": {
9585+ "version": "3.0.0",
9586+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
9587+ "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
9588+ "dev": true,
9589+ "requires": {
9590+ "eslint-visitor-keys": "^2.0.0"
9591+ },
9592+ "dependencies": {
9593+ "eslint-visitor-keys": {
9594+ "version": "2.1.0",
9595+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
9596+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
9597+ "dev": true
9598+ }
9599+ }
9600+ },
9601+ "eslint-visitor-keys": {
9602+ "version": "3.3.0",
9603+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
9604+ "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
9605+ "dev": true
9606+ },
9607+ "espree": {
9608+ "version": "9.3.1",
9609+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz",
9610+ "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==",
9611+ "dev": true,
9612+ "requires": {
9613+ "acorn": "^8.7.0",
9614+ "acorn-jsx": "^5.3.1",
9615+ "eslint-visitor-keys": "^3.3.0"
9616+ }
9617+ },
9618+ "esprima": {
9619+ "version": "4.0.1",
9620+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
9621+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
9622+ },
9623+ "esquery": {
9624+ "version": "1.4.0",
9625+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
9626+ "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
9627+ "dev": true,
9628+ "requires": {
9629+ "estraverse": "^5.1.0"
9630+ },
9631+ "dependencies": {
9632+ "estraverse": {
9633+ "version": "5.3.0",
9634+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
9635+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
9636+ "dev": true
9637+ }
9638+ }
9639+ },
9640+ "esrecurse": {
9641+ "version": "4.3.0",
9642+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
9643+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
9644+ "dev": true,
9645+ "requires": {
9646+ "estraverse": "^5.2.0"
9647+ },
9648+ "dependencies": {
9649+ "estraverse": {
9650+ "version": "5.3.0",
9651+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
9652+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
9653+ "dev": true
9654+ }
9655+ }
9656+ },
9657+ "estraverse": {
9658+ "version": "4.3.0",
9659+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
9660+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
9661+ "dev": true
9662+ },
9663+ "esutils": {
9664+ "version": "2.0.3",
9665+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
9666+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="
9667+ },
9668+ "events": {
9669+ "version": "3.3.0",
9670+ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
9671+ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
9672+ "dev": true
9673+ },
9674+ "execa": {
9675+ "version": "5.1.1",
9676+ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
9677+ "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
9678+ "dev": true,
9679+ "requires": {
9680+ "cross-spawn": "^7.0.3",
9681+ "get-stream": "^6.0.0",
9682+ "human-signals": "^2.1.0",
9683+ "is-stream": "^2.0.0",
9684+ "merge-stream": "^2.0.0",
9685+ "npm-run-path": "^4.0.1",
9686+ "onetime": "^5.1.2",
9687+ "signal-exit": "^3.0.3",
9688+ "strip-final-newline": "^2.0.0"
9689+ }
9690+ },
9691+ "expand-template": {
9692+ "version": "2.0.3",
9693+ "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
9694+ "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==",
9695+ "dev": true
9696+ },
9697+ "external-editor": {
9698+ "version": "3.1.0",
9699+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
9700+ "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
9701+ "requires": {
9702+ "chardet": "^0.7.0",
9703+ "iconv-lite": "^0.4.24",
9704+ "tmp": "^0.0.33"
9705+ }
9706+ },
9707+ "fast-deep-equal": {
9708+ "version": "3.1.3",
9709+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
9710+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
9711+ "dev": true
9712+ },
9713+ "fast-glob": {
9714+ "version": "3.2.11",
9715+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
9716+ "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
9717+ "dev": true,
9718+ "requires": {
9719+ "@nodelib/fs.stat": "^2.0.2",
9720+ "@nodelib/fs.walk": "^1.2.3",
9721+ "glob-parent": "^5.1.2",
9722+ "merge2": "^1.3.0",
9723+ "micromatch": "^4.0.4"
9724+ },
9725+ "dependencies": {
9726+ "glob-parent": {
9727+ "version": "5.1.2",
9728+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
9729+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
9730+ "dev": true,
9731+ "requires": {
9732+ "is-glob": "^4.0.1"
9733+ }
9734+ }
9735+ }
9736+ },
9737+ "fast-json-stable-stringify": {
9738+ "version": "2.1.0",
9739+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
9740+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
9741+ "dev": true
9742+ },
9743+ "fast-levenshtein": {
9744+ "version": "2.0.6",
9745+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
9746+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
9747+ },
9748+ "fastest-levenshtein": {
9749+ "version": "1.0.12",
9750+ "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz",
9751+ "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==",
9752+ "dev": true
9753+ },
9754+ "fastq": {
9755+ "version": "1.13.0",
9756+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
9757+ "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
9758+ "dev": true,
9759+ "requires": {
9760+ "reusify": "^1.0.4"
9761+ }
9762+ },
9763+ "figures": {
9764+ "version": "3.2.0",
9765+ "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
9766+ "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
9767+ "requires": {
9768+ "escape-string-regexp": "^1.0.5"
9769+ },
9770+ "dependencies": {
9771+ "escape-string-regexp": {
9772+ "version": "1.0.5",
9773+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
9774+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
9775+ }
9776+ }
9777+ },
9778+ "file-entry-cache": {
9779+ "version": "6.0.1",
9780+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
9781+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
9782+ "dev": true,
9783+ "requires": {
9784+ "flat-cache": "^3.0.4"
9785+ }
9786+ },
9787+ "fill-range": {
9788+ "version": "7.0.1",
9789+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
9790+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
9791+ "dev": true,
9792+ "requires": {
9793+ "to-regex-range": "^5.0.1"
9794+ }
9795+ },
9796+ "find-up": {
9797+ "version": "2.1.0",
9798+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
9799+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
9800+ "dev": true,
9801+ "requires": {
9802+ "locate-path": "^2.0.0"
9803+ }
9804+ },
9805+ "flat-cache": {
9806+ "version": "3.0.4",
9807+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
9808+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
9809+ "dev": true,
9810+ "requires": {
9811+ "flatted": "^3.1.0",
9812+ "rimraf": "^3.0.2"
9813+ }
9814+ },
9815+ "flatted": {
9816+ "version": "3.2.5",
9817+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz",
9818+ "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==",
9819+ "dev": true
9820+ },
9821+ "form-data": {
9822+ "version": "4.0.0",
9823+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
9824+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
9825+ "requires": {
9826+ "asynckit": "^0.4.0",
9827+ "combined-stream": "^1.0.8",
9828+ "mime-types": "^2.1.12"
9829+ }
9830+ },
9831+ "fresh": {
9832+ "version": "0.5.2",
9833+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
9834+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
9835+ },
9836+ "from2": {
9837+ "version": "2.3.0",
9838+ "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
9839+ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
9840+ "dev": true,
9841+ "requires": {
9842+ "inherits": "^2.0.1",
9843+ "readable-stream": "^2.0.0"
9844+ }
9845+ },
9846+ "fs-constants": {
9847+ "version": "1.0.0",
9848+ "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
9849+ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
9850+ "dev": true
9851+ },
9852+ "fs-extra": {
9853+ "version": "9.1.0",
9854+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
9855+ "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
9856+ "dev": true,
9857+ "requires": {
9858+ "at-least-node": "^1.0.0",
9859+ "graceful-fs": "^4.2.0",
9860+ "jsonfile": "^6.0.1",
9861+ "universalify": "^2.0.0"
9862+ }
9863+ },
9864+ "fs.realpath": {
9865+ "version": "1.0.0",
9866+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
9867+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
9868+ "dev": true
9869+ },
9870+ "function-bind": {
9871+ "version": "1.1.1",
9872+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
9873+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
9874+ },
9875+ "functional-red-black-tree": {
9876+ "version": "1.0.1",
9877+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
9878+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
9879+ "dev": true
9880+ },
9881+ "gauge": {
9882+ "version": "2.7.4",
9883+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
9884+ "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
9885+ "dev": true,
9886+ "requires": {
9887+ "aproba": "^1.0.3",
9888+ "console-control-strings": "^1.0.0",
9889+ "has-unicode": "^2.0.0",
9890+ "object-assign": "^4.1.0",
9891+ "signal-exit": "^3.0.0",
9892+ "string-width": "^1.0.1",
9893+ "strip-ansi": "^3.0.1",
9894+ "wide-align": "^1.1.0"
9895+ },
9896+ "dependencies": {
9897+ "ansi-regex": {
9898+ "version": "2.1.1",
9899+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
9900+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
9901+ "dev": true
9902+ },
9903+ "is-fullwidth-code-point": {
9904+ "version": "1.0.0",
9905+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
9906+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
9907+ "dev": true,
9908+ "requires": {
9909+ "number-is-nan": "^1.0.0"
9910+ }
9911+ },
9912+ "string-width": {
9913+ "version": "1.0.2",
9914+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
9915+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
9916+ "dev": true,
9917+ "requires": {
9918+ "code-point-at": "^1.0.0",
9919+ "is-fullwidth-code-point": "^1.0.0",
9920+ "strip-ansi": "^3.0.0"
9921+ }
9922+ },
9923+ "strip-ansi": {
9924+ "version": "3.0.1",
9925+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
9926+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
9927+ "dev": true,
9928+ "requires": {
9929+ "ansi-regex": "^2.0.0"
9930+ }
9931+ }
9932+ }
9933+ },
9934+ "get-caller-file": {
9935+ "version": "2.0.5",
9936+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
9937+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
9938+ "dev": true
9939+ },
9940+ "get-intrinsic": {
9941+ "version": "1.1.1",
9942+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
9943+ "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
9944+ "requires": {
9945+ "function-bind": "^1.1.1",
9946+ "has": "^1.0.3",
9947+ "has-symbols": "^1.0.1"
9948+ }
9949+ },
9950+ "get-stream": {
9951+ "version": "6.0.1",
9952+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
9953+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
9954+ "dev": true
9955+ },
9956+ "get-symbol-description": {
9957+ "version": "1.0.0",
9958+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
9959+ "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
9960+ "dev": true,
9961+ "requires": {
9962+ "call-bind": "^1.0.2",
9963+ "get-intrinsic": "^1.1.1"
9964+ }
9965+ },
9966+ "github-from-package": {
9967+ "version": "0.0.0",
9968+ "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
9969+ "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=",
9970+ "dev": true
9971+ },
9972+ "glob": {
9973+ "version": "7.2.0",
9974+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
9975+ "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
9976+ "dev": true,
9977+ "requires": {
9978+ "fs.realpath": "^1.0.0",
9979+ "inflight": "^1.0.4",
9980+ "inherits": "2",
9981+ "minimatch": "^3.0.4",
9982+ "once": "^1.3.0",
9983+ "path-is-absolute": "^1.0.0"
9984+ }
9985+ },
9986+ "glob-parent": {
9987+ "version": "6.0.2",
9988+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
9989+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
9990+ "dev": true,
9991+ "requires": {
9992+ "is-glob": "^4.0.3"
9993+ }
9994+ },
9995+ "glob-to-regexp": {
9996+ "version": "0.4.1",
9997+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
9998+ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
9999+ "dev": true
10000+ },
10001+ "globals": {
10002+ "version": "13.13.0",
10003+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz",
10004+ "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==",
10005+ "dev": true,
10006+ "requires": {
10007+ "type-fest": "^0.20.2"
10008+ }
10009+ },
10010+ "globby": {
10011+ "version": "11.1.0",
10012+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
10013+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
10014+ "dev": true,
10015+ "requires": {
10016+ "array-union": "^2.1.0",
10017+ "dir-glob": "^3.0.1",
10018+ "fast-glob": "^3.2.9",
10019+ "ignore": "^5.2.0",
10020+ "merge2": "^1.4.1",
10021+ "slash": "^3.0.0"
10022+ }
10023+ },
10024+ "graceful-fs": {
10025+ "version": "4.2.10",
10026+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
10027+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
10028+ },
10029+ "has": {
10030+ "version": "1.0.3",
10031+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
10032+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
10033+ "requires": {
10034+ "function-bind": "^1.1.1"
10035+ }
10036+ },
10037+ "has-bigints": {
10038+ "version": "1.0.1",
10039+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz",
10040+ "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==",
10041+ "dev": true
10042+ },
10043+ "has-flag": {
10044+ "version": "4.0.0",
10045+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
10046+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
10047+ },
10048+ "has-symbols": {
10049+ "version": "1.0.3",
10050+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
10051+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
10052+ },
10053+ "has-tostringtag": {
10054+ "version": "1.0.0",
10055+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
10056+ "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
10057+ "requires": {
10058+ "has-symbols": "^1.0.2"
10059+ }
10060+ },
10061+ "has-unicode": {
10062+ "version": "2.0.1",
10063+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
10064+ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
10065+ "dev": true
10066+ },
10067+ "html-encoding-sniffer": {
10068+ "version": "2.0.1",
10069+ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz",
10070+ "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==",
10071+ "requires": {
10072+ "whatwg-encoding": "^1.0.5"
10073+ }
10074+ },
10075+ "http-assert": {
10076+ "version": "1.5.0",
10077+ "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz",
10078+ "integrity": "sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==",
10079+ "requires": {
10080+ "deep-equal": "~1.0.1",
10081+ "http-errors": "~1.8.0"
10082+ }
10083+ },
10084+ "http-errors": {
10085+ "version": "1.8.1",
10086+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
10087+ "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
10088+ "requires": {
10089+ "depd": "~1.1.2",
10090+ "inherits": "2.0.4",
10091+ "setprototypeof": "1.2.0",
10092+ "statuses": ">= 1.5.0 < 2",
10093+ "toidentifier": "1.0.1"
10094+ }
10095+ },
10096+ "http-proxy-agent": {
10097+ "version": "4.0.1",
10098+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
10099+ "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
10100+ "requires": {
10101+ "@tootallnate/once": "1",
10102+ "agent-base": "6",
10103+ "debug": "4"
10104+ }
10105+ },
10106+ "https-proxy-agent": {
10107+ "version": "5.0.0",
10108+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
10109+ "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
10110+ "requires": {
10111+ "agent-base": "6",
10112+ "debug": "4"
10113+ }
10114+ },
10115+ "human-signals": {
10116+ "version": "2.1.0",
10117+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
10118+ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
10119+ "dev": true
10120+ },
10121+ "husky": {
10122+ "version": "7.0.4",
10123+ "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz",
10124+ "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==",
10125+ "dev": true
10126+ },
10127+ "iconv-lite": {
10128+ "version": "0.4.24",
10129+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
10130+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
10131+ "requires": {
10132+ "safer-buffer": ">= 2.1.2 < 3"
10133+ }
10134+ },
10135+ "ieee754": {
10136+ "version": "1.2.1",
10137+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
10138+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
10139+ "dev": true
10140+ },
10141+ "ignore": {
10142+ "version": "5.2.0",
10143+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
10144+ "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
10145+ "dev": true
10146+ },
10147+ "immediate": {
10148+ "version": "3.0.6",
10149+ "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
10150+ "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
10151+ },
10152+ "import-fresh": {
10153+ "version": "3.3.0",
10154+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
10155+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
10156+ "dev": true,
10157+ "requires": {
10158+ "parent-module": "^1.0.0",
10159+ "resolve-from": "^4.0.0"
10160+ }
10161+ },
10162+ "import-local": {
10163+ "version": "3.1.0",
10164+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
10165+ "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
10166+ "dev": true,
10167+ "requires": {
10168+ "pkg-dir": "^4.2.0",
10169+ "resolve-cwd": "^3.0.0"
10170+ }
10171+ },
10172+ "imurmurhash": {
10173+ "version": "0.1.4",
10174+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
10175+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
10176+ "dev": true
10177+ },
10178+ "indent-string": {
10179+ "version": "4.0.0",
10180+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
10181+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
10182+ "dev": true
10183+ },
10184+ "inflation": {
10185+ "version": "2.0.0",
10186+ "resolved": "https://registry.npmjs.org/inflation/-/inflation-2.0.0.tgz",
10187+ "integrity": "sha1-i0F+R8KPklpFEz2RTKH9OJEH8w8="
10188+ },
10189+ "inflight": {
10190+ "version": "1.0.6",
10191+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
10192+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
10193+ "dev": true,
10194+ "requires": {
10195+ "once": "^1.3.0",
10196+ "wrappy": "1"
10197+ }
10198+ },
10199+ "inherits": {
10200+ "version": "2.0.4",
10201+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
10202+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
10203+ },
10204+ "ini": {
10205+ "version": "1.3.8",
10206+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
10207+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
10208+ "dev": true
10209+ },
10210+ "inquirer": {
10211+ "version": "8.0.0",
10212+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.0.0.tgz",
10213+ "integrity": "sha512-ON8pEJPPCdyjxj+cxsYRe6XfCJepTxANdNnTebsTuQgXpRyZRRT9t4dJwjRubgmvn20CLSEnozRUayXyM9VTXA==",
10214+ "requires": {
10215+ "ansi-escapes": "^4.2.1",
10216+ "chalk": "^4.1.0",
10217+ "cli-cursor": "^3.1.0",
10218+ "cli-width": "^3.0.0",
10219+ "external-editor": "^3.0.3",
10220+ "figures": "^3.0.0",
10221+ "lodash": "^4.17.21",
10222+ "mute-stream": "0.0.8",
10223+ "run-async": "^2.4.0",
10224+ "rxjs": "^6.6.6",
10225+ "string-width": "^4.1.0",
10226+ "strip-ansi": "^6.0.0",
10227+ "through": "^2.3.6"
10228+ }
10229+ },
10230+ "internal-slot": {
10231+ "version": "1.0.3",
10232+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
10233+ "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==",
10234+ "dev": true,
10235+ "requires": {
10236+ "get-intrinsic": "^1.1.0",
10237+ "has": "^1.0.3",
10238+ "side-channel": "^1.0.4"
10239+ }
10240+ },
10241+ "interpret": {
10242+ "version": "2.2.0",
10243+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz",
10244+ "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==",
10245+ "dev": true
10246+ },
10247+ "into-stream": {
10248+ "version": "6.0.0",
10249+ "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-6.0.0.tgz",
10250+ "integrity": "sha512-XHbaOAvP+uFKUFsOgoNPRjLkwB+I22JFPFe5OjTkQ0nwgj6+pSjb4NmB6VMxaPshLiOf+zcpOCBQuLwC1KHhZA==",
10251+ "dev": true,
10252+ "requires": {
10253+ "from2": "^2.3.0",
10254+ "p-is-promise": "^3.0.0"
10255+ }
10256+ },
10257+ "is-bigint": {
10258+ "version": "1.0.4",
10259+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
10260+ "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
10261+ "dev": true,
10262+ "requires": {
10263+ "has-bigints": "^1.0.1"
10264+ }
10265+ },
10266+ "is-boolean-object": {
10267+ "version": "1.1.2",
10268+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
10269+ "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
10270+ "dev": true,
10271+ "requires": {
10272+ "call-bind": "^1.0.2",
10273+ "has-tostringtag": "^1.0.0"
10274+ }
10275+ },
10276+ "is-callable": {
10277+ "version": "1.2.4",
10278+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz",
10279+ "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==",
10280+ "dev": true
10281+ },
10282+ "is-core-module": {
10283+ "version": "2.8.1",
10284+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
10285+ "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==",
10286+ "dev": true,
10287+ "requires": {
10288+ "has": "^1.0.3"
10289+ }
10290+ },
10291+ "is-date-object": {
10292+ "version": "1.0.5",
10293+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
10294+ "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
10295+ "dev": true,
10296+ "requires": {
10297+ "has-tostringtag": "^1.0.0"
10298+ }
10299+ },
10300+ "is-docker": {
10301+ "version": "2.2.1",
10302+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
10303+ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="
10304+ },
10305+ "is-extglob": {
10306+ "version": "2.1.1",
10307+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
10308+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
10309+ "dev": true
10310+ },
10311+ "is-fullwidth-code-point": {
10312+ "version": "4.0.0",
10313+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz",
10314+ "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==",
10315+ "dev": true
10316+ },
10317+ "is-generator-function": {
10318+ "version": "1.0.10",
10319+ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz",
10320+ "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==",
10321+ "requires": {
10322+ "has-tostringtag": "^1.0.0"
10323+ }
10324+ },
10325+ "is-glob": {
10326+ "version": "4.0.3",
10327+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
10328+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
10329+ "dev": true,
10330+ "requires": {
10331+ "is-extglob": "^2.1.1"
10332+ }
10333+ },
10334+ "is-negative-zero": {
10335+ "version": "2.0.2",
10336+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
10337+ "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
10338+ "dev": true
10339+ },
10340+ "is-number": {
10341+ "version": "7.0.0",
10342+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
10343+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
10344+ "dev": true
10345+ },
10346+ "is-number-object": {
10347+ "version": "1.0.7",
10348+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
10349+ "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
10350+ "dev": true,
10351+ "requires": {
10352+ "has-tostringtag": "^1.0.0"
10353+ }
10354+ },
10355+ "is-path-cwd": {
10356+ "version": "2.2.0",
10357+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
10358+ "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
10359+ "dev": true
10360+ },
10361+ "is-path-in-cwd": {
10362+ "version": "2.1.0",
10363+ "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz",
10364+ "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==",
10365+ "dev": true,
10366+ "requires": {
10367+ "is-path-inside": "^2.1.0"
10368+ }
10369+ },
10370+ "is-path-inside": {
10371+ "version": "2.1.0",
10372+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz",
10373+ "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==",
10374+ "dev": true,
10375+ "requires": {
10376+ "path-is-inside": "^1.0.2"
10377+ }
10378+ },
10379+ "is-plain-object": {
10380+ "version": "2.0.4",
10381+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
10382+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
10383+ "dev": true,
10384+ "requires": {
10385+ "isobject": "^3.0.1"
10386+ }
10387+ },
10388+ "is-potential-custom-element-name": {
10389+ "version": "1.0.1",
10390+ "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
10391+ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ=="
10392+ },
10393+ "is-promise": {
10394+ "version": "2.2.2",
10395+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz",
10396+ "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ=="
10397+ },
10398+ "is-regex": {
10399+ "version": "1.1.4",
10400+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
10401+ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
10402+ "dev": true,
10403+ "requires": {
10404+ "call-bind": "^1.0.2",
10405+ "has-tostringtag": "^1.0.0"
10406+ }
10407+ },
10408+ "is-shared-array-buffer": {
10409+ "version": "1.0.2",
10410+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
10411+ "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
10412+ "dev": true,
10413+ "requires": {
10414+ "call-bind": "^1.0.2"
10415+ }
10416+ },
10417+ "is-stream": {
10418+ "version": "2.0.1",
10419+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
10420+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
10421+ "dev": true
10422+ },
10423+ "is-string": {
10424+ "version": "1.0.7",
10425+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
10426+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
10427+ "dev": true,
10428+ "requires": {
10429+ "has-tostringtag": "^1.0.0"
10430+ }
10431+ },
10432+ "is-symbol": {
10433+ "version": "1.0.4",
10434+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
10435+ "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
10436+ "dev": true,
10437+ "requires": {
10438+ "has-symbols": "^1.0.2"
10439+ }
10440+ },
10441+ "is-weakref": {
10442+ "version": "1.0.2",
10443+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
10444+ "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
10445+ "dev": true,
10446+ "requires": {
10447+ "call-bind": "^1.0.2"
10448+ }
10449+ },
10450+ "is-wsl": {
10451+ "version": "2.2.0",
10452+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
10453+ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
10454+ "requires": {
10455+ "is-docker": "^2.0.0"
10456+ }
10457+ },
10458+ "isarray": {
10459+ "version": "1.0.0",
10460+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
10461+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
10462+ },
10463+ "isexe": {
10464+ "version": "2.0.0",
10465+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
10466+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
10467+ "dev": true
10468+ },
10469+ "isobject": {
10470+ "version": "3.0.1",
10471+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
10472+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
10473+ "dev": true
10474+ },
10475+ "jasmine": {
10476+ "version": "3.99.0",
10477+ "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-3.99.0.tgz",
10478+ "integrity": "sha512-YIThBuHzaIIcjxeuLmPD40SjxkEcc8i//sGMDKCgkRMVgIwRJf5qyExtlJpQeh7pkeoBSOe6lQEdg+/9uKg9mw==",
10479+ "dev": true,
10480+ "requires": {
10481+ "glob": "^7.1.6",
10482+ "jasmine-core": "~3.99.0"
10483+ }
10484+ },
10485+ "jasmine-core": {
10486+ "version": "3.99.1",
10487+ "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.99.1.tgz",
10488+ "integrity": "sha512-Hu1dmuoGcZ7AfyynN3LsfruwMbxMALMka+YtZeGoLuDEySVmVAPaonkNoBRIw/ectu8b9tVQCJNgp4a4knp+tg==",
10489+ "dev": true
10490+ },
10491+ "jasmine-ts": {
10492+ "version": "0.4.0",
10493+ "resolved": "https://registry.npmjs.org/jasmine-ts/-/jasmine-ts-0.4.0.tgz",
10494+ "integrity": "sha512-bIAWJKUwxfuZfGI1ctEbny7+dsyFzsN0eLzOokxh0qIUCofai2WUEKoe3MMllkGEBXJzbEVYr2IyhJBv4j7SBA==",
10495+ "dev": true,
10496+ "requires": {
10497+ "yargs": "^17.0.1"
10498+ }
10499+ },
10500+ "jasmine-ts-console-reporter": {
10501+ "version": "3.1.1",
10502+ "resolved": "https://registry.npmjs.org/jasmine-ts-console-reporter/-/jasmine-ts-console-reporter-3.1.1.tgz",
10503+ "integrity": "sha512-sKR3Dj2VkPbNBxN65KEYIKL5O+/6sG+j4zyhvUUUMuN4CjsuDiUhoneaj4xsIY8XvyTD4l/b9jtJ1uwSb/mZPg==",
10504+ "dev": true,
10505+ "requires": {
10506+ "error-stack-parser": "^2.0.1",
10507+ "minimatch": "^3.0.4",
10508+ "source-map": "^0.5.7",
10509+ "source-map-resolve": "^0.5.0"
10510+ }
10511+ },
10512+ "jest-worker": {
10513+ "version": "27.5.1",
10514+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
10515+ "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
10516+ "dev": true,
10517+ "requires": {
10518+ "@types/node": "*",
10519+ "merge-stream": "^2.0.0",
10520+ "supports-color": "^8.0.0"
10521+ },
10522+ "dependencies": {
10523+ "supports-color": {
10524+ "version": "8.1.1",
10525+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
10526+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
10527+ "dev": true,
10528+ "requires": {
10529+ "has-flag": "^4.0.0"
10530+ }
10531+ }
10532+ }
10533+ },
10534+ "js-yaml": {
10535+ "version": "4.1.0",
10536+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
10537+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
10538+ "dev": true,
10539+ "requires": {
10540+ "argparse": "^2.0.1"
10541+ }
10542+ },
10543+ "jsdom": {
10544+ "version": "16.7.0",
10545+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz",
10546+ "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==",
10547+ "requires": {
10548+ "abab": "^2.0.5",
10549+ "acorn": "^8.2.4",
10550+ "acorn-globals": "^6.0.0",
10551+ "cssom": "^0.4.4",
10552+ "cssstyle": "^2.3.0",
10553+ "data-urls": "^2.0.0",
10554+ "decimal.js": "^10.2.1",
10555+ "domexception": "^2.0.1",
10556+ "escodegen": "^2.0.0",
10557+ "form-data": "^3.0.0",
10558+ "html-encoding-sniffer": "^2.0.1",
10559+ "http-proxy-agent": "^4.0.1",
10560+ "https-proxy-agent": "^5.0.0",
10561+ "is-potential-custom-element-name": "^1.0.1",
10562+ "nwsapi": "^2.2.0",
10563+ "parse5": "6.0.1",
10564+ "saxes": "^5.0.1",
10565+ "symbol-tree": "^3.2.4",
10566+ "tough-cookie": "^4.0.0",
10567+ "w3c-hr-time": "^1.0.2",
10568+ "w3c-xmlserializer": "^2.0.0",
10569+ "webidl-conversions": "^6.1.0",
10570+ "whatwg-encoding": "^1.0.5",
10571+ "whatwg-mimetype": "^2.3.0",
10572+ "whatwg-url": "^8.5.0",
10573+ "ws": "^7.4.6",
10574+ "xml-name-validator": "^3.0.0"
10575+ },
10576+ "dependencies": {
10577+ "form-data": {
10578+ "version": "3.0.1",
10579+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
10580+ "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
10581+ "requires": {
10582+ "asynckit": "^0.4.0",
10583+ "combined-stream": "^1.0.8",
10584+ "mime-types": "^2.1.12"
10585+ }
10586+ }
10587+ }
10588+ },
10589+ "json-parse-better-errors": {
10590+ "version": "1.0.2",
10591+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
10592+ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
10593+ "dev": true
10594+ },
10595+ "json-schema-traverse": {
10596+ "version": "0.4.1",
10597+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
10598+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
10599+ "dev": true
10600+ },
10601+ "json-stable-stringify-without-jsonify": {
10602+ "version": "1.0.1",
10603+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
10604+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
10605+ "dev": true
10606+ },
10607+ "json-stringify-safe": {
10608+ "version": "5.0.1",
10609+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
10610+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
10611+ },
10612+ "json5": {
10613+ "version": "2.2.1",
10614+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
10615+ "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==",
10616+ "dev": true
10617+ },
10618+ "jsonfile": {
10619+ "version": "6.1.0",
10620+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
10621+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
10622+ "dev": true,
10623+ "requires": {
10624+ "graceful-fs": "^4.1.6",
10625+ "universalify": "^2.0.0"
10626+ }
10627+ },
10628+ "jszip": {
10629+ "version": "3.9.1",
10630+ "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.9.1.tgz",
10631+ "integrity": "sha512-H9A60xPqJ1CuC4Ka6qxzXZeU8aNmgOeP5IFqwJbQQwtu2EUYxota3LdsiZWplF7Wgd9tkAd0mdu36nceSaPuYw==",
10632+ "requires": {
10633+ "lie": "~3.3.0",
10634+ "pako": "~1.0.2",
10635+ "readable-stream": "~2.3.6",
10636+ "set-immediate-shim": "~1.0.1"
10637+ }
10638+ },
10639+ "keygrip": {
10640+ "version": "1.1.0",
10641+ "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz",
10642+ "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==",
10643+ "requires": {
10644+ "tsscmp": "1.0.6"
10645+ }
10646+ },
10647+ "kind-of": {
10648+ "version": "6.0.3",
10649+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
10650+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
10651+ "dev": true
10652+ },
10653+ "koa": {
10654+ "version": "2.13.4",
10655+ "resolved": "https://registry.npmjs.org/koa/-/koa-2.13.4.tgz",
10656+ "integrity": "sha512-43zkIKubNbnrULWlHdN5h1g3SEKXOEzoAlRsHOTFpnlDu8JlAOZSMJBLULusuXRequboiwJcj5vtYXKB3k7+2g==",
10657+ "requires": {
10658+ "accepts": "^1.3.5",
10659+ "cache-content-type": "^1.0.0",
10660+ "content-disposition": "~0.5.2",
10661+ "content-type": "^1.0.4",
10662+ "cookies": "~0.8.0",
10663+ "debug": "^4.3.2",
10664+ "delegates": "^1.0.0",
10665+ "depd": "^2.0.0",
10666+ "destroy": "^1.0.4",
10667+ "encodeurl": "^1.0.2",
10668+ "escape-html": "^1.0.3",
10669+ "fresh": "~0.5.2",
10670+ "http-assert": "^1.3.0",
10671+ "http-errors": "^1.6.3",
10672+ "is-generator-function": "^1.0.7",
10673+ "koa-compose": "^4.1.0",
10674+ "koa-convert": "^2.0.0",
10675+ "on-finished": "^2.3.0",
10676+ "only": "~0.0.2",
10677+ "parseurl": "^1.3.2",
10678+ "statuses": "^1.5.0",
10679+ "type-is": "^1.6.16",
10680+ "vary": "^1.1.2"
10681+ },
10682+ "dependencies": {
10683+ "depd": {
10684+ "version": "2.0.0",
10685+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
10686+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
10687+ }
10688+ }
10689+ },
10690+ "koa-bodyparser": {
10691+ "version": "4.3.0",
10692+ "resolved": "https://registry.npmjs.org/koa-bodyparser/-/koa-bodyparser-4.3.0.tgz",
10693+ "integrity": "sha512-uyV8G29KAGwZc4q/0WUAjH+Tsmuv9ImfBUF2oZVyZtaeo0husInagyn/JH85xMSxM0hEk/mbCII5ubLDuqW/Rw==",
10694+ "requires": {
10695+ "co-body": "^6.0.0",
10696+ "copy-to": "^2.0.1"
10697+ }
10698+ },
10699+ "koa-compose": {
10700+ "version": "4.1.0",
10701+ "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz",
10702+ "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw=="
10703+ },
10704+ "koa-convert": {
10705+ "version": "2.0.0",
10706+ "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-2.0.0.tgz",
10707+ "integrity": "sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==",
10708+ "requires": {
10709+ "co": "^4.6.0",
10710+ "koa-compose": "^4.1.0"
10711+ }
10712+ },
10713+ "koa-is-json": {
10714+ "version": "1.0.0",
10715+ "resolved": "https://registry.npmjs.org/koa-is-json/-/koa-is-json-1.0.0.tgz",
10716+ "integrity": "sha1-JzwH7c3Ljfaiwat9We52SRRR7BQ="
10717+ },
10718+ "koa-json": {
10719+ "version": "2.0.2",
10720+ "resolved": "https://registry.npmjs.org/koa-json/-/koa-json-2.0.2.tgz",
10721+ "integrity": "sha1-Nq8U5uofXWRtfESihXAcb4Wk/eQ=",
10722+ "requires": {
10723+ "koa-is-json": "1",
10724+ "streaming-json-stringify": "3"
10725+ }
10726+ },
10727+ "levn": {
10728+ "version": "0.4.1",
10729+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
10730+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
10731+ "dev": true,
10732+ "requires": {
10733+ "prelude-ls": "^1.2.1",
10734+ "type-check": "~0.4.0"
10735+ }
10736+ },
10737+ "lie": {
10738+ "version": "3.3.0",
10739+ "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
10740+ "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
10741+ "requires": {
10742+ "immediate": "~3.0.5"
10743+ }
10744+ },
10745+ "lilconfig": {
10746+ "version": "2.0.4",
10747+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz",
10748+ "integrity": "sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==",
10749+ "dev": true
10750+ },
10751+ "lint-staged": {
10752+ "version": "12.3.7",
10753+ "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.3.7.tgz",
10754+ "integrity": "sha512-/S4D726e2GIsDVWIk1XGvheCaDm1SJRQp8efamZFWJxQMVEbOwSysp7xb49Oo73KYCdy97mIWinhlxcoNqIfIQ==",
10755+ "dev": true,
10756+ "requires": {
10757+ "cli-truncate": "^3.1.0",
10758+ "colorette": "^2.0.16",
10759+ "commander": "^8.3.0",
10760+ "debug": "^4.3.3",
10761+ "execa": "^5.1.1",
10762+ "lilconfig": "2.0.4",
10763+ "listr2": "^4.0.1",
10764+ "micromatch": "^4.0.4",
10765+ "normalize-path": "^3.0.0",
10766+ "object-inspect": "^1.12.0",
10767+ "pidtree": "^0.5.0",
10768+ "string-argv": "^0.3.1",
10769+ "supports-color": "^9.2.1",
10770+ "yaml": "^1.10.2"
10771+ },
10772+ "dependencies": {
10773+ "commander": {
10774+ "version": "8.3.0",
10775+ "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
10776+ "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
10777+ "dev": true
10778+ },
10779+ "supports-color": {
10780+ "version": "9.2.2",
10781+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.2.2.tgz",
10782+ "integrity": "sha512-XC6g/Kgux+rJXmwokjm9ECpD6k/smUoS5LKlUCcsYr4IY3rW0XyAympon2RmxGrlnZURMpg5T18gWDP9CsHXFA==",
10783+ "dev": true
10784+ }
10785+ }
10786+ },
10787+ "listr2": {
10788+ "version": "4.0.5",
10789+ "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz",
10790+ "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==",
10791+ "dev": true,
10792+ "requires": {
10793+ "cli-truncate": "^2.1.0",
10794+ "colorette": "^2.0.16",
10795+ "log-update": "^4.0.0",
10796+ "p-map": "^4.0.0",
10797+ "rfdc": "^1.3.0",
10798+ "rxjs": "^7.5.5",
10799+ "through": "^2.3.8",
10800+ "wrap-ansi": "^7.0.0"
10801+ },
10802+ "dependencies": {
10803+ "cli-truncate": {
10804+ "version": "2.1.0",
10805+ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz",
10806+ "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==",
10807+ "dev": true,
10808+ "requires": {
10809+ "slice-ansi": "^3.0.0",
10810+ "string-width": "^4.2.0"
10811+ }
10812+ },
10813+ "is-fullwidth-code-point": {
10814+ "version": "3.0.0",
10815+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
10816+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
10817+ "dev": true
10818+ },
10819+ "p-map": {
10820+ "version": "4.0.0",
10821+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
10822+ "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
10823+ "dev": true,
10824+ "requires": {
10825+ "aggregate-error": "^3.0.0"
10826+ }
10827+ },
10828+ "rxjs": {
10829+ "version": "7.5.5",
10830+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz",
10831+ "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==",
10832+ "dev": true,
10833+ "requires": {
10834+ "tslib": "^2.1.0"
10835+ }
10836+ },
10837+ "slice-ansi": {
10838+ "version": "3.0.0",
10839+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz",
10840+ "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==",
10841+ "dev": true,
10842+ "requires": {
10843+ "ansi-styles": "^4.0.0",
10844+ "astral-regex": "^2.0.0",
10845+ "is-fullwidth-code-point": "^3.0.0"
10846+ }
10847+ }
10848+ }
10849+ },
10850+ "loader-runner": {
10851+ "version": "4.2.0",
10852+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz",
10853+ "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==",
10854+ "dev": true
10855+ },
10856+ "loader-utils": {
10857+ "version": "2.0.2",
10858+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz",
10859+ "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==",
10860+ "dev": true,
10861+ "requires": {
10862+ "big.js": "^5.2.2",
10863+ "emojis-list": "^3.0.0",
10864+ "json5": "^2.1.2"
10865+ }
10866+ },
10867+ "locate-path": {
10868+ "version": "2.0.0",
10869+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
10870+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
10871+ "dev": true,
10872+ "requires": {
10873+ "p-locate": "^2.0.0",
10874+ "path-exists": "^3.0.0"
10875+ }
10876+ },
10877+ "lodash": {
10878+ "version": "4.17.21",
10879+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
10880+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
10881+ },
10882+ "lodash.merge": {
10883+ "version": "4.6.2",
10884+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
10885+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
10886+ "dev": true
10887+ },
10888+ "log-update": {
10889+ "version": "4.0.0",
10890+ "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz",
10891+ "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==",
10892+ "dev": true,
10893+ "requires": {
10894+ "ansi-escapes": "^4.3.0",
10895+ "cli-cursor": "^3.1.0",
10896+ "slice-ansi": "^4.0.0",
10897+ "wrap-ansi": "^6.2.0"
10898+ },
10899+ "dependencies": {
10900+ "is-fullwidth-code-point": {
10901+ "version": "3.0.0",
10902+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
10903+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
10904+ "dev": true
10905+ },
10906+ "slice-ansi": {
10907+ "version": "4.0.0",
10908+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
10909+ "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
10910+ "dev": true,
10911+ "requires": {
10912+ "ansi-styles": "^4.0.0",
10913+ "astral-regex": "^2.0.0",
10914+ "is-fullwidth-code-point": "^3.0.0"
10915+ }
10916+ },
10917+ "wrap-ansi": {
10918+ "version": "6.2.0",
10919+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
10920+ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
10921+ "dev": true,
10922+ "requires": {
10923+ "ansi-styles": "^4.0.0",
10924+ "string-width": "^4.1.0",
10925+ "strip-ansi": "^6.0.0"
10926+ }
10927+ }
10928+ }
10929+ },
10930+ "lowdb": {
10931+ "version": "1.0.0",
10932+ "resolved": "https://registry.npmjs.org/lowdb/-/lowdb-1.0.0.tgz",
10933+ "integrity": "sha512-2+x8esE/Wb9SQ1F9IHaYWfsC9FIecLOPrK4g17FGEayjUWH172H6nwicRovGvSE2CPZouc2MCIqCI7h9d+GftQ==",
10934+ "requires": {
10935+ "graceful-fs": "^4.1.3",
10936+ "is-promise": "^2.1.0",
10937+ "lodash": "4",
10938+ "pify": "^3.0.0",
10939+ "steno": "^0.4.1"
10940+ },
10941+ "dependencies": {
10942+ "pify": {
10943+ "version": "3.0.0",
10944+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
10945+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
10946+ }
10947+ }
10948+ },
10949+ "lru-cache": {
10950+ "version": "7.8.1",
10951+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.1.tgz",
10952+ "integrity": "sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==",
10953+ "dev": true
10954+ },
10955+ "lunr": {
10956+ "version": "2.3.9",
10957+ "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz",
10958+ "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow=="
10959+ },
10960+ "make-error": {
10961+ "version": "1.3.6",
10962+ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
10963+ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
10964+ "dev": true
10965+ },
10966+ "media-typer": {
10967+ "version": "0.3.0",
10968+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
10969+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
10970+ },
10971+ "memory-fs": {
10972+ "version": "0.5.0",
10973+ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
10974+ "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
10975+ "dev": true,
10976+ "requires": {
10977+ "errno": "^0.1.3",
10978+ "readable-stream": "^2.0.1"
10979+ }
10980+ },
10981+ "merge-stream": {
10982+ "version": "2.0.0",
10983+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
10984+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
10985+ "dev": true
10986+ },
10987+ "merge2": {
10988+ "version": "1.4.1",
10989+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
10990+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
10991+ "dev": true
10992+ },
10993+ "methods": {
10994+ "version": "1.1.2",
10995+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
10996+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
10997+ },
10998+ "micromatch": {
10999+ "version": "4.0.5",
11000+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
11001+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
11002+ "dev": true,
11003+ "requires": {
11004+ "braces": "^3.0.2",
11005+ "picomatch": "^2.3.1"
11006+ }
11007+ },
11008+ "mime-db": {
11009+ "version": "1.52.0",
11010+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
11011+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
11012+ },
11013+ "mime-types": {
11014+ "version": "2.1.35",
11015+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
11016+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
11017+ "requires": {
11018+ "mime-db": "1.52.0"
11019+ }
11020+ },
11021+ "mimic-fn": {
11022+ "version": "2.1.0",
11023+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
11024+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
11025+ },
11026+ "mimic-response": {
11027+ "version": "2.1.0",
11028+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz",
11029+ "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==",
11030+ "dev": true
11031+ },
11032+ "minimatch": {
11033+ "version": "3.1.2",
11034+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
11035+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
11036+ "dev": true,
11037+ "requires": {
11038+ "brace-expansion": "^1.1.7"
11039+ }
11040+ },
11041+ "minimist": {
11042+ "version": "1.2.6",
11043+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
11044+ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q=="
11045+ },
11046+ "mkdirp": {
11047+ "version": "0.5.6",
11048+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
11049+ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
11050+ "requires": {
11051+ "minimist": "^1.2.6"
11052+ }
11053+ },
11054+ "mkdirp-classic": {
11055+ "version": "0.5.3",
11056+ "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
11057+ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
11058+ "dev": true
11059+ },
11060+ "ms": {
11061+ "version": "2.1.2",
11062+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
11063+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
11064+ },
11065+ "multer": {
11066+ "version": "1.4.4",
11067+ "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4.tgz",
11068+ "integrity": "sha512-2wY2+xD4udX612aMqMcB8Ws2Voq6NIUPEtD1be6m411T4uDH/VtL9i//xvcyFlTVfRdaBsk7hV5tgrGQqhuBiw==",
11069+ "requires": {
11070+ "append-field": "^1.0.0",
11071+ "busboy": "^0.2.11",
11072+ "concat-stream": "^1.5.2",
11073+ "mkdirp": "^0.5.4",
11074+ "object-assign": "^4.1.1",
11075+ "on-finished": "^2.3.0",
11076+ "type-is": "^1.6.4",
11077+ "xtend": "^4.0.0"
11078+ }
11079+ },
11080+ "multistream": {
11081+ "version": "4.1.0",
11082+ "resolved": "https://registry.npmjs.org/multistream/-/multistream-4.1.0.tgz",
11083+ "integrity": "sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw==",
11084+ "dev": true,
11085+ "requires": {
11086+ "once": "^1.4.0",
11087+ "readable-stream": "^3.6.0"
11088+ },
11089+ "dependencies": {
11090+ "readable-stream": {
11091+ "version": "3.6.0",
11092+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
11093+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
11094+ "dev": true,
11095+ "requires": {
11096+ "inherits": "^2.0.3",
11097+ "string_decoder": "^1.1.1",
11098+ "util-deprecate": "^1.0.1"
11099+ }
11100+ }
11101+ }
11102+ },
11103+ "mute-stream": {
11104+ "version": "0.0.8",
11105+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
11106+ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA=="
11107+ },
11108+ "napi-build-utils": {
11109+ "version": "1.0.2",
11110+ "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz",
11111+ "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==",
11112+ "dev": true
11113+ },
11114+ "natural-compare": {
11115+ "version": "1.4.0",
11116+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
11117+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
11118+ "dev": true
11119+ },
11120+ "negotiator": {
11121+ "version": "0.6.3",
11122+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
11123+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="
11124+ },
11125+ "neo-async": {
11126+ "version": "2.6.2",
11127+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
11128+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
11129+ "dev": true
11130+ },
11131+ "node-abi": {
11132+ "version": "2.30.1",
11133+ "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz",
11134+ "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==",
11135+ "dev": true,
11136+ "requires": {
11137+ "semver": "^5.4.1"
11138+ },
11139+ "dependencies": {
11140+ "semver": {
11141+ "version": "5.7.1",
11142+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
11143+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
11144+ "dev": true
11145+ }
11146+ }
11147+ },
11148+ "node-fetch": {
11149+ "version": "2.6.7",
11150+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
11151+ "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
11152+ "requires": {
11153+ "whatwg-url": "^5.0.0"
11154+ },
11155+ "dependencies": {
11156+ "tr46": {
11157+ "version": "0.0.3",
11158+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
11159+ "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
11160+ },
11161+ "webidl-conversions": {
11162+ "version": "3.0.1",
11163+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
11164+ "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
11165+ },
11166+ "whatwg-url": {
11167+ "version": "5.0.0",
11168+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
11169+ "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
11170+ "requires": {
11171+ "tr46": "~0.0.3",
11172+ "webidl-conversions": "^3.0.0"
11173+ }
11174+ }
11175+ }
11176+ },
11177+ "node-forge": {
11178+ "version": "1.3.1",
11179+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz",
11180+ "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA=="
11181+ },
11182+ "node-releases": {
11183+ "version": "2.0.2",
11184+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz",
11185+ "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==",
11186+ "dev": true
11187+ },
11188+ "normalize-path": {
11189+ "version": "3.0.0",
11190+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
11191+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
11192+ "dev": true
11193+ },
11194+ "npm-run-path": {
11195+ "version": "4.0.1",
11196+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
11197+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
11198+ "dev": true,
11199+ "requires": {
11200+ "path-key": "^3.0.0"
11201+ }
11202+ },
11203+ "npmlog": {
11204+ "version": "4.1.2",
11205+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
11206+ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
11207+ "dev": true,
11208+ "requires": {
11209+ "are-we-there-yet": "~1.1.2",
11210+ "console-control-strings": "~1.1.0",
11211+ "gauge": "~2.7.3",
11212+ "set-blocking": "~2.0.0"
11213+ }
11214+ },
11215+ "number-is-nan": {
11216+ "version": "1.0.1",
11217+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
11218+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
11219+ "dev": true
11220+ },
11221+ "nwsapi": {
11222+ "version": "2.2.0",
11223+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
11224+ "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ=="
11225+ },
11226+ "object-assign": {
11227+ "version": "4.1.1",
11228+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
11229+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
11230+ },
11231+ "object-inspect": {
11232+ "version": "1.12.0",
11233+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz",
11234+ "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g=="
11235+ },
11236+ "object-keys": {
11237+ "version": "1.1.1",
11238+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
11239+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
11240+ "dev": true
11241+ },
11242+ "object.assign": {
11243+ "version": "4.1.2",
11244+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
11245+ "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
11246+ "dev": true,
11247+ "requires": {
11248+ "call-bind": "^1.0.0",
11249+ "define-properties": "^1.1.3",
11250+ "has-symbols": "^1.0.1",
11251+ "object-keys": "^1.1.1"
11252+ }
11253+ },
11254+ "object.values": {
11255+ "version": "1.1.5",
11256+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz",
11257+ "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==",
11258+ "dev": true,
11259+ "requires": {
11260+ "call-bind": "^1.0.2",
11261+ "define-properties": "^1.1.3",
11262+ "es-abstract": "^1.19.1"
11263+ }
11264+ },
11265+ "on-finished": {
11266+ "version": "2.4.1",
11267+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
11268+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
11269+ "requires": {
11270+ "ee-first": "1.1.1"
11271+ }
11272+ },
11273+ "once": {
11274+ "version": "1.4.0",
11275+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
11276+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
11277+ "dev": true,
11278+ "requires": {
11279+ "wrappy": "1"
11280+ }
11281+ },
11282+ "onetime": {
11283+ "version": "5.1.2",
11284+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
11285+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
11286+ "requires": {
11287+ "mimic-fn": "^2.1.0"
11288+ }
11289+ },
11290+ "only": {
11291+ "version": "0.0.2",
11292+ "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz",
11293+ "integrity": "sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q="
11294+ },
11295+ "open": {
11296+ "version": "8.4.0",
11297+ "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz",
11298+ "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==",
11299+ "requires": {
11300+ "define-lazy-prop": "^2.0.0",
11301+ "is-docker": "^2.1.1",
11302+ "is-wsl": "^2.2.0"
11303+ }
11304+ },
11305+ "optionator": {
11306+ "version": "0.9.1",
11307+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
11308+ "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
11309+ "dev": true,
11310+ "requires": {
11311+ "deep-is": "^0.1.3",
11312+ "fast-levenshtein": "^2.0.6",
11313+ "levn": "^0.4.1",
11314+ "prelude-ls": "^1.2.1",
11315+ "type-check": "^0.4.0",
11316+ "word-wrap": "^1.2.3"
11317+ }
11318+ },
11319+ "os-tmpdir": {
11320+ "version": "1.0.2",
11321+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
11322+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
11323+ },
11324+ "p-is-promise": {
11325+ "version": "3.0.0",
11326+ "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz",
11327+ "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==",
11328+ "dev": true
11329+ },
11330+ "p-limit": {
11331+ "version": "1.3.0",
11332+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
11333+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
11334+ "dev": true,
11335+ "requires": {
11336+ "p-try": "^1.0.0"
11337+ }
11338+ },
11339+ "p-locate": {
11340+ "version": "2.0.0",
11341+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
11342+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
11343+ "dev": true,
11344+ "requires": {
11345+ "p-limit": "^1.1.0"
11346+ }
11347+ },
11348+ "p-map": {
11349+ "version": "2.1.0",
11350+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
11351+ "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
11352+ "dev": true
11353+ },
11354+ "p-try": {
11355+ "version": "1.0.0",
11356+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
11357+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
11358+ "dev": true
11359+ },
11360+ "pako": {
11361+ "version": "1.0.11",
11362+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
11363+ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
11364+ },
11365+ "papaparse": {
11366+ "version": "5.3.2",
11367+ "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.3.2.tgz",
11368+ "integrity": "sha512-6dNZu0Ki+gyV0eBsFKJhYr+MdQYAzFUGlBMNj3GNrmHxmz1lfRa24CjFObPXtjcetlOv5Ad299MhIK0znp3afw=="
11369+ },
11370+ "parent-module": {
11371+ "version": "1.0.1",
11372+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
11373+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
11374+ "dev": true,
11375+ "requires": {
11376+ "callsites": "^3.0.0"
11377+ }
11378+ },
11379+ "parse5": {
11380+ "version": "6.0.1",
11381+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
11382+ "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw=="
11383+ },
11384+ "parseurl": {
11385+ "version": "1.3.3",
11386+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
11387+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
11388+ },
11389+ "path-exists": {
11390+ "version": "3.0.0",
11391+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
11392+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
11393+ "dev": true
11394+ },
11395+ "path-is-absolute": {
11396+ "version": "1.0.1",
11397+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
11398+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
11399+ "dev": true
11400+ },
11401+ "path-is-inside": {
11402+ "version": "1.0.2",
11403+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
11404+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
11405+ "dev": true
11406+ },
11407+ "path-key": {
11408+ "version": "3.1.1",
11409+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
11410+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
11411+ "dev": true
11412+ },
11413+ "path-parse": {
11414+ "version": "1.0.7",
11415+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
11416+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
11417+ "dev": true
11418+ },
11419+ "path-to-regexp": {
11420+ "version": "6.2.0",
11421+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.0.tgz",
11422+ "integrity": "sha512-f66KywYG6+43afgE/8j/GoiNyygk/bnoCbps++3ErRKsIYkGGupyv07R2Ok5m9i67Iqc+T2g1eAUGUPzWhYTyg=="
11423+ },
11424+ "path-type": {
11425+ "version": "4.0.0",
11426+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
11427+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
11428+ "dev": true
11429+ },
11430+ "picocolors": {
11431+ "version": "1.0.0",
11432+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
11433+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
11434+ "dev": true
11435+ },
11436+ "picomatch": {
11437+ "version": "2.3.1",
11438+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
11439+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
11440+ "dev": true
11441+ },
11442+ "pidtree": {
11443+ "version": "0.5.0",
11444+ "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.5.0.tgz",
11445+ "integrity": "sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==",
11446+ "dev": true
11447+ },
11448+ "pify": {
11449+ "version": "4.0.1",
11450+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
11451+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
11452+ "dev": true
11453+ },
11454+ "pinkie": {
11455+ "version": "2.0.4",
11456+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
11457+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
11458+ "dev": true
11459+ },
11460+ "pinkie-promise": {
11461+ "version": "2.0.1",
11462+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
11463+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
11464+ "dev": true,
11465+ "requires": {
11466+ "pinkie": "^2.0.0"
11467+ }
11468+ },
11469+ "pkg": {
11470+ "version": "5.6.0",
11471+ "resolved": "https://registry.npmjs.org/pkg/-/pkg-5.6.0.tgz",
11472+ "integrity": "sha512-mHrAVSQWmHA41RnUmRpC7pK9lNnMfdA16CF3cqOI22a8LZxOQzF7M8YWtA2nfs+d7I0MTDXOtkDsAsFXeCpYjg==",
11473+ "dev": true,
11474+ "requires": {
11475+ "@babel/parser": "7.16.2",
11476+ "@babel/types": "7.16.0",
11477+ "chalk": "^4.1.2",
11478+ "escodegen": "^2.0.0",
11479+ "fs-extra": "^9.1.0",
11480+ "globby": "^11.0.4",
11481+ "into-stream": "^6.0.0",
11482+ "minimist": "^1.2.5",
11483+ "multistream": "^4.1.0",
11484+ "pkg-fetch": "3.3.0",
11485+ "prebuild-install": "6.1.4",
11486+ "progress": "^2.0.3",
11487+ "resolve": "^1.20.0",
11488+ "stream-meter": "^1.0.4",
11489+ "tslib": "2.3.1"
11490+ }
11491+ },
11492+ "pkg-dir": {
11493+ "version": "4.2.0",
11494+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
11495+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
11496+ "dev": true,
11497+ "requires": {
11498+ "find-up": "^4.0.0"
11499+ },
11500+ "dependencies": {
11501+ "find-up": {
11502+ "version": "4.1.0",
11503+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
11504+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
11505+ "dev": true,
11506+ "requires": {
11507+ "locate-path": "^5.0.0",
11508+ "path-exists": "^4.0.0"
11509+ }
11510+ },
11511+ "locate-path": {
11512+ "version": "5.0.0",
11513+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
11514+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
11515+ "dev": true,
11516+ "requires": {
11517+ "p-locate": "^4.1.0"
11518+ }
11519+ },
11520+ "p-limit": {
11521+ "version": "2.3.0",
11522+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
11523+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
11524+ "dev": true,
11525+ "requires": {
11526+ "p-try": "^2.0.0"
11527+ }
11528+ },
11529+ "p-locate": {
11530+ "version": "4.1.0",
11531+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
11532+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
11533+ "dev": true,
11534+ "requires": {
11535+ "p-limit": "^2.2.0"
11536+ }
11537+ },
11538+ "p-try": {
11539+ "version": "2.2.0",
11540+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
11541+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
11542+ "dev": true
11543+ },
11544+ "path-exists": {
11545+ "version": "4.0.0",
11546+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
11547+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
11548+ "dev": true
11549+ }
11550+ }
11551+ },
11552+ "pkg-fetch": {
11553+ "version": "3.3.0",
11554+ "resolved": "https://registry.npmjs.org/pkg-fetch/-/pkg-fetch-3.3.0.tgz",
11555+ "integrity": "sha512-xJnIZ1KP+8rNN+VLafwu4tEeV4m8IkFBDdCFqmAJz9K1aiXEtbARmdbEe6HlXWGSVuShSHjFXpfkKRkDBQ5kiA==",
11556+ "dev": true,
11557+ "requires": {
11558+ "chalk": "^4.1.2",
11559+ "fs-extra": "^9.1.0",
11560+ "https-proxy-agent": "^5.0.0",
11561+ "node-fetch": "^2.6.6",
11562+ "progress": "^2.0.3",
11563+ "semver": "^7.3.5",
11564+ "tar-fs": "^2.1.1",
11565+ "yargs": "^16.2.0"
11566+ },
11567+ "dependencies": {
11568+ "yargs": {
11569+ "version": "16.2.0",
11570+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
11571+ "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
11572+ "dev": true,
11573+ "requires": {
11574+ "cliui": "^7.0.2",
11575+ "escalade": "^3.1.1",
11576+ "get-caller-file": "^2.0.5",
11577+ "require-directory": "^2.1.1",
11578+ "string-width": "^4.2.0",
11579+ "y18n": "^5.0.5",
11580+ "yargs-parser": "^20.2.2"
11581+ }
11582+ },
11583+ "yargs-parser": {
11584+ "version": "20.2.9",
11585+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
11586+ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
11587+ "dev": true
11588+ }
11589+ }
11590+ },
11591+ "prebuild-install": {
11592+ "version": "6.1.4",
11593+ "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz",
11594+ "integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==",
11595+ "dev": true,
11596+ "requires": {
11597+ "detect-libc": "^1.0.3",
11598+ "expand-template": "^2.0.3",
11599+ "github-from-package": "0.0.0",
11600+ "minimist": "^1.2.3",
11601+ "mkdirp-classic": "^0.5.3",
11602+ "napi-build-utils": "^1.0.1",
11603+ "node-abi": "^2.21.0",
11604+ "npmlog": "^4.0.1",
11605+ "pump": "^3.0.0",
11606+ "rc": "^1.2.7",
11607+ "simple-get": "^3.0.3",
11608+ "tar-fs": "^2.0.0",
11609+ "tunnel-agent": "^0.6.0"
11610+ }
11611+ },
11612+ "prelude-ls": {
11613+ "version": "1.2.1",
11614+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
11615+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
11616+ "dev": true
11617+ },
11618+ "prettier": {
11619+ "version": "2.6.2",
11620+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz",
11621+ "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==",
11622+ "dev": true
11623+ },
11624+ "process-nextick-args": {
11625+ "version": "2.0.1",
11626+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
11627+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
11628+ },
11629+ "progress": {
11630+ "version": "2.0.3",
11631+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
11632+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
11633+ "dev": true
11634+ },
11635+ "proper-lockfile": {
11636+ "version": "4.1.2",
11637+ "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz",
11638+ "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==",
11639+ "requires": {
11640+ "graceful-fs": "^4.2.4",
11641+ "retry": "^0.12.0",
11642+ "signal-exit": "^3.0.2"
11643+ }
11644+ },
11645+ "prr": {
11646+ "version": "1.0.1",
11647+ "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
11648+ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
11649+ "dev": true
11650+ },
11651+ "psl": {
11652+ "version": "1.8.0",
11653+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
11654+ "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
11655+ },
11656+ "pump": {
11657+ "version": "3.0.0",
11658+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
11659+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
11660+ "dev": true,
11661+ "requires": {
11662+ "end-of-stream": "^1.1.0",
11663+ "once": "^1.3.1"
11664+ }
11665+ },
11666+ "punycode": {
11667+ "version": "1.4.1",
11668+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
11669+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
11670+ },
11671+ "qs": {
11672+ "version": "6.10.3",
11673+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz",
11674+ "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==",
11675+ "requires": {
11676+ "side-channel": "^1.0.4"
11677+ }
11678+ },
11679+ "queue-microtask": {
11680+ "version": "1.2.3",
11681+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
11682+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
11683+ "dev": true
11684+ },
11685+ "randombytes": {
11686+ "version": "2.1.0",
11687+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
11688+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
11689+ "dev": true,
11690+ "requires": {
11691+ "safe-buffer": "^5.1.0"
11692+ }
11693+ },
11694+ "raw-body": {
11695+ "version": "2.5.1",
11696+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
11697+ "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
11698+ "requires": {
11699+ "bytes": "3.1.2",
11700+ "http-errors": "2.0.0",
11701+ "iconv-lite": "0.4.24",
11702+ "unpipe": "1.0.0"
11703+ },
11704+ "dependencies": {
11705+ "depd": {
11706+ "version": "2.0.0",
11707+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
11708+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
11709+ },
11710+ "http-errors": {
11711+ "version": "2.0.0",
11712+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
11713+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
11714+ "requires": {
11715+ "depd": "2.0.0",
11716+ "inherits": "2.0.4",
11717+ "setprototypeof": "1.2.0",
11718+ "statuses": "2.0.1",
11719+ "toidentifier": "1.0.1"
11720+ }
11721+ },
11722+ "statuses": {
11723+ "version": "2.0.1",
11724+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
11725+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="
11726+ }
11727+ }
11728+ },
11729+ "rc": {
11730+ "version": "1.2.8",
11731+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
11732+ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
11733+ "dev": true,
11734+ "requires": {
11735+ "deep-extend": "^0.6.0",
11736+ "ini": "~1.3.0",
11737+ "minimist": "^1.2.0",
11738+ "strip-json-comments": "~2.0.1"
11739+ },
11740+ "dependencies": {
11741+ "strip-json-comments": {
11742+ "version": "2.0.1",
11743+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
11744+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
11745+ "dev": true
11746+ }
11747+ }
11748+ },
11749+ "readable-stream": {
11750+ "version": "2.3.7",
11751+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
11752+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
11753+ "requires": {
11754+ "core-util-is": "~1.0.0",
11755+ "inherits": "~2.0.3",
11756+ "isarray": "~1.0.0",
11757+ "process-nextick-args": "~2.0.0",
11758+ "safe-buffer": "~5.1.1",
11759+ "string_decoder": "~1.1.1",
11760+ "util-deprecate": "~1.0.1"
11761+ },
11762+ "dependencies": {
11763+ "safe-buffer": {
11764+ "version": "5.1.2",
11765+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
11766+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
11767+ }
11768+ }
11769+ },
11770+ "rechoir": {
11771+ "version": "0.7.1",
11772+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz",
11773+ "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==",
11774+ "dev": true,
11775+ "requires": {
11776+ "resolve": "^1.9.0"
11777+ }
11778+ },
11779+ "regexpp": {
11780+ "version": "3.2.0",
11781+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
11782+ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
11783+ "dev": true
11784+ },
11785+ "require-directory": {
11786+ "version": "2.1.1",
11787+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
11788+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
11789+ "dev": true
11790+ },
11791+ "require-from-string": {
11792+ "version": "2.0.2",
11793+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
11794+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
11795+ "dev": true
11796+ },
11797+ "resolve": {
11798+ "version": "1.22.0",
11799+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
11800+ "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
11801+ "dev": true,
11802+ "requires": {
11803+ "is-core-module": "^2.8.1",
11804+ "path-parse": "^1.0.7",
11805+ "supports-preserve-symlinks-flag": "^1.0.0"
11806+ }
11807+ },
11808+ "resolve-cwd": {
11809+ "version": "3.0.0",
11810+ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
11811+ "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
11812+ "dev": true,
11813+ "requires": {
11814+ "resolve-from": "^5.0.0"
11815+ },
11816+ "dependencies": {
11817+ "resolve-from": {
11818+ "version": "5.0.0",
11819+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
11820+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
11821+ "dev": true
11822+ }
11823+ }
11824+ },
11825+ "resolve-from": {
11826+ "version": "4.0.0",
11827+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
11828+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
11829+ "dev": true
11830+ },
11831+ "resolve-url": {
11832+ "version": "0.2.1",
11833+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
11834+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
11835+ "dev": true
11836+ },
11837+ "restore-cursor": {
11838+ "version": "3.1.0",
11839+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
11840+ "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
11841+ "requires": {
11842+ "onetime": "^5.1.0",
11843+ "signal-exit": "^3.0.2"
11844+ }
11845+ },
11846+ "retry": {
11847+ "version": "0.12.0",
11848+ "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
11849+ "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs="
11850+ },
11851+ "reusify": {
11852+ "version": "1.0.4",
11853+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
11854+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
11855+ "dev": true
11856+ },
11857+ "rfdc": {
11858+ "version": "1.3.0",
11859+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz",
11860+ "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==",
11861+ "dev": true
11862+ },
11863+ "rimraf": {
11864+ "version": "3.0.2",
11865+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
11866+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
11867+ "dev": true,
11868+ "requires": {
11869+ "glob": "^7.1.3"
11870+ }
11871+ },
11872+ "run-async": {
11873+ "version": "2.4.1",
11874+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
11875+ "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ=="
11876+ },
11877+ "run-parallel": {
11878+ "version": "1.2.0",
11879+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
11880+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
11881+ "dev": true,
11882+ "requires": {
11883+ "queue-microtask": "^1.2.2"
11884+ }
11885+ },
11886+ "rxjs": {
11887+ "version": "6.6.7",
11888+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
11889+ "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
11890+ "requires": {
11891+ "tslib": "^1.9.0"
11892+ },
11893+ "dependencies": {
11894+ "tslib": {
11895+ "version": "1.14.1",
11896+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
11897+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
11898+ }
11899+ }
11900+ },
11901+ "safe-buffer": {
11902+ "version": "5.2.1",
11903+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
11904+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
11905+ },
11906+ "safer-buffer": {
11907+ "version": "2.1.2",
11908+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
11909+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
11910+ },
11911+ "saxes": {
11912+ "version": "5.0.1",
11913+ "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
11914+ "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
11915+ "requires": {
11916+ "xmlchars": "^2.2.0"
11917+ }
11918+ },
11919+ "schema-utils": {
11920+ "version": "4.0.0",
11921+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz",
11922+ "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==",
11923+ "dev": true,
11924+ "requires": {
11925+ "@types/json-schema": "^7.0.9",
11926+ "ajv": "^8.8.0",
11927+ "ajv-formats": "^2.1.1",
11928+ "ajv-keywords": "^5.0.0"
11929+ },
11930+ "dependencies": {
11931+ "ajv": {
11932+ "version": "8.11.0",
11933+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz",
11934+ "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==",
11935+ "dev": true,
11936+ "requires": {
11937+ "fast-deep-equal": "^3.1.1",
11938+ "json-schema-traverse": "^1.0.0",
11939+ "require-from-string": "^2.0.2",
11940+ "uri-js": "^4.2.2"
11941+ }
11942+ },
11943+ "ajv-keywords": {
11944+ "version": "5.1.0",
11945+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
11946+ "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
11947+ "dev": true,
11948+ "requires": {
11949+ "fast-deep-equal": "^3.1.3"
11950+ }
11951+ },
11952+ "json-schema-traverse": {
11953+ "version": "1.0.0",
11954+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
11955+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
11956+ "dev": true
11957+ }
11958+ }
11959+ },
11960+ "semver": {
11961+ "version": "7.3.6",
11962+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz",
11963+ "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==",
11964+ "dev": true,
11965+ "requires": {
11966+ "lru-cache": "^7.4.0"
11967+ }
11968+ },
11969+ "serialize-javascript": {
11970+ "version": "6.0.0",
11971+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
11972+ "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
11973+ "dev": true,
11974+ "requires": {
11975+ "randombytes": "^2.1.0"
11976+ }
11977+ },
11978+ "set-blocking": {
11979+ "version": "2.0.0",
11980+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
11981+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
11982+ "dev": true
11983+ },
11984+ "set-immediate-shim": {
11985+ "version": "1.0.1",
11986+ "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
11987+ "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E="
11988+ },
11989+ "setprototypeof": {
11990+ "version": "1.2.0",
11991+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
11992+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
11993+ },
11994+ "shallow-clone": {
11995+ "version": "3.0.1",
11996+ "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
11997+ "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
11998+ "dev": true,
11999+ "requires": {
12000+ "kind-of": "^6.0.2"
12001+ }
12002+ },
12003+ "shebang-command": {
12004+ "version": "2.0.0",
12005+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
12006+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
12007+ "dev": true,
12008+ "requires": {
12009+ "shebang-regex": "^3.0.0"
12010+ }
12011+ },
12012+ "shebang-regex": {
12013+ "version": "3.0.0",
12014+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
12015+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
12016+ "dev": true
12017+ },
12018+ "side-channel": {
12019+ "version": "1.0.4",
12020+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
12021+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
12022+ "requires": {
12023+ "call-bind": "^1.0.0",
12024+ "get-intrinsic": "^1.0.2",
12025+ "object-inspect": "^1.9.0"
12026+ }
12027+ },
12028+ "signal-exit": {
12029+ "version": "3.0.7",
12030+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
12031+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
12032+ },
12033+ "simple-concat": {
12034+ "version": "1.0.1",
12035+ "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
12036+ "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",
12037+ "dev": true
12038+ },
12039+ "simple-get": {
12040+ "version": "3.1.1",
12041+ "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz",
12042+ "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==",
12043+ "dev": true,
12044+ "requires": {
12045+ "decompress-response": "^4.2.0",
12046+ "once": "^1.3.1",
12047+ "simple-concat": "^1.0.0"
12048+ }
12049+ },
12050+ "slash": {
12051+ "version": "3.0.0",
12052+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
12053+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
12054+ "dev": true
12055+ },
12056+ "slice-ansi": {
12057+ "version": "5.0.0",
12058+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz",
12059+ "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==",
12060+ "dev": true,
12061+ "requires": {
12062+ "ansi-styles": "^6.0.0",
12063+ "is-fullwidth-code-point": "^4.0.0"
12064+ },
12065+ "dependencies": {
12066+ "ansi-styles": {
12067+ "version": "6.1.0",
12068+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz",
12069+ "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==",
12070+ "dev": true
12071+ }
12072+ }
12073+ },
12074+ "source-map": {
12075+ "version": "0.5.7",
12076+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
12077+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
12078+ "dev": true
12079+ },
12080+ "source-map-resolve": {
12081+ "version": "0.5.3",
12082+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
12083+ "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
12084+ "dev": true,
12085+ "requires": {
12086+ "atob": "^2.1.2",
12087+ "decode-uri-component": "^0.2.0",
12088+ "resolve-url": "^0.2.1",
12089+ "source-map-url": "^0.4.0",
12090+ "urix": "^0.1.0"
12091+ }
12092+ },
12093+ "source-map-support": {
12094+ "version": "0.5.21",
12095+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
12096+ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
12097+ "dev": true,
12098+ "requires": {
12099+ "buffer-from": "^1.0.0",
12100+ "source-map": "^0.6.0"
12101+ },
12102+ "dependencies": {
12103+ "source-map": {
12104+ "version": "0.6.1",
12105+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
12106+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
12107+ "dev": true
12108+ }
12109+ }
12110+ },
12111+ "source-map-url": {
12112+ "version": "0.4.1",
12113+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz",
12114+ "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==",
12115+ "dev": true
12116+ },
12117+ "stackframe": {
12118+ "version": "1.2.1",
12119+ "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.1.tgz",
12120+ "integrity": "sha512-h88QkzREN/hy8eRdyNhhsO7RSJ5oyTqxxmmn0dzBIMUclZsjpfmrsg81vp8mjjAs2vAZ72nyWxRUwSwmh0e4xg==",
12121+ "dev": true
12122+ },
12123+ "statuses": {
12124+ "version": "1.5.0",
12125+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
12126+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
12127+ },
12128+ "steno": {
12129+ "version": "0.4.4",
12130+ "resolved": "https://registry.npmjs.org/steno/-/steno-0.4.4.tgz",
12131+ "integrity": "sha1-BxEFvfwobmYVwEA8J+nXtdy4Vcs=",
12132+ "requires": {
12133+ "graceful-fs": "^4.1.3"
12134+ }
12135+ },
12136+ "stream-meter": {
12137+ "version": "1.0.4",
12138+ "resolved": "https://registry.npmjs.org/stream-meter/-/stream-meter-1.0.4.tgz",
12139+ "integrity": "sha1-Uq+Vql6nYKJJFxZwTb/5D3Ov3R0=",
12140+ "dev": true,
12141+ "requires": {
12142+ "readable-stream": "^2.1.4"
12143+ }
12144+ },
12145+ "streaming-json-stringify": {
12146+ "version": "3.1.0",
12147+ "resolved": "https://registry.npmjs.org/streaming-json-stringify/-/streaming-json-stringify-3.1.0.tgz",
12148+ "integrity": "sha1-gCAEN6mTzDnE/gAmO3s7kDrIevU=",
12149+ "requires": {
12150+ "json-stringify-safe": "5",
12151+ "readable-stream": "2"
12152+ }
12153+ },
12154+ "streamsearch": {
12155+ "version": "0.1.2",
12156+ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz",
12157+ "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo="
12158+ },
12159+ "string_decoder": {
12160+ "version": "1.1.1",
12161+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
12162+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
12163+ "requires": {
12164+ "safe-buffer": "~5.1.0"
12165+ },
12166+ "dependencies": {
12167+ "safe-buffer": {
12168+ "version": "5.1.2",
12169+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
12170+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
12171+ }
12172+ }
12173+ },
12174+ "string-argv": {
12175+ "version": "0.3.1",
12176+ "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz",
12177+ "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==",
12178+ "dev": true
12179+ },
12180+ "string-width": {
12181+ "version": "4.2.3",
12182+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
12183+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
12184+ "requires": {
12185+ "emoji-regex": "^8.0.0",
12186+ "is-fullwidth-code-point": "^3.0.0",
12187+ "strip-ansi": "^6.0.1"
12188+ },
12189+ "dependencies": {
12190+ "is-fullwidth-code-point": {
12191+ "version": "3.0.0",
12192+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
12193+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
12194+ }
12195+ }
12196+ },
12197+ "string.prototype.trimend": {
12198+ "version": "1.0.4",
12199+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz",
12200+ "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==",
12201+ "dev": true,
12202+ "requires": {
12203+ "call-bind": "^1.0.2",
12204+ "define-properties": "^1.1.3"
12205+ }
12206+ },
12207+ "string.prototype.trimstart": {
12208+ "version": "1.0.4",
12209+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz",
12210+ "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==",
12211+ "dev": true,
12212+ "requires": {
12213+ "call-bind": "^1.0.2",
12214+ "define-properties": "^1.1.3"
12215+ }
12216+ },
12217+ "strip-ansi": {
12218+ "version": "6.0.1",
12219+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
12220+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
12221+ "requires": {
12222+ "ansi-regex": "^5.0.1"
12223+ }
12224+ },
12225+ "strip-bom": {
12226+ "version": "3.0.0",
12227+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
12228+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
12229+ "dev": true
12230+ },
12231+ "strip-final-newline": {
12232+ "version": "2.0.0",
12233+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
12234+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
12235+ "dev": true
12236+ },
12237+ "strip-json-comments": {
12238+ "version": "3.1.1",
12239+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
12240+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
12241+ "dev": true
12242+ },
12243+ "supports-color": {
12244+ "version": "7.2.0",
12245+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
12246+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
12247+ "requires": {
12248+ "has-flag": "^4.0.0"
12249+ }
12250+ },
12251+ "supports-preserve-symlinks-flag": {
12252+ "version": "1.0.0",
12253+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
12254+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
12255+ "dev": true
12256+ },
12257+ "symbol-tree": {
12258+ "version": "3.2.4",
12259+ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
12260+ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="
12261+ },
12262+ "tapable": {
12263+ "version": "1.1.3",
12264+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
12265+ "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==",
12266+ "dev": true
12267+ },
12268+ "tar-fs": {
12269+ "version": "2.1.1",
12270+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
12271+ "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
12272+ "dev": true,
12273+ "requires": {
12274+ "chownr": "^1.1.1",
12275+ "mkdirp-classic": "^0.5.2",
12276+ "pump": "^3.0.0",
12277+ "tar-stream": "^2.1.4"
12278+ }
12279+ },
12280+ "tar-stream": {
12281+ "version": "2.2.0",
12282+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
12283+ "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
12284+ "dev": true,
12285+ "requires": {
12286+ "bl": "^4.0.3",
12287+ "end-of-stream": "^1.4.1",
12288+ "fs-constants": "^1.0.0",
12289+ "inherits": "^2.0.3",
12290+ "readable-stream": "^3.1.1"
12291+ },
12292+ "dependencies": {
12293+ "readable-stream": {
12294+ "version": "3.6.0",
12295+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
12296+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
12297+ "dev": true,
12298+ "requires": {
12299+ "inherits": "^2.0.3",
12300+ "string_decoder": "^1.1.1",
12301+ "util-deprecate": "^1.0.1"
12302+ }
12303+ }
12304+ }
12305+ },
12306+ "terser": {
12307+ "version": "5.12.1",
12308+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.12.1.tgz",
12309+ "integrity": "sha512-NXbs+7nisos5E+yXwAD+y7zrcTkMqb0dEJxIGtSKPdCBzopf7ni4odPul2aechpV7EXNvOudYOX2bb5tln1jbQ==",
12310+ "dev": true,
12311+ "requires": {
12312+ "acorn": "^8.5.0",
12313+ "commander": "^2.20.0",
12314+ "source-map": "~0.7.2",
12315+ "source-map-support": "~0.5.20"
12316+ },
12317+ "dependencies": {
12318+ "commander": {
12319+ "version": "2.20.3",
12320+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
12321+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
12322+ "dev": true
12323+ },
12324+ "source-map": {
12325+ "version": "0.7.3",
12326+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
12327+ "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
12328+ "dev": true
12329+ }
12330+ }
12331+ },
12332+ "terser-webpack-plugin": {
12333+ "version": "5.3.1",
12334+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz",
12335+ "integrity": "sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g==",
12336+ "dev": true,
12337+ "requires": {
12338+ "jest-worker": "^27.4.5",
12339+ "schema-utils": "^3.1.1",
12340+ "serialize-javascript": "^6.0.0",
12341+ "source-map": "^0.6.1",
12342+ "terser": "^5.7.2"
12343+ },
12344+ "dependencies": {
12345+ "schema-utils": {
12346+ "version": "3.1.1",
12347+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
12348+ "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
12349+ "dev": true,
12350+ "requires": {
12351+ "@types/json-schema": "^7.0.8",
12352+ "ajv": "^6.12.5",
12353+ "ajv-keywords": "^3.5.2"
12354+ }
12355+ },
12356+ "source-map": {
12357+ "version": "0.6.1",
12358+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
12359+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
12360+ "dev": true
12361+ }
12362+ }
12363+ },
12364+ "text-table": {
12365+ "version": "0.2.0",
12366+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
12367+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
12368+ "dev": true
12369+ },
12370+ "through": {
12371+ "version": "2.3.8",
12372+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
12373+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
12374+ },
12375+ "tldjs": {
12376+ "version": "2.3.1",
12377+ "resolved": "https://registry.npmjs.org/tldjs/-/tldjs-2.3.1.tgz",
12378+ "integrity": "sha512-W/YVH/QczLUxVjnQhFC61Iq232NWu3TqDdO0S/MtXVz4xybejBov4ud+CIwN9aYqjOecEqIy0PscGkwpG9ZyTw==",
12379+ "requires": {
12380+ "punycode": "^1.4.1"
12381+ }
12382+ },
12383+ "tmp": {
12384+ "version": "0.0.33",
12385+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
12386+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
12387+ "requires": {
12388+ "os-tmpdir": "~1.0.2"
12389+ }
12390+ },
12391+ "to-fast-properties": {
12392+ "version": "2.0.0",
12393+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
12394+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
12395+ "dev": true
12396+ },
12397+ "to-regex-range": {
12398+ "version": "5.0.1",
12399+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
12400+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
12401+ "dev": true,
12402+ "requires": {
12403+ "is-number": "^7.0.0"
12404+ }
12405+ },
12406+ "toidentifier": {
12407+ "version": "1.0.1",
12408+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
12409+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="
12410+ },
12411+ "tough-cookie": {
12412+ "version": "4.0.0",
12413+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz",
12414+ "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==",
12415+ "requires": {
12416+ "psl": "^1.1.33",
12417+ "punycode": "^2.1.1",
12418+ "universalify": "^0.1.2"
12419+ },
12420+ "dependencies": {
12421+ "punycode": {
12422+ "version": "2.1.1",
12423+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
12424+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
12425+ },
12426+ "universalify": {
12427+ "version": "0.1.2",
12428+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
12429+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
12430+ }
12431+ }
12432+ },
12433+ "tr46": {
12434+ "version": "2.1.0",
12435+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz",
12436+ "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==",
12437+ "requires": {
12438+ "punycode": "^2.1.1"
12439+ },
12440+ "dependencies": {
12441+ "punycode": {
12442+ "version": "2.1.1",
12443+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
12444+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
12445+ }
12446+ }
12447+ },
12448+ "ts-loader": {
12449+ "version": "8.3.0",
12450+ "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.3.0.tgz",
12451+ "integrity": "sha512-MgGly4I6cStsJy27ViE32UoqxPTN9Xly4anxxVyaIWR+9BGxboV4EyJBGfR3RePV7Ksjj3rHmPZJeIt+7o4Vag==",
12452+ "dev": true,
12453+ "requires": {
12454+ "chalk": "^4.1.0",
12455+ "enhanced-resolve": "^4.0.0",
12456+ "loader-utils": "^2.0.0",
12457+ "micromatch": "^4.0.0",
12458+ "semver": "^7.3.4"
12459+ }
12460+ },
12461+ "ts-node": {
12462+ "version": "10.7.0",
12463+ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.7.0.tgz",
12464+ "integrity": "sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==",
12465+ "dev": true,
12466+ "requires": {
12467+ "@cspotcode/source-map-support": "0.7.0",
12468+ "@tsconfig/node10": "^1.0.7",
12469+ "@tsconfig/node12": "^1.0.7",
12470+ "@tsconfig/node14": "^1.0.0",
12471+ "@tsconfig/node16": "^1.0.2",
12472+ "acorn": "^8.4.1",
12473+ "acorn-walk": "^8.1.1",
12474+ "arg": "^4.1.0",
12475+ "create-require": "^1.1.0",
12476+ "diff": "^4.0.1",
12477+ "make-error": "^1.1.1",
12478+ "v8-compile-cache-lib": "^3.0.0",
12479+ "yn": "3.1.1"
12480+ },
12481+ "dependencies": {
12482+ "acorn-walk": {
12483+ "version": "8.2.0",
12484+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
12485+ "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
12486+ "dev": true
12487+ }
12488+ }
12489+ },
12490+ "tsconfig-paths": {
12491+ "version": "3.14.1",
12492+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz",
12493+ "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==",
12494+ "dev": true,
12495+ "requires": {
12496+ "@types/json5": "^0.0.29",
12497+ "json5": "^1.0.1",
12498+ "minimist": "^1.2.6",
12499+ "strip-bom": "^3.0.0"
12500+ },
12501+ "dependencies": {
12502+ "json5": {
12503+ "version": "1.0.1",
12504+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
12505+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
12506+ "dev": true,
12507+ "requires": {
12508+ "minimist": "^1.2.0"
12509+ }
12510+ }
12511+ }
12512+ },
12513+ "tsconfig-paths-webpack-plugin": {
12514+ "version": "3.5.2",
12515+ "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-3.5.2.tgz",
12516+ "integrity": "sha512-EhnfjHbzm5IYI9YPNVIxx1moxMI4bpHD2e0zTXeDNQcwjjRaGepP7IhTHJkyDBG0CAOoxRfe7jCG630Ou+C6Pw==",
12517+ "dev": true,
12518+ "requires": {
12519+ "chalk": "^4.1.0",
12520+ "enhanced-resolve": "^5.7.0",
12521+ "tsconfig-paths": "^3.9.0"
12522+ },
12523+ "dependencies": {
12524+ "enhanced-resolve": {
12525+ "version": "5.9.2",
12526+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.2.tgz",
12527+ "integrity": "sha512-GIm3fQfwLJ8YZx2smuHpBKkXC1yOk+OBEmKckVyL0i/ea8mqDEykK3ld5dgH1QYPNyT/lIllxV2LULnxCHaHkA==",
12528+ "dev": true,
12529+ "requires": {
12530+ "graceful-fs": "^4.2.4",
12531+ "tapable": "^2.2.0"
12532+ }
12533+ },
12534+ "tapable": {
12535+ "version": "2.2.1",
12536+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
12537+ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
12538+ "dev": true
12539+ }
12540+ }
12541+ },
12542+ "tslib": {
12543+ "version": "2.3.1",
12544+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
12545+ "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==",
12546+ "dev": true
12547+ },
12548+ "tsscmp": {
12549+ "version": "1.0.6",
12550+ "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz",
12551+ "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA=="
12552+ },
12553+ "tsutils": {
12554+ "version": "3.21.0",
12555+ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
12556+ "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
12557+ "dev": true,
12558+ "requires": {
12559+ "tslib": "^1.8.1"
12560+ },
12561+ "dependencies": {
12562+ "tslib": {
12563+ "version": "1.14.1",
12564+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
12565+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
12566+ "dev": true
12567+ }
12568+ }
12569+ },
12570+ "tunnel-agent": {
12571+ "version": "0.6.0",
12572+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
12573+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
12574+ "dev": true,
12575+ "requires": {
12576+ "safe-buffer": "^5.0.1"
12577+ }
12578+ },
12579+ "type-check": {
12580+ "version": "0.4.0",
12581+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
12582+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
12583+ "dev": true,
12584+ "requires": {
12585+ "prelude-ls": "^1.2.1"
12586+ }
12587+ },
12588+ "type-fest": {
12589+ "version": "0.20.2",
12590+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
12591+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
12592+ "dev": true
12593+ },
12594+ "type-is": {
12595+ "version": "1.6.18",
12596+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
12597+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
12598+ "requires": {
12599+ "media-typer": "0.3.0",
12600+ "mime-types": "~2.1.24"
12601+ }
12602+ },
12603+ "typedarray": {
12604+ "version": "0.0.6",
12605+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
12606+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
12607+ },
12608+ "typescript": {
12609+ "version": "4.1.5",
12610+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.5.tgz",
12611+ "integrity": "sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA==",
12612+ "dev": true
12613+ },
12614+ "unbox-primitive": {
12615+ "version": "1.0.1",
12616+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz",
12617+ "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==",
12618+ "dev": true,
12619+ "requires": {
12620+ "function-bind": "^1.1.1",
12621+ "has-bigints": "^1.0.1",
12622+ "has-symbols": "^1.0.2",
12623+ "which-boxed-primitive": "^1.0.2"
12624+ }
12625+ },
12626+ "universalify": {
12627+ "version": "2.0.0",
12628+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
12629+ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
12630+ "dev": true
12631+ },
12632+ "unpipe": {
12633+ "version": "1.0.0",
12634+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
12635+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
12636+ },
12637+ "uri-js": {
12638+ "version": "4.4.1",
12639+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
12640+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
12641+ "dev": true,
12642+ "requires": {
12643+ "punycode": "^2.1.0"
12644+ },
12645+ "dependencies": {
12646+ "punycode": {
12647+ "version": "2.1.1",
12648+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
12649+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
12650+ "dev": true
12651+ }
12652+ }
12653+ },
12654+ "urix": {
12655+ "version": "0.1.0",
12656+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
12657+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
12658+ "dev": true
12659+ },
12660+ "util-deprecate": {
12661+ "version": "1.0.2",
12662+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
12663+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
12664+ },
12665+ "v8-compile-cache": {
12666+ "version": "2.3.0",
12667+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
12668+ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
12669+ "dev": true
12670+ },
12671+ "v8-compile-cache-lib": {
12672+ "version": "3.0.0",
12673+ "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.0.tgz",
12674+ "integrity": "sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA==",
12675+ "dev": true
12676+ },
12677+ "vary": {
12678+ "version": "1.1.2",
12679+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
12680+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
12681+ },
12682+ "w3c-hr-time": {
12683+ "version": "1.0.2",
12684+ "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
12685+ "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
12686+ "requires": {
12687+ "browser-process-hrtime": "^1.0.0"
12688+ }
12689+ },
12690+ "w3c-xmlserializer": {
12691+ "version": "2.0.0",
12692+ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz",
12693+ "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==",
12694+ "requires": {
12695+ "xml-name-validator": "^3.0.0"
12696+ }
12697+ },
12698+ "watchpack": {
12699+ "version": "2.3.1",
12700+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz",
12701+ "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==",
12702+ "dev": true,
12703+ "requires": {
12704+ "glob-to-regexp": "^0.4.1",
12705+ "graceful-fs": "^4.1.2"
12706+ }
12707+ },
12708+ "webidl-conversions": {
12709+ "version": "6.1.0",
12710+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
12711+ "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w=="
12712+ },
12713+ "webpack": {
12714+ "version": "5.72.0",
12715+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.72.0.tgz",
12716+ "integrity": "sha512-qmSmbspI0Qo5ld49htys8GY9XhS9CGqFoHTsOVAnjBdg0Zn79y135R+k4IR4rKK6+eKaabMhJwiVB7xw0SJu5w==",
12717+ "dev": true,
12718+ "requires": {
12719+ "@types/eslint-scope": "^3.7.3",
12720+ "@types/estree": "^0.0.51",
12721+ "@webassemblyjs/ast": "1.11.1",
12722+ "@webassemblyjs/wasm-edit": "1.11.1",
12723+ "@webassemblyjs/wasm-parser": "1.11.1",
12724+ "acorn": "^8.4.1",
12725+ "acorn-import-assertions": "^1.7.6",
12726+ "browserslist": "^4.14.5",
12727+ "chrome-trace-event": "^1.0.2",
12728+ "enhanced-resolve": "^5.9.2",
12729+ "es-module-lexer": "^0.9.0",
12730+ "eslint-scope": "5.1.1",
12731+ "events": "^3.2.0",
12732+ "glob-to-regexp": "^0.4.1",
12733+ "graceful-fs": "^4.2.9",
12734+ "json-parse-better-errors": "^1.0.2",
12735+ "loader-runner": "^4.2.0",
12736+ "mime-types": "^2.1.27",
12737+ "neo-async": "^2.6.2",
12738+ "schema-utils": "^3.1.0",
12739+ "tapable": "^2.1.1",
12740+ "terser-webpack-plugin": "^5.1.3",
12741+ "watchpack": "^2.3.1",
12742+ "webpack-sources": "^3.2.3"
12743+ },
12744+ "dependencies": {
12745+ "enhanced-resolve": {
12746+ "version": "5.9.2",
12747+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.2.tgz",
12748+ "integrity": "sha512-GIm3fQfwLJ8YZx2smuHpBKkXC1yOk+OBEmKckVyL0i/ea8mqDEykK3ld5dgH1QYPNyT/lIllxV2LULnxCHaHkA==",
12749+ "dev": true,
12750+ "requires": {
12751+ "graceful-fs": "^4.2.4",
12752+ "tapable": "^2.2.0"
12753+ }
12754+ },
12755+ "schema-utils": {
12756+ "version": "3.1.1",
12757+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
12758+ "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
12759+ "dev": true,
12760+ "requires": {
12761+ "@types/json-schema": "^7.0.8",
12762+ "ajv": "^6.12.5",
12763+ "ajv-keywords": "^3.5.2"
12764+ }
12765+ },
12766+ "tapable": {
12767+ "version": "2.2.1",
12768+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
12769+ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
12770+ "dev": true
12771+ }
12772+ }
12773+ },
12774+ "webpack-cli": {
12775+ "version": "4.9.2",
12776+ "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.2.tgz",
12777+ "integrity": "sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ==",
12778+ "dev": true,
12779+ "requires": {
12780+ "@discoveryjs/json-ext": "^0.5.0",
12781+ "@webpack-cli/configtest": "^1.1.1",
12782+ "@webpack-cli/info": "^1.4.1",
12783+ "@webpack-cli/serve": "^1.6.1",
12784+ "colorette": "^2.0.14",
12785+ "commander": "^7.0.0",
12786+ "execa": "^5.0.0",
12787+ "fastest-levenshtein": "^1.0.12",
12788+ "import-local": "^3.0.2",
12789+ "interpret": "^2.2.0",
12790+ "rechoir": "^0.7.0",
12791+ "webpack-merge": "^5.7.3"
12792+ }
12793+ },
12794+ "webpack-merge": {
12795+ "version": "5.8.0",
12796+ "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz",
12797+ "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==",
12798+ "dev": true,
12799+ "requires": {
12800+ "clone-deep": "^4.0.1",
12801+ "wildcard": "^2.0.0"
12802+ }
12803+ },
12804+ "webpack-node-externals": {
12805+ "version": "3.0.0",
12806+ "resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz",
12807+ "integrity": "sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==",
12808+ "dev": true
12809+ },
12810+ "webpack-sources": {
12811+ "version": "3.2.3",
12812+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
12813+ "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
12814+ "dev": true
12815+ },
12816+ "whatwg-encoding": {
12817+ "version": "1.0.5",
12818+ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
12819+ "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
12820+ "requires": {
12821+ "iconv-lite": "0.4.24"
12822+ }
12823+ },
12824+ "whatwg-mimetype": {
12825+ "version": "2.3.0",
12826+ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
12827+ "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g=="
12828+ },
12829+ "whatwg-url": {
12830+ "version": "8.7.0",
12831+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz",
12832+ "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==",
12833+ "requires": {
12834+ "lodash": "^4.7.0",
12835+ "tr46": "^2.1.0",
12836+ "webidl-conversions": "^6.1.0"
12837+ }
12838+ },
12839+ "which": {
12840+ "version": "2.0.2",
12841+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
12842+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
12843+ "dev": true,
12844+ "requires": {
12845+ "isexe": "^2.0.0"
12846+ }
12847+ },
12848+ "which-boxed-primitive": {
12849+ "version": "1.0.2",
12850+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
12851+ "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
12852+ "dev": true,
12853+ "requires": {
12854+ "is-bigint": "^1.0.1",
12855+ "is-boolean-object": "^1.1.0",
12856+ "is-number-object": "^1.0.4",
12857+ "is-string": "^1.0.5",
12858+ "is-symbol": "^1.0.3"
12859+ }
12860+ },
12861+ "wide-align": {
12862+ "version": "1.1.5",
12863+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
12864+ "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
12865+ "dev": true,
12866+ "requires": {
12867+ "string-width": "^1.0.2 || 2 || 3 || 4"
12868+ }
12869+ },
12870+ "wildcard": {
12871+ "version": "2.0.0",
12872+ "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz",
12873+ "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==",
12874+ "dev": true
12875+ },
12876+ "word-wrap": {
12877+ "version": "1.2.3",
12878+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
12879+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ=="
12880+ },
12881+ "wrap-ansi": {
12882+ "version": "7.0.0",
12883+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
12884+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
12885+ "dev": true,
12886+ "requires": {
12887+ "ansi-styles": "^4.0.0",
12888+ "string-width": "^4.1.0",
12889+ "strip-ansi": "^6.0.0"
12890+ }
12891+ },
12892+ "wrappy": {
12893+ "version": "1.0.2",
12894+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
12895+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
12896+ "dev": true
12897+ },
12898+ "ws": {
12899+ "version": "7.5.7",
12900+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz",
12901+ "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==",
12902+ "requires": {}
12903+ },
12904+ "xml-name-validator": {
12905+ "version": "3.0.0",
12906+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
12907+ "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw=="
12908+ },
12909+ "xmlchars": {
12910+ "version": "2.2.0",
12911+ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
12912+ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw=="
12913+ },
12914+ "xtend": {
12915+ "version": "4.0.2",
12916+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
12917+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
12918+ },
12919+ "y18n": {
12920+ "version": "5.0.8",
12921+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
12922+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
12923+ "dev": true
12924+ },
12925+ "yaml": {
12926+ "version": "1.10.2",
12927+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
12928+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
12929+ "dev": true
12930+ },
12931+ "yargs": {
12932+ "version": "17.4.1",
12933+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.4.1.tgz",
12934+ "integrity": "sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g==",
12935+ "dev": true,
12936+ "requires": {
12937+ "cliui": "^7.0.2",
12938+ "escalade": "^3.1.1",
12939+ "get-caller-file": "^2.0.5",
12940+ "require-directory": "^2.1.1",
12941+ "string-width": "^4.2.3",
12942+ "y18n": "^5.0.5",
12943+ "yargs-parser": "^21.0.0"
12944+ }
12945+ },
12946+ "yargs-parser": {
12947+ "version": "21.0.1",
12948+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz",
12949+ "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==",
12950+ "dev": true
12951+ },
12952+ "ylru": {
12953+ "version": "1.3.2",
12954+ "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.3.2.tgz",
12955+ "integrity": "sha512-RXRJzMiK6U2ye0BlGGZnmpwJDPgakn6aNQ0A7gHRbD4I0uvK4TW6UqkK1V0pp9jskjJBAXd3dRrbzWkqJ+6cxA=="
12956+ },
12957+ "yn": {
12958+ "version": "3.1.1",
12959+ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
12960+ "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
12961+ "dev": true
12962+ },
12963+ "zxcvbn": {
12964+ "version": "4.4.2",
12965+ "resolved": "https://registry.npmjs.org/zxcvbn/-/zxcvbn-4.4.2.tgz",
12966+ "integrity": "sha1-KOwXzwl0PtyrBW3dixsGJizHPDA="
12967+ }
12968+ }
12969+}
apps/cli/package.jsonnew file+137
@@ -0,0 +1,137 @@
1+{
2+ "name": "@bitwarden/cli",
3+ "description": "A secure and free password manager for all of your devices.",
4+ "version": "1.22.1",
5+ "keywords": [
6+ "bitwarden",
7+ "password",
8+ "vault",
9+ "password manager",
10+ "cli"
11+ ],
12+ "author": "Bitwarden Inc. <hello@bitwarden.com> (https://bitwarden.com)",
13+ "homepage": "https://bitwarden.com",
14+ "repository": {
15+ "type": "git",
16+ "url": "https://github.com/bitwarden/cli"
17+ },
18+ "license": "GPL-3.0-only",
19+ "scripts": {
20+ "sub:init": "git submodule update --init --recursive",
21+ "sub:update": "git submodule update --remote",
22+ "sub:pull": "git submodule foreach git pull origin master",
23+ "clean": "rimraf dist/**/*",
24+ "symlink:win": "rmdir /S /Q ./jslib && cmd /c mklink /J .\\jslib ..\\jslib",
25+ "symlink:mac": "npm run symlink:lin",
26+ "symlink:lin": "rm -rf ./jslib && ln -s ../jslib ./jslib",
27+ "build": "webpack",
28+ "build:debug": "npm run build && node --inspect ./build/bw.js",
29+ "build:watch": "webpack --watch",
30+ "build:prod": "cross-env NODE_ENV=production webpack",
31+ "build:prod:watch": "cross-env NODE_ENV=production webpack --watch",
32+ "package": "npm run package:win && npm run package:mac && npm run package:lin",
33+ "package:win": "pkg . --targets win-x64 --output ./dist/windows/bw.exe --build",
34+ "package:mac": "pkg . --targets macos-x64 --output ./dist/macos/bw",
35+ "package:lin": "pkg . --targets linux-x64 --output ./dist/linux/bw",
36+ "debug": "node --inspect ./build/bw.js",
37+ "dist": "npm run build:prod && npm run clean && npm run package",
38+ "dist:win": "npm run build:prod && npm run clean && npm run package:win",
39+ "dist:mac": "npm run build:prod && npm run clean && npm run package:mac",
40+ "dist:lin": "npm run build:prod && npm run clean && npm run package:lin",
41+ "publish:npm": "npm run build:prod && npm publish --access public",
42+ "lint": "eslint . && prettier --check .",
43+ "lint:fix": "eslint . --fix",
44+ "prettier": "prettier --write .",
45+ "prepare": "husky install",
46+ "test": "jasmine-ts -r tsconfig-paths/register -P spec/tsconfig.json",
47+ "test:watch": "nodemon -w ./spec -w ./src -w ./jslib --ext \"ts,js,mjs,json\" --exec jasmine-ts -r tsconfig-paths/register -P spec/tsconfig.json"
48+ },
49+ "bin": {
50+ "bw": "build/bw.js"
51+ },
52+ "pkg": {
53+ "assets": "./build/**/*"
54+ },
55+ "devDependencies": {
56+ "@fluffy-spoon/substitute": "^1.208.0",
57+ "@types/inquirer": "^7.3.1",
58+ "@types/jasmine": "^3.7.0",
59+ "@types/jsdom": "^16.2.10",
60+ "@types/koa": "^2.13.4",
61+ "@types/koa__multer": "^2.0.4",
62+ "@types/koa__router": "^8.0.11",
63+ "@types/koa-bodyparser": "^4.3.5",
64+ "@types/koa-json": "^2.0.20",
65+ "@types/lowdb": "^1.0.10",
66+ "@types/lunr": "^2.3.3",
67+ "@types/node": "^16.11.12",
68+ "@types/node-fetch": "^2.5.10",
69+ "@types/node-forge": "^1.0.1",
70+ "@types/papaparse": "^5.2.5",
71+ "@types/proper-lockfile": "^4.1.2",
72+ "@types/retry": "^0.12.1",
73+ "@types/tldjs": "^2.3.0",
74+ "@types/zxcvbn": "^4.4.1",
75+ "@typescript-eslint/eslint-plugin": "^5.12.1",
76+ "@typescript-eslint/parser": "^5.12.1",
77+ "clean-webpack-plugin": "^4.0.0",
78+ "copy-webpack-plugin": "^10.2.0",
79+ "cross-env": "^7.0.3",
80+ "eslint": "^8.9.0",
81+ "eslint-config-prettier": "^8.4.0",
82+ "eslint-import-resolver-typescript": "^2.5.0",
83+ "eslint-plugin-import": "^2.25.4",
84+ "husky": "^7.0.4",
85+ "jasmine": "^3.7.0",
86+ "jasmine-core": "^3.7.1",
87+ "jasmine-ts": "^0.4.0",
88+ "jasmine-ts-console-reporter": "^3.1.1",
89+ "lint-staged": "^12.1.3",
90+ "pkg": "^5.5.1",
91+ "prettier": "^2.5.1",
92+ "rimraf": "^3.0.2",
93+ "ts-loader": "^8.2.0",
94+ "ts-node": "^10.4.0",
95+ "tsconfig-paths": "^3.12.0",
96+ "tsconfig-paths-webpack-plugin": "^3.5.2",
97+ "typescript": "4.1.5",
98+ "webpack": "^5.65.0",
99+ "webpack-cli": "^4.9.1",
100+ "webpack-node-externals": "^3.0.0"
101+ },
102+ "dependencies": {
103+ "@koa/multer": "^3.0.0",
104+ "@koa/router": "^10.1.1",
105+ "big-integer": "1.6.48",
106+ "browser-hrtime": "^1.1.8",
107+ "chalk": "^4.1.1",
108+ "commander": "7.2.0",
109+ "form-data": "4.0.0",
110+ "https-proxy-agent": "5.0.0",
111+ "inquirer": "8.0.0",
112+ "jsdom": "^16.5.3",
113+ "jszip": "^3.7.1",
114+ "koa": "^2.13.4",
115+ "koa-bodyparser": "^4.3.0",
116+ "koa-json": "^2.0.2",
117+ "lowdb": "1.0.0",
118+ "lunr": "^2.3.9",
119+ "multer": "^1.4.4",
120+ "node-fetch": "^2.6.1",
121+ "node-forge": "1.3.1",
122+ "open": "^8.0.8",
123+ "papaparse": "^5.3.0",
124+ "proper-lockfile": "^4.1.2",
125+ "rxjs": "6.6.7",
126+ "tldjs": "^2.3.1",
127+ "zxcvbn": "^4.4.2"
128+ },
129+ "engines": {
130+ "node": "~16",
131+ "npm": ">=7 <=8"
132+ },
133+ "lint-staged": {
134+ "./!(jslib)**": "prettier --ignore-unknown --write",
135+ "*.ts": "eslint --fix"
136+ }
137+}
apps/cli/scripts/brew-update.ps1new file+23
@@ -0,0 +1,23 @@
1+param (
2+ [Parameter(Mandatory=$true)]
3+ [string] $version
4+)
5+
6+# Dependencies:
7+# 1. brew cask install powershell
8+# 2. Environment variables for HOMEBREW_GITHUB_USER and HOMEBREW_GITHUB_API_TOKEN set.
9+#
10+# To run:
11+# pwsh ./brew-update.ps1 -version 1.1.0
12+
13+# Cleaning up
14+cd $("$(brew --repository)" + "/Library/Taps/homebrew/homebrew-core/Formula")
15+git checkout master
16+git reset --hard origin/master
17+git push $env:HOMEBREW_GITHUB_USER master
18+git branch -D $("bitwarden-cli-" + $version)
19+git push $env:HOMEBREW_GITHUB_USER --delete $("bitwarden-cli-" + $version)
20+
21+# Bump
22+$url = 'https://registry.npmjs.org/@bitwarden/cli/-/cli-' + $version + '.tgz';
23+brew bump-formula-pr --url="$url" bitwarden-cli
apps/cli/scripts/choco-pack.ps1new file+34
@@ -0,0 +1,34 @@
1+param (
2+ [switch] $push
3+)
4+
5+# To run:
6+# .\choco-pack.ps1
7+
8+$dir = Split-Path -Parent $MyInvocation.MyCommand.Path;
9+$rootDir = $dir + "\..";
10+$distDir = $rootDir + "\dist";
11+$chocoDir = $rootDir + "\stores\chocolatey";
12+$distChocoDir = $distDir + "\chocolatey";
13+$distChocoToolsDir = $distDir + "\chocolatey\tools";
14+
15+if(Test-Path -Path $distChocoDir) {
16+ Remove-Item -Recurse -Force $distChocoDir
17+}
18+
19+$exe = $distDir + "\windows\bw.exe";
20+$license = $rootDir + "\LICENSE.txt";
21+Copy-Item -Path $chocoDir -Destination $distChocoDir –Recurse
22+Copy-Item $exe -Destination $distChocoToolsDir;
23+Copy-Item $license -Destination $distChocoToolsDir;
24+
25+$srcPackage = $rootDir + "\package.json";
26+$srcPackageVersion = (Get-Content -Raw -Path $srcPackage | ConvertFrom-Json).version;
27+$nuspec = $distChocoDir + "\bitwarden-cli.nuspec";
28+choco pack $nuspec --version $srcPackageVersion --out $distChocoDir
29+
30+if ($push) {
31+ cd $distChocoDir
32+ choco push
33+ cd $rootDir
34+}
apps/cli/scripts/choco-update.ps1new file+26
@@ -0,0 +1,26 @@
1+param (
2+ [Parameter(Mandatory=$true)]
3+ [string] $version
4+)
5+
6+# To run:
7+# .\choco-update.ps1 -version 1.3.0
8+
9+$dir = Split-Path -Parent $MyInvocation.MyCommand.Path;
10+$rootDir = $dir + "\..";
11+$distDir = $rootDir + "\dist";
12+$distChocoDir = $distDir + "\chocolatey";
13+
14+if(Test-Path -Path $distChocoDir) {
15+ Remove-Item -Recurse -Force $distChocoDir
16+}
17+New-Item -ItemType directory -Path $distChocoDir | Out-Null
18+
19+$nupkg = "bitwarden-cli." + $version + ".nupkg"
20+$uri = "https://github.com/bitwarden/cli/releases/download/v" + $version + "/" + $nupkg;
21+[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
22+Invoke-RestMethod -Uri $uri -OutFile $($distChocoDir + "\" + $nupkg)
23+
24+cd $distChocoDir
25+choco push
26+cd $rootDir
apps/cli/scripts/snap-build.ps1new file+32
@@ -0,0 +1,32 @@
1+param (
2+ [Parameter(Mandatory=$true)]
3+ [string] $version
4+)
5+
6+# Dependencies:
7+# 1. Install powershell, ex `sudo apt-get install -y powershell`
8+#
9+# To run:
10+# ./snap-build.ps1 -version 1.1.0
11+#
12+# and then push to snap with:
13+# cd ../dist/snap
14+# snap push bw*.snap
15+# or, use the ./snap-update.ps1 script
16+
17+$dir = Split-Path -Parent $MyInvocation.MyCommand.Path
18+$rootDir = $dir + "/.."
19+$distDir = $rootDir + "/dist"
20+$snapDir = $rootDir + "/stores/snap"
21+$distSnapDir = $distDir + "/snap"
22+$snapDistYaml = $distSnapDir + "/snapcraft.yaml"
23+
24+if(Test-Path -Path $distSnapDir) {
25+ Remove-Item -Recurse -Force $distSnapDir
26+}
27+
28+Copy-Item -Path $snapDir -Destination $distSnapDir –Recurse
29+(Get-Content $snapDistYaml).replace('__version__', $version) | Set-Content $snapDistYaml
30+cd $distSnapDir
31+snapcraft
32+cd $rootDir
apps/cli/scripts/snap-update.ps1new file+12
@@ -0,0 +1,12 @@
1+# Dependencies:
2+# 1. Install powershell, ex `sudo apt-get install -y powershell`
3+#
4+# To run:
5+# pwsh ./snap-update.ps1
6+
7+$dir = Split-Path -Parent $MyInvocation.MyCommand.Path;
8+$rootDir = $dir + "/..";
9+$distDir = $rootDir + "/dist";
10+$distSnap = $distDir + "/snap/bw*.snap";
11+
12+snapcraft push $distSnap --release stable
apps/cli/spec/bw.spec.tsnew file+3
@@ -0,0 +1,3 @@
1+describe("bw", () => {
2+ it("is a placeholder test");
3+});
apps/cli/spec/helpers.tsnew file+4
@@ -0,0 +1,4 @@
1+// eslint-disable-next-line
2+const TSConsoleReporter = require("jasmine-ts-console-reporter");
3+jasmine.getEnv().clearReporters(); // Clear default console reporter
4+jasmine.getEnv().addReporter(new TSConsoleReporter());
apps/cli/spec/support/jasmine.jsonnew file+7
@@ -0,0 +1,7 @@
1+{
2+ "spec_dir": "spec",
3+ "spec_files": ["**/*[sS]pec.ts"],
4+ "helpers": ["helpers.ts"],
5+ "stopSpecOnExpectationFailure": false,
6+ "random": true
7+}
apps/cli/spec/tsconfig.jsonnew file+7
@@ -0,0 +1,7 @@
1+{
2+ "extends": "../tsconfig",
3+ "include": ["src", "spec"],
4+ "compilerOptions": {
5+ "module": "commonjs"
6+ }
7+}
apps/cli/spec/utils.spec.tsnew file+27
@@ -0,0 +1,27 @@
1+import { FlagName } from "../src/flags";
2+import { CliUtils } from "../src/utils";
3+describe("flagEnabled", () => {
4+ it("is true if flag is null", () => {
5+ process.env.FLAGS = JSON.stringify({ test: null });
6+
7+ expect(CliUtils.flagEnabled("test" as FlagName)).toBe(true);
8+ });
9+
10+ it("is true if flag is undefined", () => {
11+ process.env.FLAGS = JSON.stringify({});
12+
13+ expect(CliUtils.flagEnabled("test" as FlagName)).toBe(true);
14+ });
15+
16+ it("is true if flag is true", () => {
17+ process.env.FLAGS = JSON.stringify({ test: true });
18+
19+ expect(CliUtils.flagEnabled("test" as FlagName)).toBe(true);
20+ });
21+
22+ it("is false if flag is false", () => {
23+ process.env.FLAGS = JSON.stringify({ test: false });
24+
25+ expect(CliUtils.flagEnabled("test" as FlagName)).toBe(false);
26+ });
27+});
apps/cli/src/bw.tsnew file+380
@@ -0,0 +1,380 @@
1+import * as fs from "fs";
2+import * as path from "path";
3+
4+import * as program from "commander";
5+import * as jsdom from "jsdom";
6+
7+import { ClientType } from "jslib-common/enums/clientType";
8+import { KeySuffixOptions } from "jslib-common/enums/keySuffixOptions";
9+import { LogLevelType } from "jslib-common/enums/logLevelType";
10+import { StateFactory } from "jslib-common/factories/stateFactory";
11+import { Account } from "jslib-common/models/domain/account";
12+import { GlobalState } from "jslib-common/models/domain/globalState";
13+import { AppIdService } from "jslib-common/services/appId.service";
14+import { AuditService } from "jslib-common/services/audit.service";
15+import { AuthService } from "jslib-common/services/auth.service";
16+import { CipherService } from "jslib-common/services/cipher.service";
17+import { CollectionService } from "jslib-common/services/collection.service";
18+import { ContainerService } from "jslib-common/services/container.service";
19+import { CryptoService } from "jslib-common/services/crypto.service";
20+import { EnvironmentService } from "jslib-common/services/environment.service";
21+import { ExportService } from "jslib-common/services/export.service";
22+import { FileUploadService } from "jslib-common/services/fileUpload.service";
23+import { FolderService } from "jslib-common/services/folder.service";
24+import { ImportService } from "jslib-common/services/import.service";
25+import { KeyConnectorService } from "jslib-common/services/keyConnector.service";
26+import { NoopMessagingService } from "jslib-common/services/noopMessaging.service";
27+import { OrganizationService } from "jslib-common/services/organization.service";
28+import { PasswordGenerationService } from "jslib-common/services/passwordGeneration.service";
29+import { PolicyService } from "jslib-common/services/policy.service";
30+import { ProviderService } from "jslib-common/services/provider.service";
31+import { SearchService } from "jslib-common/services/search.service";
32+import { SendService } from "jslib-common/services/send.service";
33+import { SettingsService } from "jslib-common/services/settings.service";
34+import { StateService } from "jslib-common/services/state.service";
35+import { StateMigrationService } from "jslib-common/services/stateMigration.service";
36+import { SyncService } from "jslib-common/services/sync.service";
37+import { TokenService } from "jslib-common/services/token.service";
38+import { TotpService } from "jslib-common/services/totp.service";
39+import { TwoFactorService } from "jslib-common/services/twoFactor.service";
40+import { UserVerificationService } from "jslib-common/services/userVerification.service";
41+import { VaultTimeoutService } from "jslib-common/services/vaultTimeout.service";
42+import { CliPlatformUtilsService } from "jslib-node/cli/services/cliPlatformUtils.service";
43+import { ConsoleLogService } from "jslib-node/cli/services/consoleLog.service";
44+import { NodeApiService } from "jslib-node/services/nodeApi.service";
45+import { NodeCryptoFunctionService } from "jslib-node/services/nodeCryptoFunction.service";
46+
47+import { Program } from "./program";
48+import { SendProgram } from "./send.program";
49+import { I18nService } from "./services/i18n.service";
50+import { LowdbStorageService } from "./services/lowdbStorage.service";
51+import { NodeEnvSecureStorageService } from "./services/nodeEnvSecureStorage.service";
52+import { VaultProgram } from "./vault.program";
53+
54+// Polyfills
55+(global as any).DOMParser = new jsdom.JSDOM().window.DOMParser;
56+
57+// eslint-disable-next-line
58+const packageJson = require("../package.json");
59+
60+export class Main {
61+ messagingService: NoopMessagingService;
62+ storageService: LowdbStorageService;
63+ secureStorageService: NodeEnvSecureStorageService;
64+ i18nService: I18nService;
65+ platformUtilsService: CliPlatformUtilsService;
66+ cryptoService: CryptoService;
67+ tokenService: TokenService;
68+ appIdService: AppIdService;
69+ apiService: NodeApiService;
70+ environmentService: EnvironmentService;
71+ settingsService: SettingsService;
72+ cipherService: CipherService;
73+ folderService: FolderService;
74+ collectionService: CollectionService;
75+ vaultTimeoutService: VaultTimeoutService;
76+ syncService: SyncService;
77+ passwordGenerationService: PasswordGenerationService;
78+ totpService: TotpService;
79+ containerService: ContainerService;
80+ auditService: AuditService;
81+ importService: ImportService;
82+ exportService: ExportService;
83+ searchService: SearchService;
84+ cryptoFunctionService: NodeCryptoFunctionService;
85+ authService: AuthService;
86+ policyService: PolicyService;
87+ program: Program;
88+ vaultProgram: VaultProgram;
89+ sendProgram: SendProgram;
90+ logService: ConsoleLogService;
91+ sendService: SendService;
92+ fileUploadService: FileUploadService;
93+ keyConnectorService: KeyConnectorService;
94+ userVerificationService: UserVerificationService;
95+ stateService: StateService;
96+ stateMigrationService: StateMigrationService;
97+ organizationService: OrganizationService;
98+ providerService: ProviderService;
99+ twoFactorService: TwoFactorService;
100+
101+ constructor() {
102+ let p = null;
103+ const relativeDataDir = path.join(path.dirname(process.execPath), "bw-data");
104+ if (fs.existsSync(relativeDataDir)) {
105+ p = relativeDataDir;
106+ } else if (process.env.BITWARDENCLI_APPDATA_DIR) {
107+ p = path.resolve(process.env.BITWARDENCLI_APPDATA_DIR);
108+ } else if (process.platform === "darwin") {
109+ p = path.join(process.env.HOME, "Library/Application Support/Bitwarden CLI");
110+ } else if (process.platform === "win32") {
111+ p = path.join(process.env.APPDATA, "Bitwarden CLI");
112+ } else if (process.env.XDG_CONFIG_HOME) {
113+ p = path.join(process.env.XDG_CONFIG_HOME, "Bitwarden CLI");
114+ } else {
115+ p = path.join(process.env.HOME, ".config/Bitwarden CLI");
116+ }
117+
118+ this.i18nService = new I18nService("en", "./locales");
119+ this.platformUtilsService = new CliPlatformUtilsService(ClientType.Cli, packageJson);
120+ this.logService = new ConsoleLogService(
121+ this.platformUtilsService.isDev(),
122+ (level) => process.env.BITWARDENCLI_DEBUG !== "true" && level <= LogLevelType.Info
123+ );
124+ this.cryptoFunctionService = new NodeCryptoFunctionService();
125+ this.storageService = new LowdbStorageService(this.logService, null, p, false, true);
126+ this.secureStorageService = new NodeEnvSecureStorageService(
127+ this.storageService,
128+ this.logService,
129+ () => this.cryptoService
130+ );
131+
132+ this.stateMigrationService = new StateMigrationService(
133+ this.storageService,
134+ this.secureStorageService,
135+ new StateFactory(GlobalState, Account)
136+ );
137+
138+ this.stateService = new StateService(
139+ this.storageService,
140+ this.secureStorageService,
141+ this.logService,
142+ this.stateMigrationService,
143+ new StateFactory(GlobalState, Account)
144+ );
145+
146+ this.cryptoService = new CryptoService(
147+ this.cryptoFunctionService,
148+ this.platformUtilsService,
149+ this.logService,
150+ this.stateService
151+ );
152+
153+ this.appIdService = new AppIdService(this.storageService);
154+ this.tokenService = new TokenService(this.stateService);
155+ this.messagingService = new NoopMessagingService();
156+ this.environmentService = new EnvironmentService(this.stateService);
157+
158+ const customUserAgent =
159+ "Bitwarden_CLI/" +
160+ this.platformUtilsService.getApplicationVersionSync() +
161+ " (" +
162+ this.platformUtilsService.getDeviceString().toUpperCase() +
163+ ")";
164+ this.apiService = new NodeApiService(
165+ this.tokenService,
166+ this.platformUtilsService,
167+ this.environmentService,
168+ this.appIdService,
169+ async (expired: boolean) => await this.logout(),
170+ customUserAgent
171+ );
172+ this.containerService = new ContainerService(this.cryptoService);
173+
174+ this.settingsService = new SettingsService(this.stateService);
175+
176+ this.fileUploadService = new FileUploadService(this.logService, this.apiService);
177+
178+ this.cipherService = new CipherService(
179+ this.cryptoService,
180+ this.settingsService,
181+ this.apiService,
182+ this.fileUploadService,
183+ this.i18nService,
184+ null,
185+ this.logService,
186+ this.stateService
187+ );
188+
189+ this.folderService = new FolderService(
190+ this.cryptoService,
191+ this.apiService,
192+ this.i18nService,
193+ this.cipherService,
194+ this.stateService
195+ );
196+
197+ this.collectionService = new CollectionService(
198+ this.cryptoService,
199+ this.i18nService,
200+ this.stateService
201+ );
202+
203+ this.searchService = new SearchService(this.cipherService, this.logService, this.i18nService);
204+
205+ this.providerService = new ProviderService(this.stateService);
206+
207+ this.organizationService = new OrganizationService(this.stateService);
208+
209+ this.policyService = new PolicyService(
210+ this.stateService,
211+ this.organizationService,
212+ this.apiService
213+ );
214+
215+ this.sendService = new SendService(
216+ this.cryptoService,
217+ this.apiService,
218+ this.fileUploadService,
219+ this.i18nService,
220+ this.cryptoFunctionService,
221+ this.stateService
222+ );
223+
224+ this.keyConnectorService = new KeyConnectorService(
225+ this.stateService,
226+ this.cryptoService,
227+ this.apiService,
228+ this.tokenService,
229+ this.logService,
230+ this.organizationService,
231+ this.cryptoFunctionService
232+ );
233+
234+ this.twoFactorService = new TwoFactorService(this.i18nService, this.platformUtilsService);
235+
236+ this.authService = new AuthService(
237+ this.cryptoService,
238+ this.apiService,
239+ this.tokenService,
240+ this.appIdService,
241+ this.platformUtilsService,
242+ this.messagingService,
243+ this.logService,
244+ this.keyConnectorService,
245+ this.environmentService,
246+ this.stateService,
247+ this.twoFactorService,
248+ this.i18nService
249+ );
250+
251+ const lockedCallback = async () =>
252+ await this.cryptoService.clearStoredKey(KeySuffixOptions.Auto);
253+
254+ this.vaultTimeoutService = new VaultTimeoutService(
255+ this.cipherService,
256+ this.folderService,
257+ this.collectionService,
258+ this.cryptoService,
259+ this.platformUtilsService,
260+ this.messagingService,
261+ this.searchService,
262+ this.tokenService,
263+ this.policyService,
264+ this.keyConnectorService,
265+ this.stateService,
266+ this.authService,
267+ lockedCallback,
268+ null
269+ );
270+
271+ this.syncService = new SyncService(
272+ this.apiService,
273+ this.settingsService,
274+ this.folderService,
275+ this.cipherService,
276+ this.cryptoService,
277+ this.collectionService,
278+ this.messagingService,
279+ this.policyService,
280+ this.sendService,
281+ this.logService,
282+ this.keyConnectorService,
283+ this.stateService,
284+ this.organizationService,
285+ this.providerService,
286+ async (expired: boolean) => await this.logout()
287+ );
288+
289+ this.passwordGenerationService = new PasswordGenerationService(
290+ this.cryptoService,
291+ this.policyService,
292+ this.stateService
293+ );
294+
295+ this.totpService = new TotpService(
296+ this.cryptoFunctionService,
297+ this.logService,
298+ this.stateService
299+ );
300+
301+ this.importService = new ImportService(
302+ this.cipherService,
303+ this.folderService,
304+ this.apiService,
305+ this.i18nService,
306+ this.collectionService,
307+ this.platformUtilsService,
308+ this.cryptoService
309+ );
310+ this.exportService = new ExportService(
311+ this.folderService,
312+ this.cipherService,
313+ this.apiService,
314+ this.cryptoService,
315+ this.cryptoFunctionService
316+ );
317+
318+ this.auditService = new AuditService(this.cryptoFunctionService, this.apiService);
319+ this.program = new Program(this);
320+ this.vaultProgram = new VaultProgram(this);
321+ this.sendProgram = new SendProgram(this);
322+ this.userVerificationService = new UserVerificationService(
323+ this.cryptoService,
324+ this.i18nService,
325+ this.apiService
326+ );
327+ }
328+
329+ async run() {
330+ await this.init();
331+
332+ await this.program.register();
333+ await this.vaultProgram.register();
334+ await this.sendProgram.register();
335+
336+ program.parse(process.argv);
337+
338+ if (process.argv.slice(2).length === 0) {
339+ program.outputHelp();
340+ }
341+ }
342+
343+ async logout() {
344+ this.authService.logOut(() => {
345+ /* Do nothing */
346+ });
347+ const userId = await this.stateService.getUserId();
348+ await Promise.all([
349+ this.syncService.setLastSync(new Date(0)),
350+ this.cryptoService.clearKeys(),
351+ this.settingsService.clear(userId),
352+ this.cipherService.clear(userId),
353+ this.folderService.clear(userId),
354+ this.collectionService.clear(userId),
355+ this.policyService.clear(userId),
356+ this.passwordGenerationService.clear(),
357+ ]);
358+ await this.stateService.clean();
359+ process.env.BW_SESSION = null;
360+ }
361+
362+ private async init() {
363+ await this.storageService.init();
364+ await this.stateService.init();
365+ this.containerService.attachToWindow(global);
366+ await this.environmentService.setUrlsFromStorage();
367+ const locale = await this.stateService.getLocale();
368+ await this.i18nService.init(locale);
369+ this.twoFactorService.init();
370+
371+ const installedVersion = await this.stateService.getInstalledVersion();
372+ const currentVersion = await this.platformUtilsService.getApplicationVersion();
373+ if (installedVersion == null || installedVersion !== currentVersion) {
374+ await this.stateService.setInstalledVersion(currentVersion);
375+ }
376+ }
377+}
378+
379+const main = new Main();
380+main.run();
apps/cli/src/commands/completion.command.tsnew file+119
@@ -0,0 +1,119 @@
1+import * as program from "commander";
2+
3+import { Response } from "jslib-node/cli/models/response";
4+import { MessageResponse } from "jslib-node/cli/models/response/messageResponse";
5+
6+interface IOption {
7+ long?: string;
8+ short?: string;
9+ description: string;
10+}
11+
12+interface ICommand {
13+ commands?: ICommand[];
14+ options?: IOption[];
15+ _name: string;
16+ _description: string;
17+}
18+
19+const validShells = ["zsh"];
20+
21+export class CompletionCommand {
22+ async run(options: program.OptionValues) {
23+ const shell: typeof validShells[number] = options.shell;
24+
25+ if (!shell) {
26+ return Response.badRequest("`shell` option was not provided.");
27+ }
28+
29+ if (!validShells.includes(shell)) {
30+ return Response.badRequest("Unsupported shell.");
31+ }
32+
33+ let content = "";
34+
35+ if (shell === "zsh") {
36+ content = this.zshCompletion("bw", program as any as ICommand).render();
37+ }
38+
39+ const res = new MessageResponse(content, null);
40+ return Response.success(res);
41+ }
42+
43+ private zshCompletion(rootName: string, rootCommand: ICommand) {
44+ return {
45+ render: () => {
46+ return [
47+ `#compdef _${rootName} ${rootName}`,
48+ "",
49+ this.renderCommandBlock(rootName, rootCommand),
50+ ].join("\n");
51+ },
52+ };
53+ }
54+
55+ private renderCommandBlock(name: string, command: ICommand): string {
56+ const { commands = [], options = [] } = command;
57+ const hasOptions = options.length > 0;
58+ const hasCommands = commands.length > 0;
59+
60+ const args = options
61+ .map(({ long, short, description }) => {
62+ const aliases = [short, long].filter(Boolean);
63+ const opts = aliases.join(",");
64+ const desc = `[${description.replace(`'`, `'"'"'`)}]`;
65+ return aliases.length > 1
66+ ? `'(${aliases.join(" ")})'{${opts}}'${desc}'`
67+ : `'${opts}${desc}'`;
68+ })
69+ .concat(
70+ `'(-h --help)'{-h,--help}'[output usage information]'`,
71+ hasCommands ? '"1: :->cmnds"' : null,
72+ '"*::arg:->args"'
73+ )
74+ .filter(Boolean);
75+
76+ const commandBlockFunctionParts = [];
77+
78+ if (hasCommands) {
79+ commandBlockFunctionParts.push("local -a commands");
80+ }
81+
82+ if (hasOptions) {
83+ commandBlockFunctionParts.push(`_arguments -C \\\n ${args.join(` \\\n `)}`);
84+ }
85+
86+ if (hasCommands) {
87+ commandBlockFunctionParts.push(
88+ `case $state in
89+ cmnds)
90+ commands=(
91+ ${commands
92+ .map(({ _name, _description }) => `"${_name}:${_description}"`)
93+ .join("\n ")}
94+ )
95+ _describe "command" commands
96+ ;;
97+ esac
98+
99+ case "$words[1]" in
100+ ${commands
101+ .map(({ _name }) => [`${_name})`, `_${name}_${_name}`, ";;"].join("\n "))
102+ .join("\n ")}
103+ esac`
104+ );
105+ }
106+
107+ const commandBlocParts = [
108+ `function _${name} {\n ${commandBlockFunctionParts.join("\n\n ")}\n}`,
109+ ];
110+
111+ if (hasCommands) {
112+ commandBlocParts.push(
113+ commands.map((c) => this.renderCommandBlock(`${name}_${c._name}`, c)).join("\n\n")
114+ );
115+ }
116+
117+ return commandBlocParts.join("\n\n");
118+ }
119+}
apps/cli/src/commands/config.command.tsnew file+53
@@ -0,0 +1,53 @@
1+import * as program from "commander";
2+
3+import { EnvironmentService } from "jslib-common/abstractions/environment.service";
4+import { Response } from "jslib-node/cli/models/response";
5+import { MessageResponse } from "jslib-node/cli/models/response/messageResponse";
6+import { StringResponse } from "jslib-node/cli/models/response/stringResponse";
7+
8+export class ConfigCommand {
9+ constructor(private environmentService: EnvironmentService) {}
10+
11+ async run(setting: string, value: string, options: program.OptionValues): Promise<Response> {
12+ setting = setting.toLowerCase();
13+ switch (setting) {
14+ case "server":
15+ return await this.getOrSetServer(value, options);
16+ default:
17+ return Response.badRequest("Unknown setting.");
18+ }
19+ }
20+
21+ private async getOrSetServer(url: string, options: program.OptionValues): Promise<Response> {
22+ if (
23+ (url == null || url.trim() === "") &&
24+ !options.webVault &&
25+ !options.api &&
26+ !options.identity &&
27+ !options.icons &&
28+ !options.notifications &&
29+ !options.events
30+ ) {
31+ const stringRes = new StringResponse(
32+ this.environmentService.hasBaseUrl()
33+ ? this.environmentService.getUrls().base
34+ : "https://bitwarden.com"
35+ );
36+ return Response.success(stringRes);
37+ }
38+
39+ url = url === "null" || url === "bitwarden.com" || url === "https://bitwarden.com" ? null : url;
40+ await this.environmentService.setUrls({
41+ base: url,
42+ webVault: options.webVault || null,
43+ api: options.api || null,
44+ identity: options.identity || null,
45+ icons: options.icons || null,
46+ notifications: options.notifications || null,
47+ events: options.events || null,
48+ keyConnector: options.keyConnector || null,
49+ });
50+ const res = new MessageResponse("Saved setting `config`.", null);
51+ return Response.success(res);
52+ }
53+}
apps/cli/src/commands/confirm.command.tsnew file+62
@@ -0,0 +1,62 @@
1+import { ApiService } from "jslib-common/abstractions/api.service";
2+import { CryptoService } from "jslib-common/abstractions/crypto.service";
3+import { Utils } from "jslib-common/misc/utils";
4+import { OrganizationUserConfirmRequest } from "jslib-common/models/request/organizationUserConfirmRequest";
5+import { Response } from "jslib-node/cli/models/response";
6+
7+export class ConfirmCommand {
8+ constructor(private apiService: ApiService, private cryptoService: CryptoService) {}
9+
10+ async run(object: string, id: string, cmdOptions: Record<string, any>): Promise<Response> {
11+ if (id != null) {
12+ id = id.toLowerCase();
13+ }
14+
15+ const normalizedOptions = new Options(cmdOptions);
16+ switch (object.toLowerCase()) {
17+ case "org-member":
18+ return await this.confirmOrganizationMember(id, normalizedOptions);
19+ default:
20+ return Response.badRequest("Unknown object.");
21+ }
22+ }
23+
24+ private async confirmOrganizationMember(id: string, options: Options) {
25+ if (options.organizationId == null || options.organizationId === "") {
26+ return Response.badRequest("--organizationid <organizationid> required.");
27+ }
28+ if (!Utils.isGuid(id)) {
29+ return Response.badRequest("`" + id + "` is not a GUID.");
30+ }
31+ if (!Utils.isGuid(options.organizationId)) {
32+ return Response.badRequest("`" + options.organizationId + "` is not a GUID.");
33+ }
34+ try {
35+ const orgKey = await this.cryptoService.getOrgKey(options.organizationId);
36+ if (orgKey == null) {
37+ throw new Error("No encryption key for this organization.");
38+ }
39+ const orgUser = await this.apiService.getOrganizationUser(options.organizationId, id);
40+ if (orgUser == null) {
41+ throw new Error("Member id does not exist for this organization.");
42+ }
43+ const publicKeyResponse = await this.apiService.getUserPublicKey(orgUser.userId);
44+ const publicKey = Utils.fromB64ToArray(publicKeyResponse.publicKey);
45+ const key = await this.cryptoService.rsaEncrypt(orgKey.key, publicKey.buffer);
46+ const req = new OrganizationUserConfirmRequest();
47+ req.key = key.encryptedString;
48+ await this.apiService.postOrganizationUserConfirm(options.organizationId, id, req);
49+ return Response.success();
50+ } catch (e) {
51+ return Response.error(e);
52+ }
53+ }
54+}
55+
56+class Options {
57+ organizationId: string;
58+
59+ constructor(passedOptions: Record<string, any>) {
60+ this.organizationId = passedOptions?.organizationid || passedOptions?.organizationId;
61+ }
62+}
apps/cli/src/commands/convertToKeyConnector.command.tsnew file+84
@@ -0,0 +1,84 @@
1+import * as inquirer from "inquirer";
2+
3+import { ApiService } from "jslib-common/abstractions/api.service";
4+import { EnvironmentService } from "jslib-common/abstractions/environment.service";
5+import { KeyConnectorService } from "jslib-common/abstractions/keyConnector.service";
6+import { SyncService } from "jslib-common/abstractions/sync.service";
7+import { Response } from "jslib-node/cli/models/response";
8+import { MessageResponse } from "jslib-node/cli/models/response/messageResponse";
9+
10+export class ConvertToKeyConnectorCommand {
11+ constructor(
12+ private apiService: ApiService,
13+ private keyConnectorService: KeyConnectorService,
14+ private environmentService: EnvironmentService,
15+ private syncService: SyncService,
16+ private logout: () => Promise<void>
17+ ) {}
18+
19+ async run(): Promise<Response> {
20+ // If no interaction available, alert user to use web vault
21+ const canInteract = process.env.BW_NOINTERACTION !== "true";
22+ if (!canInteract) {
23+ await this.logout();
24+ return Response.error(
25+ new MessageResponse(
26+ "An organization you are a member of is using Key Connector. " +
27+ "In order to access the vault, you must opt-in to Key Connector now via the web vault. You have been logged out.",
28+ null
29+ )
30+ );
31+ }
32+
33+ const organization = await this.keyConnectorService.getManagingOrganization();
34+
35+ const answer: inquirer.Answers = await inquirer.createPromptModule({ output: process.stderr })({
36+ type: "list",
37+ name: "convert",
38+ message:
39+ organization.name +
40+ " is using a self-hosted key server. A master password is no longer required to log in for members of this organization. ",
41+ choices: [
42+ {
43+ name: "Remove master password and unlock",
44+ value: "remove",
45+ },
46+ {
47+ name: "Leave organization and unlock",
48+ value: "leave",
49+ },
50+ {
51+ name: "Log out",
52+ value: "exit",
53+ },
54+ ],
55+ });
56+
57+ if (answer.convert === "remove") {
58+ try {
59+ await this.keyConnectorService.migrateUser();
60+ } catch (e) {
61+ await this.logout();
62+ throw e;
63+ }
64+
65+ await this.keyConnectorService.removeConvertAccountRequired();
66+ await this.keyConnectorService.setUsesKeyConnector(true);
67+
68+ // Update environment URL - required for api key login
69+ const urls = this.environmentService.getUrls();
70+ urls.keyConnector = organization.keyConnectorUrl;
71+ await this.environmentService.setUrls(urls);
72+
73+ return Response.success();
74+ } else if (answer.convert === "leave") {
75+ await this.apiService.postLeaveOrganization(organization.id);
76+ await this.keyConnectorService.removeConvertAccountRequired();
77+ await this.syncService.fullSync(true);
78+ return Response.success();
79+ } else {
80+ await this.logout();
81+ return Response.error("You have been logged out.");
82+ }
83+ }
84+}
apps/cli/src/commands/create.command.tsnew file+206
@@ -0,0 +1,206 @@
1+import * as fs from "fs";
2+import * as path from "path";
3+
4+import { ApiService } from "jslib-common/abstractions/api.service";
5+import { CipherService } from "jslib-common/abstractions/cipher.service";
6+import { CryptoService } from "jslib-common/abstractions/crypto.service";
7+import { FolderService } from "jslib-common/abstractions/folder.service";
8+import { StateService } from "jslib-common/abstractions/state.service";
9+import { Utils } from "jslib-common/misc/utils";
10+import { CipherExport } from "jslib-common/models/export/cipherExport";
11+import { CollectionExport } from "jslib-common/models/export/collectionExport";
12+import { FolderExport } from "jslib-common/models/export/folderExport";
13+import { CollectionRequest } from "jslib-common/models/request/collectionRequest";
14+import { SelectionReadOnlyRequest } from "jslib-common/models/request/selectionReadOnlyRequest";
15+import { Response } from "jslib-node/cli/models/response";
16+
17+import { OrganizationCollectionRequest } from "../models/request/organizationCollectionRequest";
18+import { CipherResponse } from "../models/response/cipherResponse";
19+import { FolderResponse } from "../models/response/folderResponse";
20+import { OrganizationCollectionResponse } from "../models/response/organizationCollectionResponse";
21+import { CliUtils } from "../utils";
22+
23+export class CreateCommand {
24+ constructor(
25+ private cipherService: CipherService,
26+ private folderService: FolderService,
27+ private stateService: StateService,
28+ private cryptoService: CryptoService,
29+ private apiService: ApiService
30+ ) {}
31+
32+ async run(
33+ object: string,
34+ requestJson: string,
35+ cmdOptions: Record<string, any>,
36+ additionalData: any = null
37+ ): Promise<Response> {
38+ let req: any = null;
39+ if (object !== "attachment") {
40+ if (process.env.BW_SERVE !== "true" && (requestJson == null || requestJson === "")) {
41+ requestJson = await CliUtils.readStdin();
42+ }
43+
44+ if (requestJson == null || requestJson === "") {
45+ return Response.badRequest("`requestJson` was not provided.");
46+ }
47+
48+ if (typeof requestJson !== "string") {
49+ req = requestJson;
50+ } else {
51+ try {
52+ const reqJson = Buffer.from(requestJson, "base64").toString();
53+ req = JSON.parse(reqJson);
54+ } catch (e) {
55+ return Response.badRequest("Error parsing the encoded request data.");
56+ }
57+ }
58+ }
59+
60+ const normalizedOptions = new Options(cmdOptions);
61+ switch (object.toLowerCase()) {
62+ case "item":
63+ return await this.createCipher(req);
64+ case "attachment":
65+ return await this.createAttachment(normalizedOptions, additionalData);
66+ case "folder":
67+ return await this.createFolder(req);
68+ case "org-collection":
69+ return await this.createOrganizationCollection(req, normalizedOptions);
70+ default:
71+ return Response.badRequest("Unknown object.");
72+ }
73+ }
74+
75+ private async createCipher(req: CipherExport) {
76+ const cipher = await this.cipherService.encrypt(CipherExport.toView(req));
77+ try {
78+ await this.cipherService.saveWithServer(cipher);
79+ const newCipher = await this.cipherService.get(cipher.id);
80+ const decCipher = await newCipher.decrypt();
81+ const res = new CipherResponse(decCipher);
82+ return Response.success(res);
83+ } catch (e) {
84+ return Response.error(e);
85+ }
86+ }
87+
88+ private async createAttachment(options: Options, additionalData: any) {
89+ if (options.itemId == null || options.itemId === "") {
90+ return Response.badRequest("`itemid` option is required.");
91+ }
92+ let fileBuf: Buffer = null;
93+ let fileName: string = null;
94+ if (process.env.BW_SERVE === "true") {
95+ fileBuf = additionalData.fileBuffer;
96+ fileName = additionalData.fileName;
97+ } else {
98+ if (options.file == null || options.file === "") {
99+ return Response.badRequest("`file` option is required.");
100+ }
101+ const filePath = path.resolve(options.file);
102+ if (!fs.existsSync(options.file)) {
103+ return Response.badRequest("Cannot find file at " + filePath);
104+ }
105+ fileBuf = fs.readFileSync(filePath);
106+ fileName = path.basename(filePath);
107+ }
108+
109+ if (fileBuf == null) {
110+ return Response.badRequest("File not provided.");
111+ }
112+ if (fileName == null || fileName.trim() === "") {
113+ return Response.badRequest("File name not provided.");
114+ }
115+
116+ const itemId = options.itemId.toLowerCase();
117+ const cipher = await this.cipherService.get(itemId);
118+ if (cipher == null) {
119+ return Response.notFound();
120+ }
121+
122+ if (cipher.organizationId == null && !(await this.stateService.getCanAccessPremium())) {
123+ return Response.error("Premium status is required to use this feature.");
124+ }
125+
126+ const encKey = await this.cryptoService.getEncKey();
127+ if (encKey == null) {
128+ return Response.error(
129+ "You must update your encryption key before you can use this feature. " +
130+ "See https://help.bitwarden.com/article/update-encryption-key/"
131+ );
132+ }
133+
134+ try {
135+ await this.cipherService.saveAttachmentRawWithServer(
136+ cipher,
137+ fileName,
138+ new Uint8Array(fileBuf).buffer
139+ );
140+ const updatedCipher = await this.cipherService.get(cipher.id);
141+ const decCipher = await updatedCipher.decrypt();
142+ return Response.success(new CipherResponse(decCipher));
143+ } catch (e) {
144+ return Response.error(e);
145+ }
146+ }
147+
148+ private async createFolder(req: FolderExport) {
149+ const folder = await this.folderService.encrypt(FolderExport.toView(req));
150+ try {
151+ await this.folderService.saveWithServer(folder);
152+ const newFolder = await this.folderService.get(folder.id);
153+ const decFolder = await newFolder.decrypt();
154+ const res = new FolderResponse(decFolder);
155+ return Response.success(res);
156+ } catch (e) {
157+ return Response.error(e);
158+ }
159+ }
160+
161+ private async createOrganizationCollection(req: OrganizationCollectionRequest, options: Options) {
162+ if (options.organizationId == null || options.organizationId === "") {
163+ return Response.badRequest("`organizationid` option is required.");
164+ }
165+ if (!Utils.isGuid(options.organizationId)) {
166+ return Response.badRequest("`" + options.organizationId + "` is not a GUID.");
167+ }
168+ if (options.organizationId !== req.organizationId) {
169+ return Response.badRequest("`organizationid` option does not match request object.");
170+ }
171+ try {
172+ const orgKey = await this.cryptoService.getOrgKey(req.organizationId);
173+ if (orgKey == null) {
174+ throw new Error("No encryption key for this organization.");
175+ }
176+
177+ const groups =
178+ req.groups == null
179+ ? null
180+ : req.groups.map((g) => new SelectionReadOnlyRequest(g.id, g.readOnly, g.hidePasswords));
181+ const request = new CollectionRequest();
182+ request.name = (await this.cryptoService.encrypt(req.name, orgKey)).encryptedString;
183+ request.externalId = req.externalId;
184+ request.groups = groups;
185+ const response = await this.apiService.postCollection(req.organizationId, request);
186+ const view = CollectionExport.toView(req);
187+ view.id = response.id;
188+ const res = new OrganizationCollectionResponse(view, groups);
189+ return Response.success(res);
190+ } catch (e) {
191+ return Response.error(e);
192+ }
193+ }
194+}
195+
196+class Options {
197+ itemId: string;
198+ organizationId: string;
199+ file: string;
200+
201+ constructor(passedOptions: Record<string, any>) {
202+ this.organizationId = passedOptions?.organizationid || passedOptions?.organizationId;
203+ this.itemId = passedOptions?.itemid || passedOptions?.itemId;
204+ this.file = passedOptions?.file;
205+ }
206+}
apps/cli/src/commands/delete.command.tsnew file+131
@@ -0,0 +1,131 @@
1+import { ApiService } from "jslib-common/abstractions/api.service";
2+import { CipherService } from "jslib-common/abstractions/cipher.service";
3+import { FolderService } from "jslib-common/abstractions/folder.service";
4+import { StateService } from "jslib-common/abstractions/state.service";
5+import { Utils } from "jslib-common/misc/utils";
6+import { Response } from "jslib-node/cli/models/response";
7+
8+import { CliUtils } from "src/utils";
9+
10+export class DeleteCommand {
11+ constructor(
12+ private cipherService: CipherService,
13+ private folderService: FolderService,
14+ private stateService: StateService,
15+ private apiService: ApiService
16+ ) {}
17+
18+ async run(object: string, id: string, cmdOptions: Record<string, any>): Promise<Response> {
19+ if (id != null) {
20+ id = id.toLowerCase();
21+ }
22+
23+ const normalizedOptions = new Options(cmdOptions);
24+ switch (object.toLowerCase()) {
25+ case "item":
26+ return await this.deleteCipher(id, normalizedOptions);
27+ case "attachment":
28+ return await this.deleteAttachment(id, normalizedOptions);
29+ case "folder":
30+ return await this.deleteFolder(id);
31+ case "org-collection":
32+ return await this.deleteOrganizationCollection(id, normalizedOptions);
33+ default:
34+ return Response.badRequest("Unknown object.");
35+ }
36+ }
37+
38+ private async deleteCipher(id: string, options: Options) {
39+ const cipher = await this.cipherService.get(id);
40+ if (cipher == null) {
41+ return Response.notFound();
42+ }
43+
44+ try {
45+ if (options.permanent) {
46+ await this.cipherService.deleteWithServer(id);
47+ } else {
48+ await this.cipherService.softDeleteWithServer(id);
49+ }
50+ return Response.success();
51+ } catch (e) {
52+ return Response.error(e);
53+ }
54+ }
55+
56+ private async deleteAttachment(id: string, options: Options) {
57+ if (options.itemId == null || options.itemId === "") {
58+ return Response.badRequest("`itemid` option is required.");
59+ }
60+
61+ const itemId = options.itemId.toLowerCase();
62+ const cipher = await this.cipherService.get(itemId);
63+ if (cipher == null) {
64+ return Response.notFound();
65+ }
66+
67+ if (cipher.attachments == null || cipher.attachments.length === 0) {
68+ return Response.error("No attachments available for this item.");
69+ }
70+
71+ const attachments = cipher.attachments.filter((a) => a.id.toLowerCase() === id);
72+ if (attachments.length === 0) {
73+ return Response.error("Attachment `" + id + "` was not found.");
74+ }
75+
76+ if (cipher.organizationId == null && !(await this.stateService.getCanAccessPremium())) {
77+ return Response.error("Premium status is required to use this feature.");
78+ }
79+
80+ try {
81+ await this.cipherService.deleteAttachmentWithServer(cipher.id, attachments[0].id);
82+ return Response.success();
83+ } catch (e) {
84+ return Response.error(e);
85+ }
86+ }
87+
88+ private async deleteFolder(id: string) {
89+ const folder = await this.folderService.get(id);
90+ if (folder == null) {
91+ return Response.notFound();
92+ }
93+
94+ try {
95+ await this.folderService.deleteWithServer(id);
96+ return Response.success();
97+ } catch (e) {
98+ return Response.error(e);
99+ }
100+ }
101+
102+ private async deleteOrganizationCollection(id: string, options: Options) {
103+ if (options.organizationId == null || options.organizationId === "") {
104+ return Response.badRequest("`organizationid` options is required.");
105+ }
106+ if (!Utils.isGuid(id)) {
107+ return Response.badRequest("`" + id + "` is not a GUID.");
108+ }
109+ if (!Utils.isGuid(options.organizationId)) {
110+ return Response.badRequest("`" + options.organizationId + "` is not a GUID.");
111+ }
112+ try {
113+ await this.apiService.deleteCollection(options.organizationId, id);
114+ return Response.success();
115+ } catch (e) {
116+ return Response.error(e);
117+ }
118+ }
119+}
120+
121+class Options {
122+ itemId: string;
123+ organizationId: string;
124+ permanent: boolean;
125+
126+ constructor(passedOptions: Record<string, any>) {
127+ this.organizationId = passedOptions?.organizationid || passedOptions?.organizationId;
128+ this.itemId = passedOptions?.itemid || passedOptions?.itemId;
129+ this.permanent = CliUtils.convertBooleanOption(passedOptions?.permanent);
130+ }
131+}
apps/cli/src/commands/download.command.tsnew file+43
@@ -0,0 +1,43 @@
1+import * as fet from "node-fetch";
2+
3+import { CryptoService } from "jslib-common/abstractions/crypto.service";
4+import { SymmetricCryptoKey } from "jslib-common/models/domain/symmetricCryptoKey";
5+import { Response } from "jslib-node/cli/models/response";
6+import { FileResponse } from "jslib-node/cli/models/response/fileResponse";
7+
8+import { CliUtils } from "../utils";
9+
10+export abstract class DownloadCommand {
11+ constructor(protected cryptoService: CryptoService) {}
12+
13+ protected async saveAttachmentToFile(
14+ url: string,
15+ key: SymmetricCryptoKey,
16+ fileName: string,
17+ output?: string
18+ ) {
19+ const response = await fet.default(new fet.Request(url, { headers: { cache: "no-cache" } }));
20+ if (response.status !== 200) {
21+ return Response.error(
22+ "A " + response.status + " error occurred while downloading the attachment."
23+ );
24+ }
25+
26+ try {
27+ const buf = await response.arrayBuffer();
28+ const decBuf = await this.cryptoService.decryptFromBytes(buf, key);
29+ if (process.env.BW_SERVE === "true") {
30+ const res = new FileResponse(Buffer.from(decBuf), fileName);
31+ return Response.success(res);
32+ } else {
33+ return await CliUtils.saveResultToFile(Buffer.from(decBuf), output, fileName);
34+ }
35+ } catch (e) {
36+ if (typeof e === "string") {
37+ return Response.error(e);
38+ } else {
39+ return Response.error("An error occurred while saving the attachment.");
40+ }
41+ }
42+ }
43+}
apps/cli/src/commands/edit.command.tsnew file+186
@@ -0,0 +1,186 @@
1+import { ApiService } from "jslib-common/abstractions/api.service";
2+import { CipherService } from "jslib-common/abstractions/cipher.service";
3+import { CryptoService } from "jslib-common/abstractions/crypto.service";
4+import { FolderService } from "jslib-common/abstractions/folder.service";
5+import { Utils } from "jslib-common/misc/utils";
6+import { CipherExport } from "jslib-common/models/export/cipherExport";
7+import { CollectionExport } from "jslib-common/models/export/collectionExport";
8+import { FolderExport } from "jslib-common/models/export/folderExport";
9+import { CollectionRequest } from "jslib-common/models/request/collectionRequest";
10+import { SelectionReadOnlyRequest } from "jslib-common/models/request/selectionReadOnlyRequest";
11+import { Response } from "jslib-node/cli/models/response";
12+
13+import { OrganizationCollectionRequest } from "../models/request/organizationCollectionRequest";
14+import { CipherResponse } from "../models/response/cipherResponse";
15+import { FolderResponse } from "../models/response/folderResponse";
16+import { OrganizationCollectionResponse } from "../models/response/organizationCollectionResponse";
17+import { CliUtils } from "../utils";
18+
19+export class EditCommand {
20+ constructor(
21+ private cipherService: CipherService,
22+ private folderService: FolderService,
23+ private cryptoService: CryptoService,
24+ private apiService: ApiService
25+ ) {}
26+
27+ async run(
28+ object: string,
29+ id: string,
30+ requestJson: any,
31+ cmdOptions: Record<string, any>
32+ ): Promise<Response> {
33+ if (process.env.BW_SERVE !== "true" && (requestJson == null || requestJson === "")) {
34+ requestJson = await CliUtils.readStdin();
35+ }
36+
37+ if (requestJson == null || requestJson === "") {
38+ return Response.badRequest("`requestJson` was not provided.");
39+ }
40+
41+ let req: any = null;
42+ if (typeof requestJson !== "string") {
43+ req = requestJson;
44+ } else {
45+ try {
46+ const reqJson = Buffer.from(requestJson, "base64").toString();
47+ req = JSON.parse(reqJson);
48+ } catch (e) {
49+ return Response.badRequest("Error parsing the encoded request data.");
50+ }
51+ }
52+
53+ if (id != null) {
54+ id = id.toLowerCase();
55+ }
56+
57+ const normalizedOptions = new Options(cmdOptions);
58+ switch (object.toLowerCase()) {
59+ case "item":
60+ return await this.editCipher(id, req);
61+ case "item-collections":
62+ return await this.editCipherCollections(id, req);
63+ case "folder":
64+ return await this.editFolder(id, req);
65+ case "org-collection":
66+ return await this.editOrganizationCollection(id, req, normalizedOptions);
67+ default:
68+ return Response.badRequest("Unknown object.");
69+ }
70+ }
71+
72+ private async editCipher(id: string, req: CipherExport) {
73+ const cipher = await this.cipherService.get(id);
74+ if (cipher == null) {
75+ return Response.notFound();
76+ }
77+
78+ let cipherView = await cipher.decrypt();
79+ if (cipherView.isDeleted) {
80+ return Response.badRequest("You may not edit a deleted item. Use the restore command first.");
81+ }
82+ cipherView = CipherExport.toView(req, cipherView);
83+ const encCipher = await this.cipherService.encrypt(cipherView);
84+ try {
85+ await this.cipherService.saveWithServer(encCipher);
86+ const updatedCipher = await this.cipherService.get(cipher.id);
87+ const decCipher = await updatedCipher.decrypt();
88+ const res = new CipherResponse(decCipher);
89+ return Response.success(res);
90+ } catch (e) {
91+ return Response.error(e);
92+ }
93+ }
94+
95+ private async editCipherCollections(id: string, req: string[]) {
96+ const cipher = await this.cipherService.get(id);
97+ if (cipher == null) {
98+ return Response.notFound();
99+ }
100+ if (cipher.organizationId == null) {
101+ return Response.badRequest(
102+ "Item does not belong to an organization. Consider moving it first."
103+ );
104+ }
105+
106+ cipher.collectionIds = req;
107+ try {
108+ await this.cipherService.saveCollectionsWithServer(cipher);
109+ const updatedCipher = await this.cipherService.get(cipher.id);
110+ const decCipher = await updatedCipher.decrypt();
111+ const res = new CipherResponse(decCipher);
112+ return Response.success(res);
113+ } catch (e) {
114+ return Response.error(e);
115+ }
116+ }
117+
118+ private async editFolder(id: string, req: FolderExport) {
119+ const folder = await this.folderService.get(id);
120+ if (folder == null) {
121+ return Response.notFound();
122+ }
123+
124+ let folderView = await folder.decrypt();
125+ folderView = FolderExport.toView(req, folderView);
126+ const encFolder = await this.folderService.encrypt(folderView);
127+ try {
128+ await this.folderService.saveWithServer(encFolder);
129+ const updatedFolder = await this.folderService.get(folder.id);
130+ const decFolder = await updatedFolder.decrypt();
131+ const res = new FolderResponse(decFolder);
132+ return Response.success(res);
133+ } catch (e) {
134+ return Response.error(e);
135+ }
136+ }
137+
138+ private async editOrganizationCollection(
139+ id: string,
140+ req: OrganizationCollectionRequest,
141+ options: Options
142+ ) {
143+ if (options.organizationId == null || options.organizationId === "") {
144+ return Response.badRequest("`organizationid` option is required.");
145+ }
146+ if (!Utils.isGuid(id)) {
147+ return Response.badRequest("`" + id + "` is not a GUID.");
148+ }
149+ if (!Utils.isGuid(options.organizationId)) {
150+ return Response.badRequest("`" + options.organizationId + "` is not a GUID.");
151+ }
152+ if (options.organizationId !== req.organizationId) {
153+ return Response.badRequest("`organizationid` option does not match request object.");
154+ }
155+ try {
156+ const orgKey = await this.cryptoService.getOrgKey(req.organizationId);
157+ if (orgKey == null) {
158+ throw new Error("No encryption key for this organization.");
159+ }
160+
161+ const groups =
162+ req.groups == null
163+ ? null
164+ : req.groups.map((g) => new SelectionReadOnlyRequest(g.id, g.readOnly, g.hidePasswords));
165+ const request = new CollectionRequest();
166+ request.name = (await this.cryptoService.encrypt(req.name, orgKey)).encryptedString;
167+ request.externalId = req.externalId;
168+ request.groups = groups;
169+ const response = await this.apiService.putCollection(req.organizationId, id, request);
170+ const view = CollectionExport.toView(req);
171+ view.id = response.id;
172+ const res = new OrganizationCollectionResponse(view, groups);
173+ return Response.success(res);
174+ } catch (e) {
175+ return Response.error(e);
176+ }
177+ }
178+}
179+
180+class Options {
181+ organizationId: string;
182+
183+ constructor(passedOptions: Record<string, any>) {
184+ this.organizationId = passedOptions?.organizationid || passedOptions?.organizationId;
185+ }
186+}
apps/cli/src/commands/encode.command.tsnew file+16
@@ -0,0 +1,16 @@
1+import { Response } from "jslib-node/cli/models/response";
2+import { StringResponse } from "jslib-node/cli/models/response/stringResponse";
3+
4+import { CliUtils } from "../utils";
5+
6+export class EncodeCommand {
7+ async run(): Promise<Response> {
8+ if (process.stdin.isTTY) {
9+ return Response.badRequest("No stdin was piped in.");
10+ }
11+ const input = await CliUtils.readStdin();
12+ const b64 = Buffer.from(input, "utf8").toString("base64");
13+ const res = new StringResponse(b64);
14+ return Response.success(res);
15+ }
16+}
apps/cli/src/commands/export.command.tsnew file+97
@@ -0,0 +1,97 @@
1+import * as program from "commander";
2+import * as inquirer from "inquirer";
3+
4+import { ExportFormat, ExportService } from "jslib-common/abstractions/export.service";
5+import { PolicyService } from "jslib-common/abstractions/policy.service";
6+import { PolicyType } from "jslib-common/enums/policyType";
7+import { Utils } from "jslib-common/misc/utils";
8+import { Response } from "jslib-node/cli/models/response";
9+
10+import { CliUtils } from "../utils";
11+
12+export class ExportCommand {
13+ constructor(private exportService: ExportService, private policyService: PolicyService) {}
14+
15+ async run(options: program.OptionValues): Promise<Response> {
16+ if (
17+ options.organizationid == null &&
18+ (await this.policyService.policyAppliesToUser(PolicyType.DisablePersonalVaultExport))
19+ ) {
20+ return Response.badRequest(
21+ "One or more organization policies prevents you from exporting your personal vault."
22+ );
23+ }
24+
25+ const format = options.format ?? "csv";
26+
27+ if (options.organizationid != null && !Utils.isGuid(options.organizationid)) {
28+ return Response.error("`" + options.organizationid + "` is not a GUID.");
29+ }
30+
31+ let exportContent: string = null;
32+ try {
33+ exportContent =
34+ format === "encrypted_json"
35+ ? await this.getProtectedExport(options.password, options.organizationid)
36+ : await this.getUnprotectedExport(format, options.organizationid);
37+ } catch (e) {
38+ return Response.error(e);
39+ }
40+ return await this.saveFile(exportContent, options, format);
41+ }
42+
43+ private async getProtectedExport(passwordOption: string | boolean, organizationId?: string) {
44+ const password = await this.promptPassword(passwordOption);
45+ return password == null
46+ ? await this.exportService.getExport("encrypted_json", organizationId)
47+ : await this.exportService.getPasswordProtectedExport(password, organizationId);
48+ }
49+
50+ private async getUnprotectedExport(format: ExportFormat, organizationId?: string) {
51+ return this.exportService.getExport(format, organizationId);
52+ }
53+
54+ private async saveFile(
55+ exportContent: string,
56+ options: program.OptionValues,
57+ format: ExportFormat
58+ ): Promise<Response> {
59+ try {
60+ const fileName = this.getFileName(format, options.organizationid != null ? "org" : null);
61+ return await CliUtils.saveResultToFile(exportContent, options.output, fileName);
62+ } catch (e) {
63+ return Response.error(e.toString());
64+ }
65+ }
66+
67+ private getFileName(format: ExportFormat, prefix?: string) {
68+ if (format === "encrypted_json") {
69+ if (prefix == null) {
70+ prefix = "encrypted";
71+ } else {
72+ prefix = "encrypted_" + prefix;
73+ }
74+ format = "json";
75+ }
76+ return this.exportService.getFileName(prefix, format);
77+ }
78+
79+ private async promptPassword(password: string | boolean) {
80+ // boolean => flag set with no value, we need to prompt for password
81+ // string => flag set with value, use this value for password
82+ // undefined/null/false => account protect, not password, no password needed
83+ if (typeof password === "string") {
84+ return password;
85+ } else if (password) {
86+ const answer: inquirer.Answers = await inquirer.createPromptModule({
87+ output: process.stderr,
88+ })({
89+ type: "password",
90+ name: "password",
91+ message: "Export file password:",
92+ });
93+ return answer.password as string;
94+ }
95+ return null;
96+ }
97+}
apps/cli/src/commands/generate.command.tsnew file+80
@@ -0,0 +1,80 @@
1+import { PasswordGenerationService } from "jslib-common/abstractions/passwordGeneration.service";
2+import { StateService } from "jslib-common/abstractions/state.service";
3+import { Response } from "jslib-node/cli/models/response";
4+import { StringResponse } from "jslib-node/cli/models/response/stringResponse";
5+
6+import { CliUtils } from "../utils";
7+
8+export class GenerateCommand {
9+ constructor(
10+ private passwordGenerationService: PasswordGenerationService,
11+ private stateService: StateService
12+ ) {}
13+
14+ async run(cmdOptions: Record<string, any>): Promise<Response> {
15+ const normalizedOptions = new Options(cmdOptions);
16+ const options = {
17+ uppercase: normalizedOptions.uppercase,
18+ lowercase: normalizedOptions.lowercase,
19+ number: normalizedOptions.number,
20+ special: normalizedOptions.special,
21+ length: normalizedOptions.length,
22+ type: normalizedOptions.type,
23+ wordSeparator: normalizedOptions.separator,
24+ numWords: normalizedOptions.words,
25+ capitalize: normalizedOptions.capitalize,
26+ includeNumber: normalizedOptions.includeNumber,
27+ };
28+
29+ const enforcedOptions = (await this.stateService.getIsAuthenticated())
30+ ? (await this.passwordGenerationService.enforcePasswordGeneratorPoliciesOnOptions(options))[0]
31+ : options;
32+
33+ const password = await this.passwordGenerationService.generatePassword(enforcedOptions);
34+ const res = new StringResponse(password);
35+ return Response.success(res);
36+ }
37+}
38+
39+class Options {
40+ uppercase: boolean;
41+ lowercase: boolean;
42+ number: boolean;
43+ special: boolean;
44+ length: number;
45+ type: "passphrase" | "password";
46+ separator: string;
47+ words: number;
48+ capitalize: boolean;
49+ includeNumber: boolean;
50+
51+ constructor(passedOptions: Record<string, any>) {
52+ this.uppercase = CliUtils.convertBooleanOption(passedOptions?.uppercase);
53+ this.lowercase = CliUtils.convertBooleanOption(passedOptions?.lowercase);
54+ this.number = CliUtils.convertBooleanOption(passedOptions?.number);
55+ this.special = CliUtils.convertBooleanOption(passedOptions?.special);
56+ this.capitalize = CliUtils.convertBooleanOption(passedOptions?.capitalize);
57+ this.includeNumber = CliUtils.convertBooleanOption(passedOptions?.includeNumber);
58+ this.length = passedOptions?.length != null ? parseInt(passedOptions?.length, null) : 14;
59+ this.type = passedOptions?.passphrase ? "passphrase" : "password";
60+ this.separator = passedOptions?.separator == null ? "-" : passedOptions.separator + "";
61+ this.words = passedOptions?.words != null ? parseInt(passedOptions.words, null) : 3;
62+
63+ if (!this.uppercase && !this.lowercase && !this.special && !this.number) {
64+ this.lowercase = true;
65+ this.uppercase = true;
66+ this.number = true;
67+ }
68+ if (this.length < 5) {
69+ this.length = 5;
70+ }
71+ if (this.words < 3) {
72+ this.words = 3;
73+ }
74+ if (this.separator === "space") {
75+ this.separator = " ";
76+ } else if (this.separator != null && this.separator.length > 1) {
77+ this.separator = this.separator[0];
78+ }
79+ }
80+}
apps/cli/src/commands/get.command.tsnew file+540
@@ -0,0 +1,540 @@
1+import { ApiService } from "jslib-common/abstractions/api.service";
2+import { AuditService } from "jslib-common/abstractions/audit.service";
3+import { CipherService } from "jslib-common/abstractions/cipher.service";
4+import { CollectionService } from "jslib-common/abstractions/collection.service";
5+import { CryptoService } from "jslib-common/abstractions/crypto.service";
6+import { FolderService } from "jslib-common/abstractions/folder.service";
7+import { OrganizationService } from "jslib-common/abstractions/organization.service";
8+import { SearchService } from "jslib-common/abstractions/search.service";
9+import { StateService } from "jslib-common/abstractions/state.service";
10+import { TotpService } from "jslib-common/abstractions/totp.service";
11+import { CipherType } from "jslib-common/enums/cipherType";
12+import { SendType } from "jslib-common/enums/sendType";
13+import { Utils } from "jslib-common/misc/utils";
14+import { EncString } from "jslib-common/models/domain/encString";
15+import { Organization } from "jslib-common/models/domain/organization";
16+import { CardExport } from "jslib-common/models/export/cardExport";
17+import { CipherExport } from "jslib-common/models/export/cipherExport";
18+import { CollectionExport } from "jslib-common/models/export/collectionExport";
19+import { FieldExport } from "jslib-common/models/export/fieldExport";
20+import { FolderExport } from "jslib-common/models/export/folderExport";
21+import { IdentityExport } from "jslib-common/models/export/identityExport";
22+import { LoginExport } from "jslib-common/models/export/loginExport";
23+import { LoginUriExport } from "jslib-common/models/export/loginUriExport";
24+import { SecureNoteExport } from "jslib-common/models/export/secureNoteExport";
25+import { ErrorResponse } from "jslib-common/models/response/errorResponse";
26+import { CipherView } from "jslib-common/models/view/cipherView";
27+import { CollectionView } from "jslib-common/models/view/collectionView";
28+import { FolderView } from "jslib-common/models/view/folderView";
29+import { Response } from "jslib-node/cli/models/response";
30+import { StringResponse } from "jslib-node/cli/models/response/stringResponse";
31+
32+import { OrganizationCollectionRequest } from "../models/request/organizationCollectionRequest";
33+import { CipherResponse } from "../models/response/cipherResponse";
34+import { CollectionResponse } from "../models/response/collectionResponse";
35+import { FolderResponse } from "../models/response/folderResponse";
36+import { OrganizationCollectionResponse } from "../models/response/organizationCollectionResponse";
37+import { OrganizationResponse } from "../models/response/organizationResponse";
38+import { SendResponse } from "../models/response/sendResponse";
39+import { TemplateResponse } from "../models/response/templateResponse";
40+import { SelectionReadOnly } from "../models/selectionReadOnly";
41+import { CliUtils } from "../utils";
42+
43+import { DownloadCommand } from "./download.command";
44+
45+export class GetCommand extends DownloadCommand {
46+ constructor(
47+ private cipherService: CipherService,
48+ private folderService: FolderService,
49+ private collectionService: CollectionService,
50+ private totpService: TotpService,
51+ private auditService: AuditService,
52+ cryptoService: CryptoService,
53+ private stateService: StateService,
54+ private searchService: SearchService,
55+ private apiService: ApiService,
56+ private organizationService: OrganizationService
57+ ) {
58+ super(cryptoService);
59+ }
60+
61+ async run(object: string, id: string, cmdOptions: Record<string, any>): Promise<Response> {
62+ if (id != null) {
63+ id = id.toLowerCase();
64+ }
65+
66+ const normalizedOptions = new Options(cmdOptions);
67+ switch (object.toLowerCase()) {
68+ case "item":
69+ return await this.getCipher(id);
70+ case "username":
71+ return await this.getUsername(id);
72+ case "password":
73+ return await this.getPassword(id);
74+ case "uri":
75+ return await this.getUri(id);
76+ case "totp":
77+ return await this.getTotp(id);
78+ case "notes":
79+ return await this.getNotes(id);
80+ case "exposed":
81+ return await this.getExposed(id);
82+ case "attachment":
83+ return await this.getAttachment(id, normalizedOptions);
84+ case "folder":
85+ return await this.getFolder(id);
86+ case "collection":
87+ return await this.getCollection(id);
88+ case "org-collection":
89+ return await this.getOrganizationCollection(id, normalizedOptions);
90+ case "organization":
91+ return await this.getOrganization(id);
92+ case "template":
93+ return await this.getTemplate(id);
94+ case "fingerprint":
95+ return await this.getFingerprint(id);
96+ default:
97+ return Response.badRequest("Unknown object.");
98+ }
99+ }
100+
101+ private async getCipherView(id: string): Promise<CipherView | CipherView[]> {
102+ let decCipher: CipherView = null;
103+ if (Utils.isGuid(id)) {
104+ const cipher = await this.cipherService.get(id);
105+ if (cipher != null) {
106+ decCipher = await cipher.decrypt();
107+ }
108+ } else if (id.trim() !== "") {
109+ let ciphers = await this.cipherService.getAllDecrypted();
110+ ciphers = this.searchService.searchCiphersBasic(ciphers, id);
111+ if (ciphers.length > 1) {
112+ return ciphers;
113+ }
114+ if (ciphers.length > 0) {
115+ decCipher = ciphers[0];
116+ }
117+ }
118+
119+ return decCipher;
120+ }
121+
122+ private async getCipher(id: string, filter?: (c: CipherView) => boolean) {
123+ let decCipher = await this.getCipherView(id);
124+ if (decCipher == null) {
125+ return Response.notFound();
126+ }
127+ if (Array.isArray(decCipher)) {
128+ if (filter != null) {
129+ decCipher = decCipher.filter(filter);
130+ if (decCipher.length === 1) {
131+ decCipher = decCipher[0];
132+ }
133+ }
134+ if (Array.isArray(decCipher)) {
135+ return Response.multipleResults(decCipher.map((c) => c.id));
136+ }
137+ }
138+ const res = new CipherResponse(decCipher);
139+ return Response.success(res);
140+ }
141+
142+ private async getUsername(id: string) {
143+ const cipherResponse = await this.getCipher(
144+ id,
145+ (c) => c.type === CipherType.Login && !Utils.isNullOrWhitespace(c.login.username)
146+ );
147+ if (!cipherResponse.success) {
148+ return cipherResponse;
149+ }
150+
151+ const cipher = cipherResponse.data as CipherResponse;
152+ if (cipher.type !== CipherType.Login) {
153+ return Response.badRequest("Not a login.");
154+ }
155+
156+ if (Utils.isNullOrWhitespace(cipher.login.username)) {
157+ return Response.error("No username available for this login.");
158+ }
159+
160+ const res = new StringResponse(cipher.login.username);
161+ return Response.success(res);
162+ }
163+
164+ private async getPassword(id: string) {
165+ const cipherResponse = await this.getCipher(
166+ id,
167+ (c) => c.type === CipherType.Login && !Utils.isNullOrWhitespace(c.login.password)
168+ );
169+ if (!cipherResponse.success) {
170+ return cipherResponse;
171+ }
172+
173+ const cipher = cipherResponse.data as CipherResponse;
174+ if (cipher.type !== CipherType.Login) {
175+ return Response.badRequest("Not a login.");
176+ }
177+
178+ if (Utils.isNullOrWhitespace(cipher.login.password)) {
179+ return Response.error("No password available for this login.");
180+ }
181+
182+ const res = new StringResponse(cipher.login.password);
183+ return Response.success(res);
184+ }
185+
186+ private async getUri(id: string) {
187+ const cipherResponse = await this.getCipher(
188+ id,
189+ (c) =>
190+ c.type === CipherType.Login &&
191+ c.login.uris != null &&
192+ c.login.uris.length > 0 &&
193+ c.login.uris[0].uri !== ""
194+ );
195+ if (!cipherResponse.success) {
196+ return cipherResponse;
197+ }
198+
199+ const cipher = cipherResponse.data as CipherResponse;
200+ if (cipher.type !== CipherType.Login) {
201+ return Response.badRequest("Not a login.");
202+ }
203+
204+ if (
205+ cipher.login.uris == null ||
206+ cipher.login.uris.length === 0 ||
207+ cipher.login.uris[0].uri === ""
208+ ) {
209+ return Response.error("No uri available for this login.");
210+ }
211+
212+ const res = new StringResponse(cipher.login.uris[0].uri);
213+ return Response.success(res);
214+ }
215+
216+ private async getTotp(id: string) {
217+ const cipherResponse = await this.getCipher(
218+ id,
219+ (c) => c.type === CipherType.Login && !Utils.isNullOrWhitespace(c.login.totp)
220+ );
221+ if (!cipherResponse.success) {
222+ return cipherResponse;
223+ }
224+
225+ const cipher = cipherResponse.data as CipherResponse;
226+ if (cipher.type !== CipherType.Login) {
227+ return Response.badRequest("Not a login.");
228+ }
229+
230+ if (Utils.isNullOrWhitespace(cipher.login.totp)) {
231+ return Response.error("No TOTP available for this login.");
232+ }
233+
234+ const totp = await this.totpService.getCode(cipher.login.totp);
235+ if (totp == null) {
236+ return Response.error("Couldn't generate TOTP code.");
237+ }
238+
239+ const canAccessPremium = await this.stateService.getCanAccessPremium();
240+ if (!canAccessPremium) {
241+ const originalCipher = await this.cipherService.get(cipher.id);
242+ if (
243+ originalCipher == null ||
244+ originalCipher.organizationId == null ||
245+ !originalCipher.organizationUseTotp
246+ ) {
247+ return Response.error("Premium status is required to use this feature.");
248+ }
249+ }
250+
251+ const res = new StringResponse(totp);
252+ return Response.success(res);
253+ }
254+
255+ private async getNotes(id: string) {
256+ const cipherResponse = await this.getCipher(id, (c) => !Utils.isNullOrWhitespace(c.notes));
257+ if (!cipherResponse.success) {
258+ return cipherResponse;
259+ }
260+
261+ const cipher = cipherResponse.data as CipherResponse;
262+ if (Utils.isNullOrWhitespace(cipher.notes)) {
263+ return Response.error("No notes available for this item.");
264+ }
265+
266+ const res = new StringResponse(cipher.notes);
267+ return Response.success(res);
268+ }
269+
270+ private async getExposed(id: string) {
271+ const passwordResponse = await this.getPassword(id);
272+ if (!passwordResponse.success) {
273+ return passwordResponse;
274+ }
275+
276+ const exposedNumber = await this.auditService.passwordLeaked(
277+ (passwordResponse.data as StringResponse).data
278+ );
279+ const res = new StringResponse(exposedNumber.toString());
280+ return Response.success(res);
281+ }
282+
283+ private async getAttachment(id: string, options: Options) {
284+ if (options.itemId == null || options.itemId === "") {
285+ return Response.badRequest("--itemid <itemid> required.");
286+ }
287+
288+ const itemId = options.itemId.toLowerCase();
289+ const cipherResponse = await this.getCipher(itemId);
290+ if (!cipherResponse.success) {
291+ return cipherResponse;
292+ }
293+
294+ const cipher = await this.getCipherView(itemId);
295+ if (
296+ cipher == null ||
297+ Array.isArray(cipher) ||
298+ cipher.attachments == null ||
299+ cipher.attachments.length === 0
300+ ) {
301+ return Response.error("No attachments available for this item.");
302+ }
303+
304+ let attachments = cipher.attachments.filter(
305+ (a) =>
306+ a.id.toLowerCase() === id ||
307+ (a.fileName != null && a.fileName.toLowerCase().indexOf(id) > -1)
308+ );
309+ if (attachments.length === 0) {
310+ return Response.error("Attachment `" + id + "` was not found.");
311+ }
312+
313+ const exactMatches = attachments.filter((a) => a.fileName.toLowerCase() === id);
314+ if (exactMatches.length === 1) {
315+ attachments = exactMatches;
316+ }
317+
318+ if (attachments.length > 1) {
319+ return Response.multipleResults(attachments.map((a) => a.id));
320+ }
321+
322+ if (!(await this.stateService.getCanAccessPremium())) {
323+ const originalCipher = await this.cipherService.get(cipher.id);
324+ if (originalCipher == null || originalCipher.organizationId == null) {
325+ return Response.error("Premium status is required to use this feature.");
326+ }
327+ }
328+
329+ let url: string;
330+ try {
331+ const attachmentDownloadResponse = await this.apiService.getAttachmentData(
332+ cipher.id,
333+ attachments[0].id
334+ );
335+ url = attachmentDownloadResponse.url;
336+ } catch (e) {
337+ if (e instanceof ErrorResponse && (e as ErrorResponse).statusCode === 404) {
338+ url = attachments[0].url;
339+ } else if (e instanceof ErrorResponse) {
340+ throw new Error((e as ErrorResponse).getSingleMessage());
341+ } else {
342+ throw e;
343+ }
344+ }
345+
346+ const key =
347+ attachments[0].key != null
348+ ? attachments[0].key
349+ : await this.cryptoService.getOrgKey(cipher.organizationId);
350+ return await this.saveAttachmentToFile(url, key, attachments[0].fileName, options.output);
351+ }
352+
353+ private async getFolder(id: string) {
354+ let decFolder: FolderView = null;
355+ if (Utils.isGuid(id)) {
356+ const folder = await this.folderService.get(id);
357+ if (folder != null) {
358+ decFolder = await folder.decrypt();
359+ }
360+ } else if (id.trim() !== "") {
361+ let folders = await this.folderService.getAllDecrypted();
362+ folders = CliUtils.searchFolders(folders, id);
363+ if (folders.length > 1) {
364+ return Response.multipleResults(folders.map((f) => f.id));
365+ }
366+ if (folders.length > 0) {
367+ decFolder = folders[0];
368+ }
369+ }
370+
371+ if (decFolder == null) {
372+ return Response.notFound();
373+ }
374+ const res = new FolderResponse(decFolder);
375+ return Response.success(res);
376+ }
377+
378+ private async getCollection(id: string) {
379+ let decCollection: CollectionView = null;
380+ if (Utils.isGuid(id)) {
381+ const collection = await this.collectionService.get(id);
382+ if (collection != null) {
383+ decCollection = await collection.decrypt();
384+ }
385+ } else if (id.trim() !== "") {
386+ let collections = await this.collectionService.getAllDecrypted();
387+ collections = CliUtils.searchCollections(collections, id);
388+ if (collections.length > 1) {
389+ return Response.multipleResults(collections.map((c) => c.id));
390+ }
391+ if (collections.length > 0) {
392+ decCollection = collections[0];
393+ }
394+ }
395+
396+ if (decCollection == null) {
397+ return Response.notFound();
398+ }
399+ const res = new CollectionResponse(decCollection);
400+ return Response.success(res);
401+ }
402+
403+ private async getOrganizationCollection(id: string, options: Options) {
404+ if (options.organizationId == null || options.organizationId === "") {
405+ return Response.badRequest("`organizationid` option is required.");
406+ }
407+ if (!Utils.isGuid(id)) {
408+ return Response.badRequest("`" + id + "` is not a GUID.");
409+ }
410+ if (!Utils.isGuid(options.organizationId)) {
411+ return Response.badRequest("`" + options.organizationId + "` is not a GUID.");
412+ }
413+ try {
414+ const orgKey = await this.cryptoService.getOrgKey(options.organizationId);
415+ if (orgKey == null) {
416+ throw new Error("No encryption key for this organization.");
417+ }
418+
419+ const response = await this.apiService.getCollectionDetails(options.organizationId, id);
420+ const decCollection = new CollectionView(response);
421+ decCollection.name = await this.cryptoService.decryptToUtf8(
422+ new EncString(response.name),
423+ orgKey
424+ );
425+ const groups =
426+ response.groups == null
427+ ? null
428+ : response.groups.map((g) => new SelectionReadOnly(g.id, g.readOnly, g.hidePasswords));
429+ const res = new OrganizationCollectionResponse(decCollection, groups);
430+ return Response.success(res);
431+ } catch (e) {
432+ return Response.error(e);
433+ }
434+ }
435+
436+ private async getOrganization(id: string) {
437+ let org: Organization = null;
438+ if (Utils.isGuid(id)) {
439+ org = await this.organizationService.get(id);
440+ } else if (id.trim() !== "") {
441+ let orgs = await this.organizationService.getAll();
442+ orgs = CliUtils.searchOrganizations(orgs, id);
443+ if (orgs.length > 1) {
444+ return Response.multipleResults(orgs.map((c) => c.id));
445+ }
446+ if (orgs.length > 0) {
447+ org = orgs[0];
448+ }
449+ }
450+
451+ if (org == null) {
452+ return Response.notFound();
453+ }
454+ const res = new OrganizationResponse(org);
455+ return Response.success(res);
456+ }
457+
458+ private async getTemplate(id: string) {
459+ let template: any = null;
460+ switch (id.toLowerCase()) {
461+ case "item":
462+ template = CipherExport.template();
463+ break;
464+ case "item.field":
465+ template = FieldExport.template();
466+ break;
467+ case "item.login":
468+ template = LoginExport.template();
469+ break;
470+ case "item.login.uri":
471+ template = LoginUriExport.template();
472+ break;
473+ case "item.card":
474+ template = CardExport.template();
475+ break;
476+ case "item.identity":
477+ template = IdentityExport.template();
478+ break;
479+ case "item.securenote":
480+ template = SecureNoteExport.template();
481+ break;
482+ case "folder":
483+ template = FolderExport.template();
484+ break;
485+ case "collection":
486+ template = CollectionExport.template();
487+ break;
488+ case "item-collections":
489+ template = ["collection-id1", "collection-id2"];
490+ break;
491+ case "org-collection":
492+ template = OrganizationCollectionRequest.template();
493+ break;
494+ case "send.text":
495+ template = SendResponse.template(SendType.Text);
496+ break;
497+ case "send.file":
498+ template = SendResponse.template(SendType.File);
499+ break;
500+ default:
501+ return Response.badRequest("Unknown template object.");
502+ }
503+
504+ const res = new TemplateResponse(template);
505+ return Response.success(res);
506+ }
507+
508+ private async getFingerprint(id: string) {
509+ let fingerprint: string[] = null;
510+ if (id === "me") {
511+ fingerprint = await this.cryptoService.getFingerprint(await this.stateService.getUserId());
512+ } else if (Utils.isGuid(id)) {
513+ try {
514+ const response = await this.apiService.getUserPublicKey(id);
515+ const pubKey = Utils.fromB64ToArray(response.publicKey);
516+ fingerprint = await this.cryptoService.getFingerprint(id, pubKey.buffer);
517+ } catch {
518+ // eslint-disable-next-line
519+ }
520+ }
521+
522+ if (fingerprint == null) {
523+ return Response.notFound();
524+ }
525+ const res = new StringResponse(fingerprint.join("-"));
526+ return Response.success(res);
527+ }
528+}
529+
530+class Options {
531+ itemId: string;
532+ organizationId: string;
533+ output: string;
534+
535+ constructor(passedOptions: Record<string, any>) {
536+ this.organizationId = passedOptions?.organizationid || passedOptions?.organizationId;
537+ this.itemId = passedOptions?.itemid || passedOptions?.itemId;
538+ this.output = passedOptions?.output;
539+ }
540+}
apps/cli/src/commands/import.command.tsnew file+127
@@ -0,0 +1,127 @@
1+import * as program from "commander";
2+import * as inquirer from "inquirer";
3+
4+import { ImportService } from "jslib-common/abstractions/import.service";
5+import { OrganizationService } from "jslib-common/abstractions/organization.service";
6+import { ImportType } from "jslib-common/enums/importOptions";
7+import { Importer } from "jslib-common/importers/importer";
8+import { Response } from "jslib-node/cli/models/response";
9+import { MessageResponse } from "jslib-node/cli/models/response/messageResponse";
10+
11+import { CliUtils } from "../utils";
12+
13+export class ImportCommand {
14+ constructor(
15+ private importService: ImportService,
16+ private organizationService: OrganizationService
17+ ) {}
18+
19+ async run(
20+ format: ImportType,
21+ filepath: string,
22+ options: program.OptionValues
23+ ): Promise<Response> {
24+ const organizationId = options.organizationid;
25+ if (organizationId != null) {
26+ const organization = await this.organizationService.get(organizationId);
27+
28+ if (organization == null) {
29+ return Response.badRequest(
30+ `You do not belong to an organization with the ID of ${organizationId}. Check the organization ID and sync your vault.`
31+ );
32+ }
33+
34+ if (!organization.canAccessImportExport) {
35+ return Response.badRequest(
36+ "You are not authorized to import into the provided organization."
37+ );
38+ }
39+ }
40+
41+ if (options.formats || false) {
42+ return await this.list();
43+ } else {
44+ return await this.import(format, filepath, organizationId);
45+ }
46+ }
47+
48+ private async import(format: ImportType, filepath: string, organizationId: string) {
49+ if (format == null) {
50+ return Response.badRequest("`format` was not provided.");
51+ }
52+ if (filepath == null || filepath === "") {
53+ return Response.badRequest("`filepath` was not provided.");
54+ }
55+
56+ const importer = await this.importService.getImporter(format, organizationId);
57+ if (importer === null) {
58+ return Response.badRequest("Proper importer type required.");
59+ }
60+
61+ try {
62+ let contents;
63+ if (format === "1password1pux") {
64+ contents = await CliUtils.extract1PuxContent(filepath);
65+ } else {
66+ contents = await CliUtils.readFile(filepath);
67+ }
68+
69+ if (contents === null || contents === "") {
70+ return Response.badRequest("Import file was empty.");
71+ }
72+
73+ const response = await this.doImport(importer, contents, organizationId);
74+ if (response.success) {
75+ response.data = new MessageResponse("Imported " + filepath, null);
76+ }
77+ return response;
78+ } catch (err) {
79+ return Response.badRequest(err);
80+ }
81+ }
82+
83+ private async list() {
84+ const options = this.importService
85+ .getImportOptions()
86+ .sort((a, b) => {
87+ return a.id < b.id ? -1 : a.id > b.id ? 1 : 0;
88+ })
89+ .map((option) => option.id)
90+ .join("\n");
91+ const res = new MessageResponse("Supported input formats:", options);
92+ res.raw = options;
93+ return Response.success(res);
94+ }
95+
96+ private async doImport(
97+ importer: Importer,
98+ contents: string,
99+ organizationId?: string
100+ ): Promise<Response> {
101+ const err = await this.importService.import(importer, contents, organizationId);
102+ if (err != null) {
103+ if (err.passwordRequired) {
104+ importer = this.importService.getImporter(
105+ "bitwardenpasswordprotected",
106+ organizationId,
107+ await this.promptPassword()
108+ );
109+ return this.doImport(importer, contents, organizationId);
110+ }
111+ return Response.badRequest(err.message);
112+ }
113+
114+ return Response.success();
115+ }
116+
117+ private async promptPassword() {
118+ const answer: inquirer.Answers = await inquirer.createPromptModule({
119+ output: process.stderr,
120+ })({
121+ type: "password",
122+ name: "password",
123+ message: "Import file password:",
124+ });
125+ return answer.password;
126+ }
127+}
apps/cli/src/commands/list.command.tsnew file+252
@@ -0,0 +1,252 @@
1+import { ApiService } from "jslib-common/abstractions/api.service";
2+import { CipherService } from "jslib-common/abstractions/cipher.service";
3+import { CollectionService } from "jslib-common/abstractions/collection.service";
4+import { FolderService } from "jslib-common/abstractions/folder.service";
5+import { OrganizationService } from "jslib-common/abstractions/organization.service";
6+import { SearchService } from "jslib-common/abstractions/search.service";
7+import { Utils } from "jslib-common/misc/utils";
8+import { CollectionData } from "jslib-common/models/data/collectionData";
9+import { Collection } from "jslib-common/models/domain/collection";
10+import {
11+ CollectionDetailsResponse as ApiCollectionDetailsResponse,
12+ CollectionResponse as ApiCollectionResponse,
13+} from "jslib-common/models/response/collectionResponse";
14+import { ListResponse as ApiListResponse } from "jslib-common/models/response/listResponse";
15+import { CipherView } from "jslib-common/models/view/cipherView";
16+import { Response } from "jslib-node/cli/models/response";
17+import { ListResponse } from "jslib-node/cli/models/response/listResponse";
18+
19+import { CipherResponse } from "../models/response/cipherResponse";
20+import { CollectionResponse } from "../models/response/collectionResponse";
21+import { FolderResponse } from "../models/response/folderResponse";
22+import { OrganizationResponse } from "../models/response/organizationResponse";
23+import { OrganizationUserResponse } from "../models/response/organizationUserResponse";
24+import { CliUtils } from "../utils";
25+
26+export class ListCommand {
27+ constructor(
28+ private cipherService: CipherService,
29+ private folderService: FolderService,
30+ private collectionService: CollectionService,
31+ private organizationService: OrganizationService,
32+ private searchService: SearchService,
33+ private apiService: ApiService
34+ ) {}
35+
36+ async run(object: string, cmdOptions: Record<string, any>): Promise<Response> {
37+ const normalizedOptions = new Options(cmdOptions);
38+ switch (object.toLowerCase()) {
39+ case "items":
40+ return await this.listCiphers(normalizedOptions);
41+ case "folders":
42+ return await this.listFolders(normalizedOptions);
43+ case "collections":
44+ return await this.listCollections(normalizedOptions);
45+ case "org-collections":
46+ return await this.listOrganizationCollections(normalizedOptions);
47+ case "org-members":
48+ return await this.listOrganizationMembers(normalizedOptions);
49+ case "organizations":
50+ return await this.listOrganizations(normalizedOptions);
51+ default:
52+ return Response.badRequest("Unknown object.");
53+ }
54+ }
55+
56+ private async listCiphers(options: Options) {
57+ let ciphers: CipherView[];
58+ options.trash = options.trash || false;
59+ if (options.url != null && options.url.trim() !== "") {
60+ ciphers = await this.cipherService.getAllDecryptedForUrl(options.url);
61+ } else {
62+ ciphers = await this.cipherService.getAllDecrypted();
63+ }
64+
65+ if (
66+ options.folderId != null ||
67+ options.collectionId != null ||
68+ options.organizationId != null
69+ ) {
70+ ciphers = ciphers.filter((c) => {
71+ if (options.trash !== c.isDeleted) {
72+ return false;
73+ }
74+ if (options.folderId != null) {
75+ if (options.folderId === "notnull" && c.folderId != null) {
76+ return true;
77+ }
78+ const folderId = options.folderId === "null" ? null : options.folderId;
79+ if (folderId === c.folderId) {
80+ return true;
81+ }
82+ }
83+
84+ if (options.organizationId != null) {
85+ if (options.organizationId === "notnull" && c.organizationId != null) {
86+ return true;
87+ }
88+ const organizationId = options.organizationId === "null" ? null : options.organizationId;
89+ if (organizationId === c.organizationId) {
90+ return true;
91+ }
92+ }
93+
94+ if (options.collectionId != null) {
95+ if (
96+ options.collectionId === "notnull" &&
97+ c.collectionIds != null &&
98+ c.collectionIds.length > 0
99+ ) {
100+ return true;
101+ }
102+ const collectionId = options.collectionId === "null" ? null : options.collectionId;
103+ if (collectionId == null && (c.collectionIds == null || c.collectionIds.length === 0)) {
104+ return true;
105+ }
106+ if (
107+ collectionId != null &&
108+ c.collectionIds != null &&
109+ c.collectionIds.indexOf(collectionId) > -1
110+ ) {
111+ return true;
112+ }
113+ }
114+ return false;
115+ });
116+ } else if (options.search == null || options.search.trim() === "") {
117+ ciphers = ciphers.filter((c) => options.trash === c.isDeleted);
118+ }
119+
120+ if (options.search != null && options.search.trim() !== "") {
121+ ciphers = this.searchService.searchCiphersBasic(ciphers, options.search, options.trash);
122+ }
123+
124+ const res = new ListResponse(ciphers.map((o) => new CipherResponse(o)));
125+ return Response.success(res);
126+ }
127+
128+ private async listFolders(options: Options) {
129+ let folders = await this.folderService.getAllDecrypted();
130+
131+ if (options.search != null && options.search.trim() !== "") {
132+ folders = CliUtils.searchFolders(folders, options.search);
133+ }
134+
135+ const res = new ListResponse(folders.map((o) => new FolderResponse(o)));
136+ return Response.success(res);
137+ }
138+
139+ private async listCollections(options: Options) {
140+ let collections = await this.collectionService.getAllDecrypted();
141+
142+ if (options.organizationId != null) {
143+ collections = collections.filter((c) => {
144+ if (options.organizationId === c.organizationId) {
145+ return true;
146+ }
147+ return false;
148+ });
149+ }
150+
151+ if (options.search != null && options.search.trim() !== "") {
152+ collections = CliUtils.searchCollections(collections, options.search);
153+ }
154+
155+ const res = new ListResponse(collections.map((o) => new CollectionResponse(o)));
156+ return Response.success(res);
157+ }
158+
159+ private async listOrganizationCollections(options: Options) {
160+ if (options.organizationId == null || options.organizationId === "") {
161+ return Response.badRequest("`organizationid` option is required.");
162+ }
163+ if (!Utils.isGuid(options.organizationId)) {
164+ return Response.badRequest("`" + options.organizationId + "` is not a GUID.");
165+ }
166+ const organization = await this.organizationService.get(options.organizationId);
167+ if (organization == null) {
168+ return Response.error("Organization not found.");
169+ }
170+
171+ try {
172+ let response: ApiListResponse<ApiCollectionResponse>;
173+ if (organization.canViewAllCollections) {
174+ response = await this.apiService.getCollections(options.organizationId);
175+ } else {
176+ response = await this.apiService.getUserCollections();
177+ }
178+ const collections = response.data
179+ .filter((c) => c.organizationId === options.organizationId)
180+ .map((r) => new Collection(new CollectionData(r as ApiCollectionDetailsResponse)));
181+ let decCollections = await this.collectionService.decryptMany(collections);
182+ if (options.search != null && options.search.trim() !== "") {
183+ decCollections = CliUtils.searchCollections(decCollections, options.search);
184+ }
185+ const res = new ListResponse(decCollections.map((o) => new CollectionResponse(o)));
186+ return Response.success(res);
187+ } catch (e) {
188+ return Response.error(e);
189+ }
190+ }
191+
192+ private async listOrganizationMembers(options: Options) {
193+ if (options.organizationId == null || options.organizationId === "") {
194+ return Response.badRequest("`organizationid` option is required.");
195+ }
196+ if (!Utils.isGuid(options.organizationId)) {
197+ return Response.badRequest("`" + options.organizationId + "` is not a GUID.");
198+ }
199+ const organization = await this.organizationService.get(options.organizationId);
200+ if (organization == null) {
201+ return Response.error("Organization not found.");
202+ }
203+
204+ try {
205+ const response = await this.apiService.getOrganizationUsers(options.organizationId);
206+ const res = new ListResponse(
207+ response.data.map((r) => {
208+ const u = new OrganizationUserResponse();
209+ u.email = r.email;
210+ u.name = r.name;
211+ u.id = r.id;
212+ u.status = r.status;
213+ u.type = r.type;
214+ u.twoFactorEnabled = r.twoFactorEnabled;
215+ return u;
216+ })
217+ );
218+ return Response.success(res);
219+ } catch (e) {
220+ return Response.error(e);
221+ }
222+ }
223+
224+ private async listOrganizations(options: Options) {
225+ let organizations = await this.organizationService.getAll();
226+
227+ if (options.search != null && options.search.trim() !== "") {
228+ organizations = CliUtils.searchOrganizations(organizations, options.search);
229+ }
230+
231+ const res = new ListResponse(organizations.map((o) => new OrganizationResponse(o)));
232+ return Response.success(res);
233+ }
234+}
235+
236+class Options {
237+ organizationId: string;
238+ collectionId: string;
239+ folderId: string;
240+ search: string;
241+ url: string;
242+ trash: boolean;
243+
244+ constructor(passedOptions: Record<string, any>) {
245+ this.organizationId = passedOptions?.organizationid || passedOptions?.organizationId;
246+ this.collectionId = passedOptions?.collectionid || passedOptions?.collectionId;
247+ this.folderId = passedOptions?.folderid || passedOptions?.folderId;
248+ this.search = passedOptions?.search;
249+ this.url = passedOptions?.url;
250+ this.trash = CliUtils.convertBooleanOption(passedOptions?.trash);
251+ }
252+}
apps/cli/src/commands/lock.command.tsnew file+14
@@ -0,0 +1,14 @@
1+import { VaultTimeoutService } from "jslib-common/abstractions/vaultTimeout.service";
2+import { Response } from "jslib-node/cli/models/response";
3+import { MessageResponse } from "jslib-node/cli/models/response/messageResponse";
4+
5+export class LockCommand {
6+ constructor(private vaultTimeoutService: VaultTimeoutService) {}
7+
8+ async run() {
9+ await this.vaultTimeoutService.lock();
10+ process.env.BW_SESSION = null;
11+ const res = new MessageResponse("Your vault is locked.", null);
12+ return Response.success(res);
13+ }
14+}
apps/cli/src/commands/login.command.tsnew file+99
@@ -0,0 +1,99 @@
1+import * as program from "commander";
2+
3+import { ApiService } from "jslib-common/abstractions/api.service";
4+import { AuthService } from "jslib-common/abstractions/auth.service";
5+import { CryptoService } from "jslib-common/abstractions/crypto.service";
6+import { CryptoFunctionService } from "jslib-common/abstractions/cryptoFunction.service";
7+import { EnvironmentService } from "jslib-common/abstractions/environment.service";
8+import { I18nService } from "jslib-common/abstractions/i18n.service";
9+import { KeyConnectorService } from "jslib-common/abstractions/keyConnector.service";
10+import { PasswordGenerationService } from "jslib-common/abstractions/passwordGeneration.service";
11+import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service";
12+import { PolicyService } from "jslib-common/abstractions/policy.service";
13+import { StateService } from "jslib-common/abstractions/state.service";
14+import { SyncService } from "jslib-common/abstractions/sync.service";
15+import { TwoFactorService } from "jslib-common/abstractions/twoFactor.service";
16+import { Utils } from "jslib-common/misc/utils";
17+import { LoginCommand as BaseLoginCommand } from "jslib-node/cli/commands/login.command";
18+import { MessageResponse } from "jslib-node/cli/models/response/messageResponse";
19+
20+export class LoginCommand extends BaseLoginCommand {
21+ private options: program.OptionValues;
22+
23+ constructor(
24+ authService: AuthService,
25+ apiService: ApiService,
26+ cryptoFunctionService: CryptoFunctionService,
27+ i18nService: I18nService,
28+ environmentService: EnvironmentService,
29+ passwordGenerationService: PasswordGenerationService,
30+ platformUtilsService: PlatformUtilsService,
31+ stateService: StateService,
32+ cryptoService: CryptoService,
33+ policyService: PolicyService,
34+ twoFactorService: TwoFactorService,
35+ private syncService: SyncService,
36+ private keyConnectorService: KeyConnectorService,
37+ private logoutCallback: () => Promise<void>
38+ ) {
39+ super(
40+ authService,
41+ apiService,
42+ i18nService,
43+ environmentService,
44+ passwordGenerationService,
45+ cryptoFunctionService,
46+ platformUtilsService,
47+ stateService,
48+ cryptoService,
49+ policyService,
50+ twoFactorService,
51+ "cli"
52+ );
53+ this.logout = this.logoutCallback;
54+ this.validatedParams = async () => {
55+ const key = await cryptoFunctionService.randomBytes(64);
56+ process.env.BW_SESSION = Utils.fromBufferToB64(key);
57+ };
58+ this.success = async () => {
59+ await this.syncService.fullSync(true);
60+
61+ const usesKeyConnector = await this.keyConnectorService.getUsesKeyConnector();
62+
63+ if (
64+ (this.options.sso != null || this.options.apikey != null) &&
65+ this.canInteract &&
66+ !usesKeyConnector
67+ ) {
68+ const res = new MessageResponse(
69+ "You are logged in!",
70+ "\n" + "To unlock your vault, use the `unlock` command. ex:\n" + "$ bw unlock"
71+ );
72+ return res;
73+ } else {
74+ const res = new MessageResponse(
75+ "You are logged in!",
76+ "\n" +
77+ "To unlock your vault, set your session key to the `BW_SESSION` environment variable. ex:\n" +
78+ '$ export BW_SESSION="' +
79+ process.env.BW_SESSION +
80+ '"\n' +
81+ '> $env:BW_SESSION="' +
82+ process.env.BW_SESSION +
83+ '"\n\n' +
84+ "You can also pass the session key to any command with the `--session` option. ex:\n" +
85+ "$ bw list items --session " +
86+ process.env.BW_SESSION
87+ );
88+ res.raw = process.env.BW_SESSION;
89+ return res;
90+ }
91+ };
92+ }
93+
94+ run(email: string, password: string, options: program.OptionValues) {
95+ this.options = options;
96+ this.email = email;
97+ return super.run(email, password, options);
98+ }
99+}
apps/cli/src/commands/restore.command.tsnew file+36
@@ -0,0 +1,36 @@
1+import { CipherService } from "jslib-common/abstractions/cipher.service";
2+import { Response } from "jslib-node/cli/models/response";
3+
4+export class RestoreCommand {
5+ constructor(private cipherService: CipherService) {}
6+
7+ async run(object: string, id: string): Promise<Response> {
8+ if (id != null) {
9+ id = id.toLowerCase();
10+ }
11+
12+ switch (object.toLowerCase()) {
13+ case "item":
14+ return await this.restoreCipher(id);
15+ default:
16+ return Response.badRequest("Unknown object.");
17+ }
18+ }
19+
20+ private async restoreCipher(id: string) {
21+ const cipher = await this.cipherService.get(id);
22+ if (cipher == null) {
23+ return Response.notFound();
24+ }
25+ if (cipher.deletedDate == null) {
26+ return Response.badRequest("Cipher is not in trash.");
27+ }
28+
29+ try {
30+ await this.cipherService.restoreWithServer(id);
31+ return Response.success();
32+ } catch (e) {
33+ return Response.error(e);
34+ }
35+ }
36+}
apps/cli/src/commands/send/create.command.tsnew file+149
@@ -0,0 +1,149 @@
1+import * as fs from "fs";
2+import * as path from "path";
3+
4+import { EnvironmentService } from "jslib-common/abstractions/environment.service";
5+import { SendService } from "jslib-common/abstractions/send.service";
6+import { StateService } from "jslib-common/abstractions/state.service";
7+import { SendType } from "jslib-common/enums/sendType";
8+import { NodeUtils } from "jslib-common/misc/nodeUtils";
9+import { Response } from "jslib-node/cli/models/response";
10+
11+import { SendResponse } from "../../models/response/sendResponse";
12+import { SendTextResponse } from "../../models/response/sendTextResponse";
13+import { CliUtils } from "../../utils";
14+
15+export class SendCreateCommand {
16+ constructor(
17+ private sendService: SendService,
18+ private stateService: StateService,
19+ private environmentService: EnvironmentService
20+ ) {}
21+
22+ async run(requestJson: any, cmdOptions: Record<string, any>) {
23+ let req: any = null;
24+ if (process.env.BW_SERVE !== "true" && (requestJson == null || requestJson === "")) {
25+ requestJson = await CliUtils.readStdin();
26+ }
27+
28+ if (requestJson == null || requestJson === "") {
29+ return Response.badRequest("`requestJson` was not provided.");
30+ }
31+
32+ if (typeof requestJson !== "string") {
33+ req = requestJson;
34+ req.deletionDate = req.deletionDate == null ? null : new Date(req.deletionDate);
35+ req.expirationDate = req.expirationDate == null ? null : new Date(req.expirationDate);
36+ } else {
37+ try {
38+ const reqJson = Buffer.from(requestJson, "base64").toString();
39+ req = SendResponse.fromJson(reqJson);
40+
41+ if (req == null) {
42+ throw new Error("Null request");
43+ }
44+ } catch (e) {
45+ return Response.badRequest("Error parsing the encoded request data.");
46+ }
47+ }
48+
49+ if (
50+ req.deletionDate == null ||
51+ isNaN(new Date(req.deletionDate).getTime()) ||
52+ new Date(req.deletionDate) <= new Date()
53+ ) {
54+ return Response.badRequest("Must specify a valid deletion date after the current time");
55+ }
56+
57+ if (req.expirationDate != null && isNaN(new Date(req.expirationDate).getTime())) {
58+ return Response.badRequest("Unable to parse expirationDate: " + req.expirationDate);
59+ }
60+
61+ const normalizedOptions = new Options(cmdOptions);
62+ return this.createSend(req, normalizedOptions);
63+ }
64+
65+ private async createSend(req: SendResponse, options: Options) {
66+ const filePath = req.file?.fileName ?? options.file;
67+ const text = req.text?.text ?? options.text;
68+ const hidden = req.text?.hidden ?? options.hidden;
69+ const password = req.password ?? options.password;
70+ const maxAccessCount = req.maxAccessCount ?? options.maxAccessCount;
71+
72+ req.key = null;
73+ req.maxAccessCount = maxAccessCount;
74+
75+ switch (req.type) {
76+ case SendType.File:
77+ if (process.env.BW_SERVE === "true") {
78+ return Response.error(
79+ "Creating a file-based Send is unsupported through the `serve` command at this time."
80+ );
81+ }
82+
83+ if (!(await this.stateService.getCanAccessPremium())) {
84+ return Response.error("Premium status is required to use this feature.");
85+ }
86+
87+ if (filePath == null) {
88+ return Response.badRequest(
89+ "Must specify a file to Send either with the --file option or in the request JSON."
90+ );
91+ }
92+
93+ req.file.fileName = path.basename(filePath);
94+ break;
95+ case SendType.Text:
96+ if (text == null) {
97+ return Response.badRequest(
98+ "Must specify text content to Send either with the --text option or in the request JSON."
99+ );
100+ }
101+ req.text = new SendTextResponse();
102+ req.text.text = text;
103+ req.text.hidden = hidden;
104+ break;
105+ default:
106+ return Response.badRequest(
107+ "Unknown Send type " + SendType[req.type] + ". Valid types are: file, text"
108+ );
109+ }
110+
111+ try {
112+ let fileBuffer: ArrayBuffer = null;
113+ if (req.type === SendType.File) {
114+ fileBuffer = NodeUtils.bufferToArrayBuffer(fs.readFileSync(filePath));
115+ }
116+
117+ const sendView = SendResponse.toView(req);
118+ const [encSend, fileData] = await this.sendService.encrypt(sendView, fileBuffer, password);
119+ // Add dates from template
120+ encSend.deletionDate = sendView.deletionDate;
121+ encSend.expirationDate = sendView.expirationDate;
122+
123+ await this.sendService.saveWithServer([encSend, fileData]);
124+ const newSend = await this.sendService.get(encSend.id);
125+ const decSend = await newSend.decrypt();
126+ const res = new SendResponse(decSend, this.environmentService.getWebVaultUrl());
127+ return Response.success(res);
128+ } catch (e) {
129+ return Response.error(e);
130+ }
131+ }
132+}
133+
134+class Options {
135+ file: string;
136+ text: string;
137+ maxAccessCount: number;
138+ password: string;
139+ hidden: boolean;
140+
141+ constructor(passedOptions: Record<string, any>) {
142+ this.file = passedOptions?.file;
143+ this.text = passedOptions?.text;
144+ this.password = passedOptions?.password;
145+ this.hidden = CliUtils.convertBooleanOption(passedOptions?.hidden);
146+ this.maxAccessCount =
147+ passedOptions?.maxAccessCount != null ? parseInt(passedOptions.maxAccessCount, null) : null;
148+ }
149+}
apps/cli/src/commands/send/delete.command.tsnew file+21
@@ -0,0 +1,21 @@
1+import { SendService } from "jslib-common/abstractions/send.service";
2+import { Response } from "jslib-node/cli/models/response";
3+
4+export class SendDeleteCommand {
5+ constructor(private sendService: SendService) {}
6+
7+ async run(id: string) {
8+ const send = await this.sendService.get(id);
9+
10+ if (send == null) {
11+ return Response.notFound();
12+ }
13+
14+ try {
15+ await this.sendService.deleteWithServer(id);
16+ return Response.success();
17+ } catch (e) {
18+ return Response.error(e);
19+ }
20+ }
21+}
apps/cli/src/commands/send/edit.command.tsnew file+90
@@ -0,0 +1,90 @@
1+import { SendService } from "jslib-common/abstractions/send.service";
2+import { StateService } from "jslib-common/abstractions/state.service";
3+import { SendType } from "jslib-common/enums/sendType";
4+import { Response } from "jslib-node/cli/models/response";
5+
6+import { SendResponse } from "../../models/response/sendResponse";
7+import { CliUtils } from "../../utils";
8+
9+import { SendGetCommand } from "./get.command";
10+
11+export class SendEditCommand {
12+ constructor(
13+ private sendService: SendService,
14+ private stateService: StateService,
15+ private getCommand: SendGetCommand
16+ ) {}
17+
18+ async run(requestJson: string, cmdOptions: Record<string, any>): Promise<Response> {
19+ if (process.env.BW_SERVE !== "true" && (requestJson == null || requestJson === "")) {
20+ requestJson = await CliUtils.readStdin();
21+ }
22+
23+ if (requestJson == null || requestJson === "") {
24+ return Response.badRequest("`requestJson` was not provided.");
25+ }
26+
27+ let req: SendResponse = null;
28+ if (typeof requestJson !== "string") {
29+ req = requestJson;
30+ req.deletionDate = req.deletionDate == null ? null : new Date(req.deletionDate);
31+ req.expirationDate = req.expirationDate == null ? null : new Date(req.expirationDate);
32+ } else {
33+ try {
34+ const reqJson = Buffer.from(requestJson, "base64").toString();
35+ req = SendResponse.fromJson(reqJson);
36+ } catch (e) {
37+ return Response.badRequest("Error parsing the encoded request data.");
38+ }
39+ }
40+
41+ const normalizedOptions = new Options(cmdOptions);
42+ req.id = normalizedOptions.itemId || req.id;
43+
44+ if (req.id != null) {
45+ req.id = req.id.toLowerCase();
46+ }
47+
48+ const send = await this.sendService.get(req.id);
49+
50+ if (send == null) {
51+ return Response.notFound();
52+ }
53+
54+ if (send.type !== req.type) {
55+ return Response.badRequest("Cannot change a Send's type");
56+ }
57+
58+ if (send.type === SendType.File && !(await this.stateService.getCanAccessPremium())) {
59+ return Response.error("Premium status is required to use this feature.");
60+ }
61+
62+ let sendView = await send.decrypt();
63+ sendView = SendResponse.toView(req, sendView);
64+
65+ if (typeof req.password !== "string" || req.password === "") {
66+ req.password = null;
67+ }
68+
69+ try {
70+ const [encSend, encFileData] = await this.sendService.encrypt(sendView, null, req.password);
71+ // Add dates from template
72+ encSend.deletionDate = sendView.deletionDate;
73+ encSend.expirationDate = sendView.expirationDate;
74+
75+ await this.sendService.saveWithServer([encSend, encFileData]);
76+ } catch (e) {
77+ return Response.error(e);
78+ }
79+
80+ return await this.getCommand.run(send.id, {});
81+ }
82+}
83+
84+class Options {
85+ itemId: string;
86+
87+ constructor(passedOptions: Record<string, any>) {
88+ this.itemId = passedOptions?.itemId || passedOptions?.itemid;
89+ }
90+}
apps/cli/src/commands/send/get.command.tsnew file+83
@@ -0,0 +1,83 @@
1+import * as program from "commander";
2+
3+import { CryptoService } from "jslib-common/abstractions/crypto.service";
4+import { EnvironmentService } from "jslib-common/abstractions/environment.service";
5+import { SearchService } from "jslib-common/abstractions/search.service";
6+import { SendService } from "jslib-common/abstractions/send.service";
7+import { Utils } from "jslib-common/misc/utils";
8+import { SendView } from "jslib-common/models/view/sendView";
9+import { Response } from "jslib-node/cli/models/response";
10+
11+import { SendResponse } from "../../models/response/sendResponse";
12+import { DownloadCommand } from "../download.command";
13+
14+export class SendGetCommand extends DownloadCommand {
15+ constructor(
16+ private sendService: SendService,
17+ private environmentService: EnvironmentService,
18+ private searchService: SearchService,
19+ cryptoService: CryptoService
20+ ) {
21+ super(cryptoService);
22+ }
23+
24+ async run(id: string, options: program.OptionValues) {
25+ const serveCommand = process.env.BW_SERVE === "true";
26+ if (serveCommand && !Utils.isGuid(id)) {
27+ return Response.badRequest("`" + id + "` is not a GUID.");
28+ }
29+
30+ let sends = await this.getSendView(id);
31+ if (sends == null) {
32+ return Response.notFound();
33+ }
34+
35+ const webVaultUrl = this.environmentService.getWebVaultUrl();
36+ let filter = (s: SendView) => true;
37+ let selector = async (s: SendView): Promise<Response> =>
38+ Response.success(new SendResponse(s, webVaultUrl));
39+ if (!serveCommand && options?.text != null) {
40+ filter = (s) => {
41+ return filter(s) && s.text != null;
42+ };
43+ selector = async (s) => {
44+ // Write to stdout and response success so we get the text string only to stdout
45+ process.stdout.write(s.text.text);
46+ return Response.success();
47+ };
48+ }
49+
50+ if (Array.isArray(sends)) {
51+ if (filter != null) {
52+ sends = sends.filter(filter);
53+ }
54+ if (sends.length > 1) {
55+ return Response.multipleResults(sends.map((s) => s.id));
56+ }
57+ if (sends.length > 0) {
58+ return selector(sends[0]);
59+ } else {
60+ return Response.notFound();
61+ }
62+ }
63+
64+ return selector(sends);
65+ }
66+
67+ private async getSendView(id: string): Promise<SendView | SendView[]> {
68+ if (Utils.isGuid(id)) {
69+ const send = await this.sendService.get(id);
70+ if (send != null) {
71+ return await send.decrypt();
72+ }
73+ } else if (id.trim() !== "") {
74+ let sends = await this.sendService.getAllDecrypted();
75+ sends = this.searchService.searchSends(sends, id);
76+ if (sends.length > 1) {
77+ return sends;
78+ } else if (sends.length > 0) {
79+ return sends[0];
80+ }
81+ }
82+ }
83+}
apps/cli/src/commands/send/list.command.tsnew file+36
@@ -0,0 +1,36 @@
1+import { EnvironmentService } from "jslib-common/abstractions/environment.service";
2+import { SearchService } from "jslib-common/abstractions/search.service";
3+import { SendService } from "jslib-common/abstractions/send.service";
4+import { Response } from "jslib-node/cli/models/response";
5+import { ListResponse } from "jslib-node/cli/models/response/listResponse";
6+
7+import { SendResponse } from "../..//models/response/sendResponse";
8+
9+export class SendListCommand {
10+ constructor(
11+ private sendService: SendService,
12+ private environmentService: EnvironmentService,
13+ private searchService: SearchService
14+ ) {}
15+
16+ async run(cmdOptions: Record<string, any>): Promise<Response> {
17+ let sends = await this.sendService.getAllDecrypted();
18+
19+ const normalizedOptions = new Options(cmdOptions);
20+ if (normalizedOptions.search != null && normalizedOptions.search.trim() !== "") {
21+ sends = this.searchService.searchSends(sends, normalizedOptions.search);
22+ }
23+
24+ const webVaultUrl = this.environmentService.getWebVaultUrl();
25+ const res = new ListResponse(sends.map((s) => new SendResponse(s, webVaultUrl)));
26+ return Response.success(res);
27+ }
28+}
29+
30+class Options {
31+ search: string;
32+
33+ constructor(passedOptions: Record<string, any>) {
34+ this.search = passedOptions?.search;
35+ }
36+}
apps/cli/src/commands/send/receive.command.tsnew file+170
@@ -0,0 +1,170 @@
1+import * as program from "commander";
2+import * as inquirer from "inquirer";
3+
4+import { ApiService } from "jslib-common/abstractions/api.service";
5+import { CryptoService } from "jslib-common/abstractions/crypto.service";
6+import { CryptoFunctionService } from "jslib-common/abstractions/cryptoFunction.service";
7+import { EnvironmentService } from "jslib-common/abstractions/environment.service";
8+import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service";
9+import { SendType } from "jslib-common/enums/sendType";
10+import { NodeUtils } from "jslib-common/misc/nodeUtils";
11+import { Utils } from "jslib-common/misc/utils";
12+import { SendAccess } from "jslib-common/models/domain/sendAccess";
13+import { SymmetricCryptoKey } from "jslib-common/models/domain/symmetricCryptoKey";
14+import { SendAccessRequest } from "jslib-common/models/request/sendAccessRequest";
15+import { ErrorResponse } from "jslib-common/models/response/errorResponse";
16+import { SendAccessView } from "jslib-common/models/view/sendAccessView";
17+import { Response } from "jslib-node/cli/models/response";
18+
19+import { SendAccessResponse } from "../../models/response/sendAccessResponse";
20+import { DownloadCommand } from "../download.command";
21+
22+export class SendReceiveCommand extends DownloadCommand {
23+ private canInteract: boolean;
24+ private decKey: SymmetricCryptoKey;
25+ private sendAccessRequest: SendAccessRequest;
26+
27+ constructor(
28+ private apiService: ApiService,
29+ cryptoService: CryptoService,
30+ private cryptoFunctionService: CryptoFunctionService,
31+ private platformUtilsService: PlatformUtilsService,
32+ private environmentService: EnvironmentService
33+ ) {
34+ super(cryptoService);
35+ }
36+
37+ async run(url: string, options: program.OptionValues): Promise<Response> {
38+ this.canInteract = process.env.BW_NOINTERACTION !== "true";
39+
40+ let urlObject: URL;
41+ try {
42+ urlObject = new URL(url);
43+ } catch (e) {
44+ return Response.badRequest("Failed to parse the provided Send url");
45+ }
46+
47+ const apiUrl = this.getApiUrl(urlObject);
48+ const [id, key] = this.getIdAndKey(urlObject);
49+
50+ if (Utils.isNullOrWhitespace(id) || Utils.isNullOrWhitespace(key)) {
51+ return Response.badRequest("Failed to parse url, the url provided is not a valid Send url");
52+ }
53+
54+ const keyArray = Utils.fromUrlB64ToArray(key);
55+ this.sendAccessRequest = new SendAccessRequest();
56+
57+ let password = options.password;
58+ if (password == null || password === "") {
59+ if (options.passwordfile) {
60+ password = await NodeUtils.readFirstLine(options.passwordfile);
61+ } else if (options.passwordenv && process.env[options.passwordenv]) {
62+ password = process.env[options.passwordenv];
63+ }
64+ }
65+
66+ if (password != null && password !== "") {
67+ this.sendAccessRequest.password = await this.getUnlockedPassword(password, keyArray);
68+ }
69+
70+ const response = await this.sendRequest(apiUrl, id, keyArray);
71+
72+ if (response instanceof Response) {
73+ // Error scenario
74+ return response;
75+ }
76+
77+ if (options.obj != null) {
78+ return Response.success(new SendAccessResponse(response));
79+ }
80+
81+ switch (response.type) {
82+ case SendType.Text:
83+ // Write to stdout and response success so we get the text string only to stdout
84+ process.stdout.write(response?.text?.text);
85+ return Response.success();
86+ case SendType.File: {
87+ const downloadData = await this.apiService.getSendFileDownloadData(
88+ response,
89+ this.sendAccessRequest,
90+ apiUrl
91+ );
92+ return await this.saveAttachmentToFile(
93+ downloadData.url,
94+ this.decKey,
95+ response?.file?.fileName,
96+ options.output
97+ );
98+ }
99+ default:
100+ return Response.success(new SendAccessResponse(response));
101+ }
102+ }
103+
104+ private getIdAndKey(url: URL): [string, string] {
105+ const result = url.hash.slice(1).split("/").slice(-2);
106+ return [result[0], result[1]];
107+ }
108+
109+ private getApiUrl(url: URL) {
110+ const urls = this.environmentService.getUrls();
111+ if (url.origin === "https://send.bitwarden.com") {
112+ return "https://vault.bitwarden.com/api";
113+ } else if (url.origin === urls.api) {
114+ return url.origin;
115+ } else if (this.platformUtilsService.isDev() && url.origin === urls.webVault) {
116+ return urls.api;
117+ } else {
118+ return url.origin + "/api";
119+ }
120+ }
121+
122+ private async getUnlockedPassword(password: string, keyArray: ArrayBuffer) {
123+ const passwordHash = await this.cryptoFunctionService.pbkdf2(
124+ password,
125+ keyArray,
126+ "sha256",
127+ 100000
128+ );
129+ return Utils.fromBufferToB64(passwordHash);
130+ }
131+
132+ private async sendRequest(
133+ url: string,
134+ id: string,
135+ key: ArrayBuffer
136+ ): Promise<Response | SendAccessView> {
137+ try {
138+ const sendResponse = await this.apiService.postSendAccess(id, this.sendAccessRequest, url);
139+
140+ const sendAccess = new SendAccess(sendResponse);
141+ this.decKey = await this.cryptoService.makeSendKey(key);
142+ return await sendAccess.decrypt(this.decKey);
143+ } catch (e) {
144+ if (e instanceof ErrorResponse) {
145+ if (e.statusCode === 401) {
146+ if (this.canInteract) {
147+ const answer: inquirer.Answers = await inquirer.createPromptModule({
148+ output: process.stderr,
149+ })({
150+ type: "password",
151+ name: "password",
152+ message: "Send password:",
153+ });
154+
155+ // reattempt with new password
156+ this.sendAccessRequest.password = await this.getUnlockedPassword(answer.password, key);
157+ return await this.sendRequest(url, id, key);
158+ }
159+
160+ return Response.badRequest("Incorrect or missing password");
161+ } else if (e.statusCode === 405) {
162+ return Response.badRequest("Bad Request");
163+ } else if (e.statusCode === 404) {
164+ return Response.notFound();
165+ }
166+ }
167+ return Response.error(e);
168+ }
169+ }
170+}
apps/cli/src/commands/send/removePassword.command.tsnew file+21
@@ -0,0 +1,21 @@
1+import { SendService } from "jslib-common/abstractions/send.service";
2+import { Response } from "jslib-node/cli/models/response";
3+
4+import { SendResponse } from "../../models/response/sendResponse";
5+
6+export class SendRemovePasswordCommand {
7+ constructor(private sendService: SendService) {}
8+
9+ async run(id: string) {
10+ try {
11+ await this.sendService.removePasswordWithServer(id);
12+
13+ const updatedSend = await this.sendService.get(id);
14+ const decSend = await updatedSend.decrypt();
15+ const res = new SendResponse(decSend);
16+ return Response.success(res);
17+ } catch (e) {
18+ return Response.error(e);
19+ }
20+ }
21+}
apps/cli/src/commands/serve.command.tsnew file+394
@@ -0,0 +1,394 @@
1+import * as koaMulter from "@koa/multer";
2+import * as koaRouter from "@koa/router";
3+import * as program from "commander";
4+import * as koa from "koa";
5+import * as koaBodyParser from "koa-bodyparser";
6+import * as koaJson from "koa-json";
7+
8+import { KeySuffixOptions } from "jslib-common/enums/keySuffixOptions";
9+import { Response } from "jslib-node/cli/models/response";
10+import { FileResponse } from "jslib-node/cli/models/response/fileResponse";
11+
12+import { Main } from "../bw";
13+
14+import { ConfirmCommand } from "./confirm.command";
15+import { CreateCommand } from "./create.command";
16+import { DeleteCommand } from "./delete.command";
17+import { EditCommand } from "./edit.command";
18+import { GenerateCommand } from "./generate.command";
19+import { GetCommand } from "./get.command";
20+import { ListCommand } from "./list.command";
21+import { LockCommand } from "./lock.command";
22+import { RestoreCommand } from "./restore.command";
23+import { SendCreateCommand } from "./send/create.command";
24+import { SendDeleteCommand } from "./send/delete.command";
25+import { SendEditCommand } from "./send/edit.command";
26+import { SendGetCommand } from "./send/get.command";
27+import { SendListCommand } from "./send/list.command";
28+import { SendRemovePasswordCommand } from "./send/removePassword.command";
29+import { ShareCommand } from "./share.command";
30+import { StatusCommand } from "./status.command";
31+import { SyncCommand } from "./sync.command";
32+import { UnlockCommand } from "./unlock.command";
33+
34+export class ServeCommand {
35+ private listCommand: ListCommand;
36+ private getCommand: GetCommand;
37+ private createCommand: CreateCommand;
38+ private editCommand: EditCommand;
39+ private generateCommand: GenerateCommand;
40+ private shareCommand: ShareCommand;
41+ private statusCommand: StatusCommand;
42+ private syncCommand: SyncCommand;
43+ private deleteCommand: DeleteCommand;
44+ private confirmCommand: ConfirmCommand;
45+ private restoreCommand: RestoreCommand;
46+ private lockCommand: LockCommand;
47+ private unlockCommand: UnlockCommand;
48+
49+ private sendCreateCommand: SendCreateCommand;
50+ private sendDeleteCommand: SendDeleteCommand;
51+ private sendEditCommand: SendEditCommand;
52+ private sendGetCommand: SendGetCommand;
53+ private sendListCommand: SendListCommand;
54+ private sendRemovePasswordCommand: SendRemovePasswordCommand;
55+
56+ constructor(protected main: Main) {
57+ this.getCommand = new GetCommand(
58+ this.main.cipherService,
59+ this.main.folderService,
60+ this.main.collectionService,
61+ this.main.totpService,
62+ this.main.auditService,
63+ this.main.cryptoService,
64+ this.main.stateService,
65+ this.main.searchService,
66+ this.main.apiService,
67+ this.main.organizationService
68+ );
69+ this.listCommand = new ListCommand(
70+ this.main.cipherService,
71+ this.main.folderService,
72+ this.main.collectionService,
73+ this.main.organizationService,
74+ this.main.searchService,
75+ this.main.apiService
76+ );
77+ this.createCommand = new CreateCommand(
78+ this.main.cipherService,
79+ this.main.folderService,
80+ this.main.stateService,
81+ this.main.cryptoService,
82+ this.main.apiService
83+ );
84+ this.editCommand = new EditCommand(
85+ this.main.cipherService,
86+ this.main.folderService,
87+ this.main.cryptoService,
88+ this.main.apiService
89+ );
90+ this.generateCommand = new GenerateCommand(
91+ this.main.passwordGenerationService,
92+ this.main.stateService
93+ );
94+ this.syncCommand = new SyncCommand(this.main.syncService);
95+ this.statusCommand = new StatusCommand(
96+ this.main.environmentService,
97+ this.main.syncService,
98+ this.main.stateService,
99+ this.main.authService
100+ );
101+ this.deleteCommand = new DeleteCommand(
102+ this.main.cipherService,
103+ this.main.folderService,
104+ this.main.stateService,
105+ this.main.apiService
106+ );
107+ this.confirmCommand = new ConfirmCommand(this.main.apiService, this.main.cryptoService);
108+ this.restoreCommand = new RestoreCommand(this.main.cipherService);
109+ this.shareCommand = new ShareCommand(this.main.cipherService);
110+ this.lockCommand = new LockCommand(this.main.vaultTimeoutService);
111+ this.unlockCommand = new UnlockCommand(
112+ this.main.cryptoService,
113+ this.main.stateService,
114+ this.main.cryptoFunctionService,
115+ this.main.apiService,
116+ this.main.logService,
117+ this.main.keyConnectorService,
118+ this.main.environmentService,
119+ this.main.syncService,
120+ async () => await this.main.logout()
121+ );
122+
123+ this.sendCreateCommand = new SendCreateCommand(
124+ this.main.sendService,
125+ this.main.stateService,
126+ this.main.environmentService
127+ );
128+ this.sendDeleteCommand = new SendDeleteCommand(this.main.sendService);
129+ this.sendGetCommand = new SendGetCommand(
130+ this.main.sendService,
131+ this.main.environmentService,
132+ this.main.searchService,
133+ this.main.cryptoService
134+ );
135+ this.sendEditCommand = new SendEditCommand(
136+ this.main.sendService,
137+ this.main.stateService,
138+ this.sendGetCommand
139+ );
140+ this.sendListCommand = new SendListCommand(
141+ this.main.sendService,
142+ this.main.environmentService,
143+ this.main.searchService
144+ );
145+ this.sendRemovePasswordCommand = new SendRemovePasswordCommand(this.main.sendService);
146+ }
147+
148+ async run(options: program.OptionValues) {
149+ const port = options.port || 8087;
150+ const hostname = options.hostname || "localhost";
151+ const server = new koa();
152+ const router = new koaRouter();
153+ process.env.BW_SERVE = "true";
154+ process.env.BW_NOINTERACTION = "true";
155+
156+ server.use(koaBodyParser()).use(koaJson({ pretty: false, param: "pretty" }));
157+
158+ router.get("/generate", async (ctx, next) => {
159+ const response = await this.generateCommand.run(ctx.request.query);
160+ this.processResponse(ctx.response, response);
161+ await next();
162+ });
163+
164+ router.get("/status", async (ctx, next) => {
165+ const response = await this.statusCommand.run();
166+ this.processResponse(ctx.response, response);
167+ await next();
168+ });
169+
170+ router.get("/list/object/:object", async (ctx, next) => {
171+ if (await this.errorIfLocked(ctx.response)) {
172+ await next();
173+ return;
174+ }
175+ let response: Response = null;
176+ if (ctx.params.object === "send") {
177+ response = await this.sendListCommand.run(ctx.request.query);
178+ } else {
179+ response = await this.listCommand.run(ctx.params.object, ctx.request.query);
180+ }
181+ this.processResponse(ctx.response, response);
182+ await next();
183+ });
184+
185+ router.get("/send/list", async (ctx, next) => {
186+ if (await this.errorIfLocked(ctx.response)) {
187+ await next();
188+ return;
189+ }
190+ const response = await this.sendListCommand.run(ctx.request.query);
191+ this.processResponse(ctx.response, response);
192+ await next();
193+ });
194+
195+ router.post("/sync", async (ctx, next) => {
196+ const response = await this.syncCommand.run(ctx.request.query);
197+ this.processResponse(ctx.response, response);
198+ await next();
199+ });
200+
201+ router.post("/lock", async (ctx, next) => {
202+ const response = await this.lockCommand.run();
203+ this.processResponse(ctx.response, response);
204+ await next();
205+ });
206+
207+ router.post("/unlock", async (ctx, next) => {
208+ const response = await this.unlockCommand.run(
209+ ctx.request.body.password == null ? null : (ctx.request.body.password as string),
210+ ctx.request.query
211+ );
212+ this.processResponse(ctx.response, response);
213+ await next();
214+ });
215+
216+ router.post("/confirm/:object/:id", async (ctx, next) => {
217+ if (await this.errorIfLocked(ctx.response)) {
218+ await next();
219+ return;
220+ }
221+ const response = await this.confirmCommand.run(
222+ ctx.params.object,
223+ ctx.params.id,
224+ ctx.request.query
225+ );
226+ this.processResponse(ctx.response, response);
227+ await next();
228+ });
229+
230+ router.post("/restore/:object/:id", async (ctx, next) => {
231+ if (await this.errorIfLocked(ctx.response)) {
232+ await next();
233+ return;
234+ }
235+ const response = await this.restoreCommand.run(ctx.params.object, ctx.params.id);
236+ this.processResponse(ctx.response, response);
237+ await next();
238+ });
239+
240+ router.post("/move/:id/:organizationId", async (ctx, next) => {
241+ if (await this.errorIfLocked(ctx.response)) {
242+ await next();
243+ return;
244+ }
245+ const response = await this.shareCommand.run(
246+ ctx.params.id,
247+ ctx.params.organizationId,
248+ ctx.request.body // TODO: Check the format of this body for an array of collection ids
249+ );
250+ this.processResponse(ctx.response, response);
251+ await next();
252+ });
253+
254+ router.post("/attachment", koaMulter().single("file"), async (ctx, next) => {
255+ if (await this.errorIfLocked(ctx.response)) {
256+ await next();
257+ return;
258+ }
259+ const response = await this.createCommand.run(
260+ "attachment",
261+ ctx.request.body,
262+ ctx.request.query,
263+ {
264+ fileBuffer: ctx.request.file.buffer,
265+ fileName: ctx.request.file.originalname,
266+ }
267+ );
268+ this.processResponse(ctx.response, response);
269+ await next();
270+ });
271+
272+ router.post("/send/:id/remove-password", async (ctx, next) => {
273+ if (await this.errorIfLocked(ctx.response)) {
274+ await next();
275+ return;
276+ }
277+ const response = await this.sendRemovePasswordCommand.run(ctx.params.id);
278+ this.processResponse(ctx.response, response);
279+ await next();
280+ });
281+
282+ router.post("/object/:object", async (ctx, next) => {
283+ if (await this.errorIfLocked(ctx.response)) {
284+ await next();
285+ return;
286+ }
287+ let response: Response = null;
288+ if (ctx.params.object === "send") {
289+ response = await this.sendCreateCommand.run(ctx.request.body, ctx.request.query);
290+ } else {
291+ response = await this.createCommand.run(
292+ ctx.params.object,
293+ ctx.request.body,
294+ ctx.request.query
295+ );
296+ }
297+ this.processResponse(ctx.response, response);
298+ await next();
299+ });
300+
301+ router.put("/object/:object/:id", async (ctx, next) => {
302+ if (await this.errorIfLocked(ctx.response)) {
303+ await next();
304+ return;
305+ }
306+ let response: Response = null;
307+ if (ctx.params.object === "send") {
308+ ctx.request.body.id = ctx.params.id;
309+ response = await this.sendEditCommand.run(ctx.request.body, ctx.request.query);
310+ } else {
311+ response = await this.editCommand.run(
312+ ctx.params.object,
313+ ctx.params.id,
314+ ctx.request.body,
315+ ctx.request.query
316+ );
317+ }
318+ this.processResponse(ctx.response, response);
319+ await next();
320+ });
321+
322+ router.get("/object/:object/:id", async (ctx, next) => {
323+ if (await this.errorIfLocked(ctx.response)) {
324+ await next();
325+ return;
326+ }
327+ let response: Response = null;
328+ if (ctx.params.object === "send") {
329+ response = await this.sendGetCommand.run(ctx.params.id, null);
330+ } else {
331+ response = await this.getCommand.run(ctx.params.object, ctx.params.id, ctx.request.query);
332+ }
333+ this.processResponse(ctx.response, response);
334+ await next();
335+ });
336+
337+ router.delete("/object/:object/:id", async (ctx, next) => {
338+ if (await this.errorIfLocked(ctx.response)) {
339+ await next();
340+ return;
341+ }
342+ let response: Response = null;
343+ if (ctx.params.object === "send") {
344+ response = await this.sendDeleteCommand.run(ctx.params.id);
345+ } else {
346+ response = await this.deleteCommand.run(
347+ ctx.params.object,
348+ ctx.params.id,
349+ ctx.request.query
350+ );
351+ }
352+ this.processResponse(ctx.response, response);
353+ await next();
354+ });
355+
356+ server
357+ .use(router.routes())
358+ .use(router.allowedMethods())
359+ .listen(port, hostname === "all" ? null : hostname, () => {
360+ this.main.logService.info("Listening on " + hostname + ":" + port);
361+ });
362+ }
363+
364+ private processResponse(res: koa.Response, commandResponse: Response) {
365+ if (!commandResponse.success) {
366+ res.status = 400;
367+ }
368+ if (commandResponse.data instanceof FileResponse) {
369+ res.body = commandResponse.data.data;
370+ res.attachment(commandResponse.data.fileName);
371+ res.set("Content-Type", "application/octet-stream");
372+ res.set("Content-Length", commandResponse.data.data.length.toString());
373+ } else {
374+ res.body = commandResponse;
375+ }
376+ }
377+
378+ private async errorIfLocked(res: koa.Response) {
379+ const authed = await this.main.stateService.getIsAuthenticated();
380+ if (!authed) {
381+ this.processResponse(res, Response.error("You are not logged in."));
382+ return true;
383+ }
384+ if (await this.main.cryptoService.hasKeyInMemory()) {
385+ return false;
386+ } else if (await this.main.cryptoService.hasKeyStored(KeySuffixOptions.Auto)) {
387+ // load key into memory
388+ await this.main.cryptoService.getKey();
389+ return false;
390+ }
391+ this.processResponse(res, Response.error("Vault is locked."));
392+ return true;
393+ }
394+}
apps/cli/src/commands/share.command.tsnew file+59
@@ -0,0 +1,59 @@
1+import { CipherService } from "jslib-common/abstractions/cipher.service";
2+import { Response } from "jslib-node/cli/models/response";
3+
4+import { CipherResponse } from "../models/response/cipherResponse";
5+import { CliUtils } from "../utils";
6+
7+export class ShareCommand {
8+ constructor(private cipherService: CipherService) {}
9+
10+ async run(id: string, organizationId: string, requestJson: string): Promise<Response> {
11+ if (process.env.BW_SERVE !== "true" && (requestJson == null || requestJson === "")) {
12+ requestJson = await CliUtils.readStdin();
13+ }
14+
15+ if (requestJson == null || requestJson === "") {
16+ return Response.badRequest("`requestJson` was not provided.");
17+ }
18+
19+ let req: string[] = [];
20+ if (typeof requestJson !== "string") {
21+ req = requestJson;
22+ } else {
23+ try {
24+ const reqJson = Buffer.from(requestJson, "base64").toString();
25+ req = JSON.parse(reqJson);
26+ if (req == null || req.length === 0) {
27+ return Response.badRequest("You must provide at least one collection id for this item.");
28+ }
29+ } catch (e) {
30+ return Response.badRequest("Error parsing the encoded request data.");
31+ }
32+ }
33+
34+ if (id != null) {
35+ id = id.toLowerCase();
36+ }
37+ if (organizationId != null) {
38+ organizationId = organizationId.toLowerCase();
39+ }
40+
41+ const cipher = await this.cipherService.get(id);
42+ if (cipher == null) {
43+ return Response.notFound();
44+ }
45+ if (cipher.organizationId != null) {
46+ return Response.badRequest("This item already belongs to an organization.");
47+ }
48+ const cipherView = await cipher.decrypt();
49+ try {
50+ await this.cipherService.shareWithServer(cipherView, organizationId, req);
51+ const updatedCipher = await this.cipherService.get(cipher.id);
52+ const decCipher = await updatedCipher.decrypt();
53+ const res = new CipherResponse(decCipher);
54+ return Response.success(res);
55+ } catch (e) {
56+ return Response.error(e);
57+ }
58+ }
59+}
apps/cli/src/commands/status.command.tsnew file+54
@@ -0,0 +1,54 @@
1+import { AuthService } from "jslib-common/abstractions/auth.service";
2+import { EnvironmentService } from "jslib-common/abstractions/environment.service";
3+import { StateService } from "jslib-common/abstractions/state.service";
4+import { SyncService } from "jslib-common/abstractions/sync.service";
5+import { AuthenticationStatus } from "jslib-common/enums/authenticationStatus";
6+import { Response } from "jslib-node/cli/models/response";
7+
8+import { TemplateResponse } from "../models/response/templateResponse";
9+
10+export class StatusCommand {
11+ constructor(
12+ private envService: EnvironmentService,
13+ private syncService: SyncService,
14+ private stateService: StateService,
15+ private authService: AuthService
16+ ) {}
17+
18+ async run(): Promise<Response> {
19+ try {
20+ const baseUrl = this.baseUrl();
21+ const status = await this.status();
22+ const lastSync = await this.syncService.getLastSync();
23+ const userId = await this.stateService.getUserId();
24+ const email = await this.stateService.getEmail();
25+
26+ return Response.success(
27+ new TemplateResponse({
28+ serverUrl: baseUrl,
29+ lastSync: lastSync,
30+ userEmail: email,
31+ userId: userId,
32+ status: status,
33+ })
34+ );
35+ } catch (e) {
36+ return Response.error(e);
37+ }
38+ }
39+
40+ private baseUrl(): string {
41+ return this.envService.getUrls().base;
42+ }
43+
44+ private async status(): Promise<"unauthenticated" | "locked" | "unlocked"> {
45+ const authStatus = await this.authService.getAuthStatus();
46+ if (authStatus === AuthenticationStatus.Unlocked) {
47+ return "unlocked";
48+ } else if (authStatus === AuthenticationStatus.Locked) {
49+ return "locked";
50+ } else {
51+ return "unauthenticated";
52+ }
53+ }
54+}
apps/cli/src/commands/sync.command.tsnew file+41
@@ -0,0 +1,41 @@
1+import { SyncService } from "jslib-common/abstractions/sync.service";
2+import { Response } from "jslib-node/cli/models/response";
3+import { MessageResponse } from "jslib-node/cli/models/response/messageResponse";
4+import { StringResponse } from "jslib-node/cli/models/response/stringResponse";
5+
6+import { CliUtils } from "src/utils";
7+
8+export class SyncCommand {
9+ constructor(private syncService: SyncService) {}
10+
11+ async run(cmdOptions: Record<string, any>): Promise<Response> {
12+ const normalizedOptions = new Options(cmdOptions);
13+ if (normalizedOptions.last) {
14+ return await this.getLastSync();
15+ }
16+
17+ try {
18+ await this.syncService.fullSync(normalizedOptions.force, true);
19+ const res = new MessageResponse("Syncing complete.", null);
20+ return Response.success(res);
21+ } catch (e) {
22+ return Response.error("Syncing failed: " + e.toString());
23+ }
24+ }
25+
26+ private async getLastSync() {
27+ const lastSyncDate = await this.syncService.getLastSync();
28+ const res = new StringResponse(lastSyncDate == null ? null : lastSyncDate.toISOString());
29+ return Response.success(res);
30+ }
31+}
32+
33+class Options {
34+ last: boolean;
35+ force: boolean;
36+
37+ constructor(passedOptions: Record<string, any>) {
38+ this.last = CliUtils.convertBooleanOption(passedOptions?.last);
39+ this.force = CliUtils.convertBooleanOption(passedOptions?.force);
40+ }
41+}
apps/cli/src/commands/unlock.command.tsnew file+132
@@ -0,0 +1,132 @@
1+import { ApiService } from "jslib-common/abstractions/api.service";
2+import { CryptoService } from "jslib-common/abstractions/crypto.service";
3+import { CryptoFunctionService } from "jslib-common/abstractions/cryptoFunction.service";
4+import { EnvironmentService } from "jslib-common/abstractions/environment.service";
5+import { KeyConnectorService } from "jslib-common/abstractions/keyConnector.service";
6+import { StateService } from "jslib-common/abstractions/state.service";
7+import { SyncService } from "jslib-common/abstractions/sync.service";
8+import { HashPurpose } from "jslib-common/enums/hashPurpose";
9+import { Utils } from "jslib-common/misc/utils";
10+import { SecretVerificationRequest } from "jslib-common/models/request/secretVerificationRequest";
11+import { ConsoleLogService } from "jslib-common/services/consoleLog.service";
12+import { Response } from "jslib-node/cli/models/response";
13+import { MessageResponse } from "jslib-node/cli/models/response/messageResponse";
14+
15+import { CliUtils } from "../utils";
16+
17+import { ConvertToKeyConnectorCommand } from "./convertToKeyConnector.command";
18+
19+export class UnlockCommand {
20+ constructor(
21+ private cryptoService: CryptoService,
22+ private stateService: StateService,
23+ private cryptoFunctionService: CryptoFunctionService,
24+ private apiService: ApiService,
25+ private logService: ConsoleLogService,
26+ private keyConnectorService: KeyConnectorService,
27+ private environmentService: EnvironmentService,
28+ private syncService: SyncService,
29+ private logout: () => Promise<void>
30+ ) {}
31+
32+ async run(password: string, cmdOptions: Record<string, any>) {
33+ const normalizedOptions = new Options(cmdOptions);
34+ const passwordResult = await CliUtils.getPassword(password, normalizedOptions, this.logService);
35+
36+ if (passwordResult instanceof Response) {
37+ return passwordResult;
38+ } else {
39+ password = passwordResult;
40+ }
41+
42+ await this.setNewSessionKey();
43+ const email = await this.stateService.getEmail();
44+ const kdf = await this.stateService.getKdfType();
45+ const kdfIterations = await this.stateService.getKdfIterations();
46+ const key = await this.cryptoService.makeKey(password, email, kdf, kdfIterations);
47+ const storedKeyHash = await this.cryptoService.getKeyHash();
48+
49+ let passwordValid = false;
50+ if (key != null) {
51+ if (storedKeyHash != null) {
52+ passwordValid = await this.cryptoService.compareAndUpdateKeyHash(password, key);
53+ } else {
54+ const serverKeyHash = await this.cryptoService.hashPassword(
55+ password,
56+ key,
57+ HashPurpose.ServerAuthorization
58+ );
59+ const request = new SecretVerificationRequest();
60+ request.masterPasswordHash = serverKeyHash;
61+ try {
62+ await this.apiService.postAccountVerifyPassword(request);
63+ passwordValid = true;
64+ const localKeyHash = await this.cryptoService.hashPassword(
65+ password,
66+ key,
67+ HashPurpose.LocalAuthorization
68+ );
69+ await this.cryptoService.setKeyHash(localKeyHash);
70+ } catch {
71+ // Ignore
72+ }
73+ }
74+ }
75+
76+ if (passwordValid) {
77+ await this.cryptoService.setKey(key);
78+
79+ if (await this.keyConnectorService.getConvertAccountRequired()) {
80+ const convertToKeyConnectorCommand = new ConvertToKeyConnectorCommand(
81+ this.apiService,
82+ this.keyConnectorService,
83+ this.environmentService,
84+ this.syncService,
85+ this.logout
86+ );
87+ const convertResponse = await convertToKeyConnectorCommand.run();
88+ if (!convertResponse.success) {
89+ return convertResponse;
90+ }
91+ }
92+
93+ return this.successResponse();
94+ } else {
95+ return Response.error("Invalid master password.");
96+ }
97+ }
98+
99+ private async setNewSessionKey() {
100+ const key = await this.cryptoFunctionService.randomBytes(64);
101+ process.env.BW_SESSION = Utils.fromBufferToB64(key);
102+ }
103+
104+ private async successResponse() {
105+ const res = new MessageResponse(
106+ "Your vault is now unlocked!",
107+ "\n" +
108+ "To unlock your vault, set your session key to the `BW_SESSION` environment variable. ex:\n" +
109+ '$ export BW_SESSION="' +
110+ process.env.BW_SESSION +
111+ '"\n' +
112+ '> $env:BW_SESSION="' +
113+ process.env.BW_SESSION +
114+ '"\n\n' +
115+ "You can also pass the session key to any command with the `--session` option. ex:\n" +
116+ "$ bw list items --session " +
117+ process.env.BW_SESSION
118+ );
119+ res.raw = process.env.BW_SESSION;
120+ return Response.success(res);
121+ }
122+}
123+
124+class Options {
125+ passwordEnv: string;
126+ passwordFile: string;
127+
128+ constructor(passedOptions: Record<string, any>) {
129+ this.passwordEnv = passedOptions?.passwordenv || passedOptions?.passwordEnv;
130+ this.passwordFile = passedOptions?.passwordfile || passedOptions?.passwordFile;
131+ }
132+}
apps/cli/src/flags.tsnew file+5
@@ -0,0 +1,5 @@
1+export type Flags = {
2+ serve?: boolean;
3+};
4+
5+export type FlagName = keyof Flags;
apps/cli/src/locales/en/messages.jsonnew file+44
@@ -0,0 +1,44 @@
1+{
2+ "bitwarden": {
3+ "message": "Bitwarden"
4+ },
5+ "authenticatorAppTitle": {
6+ "message": "Authenticator App"
7+ },
8+ "yubiKeyTitle": {
9+ "message": "YubiKey OTP Security Key"
10+ },
11+ "emailTitle": {
12+ "message": "Email"
13+ },
14+ "noneFolder": {
15+ "message": "No Folder"
16+ },
17+ "importEncKeyError": {
18+ "message": "Invalid file password."
19+ },
20+ "importPasswordRequired": {
21+ "message": "File is password protected, please provide a decryption password."
22+ },
23+ "importFormatError": {
24+ "message": "Data is not formatted correctly. Please check your import file and try again."
25+ },
26+ "importNothingError": {
27+ "message": "Nothing was imported."
28+ },
29+ "verificationCodeRequired": {
30+ "message": "Verification code is required."
31+ },
32+ "invalidVerificationCode": {
33+ "message": "Invalid verification code."
34+ },
35+ "masterPassRequired": {
36+ "message": "Master password is required."
37+ },
38+ "invalidMasterPassword": {
39+ "message": "Invalid master password."
40+ },
41+ "sessionTimeout": {
42+ "message": "Your session has timed out. Please go back and try logging in again."
43+ }
44+}
apps/cli/src/models/request/organizationCollectionRequest.tsnew file+16
@@ -0,0 +1,16 @@
1+import { CollectionExport } from "jslib-common/models/export/collectionExport";
2+
3+import { SelectionReadOnly } from "../selectionReadOnly";
4+
5+export class OrganizationCollectionRequest extends CollectionExport {
6+ static template(): OrganizationCollectionRequest {
7+ const req = new OrganizationCollectionRequest();
8+ req.organizationId = "00000000-0000-0000-0000-000000000000";
9+ req.name = "Collection name";
10+ req.externalId = null;
11+ req.groups = [SelectionReadOnly.template(), SelectionReadOnly.template()];
12+ return req;
13+ }
14+
15+ groups: SelectionReadOnly[];
16+}
apps/cli/src/models/response/attachmentResponse.tsnew file+17
@@ -0,0 +1,17 @@
1+import { AttachmentView } from "jslib-common/models/view/attachmentView";
2+
3+export class AttachmentResponse {
4+ id: string;
5+ fileName: string;
6+ size: string;
7+ sizeName: string;
8+ url: string;
9+
10+ constructor(o: AttachmentView) {
11+ this.id = o.id;
12+ this.fileName = o.fileName;
13+ this.size = o.size;
14+ this.sizeName = o.sizeName;
15+ this.url = o.url;
16+ }
17+}
apps/cli/src/models/response/cipherResponse.tsnew file+33
@@ -0,0 +1,33 @@
1+import { CipherType } from "jslib-common/enums/cipherType";
2+import { CipherWithIdExport } from "jslib-common/models/export/cipherWithIdsExport";
3+import { CipherView } from "jslib-common/models/view/cipherView";
4+import { BaseResponse } from "jslib-node/cli/models/response/baseResponse";
5+
6+import { AttachmentResponse } from "./attachmentResponse";
7+import { LoginResponse } from "./loginResponse";
8+import { PasswordHistoryResponse } from "./passwordHistoryResponse";
9+
10+export class CipherResponse extends CipherWithIdExport implements BaseResponse {
11+ object: string;
12+ attachments: AttachmentResponse[];
13+ revisionDate: Date;
14+ deletedDate: Date;
15+ passwordHistory: PasswordHistoryResponse[];
16+
17+ constructor(o: CipherView) {
18+ super();
19+ this.object = "item";
20+ this.build(o);
21+ if (o.attachments != null) {
22+ this.attachments = o.attachments.map((a) => new AttachmentResponse(a));
23+ }
24+ this.revisionDate = o.revisionDate;
25+ this.deletedDate = o.deletedDate;
26+ if (o.passwordHistory != null) {
27+ this.passwordHistory = o.passwordHistory.map((h) => new PasswordHistoryResponse(h));
28+ }
29+ if (o.type === CipherType.Login && o.login != null) {
30+ this.login = new LoginResponse(o.login);
31+ }
32+ }
33+}
apps/cli/src/models/response/collectionResponse.tsnew file+13
@@ -0,0 +1,13 @@
1+import { CollectionWithIdExport } from "jslib-common/models/export/collectionWithIdExport";
2+import { CollectionView } from "jslib-common/models/view/collectionView";
3+import { BaseResponse } from "jslib-node/cli/models/response/baseResponse";
4+
5+export class CollectionResponse extends CollectionWithIdExport implements BaseResponse {
6+ object: string;
7+
8+ constructor(o: CollectionView) {
9+ super();
10+ this.object = "collection";
11+ this.build(o);
12+ }
13+}
apps/cli/src/models/response/folderResponse.tsnew file+13
@@ -0,0 +1,13 @@
1+import { FolderWithIdExport } from "jslib-common/models/export/folderWithIdExport";
2+import { FolderView } from "jslib-common/models/view/folderView";
3+import { BaseResponse } from "jslib-node/cli/models/response/baseResponse";
4+
5+export class FolderResponse extends FolderWithIdExport implements BaseResponse {
6+ object: string;
7+
8+ constructor(o: FolderView) {
9+ super();
10+ this.object = "folder";
11+ this.build(o);
12+ }
13+}
apps/cli/src/models/response/loginResponse.tsnew file+11
@@ -0,0 +1,11 @@
1+import { LoginExport } from "jslib-common/models/export/loginExport";
2+import { LoginView } from "jslib-common/models/view/loginView";
3+
4+export class LoginResponse extends LoginExport {
5+ passwordRevisionDate: Date;
6+
7+ constructor(o: LoginView) {
8+ super(o);
9+ this.passwordRevisionDate = o.passwordRevisionDate != null ? o.passwordRevisionDate : null;
10+ }
11+}
apps/cli/src/models/response/organizationCollectionResponse.tsnew file+15
@@ -0,0 +1,15 @@
1+import { CollectionView } from "jslib-common/models/view/collectionView";
2+
3+import { SelectionReadOnly } from "../selectionReadOnly";
4+
5+import { CollectionResponse } from "./collectionResponse";
6+
7+export class OrganizationCollectionResponse extends CollectionResponse {
8+ groups: SelectionReadOnly[];
9+
10+ constructor(o: CollectionView, groups: SelectionReadOnly[]) {
11+ super(o);
12+ this.object = "org-collection";
13+ this.groups = groups;
14+ }
15+}
apps/cli/src/models/response/organizationResponse.tsnew file+22
@@ -0,0 +1,22 @@
1+import { OrganizationUserStatusType } from "jslib-common/enums/organizationUserStatusType";
2+import { OrganizationUserType } from "jslib-common/enums/organizationUserType";
3+import { Organization } from "jslib-common/models/domain/organization";
4+import { BaseResponse } from "jslib-node/cli/models/response/baseResponse";
5+
6+export class OrganizationResponse implements BaseResponse {
7+ object: string;
8+ id: string;
9+ name: string;
10+ status: OrganizationUserStatusType;
11+ type: OrganizationUserType;
12+ enabled: boolean;
13+
14+ constructor(o: Organization) {
15+ this.object = "organization";
16+ this.id = o.id;
17+ this.name = o.name;
18+ this.status = o.status;
19+ this.type = o.type;
20+ this.enabled = o.enabled;
21+ }
22+}
apps/cli/src/models/response/organizationUserResponse.tsnew file+17
@@ -0,0 +1,17 @@
1+import { OrganizationUserStatusType } from "jslib-common/enums/organizationUserStatusType";
2+import { OrganizationUserType } from "jslib-common/enums/organizationUserType";
3+import { BaseResponse } from "jslib-node/cli/models/response/baseResponse";
4+
5+export class OrganizationUserResponse implements BaseResponse {
6+ object: string;
7+ id: string;
8+ email: string;
9+ name: string;
10+ status: OrganizationUserStatusType;
11+ type: OrganizationUserType;
12+ twoFactorEnabled: boolean;
13+
14+ constructor() {
15+ this.object = "org-member";
16+ }
17+}
apps/cli/src/models/response/passwordHistoryResponse.tsnew file+11
@@ -0,0 +1,11 @@
1+import { PasswordHistoryView } from "jslib-common/models/view/passwordHistoryView";
2+
3+export class PasswordHistoryResponse {
4+ lastUsedDate: Date;
5+ password: string;
6+
7+ constructor(o: PasswordHistoryView) {
8+ this.lastUsedDate = o.lastUsedDate;
9+ this.password = o.password;
10+ }
11+}
apps/cli/src/models/response/sendAccessResponse.tsnew file+40
@@ -0,0 +1,40 @@
1+import { SendType } from "jslib-common/enums/sendType";
2+import { SendAccessView } from "jslib-common/models/view/sendAccessView";
3+import { BaseResponse } from "jslib-node/cli/models/response/baseResponse";
4+
5+import { SendFileResponse } from "./sendFileResponse";
6+import { SendTextResponse } from "./sendTextResponse";
7+
8+export class SendAccessResponse implements BaseResponse {
9+ static template(): SendAccessResponse {
10+ const req = new SendAccessResponse();
11+ req.name = "Send name";
12+ req.type = SendType.Text;
13+ req.text = null;
14+ req.file = null;
15+ return req;
16+ }
17+
18+ object = "send-access";
19+ id: string;
20+ name: string;
21+ type: SendType;
22+ text: SendTextResponse;
23+ file: SendFileResponse;
24+
25+ constructor(o?: SendAccessView) {
26+ if (o == null) {
27+ return;
28+ }
29+ this.id = o.id;
30+ this.name = o.name;
31+ this.type = o.type;
32+
33+ if (o.type === SendType.Text && o.text != null) {
34+ this.text = new SendTextResponse(o.text);
35+ }
36+ if (o.type === SendType.File && o.file != null) {
37+ this.file = new SendFileResponse(o.file);
38+ }
39+ }
40+}
apps/cli/src/models/response/sendFileResponse.tsnew file+36
@@ -0,0 +1,36 @@
1+import { SendFileView } from "jslib-common/models/view/sendFileView";
2+
3+export class SendFileResponse {
4+ static template(fileName = "file attachment location"): SendFileResponse {
5+ const req = new SendFileResponse();
6+ req.fileName = fileName;
7+ return req;
8+ }
9+
10+ static toView(file: SendFileResponse, view = new SendFileView()) {
11+ if (file == null) {
12+ return null;
13+ }
14+
15+ view.id = file.id;
16+ view.size = file.size;
17+ view.sizeName = file.sizeName;
18+ view.fileName = file.fileName;
19+ return view;
20+ }
21+
22+ id: string;
23+ size: string;
24+ sizeName: string;
25+ fileName: string;
26+
27+ constructor(o?: SendFileView) {
28+ if (o == null) {
29+ return;
30+ }
31+ this.id = o.id;
32+ this.size = o.size;
33+ this.sizeName = o.sizeName;
34+ this.fileName = o.fileName;
35+ }
36+}
apps/cli/src/models/response/sendResponse.tsnew file+123
@@ -0,0 +1,123 @@
1+import { SendType } from "jslib-common/enums/sendType";
2+import { Utils } from "jslib-common/misc/utils";
3+import { SendView } from "jslib-common/models/view/sendView";
4+import { BaseResponse } from "jslib-node/cli/models/response/baseResponse";
5+
6+import { SendFileResponse } from "./sendFileResponse";
7+import { SendTextResponse } from "./sendTextResponse";
8+
9+const dateProperties: string[] = [
10+ Utils.nameOf<SendResponse>("deletionDate"),
11+ Utils.nameOf<SendResponse>("expirationDate"),
12+];
13+
14+export class SendResponse implements BaseResponse {
15+ static template(sendType?: SendType, deleteInDays = 7): SendResponse {
16+ const req = new SendResponse();
17+ req.name = "Send name";
18+ req.notes = "Some notes about this send.";
19+ req.type = sendType === SendType.File ? SendType.File : SendType.Text;
20+ req.text = sendType === SendType.Text ? SendTextResponse.template() : null;
21+ req.file = sendType === SendType.File ? SendFileResponse.template() : null;
22+ req.maxAccessCount = null;
23+ req.deletionDate = this.getStandardDeletionDate(deleteInDays);
24+ req.expirationDate = null;
25+ req.password = null;
26+ req.disabled = false;
27+ req.hideEmail = false;
28+ return req;
29+ }
30+
31+ static toView(send: SendResponse, view = new SendView()): SendView {
32+ if (send == null) {
33+ return null;
34+ }
35+
36+ view.id = send.id;
37+ view.accessId = send.accessId;
38+ view.name = send.name;
39+ view.notes = send.notes;
40+ view.key = send.key == null ? null : Utils.fromB64ToArray(send.key);
41+ view.type = send.type;
42+ view.file = SendFileResponse.toView(send.file);
43+ view.text = SendTextResponse.toView(send.text);
44+ view.maxAccessCount = send.maxAccessCount;
45+ view.accessCount = send.accessCount;
46+ view.revisionDate = send.revisionDate;
47+ view.deletionDate = send.deletionDate;
48+ view.expirationDate = send.expirationDate;
49+ view.password = send.password;
50+ view.disabled = send.disabled;
51+ view.hideEmail = send.hideEmail;
52+ return view;
53+ }
54+
55+ static fromJson(json: string) {
56+ return JSON.parse(json, (key, value) => {
57+ if (dateProperties.includes(key)) {
58+ return value == null ? null : new Date(value);
59+ }
60+ return value;
61+ });
62+ }
63+
64+ private static getStandardDeletionDate(days: number) {
65+ const d = new Date();
66+ d.setTime(d.getTime() + days * 86400000); // ms per day
67+ return d;
68+ }
69+
70+ object = "send";
71+ id: string;
72+ accessId: string;
73+ accessUrl: string;
74+ name: string;
75+ notes: string;
76+ key: string;
77+ type: SendType;
78+ text: SendTextResponse;
79+ file: SendFileResponse;
80+ maxAccessCount?: number;
81+ accessCount: number;
82+ revisionDate: Date;
83+ deletionDate: Date;
84+ expirationDate: Date;
85+ password: string;
86+ passwordSet: boolean;
87+ disabled: boolean;
88+ hideEmail: boolean;
89+
90+ constructor(o?: SendView, webVaultUrl?: string) {
91+ if (o == null) {
92+ return;
93+ }
94+ this.id = o.id;
95+ this.accessId = o.accessId;
96+ let sendLinkBaseUrl = webVaultUrl;
97+ if (sendLinkBaseUrl == null) {
98+ sendLinkBaseUrl = "https://send.bitwarden.com/#";
99+ } else {
100+ sendLinkBaseUrl += "/#/send/";
101+ }
102+ this.accessUrl = sendLinkBaseUrl + this.accessId + "/" + o.urlB64Key;
103+ this.name = o.name;
104+ this.notes = o.notes;
105+ this.key = Utils.fromBufferToB64(o.key);
106+ this.type = o.type;
107+ this.maxAccessCount = o.maxAccessCount;
108+ this.accessCount = o.accessCount;
109+ this.revisionDate = o.revisionDate;
110+ this.deletionDate = o.deletionDate;
111+ this.expirationDate = o.expirationDate;
112+ this.passwordSet = o.password != null;
113+ this.disabled = o.disabled;
114+ this.hideEmail = o.hideEmail;
115+
116+ if (o.type === SendType.Text && o.text != null) {
117+ this.text = new SendTextResponse(o.text);
118+ }
119+ if (o.type === SendType.File && o.file != null) {
120+ this.file = new SendFileResponse(o.file);
121+ }
122+ }
123+}
apps/cli/src/models/response/sendTextResponse.tsnew file+30
@@ -0,0 +1,30 @@
1+import { SendTextView } from "jslib-common/models/view/sendTextView";
2+
3+export class SendTextResponse {
4+ static template(text = "Text contained in the send.", hidden = false): SendTextResponse {
5+ const req = new SendTextResponse();
6+ req.text = text;
7+ req.hidden = hidden;
8+ return req;
9+ }
10+
11+ static toView(text: SendTextResponse, view = new SendTextView()) {
12+ if (text == null) {
13+ return null;
14+ }
15+
16+ view.text = text.text;
17+ view.hidden = text.hidden;
18+ return view;
19+ }
20+ text: string;
21+ hidden: boolean;
22+
23+ constructor(o?: SendTextView) {
24+ if (o == null) {
25+ return;
26+ }
27+ this.text = o.text;
28+ this.hidden = o.hidden;
29+ }
30+}
apps/cli/src/models/response/templateResponse.tsnew file+11
@@ -0,0 +1,11 @@
1+import { BaseResponse } from "jslib-node/cli/models/response/baseResponse";
2+
3+export class TemplateResponse implements BaseResponse {
4+ object: string;
5+ template: any;
6+
7+ constructor(template: any) {
8+ this.object = "template";
9+ this.template = template;
10+ }
11+}
apps/cli/src/models/selectionReadOnly.tsnew file+15
@@ -0,0 +1,15 @@
1+export class SelectionReadOnly {
2+ static template(): SelectionReadOnly {
3+ return new SelectionReadOnly("00000000-0000-0000-0000-000000000000", false, false);
4+ }
5+
6+ id: string;
7+ readOnly: boolean;
8+ hidePasswords: boolean;
9+
10+ constructor(id: string, readOnly: boolean, hidePasswords: boolean) {
11+ this.id = id;
12+ this.readOnly = readOnly;
13+ this.hidePasswords = hidePasswords || false;
14+ }
15+}
apps/cli/src/program.tsnew file+546
@@ -0,0 +1,546 @@
1+import * as chalk from "chalk";
2+import * as program from "commander";
3+
4+import { AuthenticationStatus } from "jslib-common/enums/authenticationStatus";
5+import { KeySuffixOptions } from "jslib-common/enums/keySuffixOptions";
6+import { BaseProgram } from "jslib-node/cli/baseProgram";
7+import { LogoutCommand } from "jslib-node/cli/commands/logout.command";
8+import { UpdateCommand } from "jslib-node/cli/commands/update.command";
9+import { Response } from "jslib-node/cli/models/response";
10+import { MessageResponse } from "jslib-node/cli/models/response/messageResponse";
11+
12+import { Main } from "./bw";
13+import { CompletionCommand } from "./commands/completion.command";
14+import { ConfigCommand } from "./commands/config.command";
15+import { EncodeCommand } from "./commands/encode.command";
16+import { GenerateCommand } from "./commands/generate.command";
17+import { LockCommand } from "./commands/lock.command";
18+import { LoginCommand } from "./commands/login.command";
19+import { ServeCommand } from "./commands/serve.command";
20+import { StatusCommand } from "./commands/status.command";
21+import { SyncCommand } from "./commands/sync.command";
22+import { UnlockCommand } from "./commands/unlock.command";
23+import { TemplateResponse } from "./models/response/templateResponse";
24+import { CliUtils } from "./utils";
25+
26+const writeLn = CliUtils.writeLn;
27+
28+export class Program extends BaseProgram {
29+ constructor(protected main: Main) {
30+ super(main.stateService, writeLn);
31+ }
32+
33+ async register() {
34+ program
35+ .option("--pretty", "Format output. JSON is tabbed with two spaces.")
36+ .option("--raw", "Return raw output instead of a descriptive message.")
37+ .option("--response", "Return a JSON formatted version of response output.")
38+ .option("--cleanexit", "Exit with a success exit code (0) unless an error is thrown.")
39+ .option("--quiet", "Don't return anything to stdout.")
40+ .option("--nointeraction", "Do not prompt for interactive user input.")
41+ .option("--session <session>", "Pass session key instead of reading from env.")
42+ .version(await this.main.platformUtilsService.getApplicationVersion(), "-v, --version");
43+
44+ program.on("option:pretty", () => {
45+ process.env.BW_PRETTY = "true";
46+ });
47+
48+ program.on("option:raw", () => {
49+ process.env.BW_RAW = "true";
50+ });
51+
52+ program.on("option:quiet", () => {
53+ process.env.BW_QUIET = "true";
54+ });
55+
56+ program.on("option:response", () => {
57+ process.env.BW_RESPONSE = "true";
58+ });
59+
60+ program.on("option:cleanexit", () => {
61+ process.env.BW_CLEANEXIT = "true";
62+ });
63+
64+ program.on("option:nointeraction", () => {
65+ process.env.BW_NOINTERACTION = "true";
66+ });
67+
68+ program.on("option:session", (key) => {
69+ process.env.BW_SESSION = key;
70+ });
71+
72+ program.on("command:*", () => {
73+ writeLn(chalk.redBright("Invalid command: " + program.args.join(" ")), false, true);
74+ writeLn("See --help for a list of available commands.", true, true);
75+ process.exitCode = 1;
76+ });
77+
78+ program.on("--help", () => {
79+ writeLn("\n Examples:");
80+ writeLn("");
81+ writeLn(" bw login");
82+ writeLn(" bw lock");
83+ writeLn(" bw unlock myPassword321");
84+ writeLn(" bw list --help");
85+ writeLn(" bw list items --search google");
86+ writeLn(" bw get item 99ee88d2-6046-4ea7-92c2-acac464b1412");
87+ writeLn(" bw get password google.com");
88+ writeLn(' echo \'{"name":"My Folder"}\' | bw encode');
89+ writeLn(" bw create folder eyJuYW1lIjoiTXkgRm9sZGVyIn0K");
90+ writeLn(
91+ " bw edit folder c7c7b60b-9c61-40f2-8ccd-36c49595ed72 eyJuYW1lIjoiTXkgRm9sZGVyMiJ9Cg=="
92+ );
93+ writeLn(" bw delete item 99ee88d2-6046-4ea7-92c2-acac464b1412");
94+ writeLn(" bw generate -lusn --length 18");
95+ writeLn(" bw config server https://bitwarden.example.com");
96+ writeLn(" bw send -f ./file.ext");
97+ writeLn(' bw send "text to send"');
98+ writeLn(' echo "text to send" | bw send');
99+ writeLn(
100+ " bw receive https://vault.bitwarden.com/#/send/rg3iuoS_Akm2gqy6ADRHmg/Ht7dYjsqjmgqUM3rjzZDSQ"
101+ );
102+ writeLn("", true);
103+ });
104+
105+ program
106+ .command("login [email] [password]")
107+ .description("Log into a user account.")
108+ .option("--method <method>", "Two-step login method.")
109+ .option("--code <code>", "Two-step login code.")
110+ .option("--sso", "Log in with Single-Sign On.")
111+ .option("--apikey", "Log in with an Api Key.")
112+ .option("--passwordenv <passwordenv>", "Environment variable storing your password")
113+ .option(
114+ "--passwordfile <passwordfile>",
115+ "Path to a file containing your password as its first line"
116+ )
117+ .option("--check", "Check login status.", async () => {
118+ const authed = await this.main.stateService.getIsAuthenticated();
119+ if (authed) {
120+ const res = new MessageResponse("You are logged in!", null);
121+ this.processResponse(Response.success(res), true);
122+ }
123+ this.processResponse(Response.error("You are not logged in."), true);
124+ })
125+ .on("--help", () => {
126+ writeLn("\n Notes:");
127+ writeLn("");
128+ writeLn(" See docs for valid `method` enum values.");
129+ writeLn("");
130+ writeLn(" Pass `--raw` option to only return the session key.");
131+ writeLn("");
132+ writeLn(" Examples:");
133+ writeLn("");
134+ writeLn(" bw login");
135+ writeLn(" bw login john@example.com myPassword321 --raw");
136+ writeLn(" bw login john@example.com myPassword321 --method 1 --code 249213");
137+ writeLn(" bw login --sso");
138+ writeLn("", true);
139+ })
140+ .action(async (email: string, password: string, options: program.OptionValues) => {
141+ if (!options.check) {
142+ await this.exitIfAuthed();
143+ const command = new LoginCommand(
144+ this.main.authService,
145+ this.main.apiService,
146+ this.main.cryptoFunctionService,
147+ this.main.i18nService,
148+ this.main.environmentService,
149+ this.main.passwordGenerationService,
150+ this.main.platformUtilsService,
151+ this.main.stateService,
152+ this.main.cryptoService,
153+ this.main.policyService,
154+ this.main.twoFactorService,
155+ this.main.syncService,
156+ this.main.keyConnectorService,
157+ async () => await this.main.logout()
158+ );
159+ const response = await command.run(email, password, options);
160+ this.processResponse(response);
161+ }
162+ });
163+
164+ program
165+ .command("logout")
166+ .description("Log out of the current user account.")
167+ .on("--help", () => {
168+ writeLn("\n Examples:");
169+ writeLn("");
170+ writeLn(" bw logout");
171+ writeLn("", true);
172+ })
173+ .action(async (cmd) => {
174+ await this.exitIfNotAuthed();
175+ const command = new LogoutCommand(
176+ this.main.authService,
177+ this.main.i18nService,
178+ async () => await this.main.logout()
179+ );
180+ const response = await command.run();
181+ this.processResponse(response);
182+ });
183+
184+ program
185+ .command("lock")
186+ .description("Lock the vault and destroy active session keys.")
187+ .on("--help", () => {
188+ writeLn("\n Examples:");
189+ writeLn("");
190+ writeLn(" bw lock");
191+ writeLn("", true);
192+ })
193+ .action(async (cmd) => {
194+ await this.exitIfNotAuthed();
195+
196+ if (await this.main.keyConnectorService.getUsesKeyConnector()) {
197+ const logoutCommand = new LogoutCommand(
198+ this.main.authService,
199+ this.main.i18nService,
200+ async () => await this.main.logout()
201+ );
202+ await logoutCommand.run();
203+ this.processResponse(
204+ Response.error(
205+ "You cannot lock your vault because you are using Key Connector. " +
206+ "To protect your vault, you have been logged out."
207+ ),
208+ true
209+ );
210+ return;
211+ }
212+
213+ const command = new LockCommand(this.main.vaultTimeoutService);
214+ const response = await command.run();
215+ this.processResponse(response);
216+ });
217+
218+ program
219+ .command("unlock [password]")
220+ .description("Unlock the vault and return a new session key.")
221+ .on("--help", () => {
222+ writeLn("\n Notes:");
223+ writeLn("");
224+ writeLn(" After unlocking, any previous session keys will no longer be valid.");
225+ writeLn("");
226+ writeLn(" Pass `--raw` option to only return the session key.");
227+ writeLn("");
228+ writeLn(" Examples:");
229+ writeLn("");
230+ writeLn(" bw unlock");
231+ writeLn(" bw unlock myPassword321");
232+ writeLn(" bw unlock myPassword321 --raw");
233+ writeLn("", true);
234+ })
235+ .option("--check", "Check lock status.", async () => {
236+ await this.exitIfNotAuthed();
237+
238+ const authStatus = await this.main.authService.getAuthStatus();
239+ if (authStatus === AuthenticationStatus.Unlocked) {
240+ const res = new MessageResponse("Vault is unlocked!", null);
241+ this.processResponse(Response.success(res), true);
242+ } else {
243+ this.processResponse(Response.error("Vault is locked."), true);
244+ }
245+ })
246+ .option("--passwordenv <passwordenv>", "Environment variable storing your password")
247+ .option(
248+ "--passwordfile <passwordfile>",
249+ "Path to a file containing your password as its first line"
250+ )
251+ .action(async (password, cmd) => {
252+ if (!cmd.check) {
253+ await this.exitIfNotAuthed();
254+ const command = new UnlockCommand(
255+ this.main.cryptoService,
256+ this.main.stateService,
257+ this.main.cryptoFunctionService,
258+ this.main.apiService,
259+ this.main.logService,
260+ this.main.keyConnectorService,
261+ this.main.environmentService,
262+ this.main.syncService,
263+ async () => await this.main.logout()
264+ );
265+ const response = await command.run(password, cmd);
266+ this.processResponse(response);
267+ }
268+ });
269+
270+ program
271+ .command("sync")
272+ .description("Pull the latest vault data from server.")
273+ .option("-f, --force", "Force a full sync.")
274+ .option("--last", "Get the last sync date.")
275+ .on("--help", () => {
276+ writeLn("\n Examples:");
277+ writeLn("");
278+ writeLn(" bw sync");
279+ writeLn(" bw sync -f");
280+ writeLn(" bw sync --last");
281+ writeLn("", true);
282+ })
283+ .action(async (cmd) => {
284+ await this.exitIfLocked();
285+ const command = new SyncCommand(this.main.syncService);
286+ const response = await command.run(cmd);
287+ this.processResponse(response);
288+ });
289+
290+ program
291+ .command("generate")
292+ .description("Generate a password/passphrase.")
293+ .option("-u, --uppercase", "Include uppercase characters.")
294+ .option("-l, --lowercase", "Include lowercase characters.")
295+ .option("-n, --number", "Include numeric characters.")
296+ .option("-s, --special", "Include special characters.")
297+ .option("-p, --passphrase", "Generate a passphrase.")
298+ .option("--length <length>", "Length of the password.")
299+ .option("--words <words>", "Number of words.")
300+ .option("--separator <separator>", "Word separator.")
301+ .option("-c, --capitalize", "Title case passphrase.")
302+ .option("--includeNumber", "Passphrase includes number.")
303+ .on("--help", () => {
304+ writeLn("\n Notes:");
305+ writeLn("");
306+ writeLn(" Default options are `-uln --length 14`.");
307+ writeLn("");
308+ writeLn(" Minimum `length` is 5.");
309+ writeLn("");
310+ writeLn(" Minimum `words` is 3.");
311+ writeLn("");
312+ writeLn(" Examples:");
313+ writeLn("");
314+ writeLn(" bw generate");
315+ writeLn(" bw generate -u -l --length 18");
316+ writeLn(" bw generate -ulns --length 25");
317+ writeLn(" bw generate -ul");
318+ writeLn(" bw generate -p --separator _");
319+ writeLn(" bw generate -p --words 5 --separator space");
320+ writeLn("", true);
321+ })
322+ .action(async (options) => {
323+ const command = new GenerateCommand(
324+ this.main.passwordGenerationService,
325+ this.main.stateService
326+ );
327+ const response = await command.run(options);
328+ this.processResponse(response);
329+ });
330+
331+ program
332+ .command("encode")
333+ .description("Base 64 encode stdin.")
334+ .on("--help", () => {
335+ writeLn("\n Notes:");
336+ writeLn("");
337+ writeLn(" Use to create `encodedJson` for `create` and `edit` commands.");
338+ writeLn("");
339+ writeLn(" Examples:");
340+ writeLn("");
341+ writeLn(' echo \'{"name":"My Folder"}\' | bw encode');
342+ writeLn("", true);
343+ })
344+ .action(async () => {
345+ const command = new EncodeCommand();
346+ const response = await command.run();
347+ this.processResponse(response);
348+ });
349+
350+ program
351+ .command("config <setting> [value]")
352+ .description("Configure CLI settings.")
353+ .option(
354+ "--web-vault <url>",
355+ "Provides a custom web vault URL that differs from the base URL."
356+ )
357+ .option("--api <url>", "Provides a custom API URL that differs from the base URL.")
358+ .option("--identity <url>", "Provides a custom identity URL that differs from the base URL.")
359+ .option(
360+ "--icons <url>",
361+ "Provides a custom icons service URL that differs from the base URL."
362+ )
363+ .option(
364+ "--notifications <url>",
365+ "Provides a custom notifications URL that differs from the base URL."
366+ )
367+ .option("--events <url>", "Provides a custom events URL that differs from the base URL.")
368+ .option("--key-connector <url>", "Provides the URL for your Key Connector server.")
369+ .on("--help", () => {
370+ writeLn("\n Settings:");
371+ writeLn("");
372+ writeLn(" server - On-premises hosted installation URL.");
373+ writeLn("");
374+ writeLn(" Examples:");
375+ writeLn("");
376+ writeLn(" bw config server");
377+ writeLn(" bw config server https://bw.company.com");
378+ writeLn(" bw config server bitwarden.com");
379+ writeLn(
380+ " bw config server --api http://localhost:4000 --identity http://localhost:33656"
381+ );
382+ writeLn("", true);
383+ })
384+ .action(async (setting, value, options) => {
385+ const command = new ConfigCommand(this.main.environmentService);
386+ const response = await command.run(setting, value, options);
387+ this.processResponse(response);
388+ });
389+
390+ program
391+ .command("update")
392+ .description("Check for updates.")
393+ .on("--help", () => {
394+ writeLn("\n Notes:");
395+ writeLn("");
396+ writeLn(" Returns the URL to download the newest version of this CLI tool.");
397+ writeLn("");
398+ writeLn(" Use the `--raw` option to return only the download URL for the update.");
399+ writeLn("");
400+ writeLn(" Examples:");
401+ writeLn("");
402+ writeLn(" bw update");
403+ writeLn(" bw update --raw");
404+ writeLn("", true);
405+ })
406+ .action(async () => {
407+ const command = new UpdateCommand(
408+ this.main.platformUtilsService,
409+ this.main.i18nService,
410+ "cli",
411+ "bw",
412+ true
413+ );
414+ const response = await command.run();
415+ this.processResponse(response);
416+ });
417+
418+ program
419+ .command("completion")
420+ .description("Generate shell completions.")
421+ .option("--shell <shell>", "Shell to generate completions for.")
422+ .on("--help", () => {
423+ writeLn("\n Notes:");
424+ writeLn("");
425+ writeLn(" Valid shells are `zsh`.");
426+ writeLn("");
427+ writeLn(" Examples:");
428+ writeLn("");
429+ writeLn(" bw completion --shell zsh");
430+ writeLn("", true);
431+ })
432+ .action(async (options: program.OptionValues, cmd: program.Command) => {
433+ const command = new CompletionCommand();
434+ const response = await command.run(options);
435+ this.processResponse(response);
436+ });
437+
438+ program
439+ .command("status")
440+ .description("Show server, last sync, user information, and vault status.")
441+ .on("--help", () => {
442+ writeLn("");
443+ writeLn("");
444+ writeLn(" Example return value:");
445+ writeLn("");
446+ writeLn(" {");
447+ writeLn(' "serverUrl": "https://bitwarden.example.com",');
448+ writeLn(' "lastSync": "2020-06-16T06:33:51.419Z",');
449+ writeLn(' "userEmail": "user@example.com,');
450+ writeLn(' "userId": "00000000-0000-0000-0000-000000000000",');
451+ writeLn(' "status": "locked"');
452+ writeLn(" }");
453+ writeLn("");
454+ writeLn(" Notes:");
455+ writeLn("");
456+ writeLn(" `status` is one of:");
457+ writeLn(" - `unauthenticated` when you are not logged in");
458+ writeLn(" - `locked` when you are logged in and the vault is locked");
459+ writeLn(" - `unlocked` when you are logged in and the vault is unlocked");
460+ writeLn("", true);
461+ })
462+ .action(async () => {
463+ const command = new StatusCommand(
464+ this.main.environmentService,
465+ this.main.syncService,
466+ this.main.stateService,
467+ this.main.authService
468+ );
469+ const response = await command.run();
470+ this.processResponse(response);
471+ });
472+
473+ if (CliUtils.flagEnabled("serve")) {
474+ program
475+ .command("serve")
476+ .description("Start a RESTful API webserver.")
477+ .option("--hostname <hostname>", "The hostname to bind your API webserver to.")
478+ .option("--port <port>", "The port to run your API webserver on.")
479+ .on("--help", () => {
480+ writeLn("\n Notes:");
481+ writeLn("");
482+ writeLn(" Default hostname is `localhost`.");
483+ writeLn(" Use hostname `all` for no hostname binding.");
484+ writeLn(" Default port is `8087`.");
485+ writeLn("");
486+ writeLn(" Examples:");
487+ writeLn("");
488+ writeLn(" bw serve");
489+ writeLn(" bw serve --port 8080");
490+ writeLn(" bw serve --hostname bwapi.mydomain.com --port 80");
491+ writeLn("", true);
492+ })
493+ .action(async (cmd) => {
494+ await this.exitIfNotAuthed();
495+ const command = new ServeCommand(this.main);
496+ await command.run(cmd);
497+ });
498+ }
499+ }
500+
501+ protected processResponse(response: Response, exitImmediately = false) {
502+ super.processResponse(response, exitImmediately, () => {
503+ if (response.data.object === "template") {
504+ return this.getJson((response.data as TemplateResponse).template);
505+ }
506+ return null;
507+ });
508+ }
509+
510+ protected async exitIfLocked() {
511+ await this.exitIfNotAuthed();
512+ if (await this.main.cryptoService.hasKeyInMemory()) {
513+ return;
514+ } else if (await this.main.cryptoService.hasKeyStored(KeySuffixOptions.Auto)) {
515+ // load key into memory
516+ await this.main.cryptoService.getKey();
517+ } else if (process.env.BW_NOINTERACTION !== "true") {
518+ // must unlock
519+ if (await this.main.keyConnectorService.getUsesKeyConnector()) {
520+ const response = Response.error(
521+ "Your vault is locked. You must unlock your vault using your session key.\n" +
522+ "If you do not have your session key, you can get a new one by logging out and logging in again."
523+ );
524+ this.processResponse(response, true);
525+ } else {
526+ const command = new UnlockCommand(
527+ this.main.cryptoService,
528+ this.main.stateService,
529+ this.main.cryptoFunctionService,
530+ this.main.apiService,
531+ this.main.logService,
532+ this.main.keyConnectorService,
533+ this.main.environmentService,
534+ this.main.syncService,
535+ this.main.logout
536+ );
537+ const response = await command.run(null, null);
538+ if (!response.success) {
539+ this.processResponse(response, true);
540+ }
541+ }
542+ } else {
543+ this.processResponse(Response.error("Vault is locked."), true);
544+ }
545+ }
546+}
apps/cli/src/send.program.tsnew file+334

This diff is too big to show here.

apps/cli/src/services/i18n.service.tsnew file+20

This diff is too big to show here.

apps/cli/src/services/lowdbStorage.service.tsnew file+40

This diff is too big to show here.

apps/cli/src/services/nodeEnvSecureStorage.service.tsnew file+103

This diff is too big to show here.

apps/cli/src/utils.tsnew file+270

This diff is too big to show here.

apps/cli/src/vault.program.tsnew file+486

This diff is too big to show here.

apps/cli/stores/chocolatey/bitwarden-cli.nuspecnew file+41

This diff is too big to show here.

apps/cli/stores/chocolatey/tools/VERIFICATION.txtnew file+6

This diff is too big to show here.

apps/cli/stores/snap/snapcraft.yamlnew file+17

This diff is too big to show here.

apps/cli/tsconfig.jsonnew file+20

This diff is too big to show here.

apps/cli/tslint.jsonnew file+67

This diff is too big to show here.

apps/cli/webpack.config.jsnew file+76

This diff is too big to show here.