diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
deleted file mode 100644
index 0715471..0000000
--- a/.github/workflows/lint.yml
+++ /dev/null
@@ -1,23 +0,0 @@
-name: Lint
-on: [push, pull_request]
-jobs:
- lint:
- name: Lint
- runs-on: ubuntu-latest
- steps:
- - name: Checkout repository
- uses: actions/checkout@v2
-
- - name: Install Node v12
- uses: actions/setup-node@v1
- with:
- node-version: 12
-
- - name: Install pnpm
- run: curl -L https://unpkg.com/@pnpm/self-installer | node
-
- - name: Install dependencies
- run: pnpm i
-
- - name: Run Lint
- uses: icrawl/action-eslint@v1
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
new file mode 100644
index 0000000..91d6e5c
--- /dev/null
+++ b/.github/workflows/test.yml
@@ -0,0 +1,23 @@
+name: Testing
+on: [push, pull_request]
+jobs:
+ test:
+ name: Test
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v2
+
+ - name: Install Node v14
+ uses: actions/setup-node@v2
+ with:
+ node-version: 14
+
+ - name: Install dependencies
+ run: npm ci
+
+ - name: Run ESLint
+ run: npm run lint
+
+ - name: Run TSC
+ run: npm run build
diff --git a/.github/workflows/tsc.yml b/.github/workflows/tsc.yml
deleted file mode 100644
index 54bc7d5..0000000
--- a/.github/workflows/tsc.yml
+++ /dev/null
@@ -1,23 +0,0 @@
-name: TSC
-on: [push, pull_request]
-jobs:
- tsc:
- name: TSC
- runs-on: ubuntu-latest
- steps:
- - name: Checkout repository
- uses: actions/checkout@v2
-
- - name: Install Node v12
- uses: actions/setup-node@v1
- with:
- node-version: 12
-
- - name: Install pnpm
- run: curl -L https://unpkg.com/@pnpm/self-installer | node
-
- - name: Install dependencies
- run: pnpm i
-
- - name: Run TSC
- uses: icrawl/action-tsc@v1
diff --git a/.prettierrc.json b/.prettierrc.json
new file mode 100644
index 0000000..eba3f40
--- /dev/null
+++ b/.prettierrc.json
@@ -0,0 +1,8 @@
+{
+ "printWidth": 120,
+ "useTabs": true,
+ "singleQuote": true,
+ "quoteProps": "as-needed",
+ "trailingComma": "all",
+ "endOfLine": "lf"
+}
diff --git a/LICENSE b/LICENSE
index 452dcb6..b0705c1 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
MIT License
-Copyright (c) 2017-2020 iCrawl
+Copyright (c) 2017-2021 iCrawl
Copyright (c) 2017-2019 Khinenw
Permission is hereby granted, free of charge, to any person obtaining a copy
diff --git a/README.md b/README.md
index 66263a6..cde11bd 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,5 @@
# Discord Presence
+
> Update your discord status with the newly added rich presence.
@@ -14,19 +15,20 @@
## Features
-* Shows what you are editing in VSCode with no bullsh*t involved
-* Support for over 130 of the most popular languages
-* Enable/Disable Rich Presence for individual workspaces (enabled by default)
-* Custom string support
-* Respects Discords 15sec limit when it comes to updating your status
-* Stable or Insiders build detection
-* Debug mode detection
-* Easily manually reconnect to Discord
-* VSCode Live Share support
+- Shows what you are editing in VSCode with no bullsh\*t involved
+- Support for over 130 of the most popular languages
+- Enable/Disable Rich Presence for individual workspaces (enabled by default)
+- Custom string support
+- Respects Discords 15sec limit when it comes to updating your status
+- Stable or Insiders build detection
+- Debug mode detection
+- Easily manually reconnect to Discord
+- VSCode Live Share support
## Troubleshooting
-### Can't connect to Discord? Check those:
+### Can't connect to Discord? Check those:
+
https://github.com/iCrawl/discord-vscode/issues/77#issuecomment-435622205
https://github.com/iCrawl/discord-vscode/issues/85#issuecomment-417895483
diff --git a/package-lock.json b/package-lock.json
index 2e7c0ab..e2c9cd2 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,8 +1,3171 @@
{
"name": "discord-vscode",
- "version": "4.1.0",
- "lockfileVersion": 1,
+ "version": "5.0.0",
+ "lockfileVersion": 2,
"requires": true,
+ "packages": {
+ "": {
+ "version": "5.0.0",
+ "license": "MIT",
+ "dependencies": {
+ "bufferutil": "^4.0.3",
+ "dayjs": "^1.10.4",
+ "discord-rpc": "github:discordjs/RPC",
+ "tslib": "^2.1.0",
+ "utf-8-validate": "^5.0.4"
+ },
+ "devDependencies": {
+ "@types/node": "^14.14.25",
+ "@types/vscode": "^1.53.0",
+ "@typescript-eslint/eslint-plugin": "^4.15.0",
+ "@typescript-eslint/parser": "^4.15.0",
+ "clean-webpack-plugin": "^3.0.0",
+ "eslint": "^7.19.0",
+ "eslint-config-marine": "^8.1.0",
+ "eslint-config-prettier": "^7.2.0",
+ "eslint-plugin-prettier": "^3.3.1",
+ "prettier": "^2.2.1",
+ "terser-webpack-plugin": "^5.1.1",
+ "ts-loader": "^8.0.16",
+ "typescript": "^4.1.4",
+ "webpack": "^5.21.2",
+ "webpack-cli": "^4.5.0"
+ },
+ "engines": {
+ "vscode": "^1.53.0"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.12.11",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
+ "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/highlight": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.12.11",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
+ "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==",
+ "dev": true
+ },
+ "node_modules/@babel/highlight": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
+ "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.10.4",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@discoveryjs/json-ext": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz",
+ "integrity": "sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg==",
+ "dev": true,
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz",
+ "integrity": "sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.1.1",
+ "espree": "^7.3.0",
+ "globals": "^12.1.0",
+ "ignore": "^4.0.6",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^3.13.1",
+ "lodash": "^4.17.20",
+ "minimatch": "^3.0.4",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz",
+ "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.3",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz",
+ "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz",
+ "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.3",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@types/anymatch": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz",
+ "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==",
+ "dev": true
+ },
+ "node_modules/@types/eslint": {
+ "version": "7.2.6",
+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.6.tgz",
+ "integrity": "sha512-I+1sYH+NPQ3/tVqCeUSBwTE/0heyvtXqpIopUUArlBm0Kpocb8FbMa3AZ/ASKIFpN3rnEx932TTXDbt9OXsNDw==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "*",
+ "@types/json-schema": "*"
+ }
+ },
+ "node_modules/@types/eslint-scope": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz",
+ "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==",
+ "dev": true,
+ "dependencies": {
+ "@types/eslint": "*",
+ "@types/estree": "*"
+ }
+ },
+ "node_modules/@types/estree": {
+ "version": "0.0.46",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.46.tgz",
+ "integrity": "sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg==",
+ "dev": true
+ },
+ "node_modules/@types/events": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz",
+ "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==",
+ "dev": true
+ },
+ "node_modules/@types/glob": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz",
+ "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==",
+ "dev": true,
+ "dependencies": {
+ "@types/events": "*",
+ "@types/minimatch": "*",
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/json-schema": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz",
+ "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==",
+ "dev": true
+ },
+ "node_modules/@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "node_modules/@types/node": {
+ "version": "14.14.25",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.25.tgz",
+ "integrity": "sha512-EPpXLOVqDvisVxtlbvzfyqSsFeQxltFbluZNRndIb8tr9KiBnYNLzrc1N3pyKUCww2RNrfHDViqDWWE1LCJQtQ==",
+ "dev": true
+ },
+ "node_modules/@types/source-list-map": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz",
+ "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==",
+ "dev": true
+ },
+ "node_modules/@types/tapable": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.5.tgz",
+ "integrity": "sha512-/gG2M/Imw7cQFp8PGvz/SwocNrmKFjFsm5Pb8HdbHkZ1K8pmuPzOX4VeVoiEecFCVf4CsN1r3/BRvx+6sNqwtQ==",
+ "dev": true
+ },
+ "node_modules/@types/uglify-js": {
+ "version": "3.9.2",
+ "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.9.2.tgz",
+ "integrity": "sha512-d6dIfpPbF+8B7WiCi2ELY7m0w1joD8cRW4ms88Emdb2w062NeEpbNCeWwVCgzLRpVG+5e74VFSg4rgJ2xXjEiQ==",
+ "dev": true,
+ "dependencies": {
+ "source-map": "^0.6.1"
+ }
+ },
+ "node_modules/@types/vscode": {
+ "version": "1.53.0",
+ "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.53.0.tgz",
+ "integrity": "sha512-XjFWbSPOM0EKIT2XhhYm3D3cx3nn3lshMUcWNy1eqefk+oqRuBq8unVb6BYIZqXy9lQZyeUl7eaBCOZWv+LcXQ==",
+ "dev": true
+ },
+ "node_modules/@types/webpack": {
+ "version": "4.41.13",
+ "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.13.tgz",
+ "integrity": "sha512-RYmIHOWSxnTTa765N6jJBVE45pd2SYNblEYshVDduLw6RhocazNmRzE5/ytvBD8IkDMH6DI+bcrqxh8NILimBA==",
+ "dev": true,
+ "dependencies": {
+ "@types/anymatch": "*",
+ "@types/node": "*",
+ "@types/tapable": "*",
+ "@types/uglify-js": "*",
+ "@types/webpack-sources": "*",
+ "source-map": "^0.6.0"
+ }
+ },
+ "node_modules/@types/webpack-sources": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.7.tgz",
+ "integrity": "sha512-XyaHrJILjK1VHVC4aVlKsdNN5KBTwufMb43cQs+flGxtPAf/1Qwl8+Q0tp5BwEGaI8D6XT1L+9bSWXckgkjTLw==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*",
+ "@types/source-list-map": "*",
+ "source-map": "^0.6.1"
+ }
+ },
+ "node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "4.15.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.15.0.tgz",
+ "integrity": "sha512-DJgdGZW+8CFUTz5C/dnn4ONcUm2h2T0itWD85Ob5/V27Ndie8hUoX5HKyGssvR8sUMkAIlUc/AMK67Lqa3kBIQ==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/experimental-utils": "4.15.0",
+ "@typescript-eslint/scope-manager": "4.15.0",
+ "debug": "^4.1.1",
+ "functional-red-black-tree": "^1.0.1",
+ "lodash": "^4.17.15",
+ "regexpp": "^3.0.0",
+ "semver": "^7.3.2",
+ "tsutils": "^3.17.1"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/experimental-utils": {
+ "version": "4.15.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.15.0.tgz",
+ "integrity": "sha512-V4vaDWvxA2zgesg4KPgEGiomWEBpJXvY4ZX34Y3qxK8LUm5I87L+qGIOTd9tHZOARXNRt9pLbblSKiYBlGMawg==",
+ "dev": true,
+ "dependencies": {
+ "@types/json-schema": "^7.0.3",
+ "@typescript-eslint/scope-manager": "4.15.0",
+ "@typescript-eslint/types": "4.15.0",
+ "@typescript-eslint/typescript-estree": "4.15.0",
+ "eslint-scope": "^5.0.0",
+ "eslint-utils": "^2.0.0"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/parser": {
+ "version": "4.15.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.15.0.tgz",
+ "integrity": "sha512-L6Dtbq8Bc7g2aZwnIBETpmUa9XDKCMzKVwAArnGp5Mn7PRNFjf3mUzq8UeBjL3K8t311hvevnyqXAMSmxO8Gpg==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "4.15.0",
+ "@typescript-eslint/types": "4.15.0",
+ "@typescript-eslint/typescript-estree": "4.15.0",
+ "debug": "^4.1.1"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "4.15.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.15.0.tgz",
+ "integrity": "sha512-CSNBZnCC2jEA/a+pR9Ljh8Y+5TY5qgbPz7ICEk9WCpSEgT6Pi7H2RIjxfrrbUXvotd6ta+i27sssKEH8Azm75g==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "4.15.0",
+ "@typescript-eslint/visitor-keys": "4.15.0"
+ },
+ "engines": {
+ "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
+ }
+ },
+ "node_modules/@typescript-eslint/types": {
+ "version": "4.15.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.15.0.tgz",
+ "integrity": "sha512-su4RHkJhS+iFwyqyXHcS8EGPlUVoC+XREfy5daivjLur9JP8GhvTmDipuRpcujtGC4M+GYhUOJCPDE3rC5NJrg==",
+ "dev": true,
+ "engines": {
+ "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "4.15.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.15.0.tgz",
+ "integrity": "sha512-jG6xTmcNbi6xzZq0SdWh7wQ9cMb2pqXaUp6bUZOMsIlu5aOlxGxgE/t6L/gPybybQGvdguajXGkZKSndZJpksA==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "4.15.0",
+ "@typescript-eslint/visitor-keys": "4.15.0",
+ "debug": "^4.1.1",
+ "globby": "^11.0.1",
+ "is-glob": "^4.0.1",
+ "semver": "^7.3.2",
+ "tsutils": "^3.17.1"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": {
+ "version": "11.0.2",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz",
+ "integrity": "sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==",
+ "dev": true,
+ "dependencies": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.1.1",
+ "ignore": "^5.1.4",
+ "merge2": "^1.3.0",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/ignore": {
+ "version": "5.1.8",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
+ "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "4.15.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.15.0.tgz",
+ "integrity": "sha512-RnDtJwOwFucWFAMjG3ghCG/ikImFJFEg20DI7mn4pHEx3vC48lIAoyjhffvfHmErRDboUPC7p9Z2il4CLb7qxA==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "4.15.0",
+ "eslint-visitor-keys": "^2.0.0"
+ },
+ "engines": {
+ "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz",
+ "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@webassemblyjs/ast": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz",
+ "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/helper-numbers": "1.11.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.0"
+ }
+ },
+ "node_modules/@webassemblyjs/floating-point-hex-parser": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz",
+ "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==",
+ "dev": true
+ },
+ "node_modules/@webassemblyjs/helper-api-error": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz",
+ "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==",
+ "dev": true
+ },
+ "node_modules/@webassemblyjs/helper-buffer": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz",
+ "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==",
+ "dev": true
+ },
+ "node_modules/@webassemblyjs/helper-numbers": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz",
+ "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/floating-point-hex-parser": "1.11.0",
+ "@webassemblyjs/helper-api-error": "1.11.0",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "node_modules/@webassemblyjs/helper-wasm-bytecode": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz",
+ "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==",
+ "dev": true
+ },
+ "node_modules/@webassemblyjs/helper-wasm-section": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz",
+ "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.11.0",
+ "@webassemblyjs/helper-buffer": "1.11.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.0",
+ "@webassemblyjs/wasm-gen": "1.11.0"
+ }
+ },
+ "node_modules/@webassemblyjs/ieee754": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz",
+ "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==",
+ "dev": true,
+ "dependencies": {
+ "@xtuc/ieee754": "^1.2.0"
+ }
+ },
+ "node_modules/@webassemblyjs/leb128": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz",
+ "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==",
+ "dev": true,
+ "dependencies": {
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "node_modules/@webassemblyjs/utf8": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz",
+ "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==",
+ "dev": true
+ },
+ "node_modules/@webassemblyjs/wasm-edit": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz",
+ "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.11.0",
+ "@webassemblyjs/helper-buffer": "1.11.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.0",
+ "@webassemblyjs/helper-wasm-section": "1.11.0",
+ "@webassemblyjs/wasm-gen": "1.11.0",
+ "@webassemblyjs/wasm-opt": "1.11.0",
+ "@webassemblyjs/wasm-parser": "1.11.0",
+ "@webassemblyjs/wast-printer": "1.11.0"
+ }
+ },
+ "node_modules/@webassemblyjs/wasm-gen": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz",
+ "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.11.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.0",
+ "@webassemblyjs/ieee754": "1.11.0",
+ "@webassemblyjs/leb128": "1.11.0",
+ "@webassemblyjs/utf8": "1.11.0"
+ }
+ },
+ "node_modules/@webassemblyjs/wasm-opt": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz",
+ "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.11.0",
+ "@webassemblyjs/helper-buffer": "1.11.0",
+ "@webassemblyjs/wasm-gen": "1.11.0",
+ "@webassemblyjs/wasm-parser": "1.11.0"
+ }
+ },
+ "node_modules/@webassemblyjs/wasm-parser": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz",
+ "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.11.0",
+ "@webassemblyjs/helper-api-error": "1.11.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.0",
+ "@webassemblyjs/ieee754": "1.11.0",
+ "@webassemblyjs/leb128": "1.11.0",
+ "@webassemblyjs/utf8": "1.11.0"
+ }
+ },
+ "node_modules/@webassemblyjs/wast-printer": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz",
+ "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.11.0",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "node_modules/@webpack-cli/configtest": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.1.tgz",
+ "integrity": "sha512-B+4uBUYhpzDXmwuo3V9yBH6cISwxEI4J+NO5ggDaGEEHb0osY/R7MzeKc0bHURXQuZjMM4qD+bSJCKIuI3eNBQ==",
+ "dev": true
+ },
+ "node_modules/@webpack-cli/info": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.2.tgz",
+ "integrity": "sha512-5U9kUJHnwU+FhKH4PWGZuBC1hTEPYyxGSL5jjoBI96Gx8qcYJGOikpiIpFoTq8mmgX3im2zAo2wanv/alD74KQ==",
+ "dev": true,
+ "dependencies": {
+ "envinfo": "^7.7.3"
+ }
+ },
+ "node_modules/@webpack-cli/serve": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.3.0.tgz",
+ "integrity": "sha512-k2p2VrONcYVX1wRRrf0f3X2VGltLWcv+JzXRBDmvCxGlCeESx4OXw91TsWeKOkp784uNoVQo313vxJFHXPPwfw==",
+ "dev": true
+ },
+ "node_modules/@xtuc/ieee754": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+ "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
+ "dev": true
+ },
+ "node_modules/@xtuc/long": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
+ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
+ "dev": true
+ },
+ "node_modules/acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz",
+ "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==",
+ "dev": true
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "node_modules/ajv-keywords": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+ "dev": true
+ },
+ "node_modules/ansi-colors": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
+ "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "node_modules/array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "dev": true,
+ "dependencies": {
+ "array-uniq": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/astral-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
+ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "node_modules/big.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.16.3",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz",
+ "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==",
+ "dev": true,
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001181",
+ "colorette": "^1.2.1",
+ "electron-to-chromium": "^1.3.649",
+ "escalade": "^3.1.1",
+ "node-releases": "^1.1.70"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/buffer-from": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
+ "dev": true
+ },
+ "node_modules/bufferutil": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.3.tgz",
+ "integrity": "sha512-yEYTwGndELGvfXsImMBLop58eaGW+YdONi1fNjTINSY98tmMmFijBG6WXgdkfuLNt4imzQNtIE+eBp1PVpMCSw==",
+ "hasInstallScript": true,
+ "dependencies": {
+ "node-gyp-build": "^4.2.0"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001185",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001185.tgz",
+ "integrity": "sha512-Fpi4kVNtNvJ15H0F6vwmXtb3tukv3Zg3qhKkOGUq7KJ1J6b9kf4dnNgtEAFXhRsJo0gNj9W60+wBvn0JcTvdTg==",
+ "dev": true
+ },
+ "node_modules/chalk": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
+ "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/chalk/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/chalk/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/chalk/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/chalk/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/chalk/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/chrome-trace-event": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz",
+ "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=6.0"
+ }
+ },
+ "node_modules/chrome-trace-event/node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
+ },
+ "node_modules/clean-webpack-plugin": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz",
+ "integrity": "sha512-MciirUH5r+cYLGCOL5JX/ZLzOZbVr1ot3Fw+KcvbhUb6PM+yycqd9ZhIlcigQ5gl+XhppNmw3bEFuaaMNyLj3A==",
+ "dev": true,
+ "dependencies": {
+ "@types/webpack": "^4.4.31",
+ "del": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=8.9.0"
+ }
+ },
+ "node_modules/clone-deep": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
+ "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
+ "dev": true,
+ "dependencies": {
+ "is-plain-object": "^2.0.4",
+ "kind-of": "^6.0.2",
+ "shallow-clone": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "node_modules/colorette": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz",
+ "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==",
+ "dev": true
+ },
+ "node_modules/commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+ "dev": true
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "node_modules/core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/dayjs": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.4.tgz",
+ "integrity": "sha512-RI/Hh4kqRc1UKLOAf/T5zdMMX5DQIlDxwUe3wSyMMnEbGunnpENCdbUgM+dW7kXidZqCttBrmw7BhN4TMddkCw=="
+ },
+ "node_modules/debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "node_modules/del": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz",
+ "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/glob": "^7.1.1",
+ "globby": "^6.1.0",
+ "is-path-cwd": "^2.0.0",
+ "is-path-in-cwd": "^2.0.0",
+ "p-map": "^2.0.0",
+ "pify": "^4.0.1",
+ "rimraf": "^2.6.3"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "dependencies": {
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/discord-rpc": {
+ "resolved": "git+ssh://git@github.com/discordjs/RPC.git#cbdd31f98b20de0222a793ae0b14018f8119cfb2",
+ "dependencies": {
+ "node-fetch": "^2.6.1",
+ "ws": "^7.3.1"
+ }
+ },
+ "node_modules/doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.3.657",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.657.tgz",
+ "integrity": "sha512-/9ROOyvEflEbaZFUeGofD+Tqs/WynbSTbNgNF+/TJJxH1ePD/e6VjZlDJpW3FFFd3nj5l3Hd8ki2vRwy+gyRFw==",
+ "dev": true
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "node_modules/emojis-list": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
+ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/enhanced-resolve": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz",
+ "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "memory-fs": "^0.5.0",
+ "tapable": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/enquirer": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
+ "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
+ "dev": true,
+ "dependencies": {
+ "ansi-colors": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/envinfo": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.7.4.tgz",
+ "integrity": "sha512-TQXTYFVVwwluWSFis6K2XKxgrD22jEv0FTuLCQI+OjH7rn93+iY0fSSFM5lrSxFY+H1+B0/cvvlamr3UsBivdQ==",
+ "dev": true,
+ "bin": {
+ "envinfo": "dist/cli.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/errno": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
+ "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==",
+ "dev": true,
+ "dependencies": {
+ "prr": "~1.0.1"
+ },
+ "bin": {
+ "errno": "cli.js"
+ }
+ },
+ "node_modules/es-module-lexer": {
+ "version": "0.3.26",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.3.26.tgz",
+ "integrity": "sha512-Va0Q/xqtrss45hWzP8CZJwzGSZJjDM5/MJRE3IXXnUCcVLElR9BRaE9F62BopysASyc4nM3uwhSW7FFB9nlWAA==",
+ "dev": true
+ },
+ "node_modules/escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "7.19.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.19.0.tgz",
+ "integrity": "sha512-CGlMgJY56JZ9ZSYhJuhow61lMPPjUzWmChFya71Z/jilVos7mR/jPgaEfVGgMBY5DshbKdG8Ezb8FDCHcoMEMg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "@eslint/eslintrc": "^0.3.0",
+ "ajv": "^6.10.0",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.0.1",
+ "doctrine": "^3.0.0",
+ "enquirer": "^2.3.5",
+ "eslint-scope": "^5.1.1",
+ "eslint-utils": "^2.1.0",
+ "eslint-visitor-keys": "^2.0.0",
+ "espree": "^7.3.1",
+ "esquery": "^1.2.0",
+ "esutils": "^2.0.2",
+ "file-entry-cache": "^6.0.0",
+ "functional-red-black-tree": "^1.0.1",
+ "glob-parent": "^5.0.0",
+ "globals": "^12.1.0",
+ "ignore": "^4.0.6",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "js-yaml": "^3.13.1",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash": "^4.17.20",
+ "minimatch": "^3.0.4",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.1",
+ "progress": "^2.0.0",
+ "regexpp": "^3.1.0",
+ "semver": "^7.2.1",
+ "strip-ansi": "^6.0.0",
+ "strip-json-comments": "^3.1.0",
+ "table": "^6.0.4",
+ "text-table": "^0.2.0",
+ "v8-compile-cache": "^2.0.3"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/eslint-config-aqua": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-aqua/-/eslint-config-aqua-8.0.0.tgz",
+ "integrity": "sha512-TKvuVmjsb9b31dAWDptI9vY2DlUGidhL2slX20GZtnWALRdoH8cjSOeLpDF2H+yU+wSVDL/Ni0oFWPaG8L8lWA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/eslint-config-marine": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-marine/-/eslint-config-marine-8.1.0.tgz",
+ "integrity": "sha512-BSYZe12AZoOi83Up2KhfmvVRzaqgMIgTC8q73/M8AvL/bsLxi3cz0hNKPx+NL9KHFeopGaaGiE3h0o/fXBdFCQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eslint-config-aqua": "^8.0.0"
+ }
+ },
+ "node_modules/eslint-config-prettier": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-7.2.0.tgz",
+ "integrity": "sha512-rV4Qu0C3nfJKPOAhFujFxB7RMP+URFyQqqOZW9DMRD7ZDTFyjaIlETU3xzHELt++4ugC0+Jm084HQYkkJe+Ivg==",
+ "dev": true,
+ "bin": {
+ "eslint-config-prettier": "bin/cli.js"
+ }
+ },
+ "node_modules/eslint-plugin-prettier": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.1.tgz",
+ "integrity": "sha512-Rq3jkcFY8RYeQLgk2cCwuc0P7SEFwDravPhsJZOQ5N4YI4DSg50NyqJ/9gdZHzQlHf8MvafSesbNJCcP/FF6pQ==",
+ "dev": true,
+ "dependencies": {
+ "prettier-linter-helpers": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/eslint-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
+ "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/eslint/node_modules/eslint-visitor-keys": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz",
+ "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/espree": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
+ "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^7.4.0",
+ "acorn-jsx": "^5.3.1",
+ "eslint-visitor-keys": "^1.3.0"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true,
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz",
+ "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esquery/node_modules/estraverse": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
+ "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esrecurse/node_modules/estraverse": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
+ "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/events": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz",
+ "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.x"
+ }
+ },
+ "node_modules/execa": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz",
+ "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==",
+ "dev": true,
+ "dependencies": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.0",
+ "human-signals": "^2.1.0",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.1",
+ "onetime": "^5.1.2",
+ "signal-exit": "^3.0.3",
+ "strip-final-newline": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
+ "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==",
+ "dev": true
+ },
+ "node_modules/fast-diff": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz",
+ "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==",
+ "dev": true
+ },
+ "node_modules/fast-glob": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz",
+ "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.0",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.2",
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "node_modules/fastest-levenshtein": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz",
+ "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==",
+ "dev": true
+ },
+ "node_modules/fastq": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.9.0.tgz",
+ "integrity": "sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w==",
+ "dev": true,
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz",
+ "integrity": "sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==",
+ "dev": true,
+ "dependencies": {
+ "flat-cache": "^3.0.4"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+ "dev": true,
+ "dependencies": {
+ "flatted": "^3.1.0",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/flat-cache/node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz",
+ "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==",
+ "dev": true
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "node_modules/functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true
+ },
+ "node_modules/get-stream": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz",
+ "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
+ "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/glob-to-regexp": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
+ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
+ "dev": true
+ },
+ "node_modules/globals": {
+ "version": "12.4.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
+ "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.8.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/globby": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
+ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
+ "dev": true,
+ "dependencies": {
+ "array-union": "^1.0.1",
+ "glob": "^7.0.3",
+ "object-assign": "^4.0.1",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/globby/node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
+ "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==",
+ "dev": true
+ },
+ "node_modules/has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/human-signals": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10.17.0"
+ }
+ },
+ "node_modules/ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/import-local": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz",
+ "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==",
+ "dev": true,
+ "dependencies": {
+ "pkg-dir": "^4.2.0",
+ "resolve-cwd": "^3.0.0"
+ },
+ "bin": {
+ "import-local-fixture": "fixtures/cli.js"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "node_modules/interpret": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz",
+ "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz",
+ "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==",
+ "dev": true,
+ "dependencies": {
+ "has": "^1.0.3"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-path-cwd": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
+ "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/is-path-in-cwd": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz",
+ "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==",
+ "dev": true,
+ "dependencies": {
+ "is-path-inside": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/is-path-inside": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz",
+ "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==",
+ "dev": true,
+ "dependencies": {
+ "path-is-inside": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
+ "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "node_modules/isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/jest-worker": {
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz",
+ "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*",
+ "merge-stream": "^2.0.0",
+ "supports-color": "^7.0.0"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ }
+ },
+ "node_modules/jest-worker/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-worker/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true
+ },
+ "node_modules/js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/json-parse-better-errors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
+ "dev": true
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
+ "node_modules/json5": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz",
+ "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.2.5"
+ },
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/loader-runner": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz",
+ "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.11.5"
+ }
+ },
+ "node_modules/loader-utils": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
+ "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
+ "dev": true,
+ "dependencies": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^2.1.2"
+ },
+ "engines": {
+ "node": ">=8.9.0"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.20",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
+ "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==",
+ "dev": true
+ },
+ "node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/memory-fs": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
+ "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
+ "dev": true,
+ "dependencies": {
+ "errno": "^0.1.3",
+ "readable-stream": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=4.3.0 <5.0.0 || >=5.10"
+ }
+ },
+ "node_modules/merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "dev": true
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
+ "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
+ "dev": true,
+ "dependencies": {
+ "braces": "^3.0.1",
+ "picomatch": "^2.0.5"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.45.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz",
+ "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.28",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz",
+ "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==",
+ "dev": true,
+ "dependencies": {
+ "mime-db": "1.45.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
+ "dev": true
+ },
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "node_modules/neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+ "dev": true
+ },
+ "node_modules/node-fetch": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
+ "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==",
+ "engines": {
+ "node": "4.x || >=6.0.0"
+ }
+ },
+ "node_modules/node-gyp-build": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.2.3.tgz",
+ "integrity": "sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg==",
+ "bin": {
+ "node-gyp-build": "bin.js",
+ "node-gyp-build-optional": "optional.js",
+ "node-gyp-build-test": "build-test.js"
+ }
+ },
+ "node_modules/node-releases": {
+ "version": "1.1.70",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.70.tgz",
+ "integrity": "sha512-Slf2s69+2/uAD79pVVQo8uSiC34+g8GWY8UH2Qtqv34ZfhYrxpYpfzs9Js9d6O0mbDmALuxaTlplnBTnSELcrw==",
+ "dev": true
+ },
+ "node_modules/npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "dependencies": {
+ "mimic-fn": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
+ "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+ "dev": true,
+ "dependencies": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/p-locate/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/p-map": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
+ "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+ "dev": true
+ },
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/picomatch": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
+ "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "dependencies": {
+ "pinkie": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/prettier": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz",
+ "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==",
+ "dev": true,
+ "bin": {
+ "prettier": "bin-prettier.js"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/prettier-linter-helpers": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
+ "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
+ "dev": true,
+ "dependencies": {
+ "fast-diff": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+ "dev": true
+ },
+ "node_modules/progress": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/prr": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
+ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
+ "dev": true
+ },
+ "node_modules/punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "node_modules/readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/rechoir": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz",
+ "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==",
+ "dev": true,
+ "dependencies": {
+ "resolve": "^1.9.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/regexpp": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz",
+ "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/require-from-string": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.19.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz",
+ "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==",
+ "dev": true,
+ "dependencies": {
+ "is-core-module": "^2.1.0",
+ "path-parse": "^1.0.6"
+ }
+ },
+ "node_modules/resolve-cwd": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
+ "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
+ "dev": true,
+ "dependencies": {
+ "resolve-from": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/resolve-cwd/node_modules/resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true,
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.1.10",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz",
+ "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==",
+ "dev": true
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "node_modules/schema-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz",
+ "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==",
+ "dev": true,
+ "dependencies": {
+ "@types/json-schema": "^7.0.6",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.3.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
+ "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/serialize-javascript": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz",
+ "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==",
+ "dev": true,
+ "dependencies": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "node_modules/shallow-clone": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
+ "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
+ "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
+ "dev": true
+ },
+ "node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/slice-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
+ "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/slice-ansi/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/slice-ansi/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/slice-ansi/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/source-list-map": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
+ "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==",
+ "dev": true
+ },
+ "node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-support": {
+ "version": "0.5.19",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
+ "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
+ "dev": true,
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "node_modules/sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ },
+ "node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
+ "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-final-newline": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/table": {
+ "version": "6.0.7",
+ "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz",
+ "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^7.0.2",
+ "lodash": "^4.17.20",
+ "slice-ansi": "^4.0.0",
+ "string-width": "^4.2.0"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/table/node_modules/ajv": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.0.3.tgz",
+ "integrity": "sha512-R50QRlXSxqXcQP5SvKUrw8VZeypvo12i2IX0EeR5PiZ7bEKeHWgzgo264LDadUsCU42lTJVhFikTqJwNeH34gQ==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "node_modules/table/node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true
+ },
+ "node_modules/tapable": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
+ "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/terser": {
+ "version": "5.5.1",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.5.1.tgz",
+ "integrity": "sha512-6VGWZNVP2KTUcltUQJ25TtNjx/XgdDsBDKGt8nN0MpydU36LmbPPcMBd2kmtZNNGVVDLg44k7GKeHHj+4zPIBQ==",
+ "dev": true,
+ "dependencies": {
+ "commander": "^2.20.0",
+ "source-map": "~0.7.2",
+ "source-map-support": "~0.5.19"
+ },
+ "bin": {
+ "terser": "bin/terser"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/terser-webpack-plugin": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz",
+ "integrity": "sha512-5XNNXZiR8YO6X6KhSGXfY0QrGrCRlSwAEjIIrlRQR4W8nP69TaJUlh3bkuac6zzgspiGPfKEHcY295MMVExl5Q==",
+ "dev": true,
+ "dependencies": {
+ "jest-worker": "^26.6.2",
+ "p-limit": "^3.1.0",
+ "schema-utils": "^3.0.0",
+ "serialize-javascript": "^5.0.1",
+ "source-map": "^0.6.1",
+ "terser": "^5.5.1"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ }
+ },
+ "node_modules/terser/node_modules/source-map": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
+ "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/ts-loader": {
+ "version": "8.0.16",
+ "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.0.16.tgz",
+ "integrity": "sha512-Cr9ywsgg1n8cjGjIogHLPlqe3WJUHzuJaqwNo5I596KpIqekKzxvSENbrXeOypHcXSPPsr8hV6mglngyXvcKrg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^4.1.0",
+ "enhanced-resolve": "^4.0.0",
+ "loader-utils": "^2.0.0",
+ "micromatch": "^4.0.0",
+ "semver": "^7.3.4"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/ts-loader/node_modules/semver": {
+ "version": "7.3.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
+ "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz",
+ "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A=="
+ },
+ "node_modules/tsutils": {
+ "version": "3.17.1",
+ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz",
+ "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^1.8.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/tsutils/node_modules/tslib": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz",
+ "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==",
+ "dev": true
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.4.tgz",
+ "integrity": "sha512-+Uru0t8qIRgjuCpiSPpfGuhHecMllk5Zsazj5LZvVsEStEjmIRRBZe+jHjGQvsgS7M1wONy2PQXd67EMyV6acg==",
+ "dev": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=4.2.0"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+ "dev": true,
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/utf-8-validate": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.4.tgz",
+ "integrity": "sha512-MEF05cPSq3AwJ2C7B7sHAA6i53vONoZbMGX8My5auEVm6W+dJ2Jd/TZPyGJ5CH42V2XtbI5FD28HeHeqlPzZ3Q==",
+ "hasInstallScript": true,
+ "dependencies": {
+ "node-gyp-build": "^4.2.0"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "node_modules/v8-compile-cache": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz",
+ "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==",
+ "dev": true
+ },
+ "node_modules/watchpack": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz",
+ "integrity": "sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw==",
+ "dev": true,
+ "dependencies": {
+ "glob-to-regexp": "^0.4.1",
+ "graceful-fs": "^4.1.2"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/webpack": {
+ "version": "5.21.2",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.21.2.tgz",
+ "integrity": "sha512-xHflCenx+AM4uWKX71SWHhxml5aMXdy2tu/vdi4lClm7PADKxlyDAFFN1rEFzNV0MAoPpHtBeJnl/+K6F4QBPg==",
+ "dev": true,
+ "dependencies": {
+ "@types/eslint-scope": "^3.7.0",
+ "@types/estree": "^0.0.46",
+ "@webassemblyjs/ast": "1.11.0",
+ "@webassemblyjs/wasm-edit": "1.11.0",
+ "@webassemblyjs/wasm-parser": "1.11.0",
+ "acorn": "^8.0.4",
+ "browserslist": "^4.14.5",
+ "chrome-trace-event": "^1.0.2",
+ "enhanced-resolve": "^5.7.0",
+ "es-module-lexer": "^0.3.26",
+ "eslint-scope": "^5.1.1",
+ "events": "^3.2.0",
+ "glob-to-regexp": "^0.4.1",
+ "graceful-fs": "^4.2.4",
+ "json-parse-better-errors": "^1.0.2",
+ "loader-runner": "^4.2.0",
+ "mime-types": "^2.1.27",
+ "neo-async": "^2.6.2",
+ "schema-utils": "^3.0.0",
+ "tapable": "^2.1.1",
+ "terser-webpack-plugin": "^5.1.1",
+ "watchpack": "^2.0.0",
+ "webpack-sources": "^2.1.1"
+ },
+ "bin": {
+ "webpack": "bin/webpack.js"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/webpack-cli": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.5.0.tgz",
+ "integrity": "sha512-wXg/ef6Ibstl2f50mnkcHblRPN/P9J4Nlod5Hg9HGFgSeF8rsqDGHJeVe4aR26q9l62TUJi6vmvC2Qz96YJw1Q==",
+ "dev": true,
+ "dependencies": {
+ "@discoveryjs/json-ext": "^0.5.0",
+ "@webpack-cli/configtest": "^1.0.1",
+ "@webpack-cli/info": "^1.2.2",
+ "@webpack-cli/serve": "^1.3.0",
+ "colorette": "^1.2.1",
+ "commander": "^7.0.0",
+ "enquirer": "^2.3.6",
+ "execa": "^5.0.0",
+ "fastest-levenshtein": "^1.0.12",
+ "import-local": "^3.0.2",
+ "interpret": "^2.2.0",
+ "rechoir": "^0.7.0",
+ "v8-compile-cache": "^2.2.0",
+ "webpack-merge": "^5.7.3"
+ },
+ "bin": {
+ "webpack-cli": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/webpack-cli/node_modules/commander": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.0.0.tgz",
+ "integrity": "sha512-ovx/7NkTrnPuIV8sqk/GjUIIM1+iUQeqA3ye2VNpq9sVoiZsooObWlQy+OPWGI17GDaEoybuAGJm6U8yC077BA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/webpack-merge": {
+ "version": "5.7.3",
+ "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz",
+ "integrity": "sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA==",
+ "dev": true,
+ "dependencies": {
+ "clone-deep": "^4.0.1",
+ "wildcard": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/webpack-sources": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz",
+ "integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==",
+ "dev": true,
+ "dependencies": {
+ "source-list-map": "^2.0.1",
+ "source-map": "^0.6.1"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/webpack/node_modules/acorn": {
+ "version": "8.0.5",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.0.5.tgz",
+ "integrity": "sha512-v+DieK/HJkJOpFBETDJioequtc3PfxsWMaxIdIwujtF7FEV/MAyDQLlm6/zPvr7Mix07mLh6ccVwIsloceodlg==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/webpack/node_modules/enhanced-resolve": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz",
+ "integrity": "sha512-6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/webpack/node_modules/tapable": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz",
+ "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/wildcard": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz",
+ "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==",
+ "dev": true
+ },
+ "node_modules/word-wrap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "node_modules/ws": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.1.tgz",
+ "integrity": "sha512-pTsP8UAfhy3sk1lSk/O/s4tjD0CRwvMnzvwr4OKGX7ZvqZtUyx4KIJB5JWbkykPoc55tixMGgTNoh3k4FkNGFQ==",
+ "engines": {
+ "node": ">=8.3.0"
+ }
+ },
+ "node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ }
+ },
"dependencies": {
"@babel/code-frame": {
"version": "7.12.11",
@@ -67,18 +3230,6 @@
"strip-json-comments": "^3.1.1"
}
},
- "@microsoft/servicehub-framework": {
- "version": "2.6.74",
- "resolved": "https://registry.npmjs.org/@microsoft/servicehub-framework/-/servicehub-framework-2.6.74.tgz",
- "integrity": "sha512-QJ//zzvxffupIkzupnVbMYY5YDOP+g5FlG6x0Pl7svRyq8pAouiibckJJcZlMtsMypKWwAnVBKb9/sonEOsUxw==",
- "requires": {
- "await-semaphore": "^0.1.3",
- "msgpack-lite": "^0.1.26",
- "nerdbank-streams": "2.5.60",
- "strict-event-emitter-types": "^2.0.0",
- "vscode-jsonrpc": "^4.0.0"
- }
- },
"@nodelib/fs.scandir": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz",
@@ -603,11 +3754,6 @@
"integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
"dev": true
},
- "await-semaphore": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/await-semaphore/-/await-semaphore-0.1.3.tgz",
- "integrity": "sha512-d1W2aNSYcz/sxYO4pMGX9vq65qOTu0P800epMud+6cYYX0QcT7zyqcxec3VWzpgvdXo57UWmVbZpLMjX2m1I7Q=="
- },
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
@@ -672,22 +3818,12 @@
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
"dev": true
},
- "cancellationtoken": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/cancellationtoken/-/cancellationtoken-2.0.1.tgz",
- "integrity": "sha512-FVCOyTdjFtlhOHaF0R7PAOL0btq+dyhXUvIGtvJ7pr4wd4R31mdlX3ODTDaVk5R08+Fm+MSHwGA5BJH99sNYdQ=="
- },
"caniuse-lite": {
"version": "1.0.30001185",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001185.tgz",
"integrity": "sha512-Fpi4kVNtNvJ15H0F6vwmXtb3tukv3Zg3qhKkOGUq7KJ1J6b9kf4dnNgtEAFXhRsJo0gNj9W60+wBvn0JcTvdTg==",
"dev": true
},
- "caught": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/caught/-/caught-0.1.3.tgz",
- "integrity": "sha512-DTWI84qfoqHEV5jHRpsKNnEisVCeuBDscXXaXyRLXC+4RD6rFftUNuTElcQ7LeO7w622pfzWkA1f6xu5qEAidw=="
- },
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
@@ -827,6 +3963,11 @@
"which": "^2.0.1"
}
},
+ "dayjs": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.4.tgz",
+ "integrity": "sha512-RI/Hh4kqRc1UKLOAf/T5zdMMX5DQIlDxwUe3wSyMMnEbGunnpENCdbUgM+dW7kXidZqCttBrmw7BhN4TMddkCw=="
+ },
"debug": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
@@ -867,8 +4008,8 @@
}
},
"discord-rpc": {
- "version": "github:discordjs/RPC#cbdd31f98b20de0222a793ae0b14018f8119cfb2",
- "from": "github:discordjs/RPC#cbdd31f98b20de0222a793ae0b14018f8119cfb2",
+ "version": "git+ssh://git@github.com/discordjs/RPC.git#cbdd31f98b20de0222a793ae0b14018f8119cfb2",
+ "from": "discord-rpc@github:discordjs/RPC",
"requires": {
"node-fetch": "^2.6.1",
"ws": "^7.3.1"
@@ -1008,18 +4149,18 @@
}
},
"eslint-config-aqua": {
- "version": "7.3.0",
- "resolved": "https://registry.npmjs.org/eslint-config-aqua/-/eslint-config-aqua-7.3.0.tgz",
- "integrity": "sha512-rSOMrG5fpv/DtITtGKeOwTWYMeLiCaNLIsJlLABp2oeDs4qTaIE4Y3UdWc/10/C7Vuy/aNGiOidb/XAa6veFFg==",
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-aqua/-/eslint-config-aqua-8.0.0.tgz",
+ "integrity": "sha512-TKvuVmjsb9b31dAWDptI9vY2DlUGidhL2slX20GZtnWALRdoH8cjSOeLpDF2H+yU+wSVDL/Ni0oFWPaG8L8lWA==",
"dev": true
},
"eslint-config-marine": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/eslint-config-marine/-/eslint-config-marine-7.2.0.tgz",
- "integrity": "sha512-emIoQpexPl5Of4d/qZ+lf91JObvnJefGdsuNUQWH8p2E7iSSw8nQmOSocVdEUWjZoTzhf1z0x/UP4g9g6S2Kdw==",
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-marine/-/eslint-config-marine-8.1.0.tgz",
+ "integrity": "sha512-BSYZe12AZoOi83Up2KhfmvVRzaqgMIgTC8q73/M8AvL/bsLxi3cz0hNKPx+NL9KHFeopGaaGiE3h0o/fXBdFCQ==",
"dev": true,
"requires": {
- "eslint-config-aqua": "^7.3.0"
+ "eslint-config-aqua": "^8.0.0"
}
},
"eslint-config-prettier": {
@@ -1125,11 +4266,6 @@
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
"dev": true
},
- "event-lite": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/event-lite/-/event-lite-0.1.2.tgz",
- "integrity": "sha512-HnSYx1BsJ87/p6swwzv+2v6B4X+uxUteoDfRxsAb1S1BePzQqOLevVmkdA15GHJVd9A9Ok6wygUR18Hu0YeV9g=="
- },
"events": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz",
@@ -1371,11 +4507,6 @@
"integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
"dev": true
},
- "ieee754": {
- "version": "1.1.13",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
- "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
- },
"ignore": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
@@ -1424,11 +4555,6 @@
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
},
- "int64-buffer": {
- "version": "0.1.10",
- "resolved": "https://registry.npmjs.org/int64-buffer/-/int64-buffer-0.1.10.tgz",
- "integrity": "sha1-J3siiofZWtd30HwTgyAiQGpHNCM="
- },
"interpret": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz",
@@ -1513,7 +4639,8 @@
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
},
"isexe": {
"version": "2.0.0",
@@ -1729,17 +4856,6 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
- "msgpack-lite": {
- "version": "0.1.26",
- "resolved": "https://registry.npmjs.org/msgpack-lite/-/msgpack-lite-0.1.26.tgz",
- "integrity": "sha1-3TxQsm8FnyXn7e42REGDWOKprYk=",
- "requires": {
- "event-lite": "^0.1.1",
- "ieee754": "^1.1.8",
- "int64-buffer": "^0.1.9",
- "isarray": "^1.0.0"
- }
- },
"natural-compare": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
@@ -1752,17 +4868,6 @@
"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
"dev": true
},
- "nerdbank-streams": {
- "version": "2.5.60",
- "resolved": "https://registry.npmjs.org/nerdbank-streams/-/nerdbank-streams-2.5.60.tgz",
- "integrity": "sha512-saQaMyTtVDAEc+S+BPXKM6K1AF3FyrorFSDzaCkdmtDe2kZzu1aYPQZNLmnxJhxbTcghYrEmYFFoaDxBDVadCw==",
- "requires": {
- "await-semaphore": "^0.1.3",
- "cancellationtoken": "^2.0.1",
- "caught": "^0.1.3",
- "msgpack-lite": "^0.1.26"
- }
- },
"node-fetch": {
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
@@ -2225,10 +5330,14 @@
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
"dev": true
},
- "strict-event-emitter-types": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strict-event-emitter-types/-/strict-event-emitter-types-2.0.0.tgz",
- "integrity": "sha512-Nk/brWYpD85WlOgzw5h173aci0Teyv8YdIAEtV+N88nDB0dLlazZyJMIsN6eo1/AR61l+p6CJTG1JIyFaoNEEA=="
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
},
"string-width": {
"version": "4.2.0",
@@ -2241,15 +5350,6 @@
"strip-ansi": "^6.0.0"
}
},
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
"strip-ansi": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
@@ -2462,19 +5562,6 @@
"integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==",
"dev": true
},
- "vscode-jsonrpc": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-4.0.0.tgz",
- "integrity": "sha512-perEnXQdQOJMTDFNv+UF3h1Y0z4iSiaN9jIlb0OqIYgosPCZGYh/MCUlkFtV2668PL69lRDO32hmvL2yiidUYg=="
- },
- "vsls": {
- "version": "1.0.3015",
- "resolved": "https://registry.npmjs.org/vsls/-/vsls-1.0.3015.tgz",
- "integrity": "sha512-c+hG4X/aNdR4PM2nxUeooTEyDav8TQ8exfLSWIWp+h+us1jjhxGk2K+PDCrJxJmeIra/Ku4sdqMRv7P9hF6MRA==",
- "requires": {
- "@microsoft/servicehub-framework": "^2.6.74"
- }
- },
"watchpack": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz",
diff --git a/package.json b/package.json
index ba25012..20c8c7c 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "discord-vscode",
"displayName": "Discord Presence",
- "version": "4.1.0",
+ "version": "5.0.0",
"description": "Update your discord status with the newly added rich presence.",
"private": true,
"author": {
@@ -20,7 +20,6 @@
"scripts": {
"prebuild": "npm run lint",
"build": "webpack --mode production",
- "tsc": "tsc",
"lint": "eslint src --ext .ts",
"lint:fix": "eslint src --ext .ts --fix"
},
@@ -34,42 +33,22 @@
"commands": [
{
"command": "discord.enable",
- "title": "Enable Discord Presence in the Current Workspace",
+ "title": "Enable Discord Presence in the current workspace",
"category": "Discord Presence"
},
{
"command": "discord.disable",
- "title": "Disable Discord Presence in the Current Workspace",
+ "title": "Disable Discord Presence in the current workspace",
"category": "Discord Presence"
},
{
"command": "discord.reconnect",
- "title": "Reconnect Discord Presence to Discord RPC",
+ "title": "Reconnect Discord Presence to Discord",
"category": "Discord Presence"
},
{
"command": "discord.disconnect",
- "title": "Disconnect Discord Presence from Discord RPC",
- "category": "Discord Presence"
- },
- {
- "command": "discord.allowSpectate",
- "title": "Allow Spectating",
- "category": "Discord Presence"
- },
- {
- "command": "discord.disableSpectate",
- "title": "Disable Spectating",
- "category": "Discord Presence"
- },
- {
- "command": "discord.allowJoinRequests",
- "title": "Allow Join Requests",
- "category": "Discord Presence"
- },
- {
- "command": "discord.disableJoinRequests",
- "title": "Disable Join Requests",
+ "title": "Disconnect Discord Presence from Discord",
"category": "Discord Presence"
}
],
@@ -83,67 +62,67 @@
"default": true,
"description": "Controls if the Discord Presence should show across all workspaces"
},
- "discord.detailsEditing": {
- "type": "string",
- "default": "Editing {filename}",
- "description": "Custom string for the details section of the rich presence\n\t- '{null}' will be replaced with an empty space.\n\t- '{filename}' will be replaced with the current file name.\n\t- '{dirname}' will get replaced with the folder name that has the current file.\n\t- '{fulldirname}' will get replaced with the full directory name without the current file name.\n\t- '{workspace}' will be replaced with the current workspace name, if any.\n\t- '{workspaceFolder}' will be replaced with the currently accessed workspace folder, if any.\n\t- '{workspaceAndFolder} will be replaced with the currently accessed workspace and workspace folder like this: 'Workspace - WorkspaceFolder'\n\t- '{currentcolumn}' will get replaced with the current column of the current line.\n\t- '{currentline}' will get replaced with the current line number.\n\t- '{totallines}' will get replaced with the total line number.\n\t- '{filesize}' will get replaced with the current file's size.\n\t- '{gitreponame}' will be replaced with the active Git repository name (from the git URL)\n\t- '{gitbranch}' will be replaced with the current active branch name."
- },
- "discord.detailsDebugging": {
- "type": "string",
- "default": "Debugging {filename}",
- "description": "Custom string for the details section of the rich presence when debugging\n\t- '{null}' will be replaced with an empty space.\n\t- '{filename}' will be replaced with the current file name.\n\t- '{dirname}' will get replaced with the folder name that has the current file.\n\t- '{fulldirname}' will get replaced with the full directory name without the current file name.\n\t- '{workspace}' will be replaced with the current workspace name, if any.\n\t- '{workspaceFolder}' will be replaced with the currently accessed workspace folder, if any.\n\t- '{workspaceAndFolder} will be replaced with the currently accessed workspace and workspace folder like this: 'Workspace - WorkspaceFolder'\n\t- '{currentcolumn}' will get replaced with the current column of the current line.\n\t- '{currentline}' will get replaced with the current line number.\n\t- '{totallines}' will get replaced with the total line number.\n\t- '{filesize}' will get replaced with the current file's size.\n\t- '{gitreponame}' will be replaced with the active Git repository name (from the git URL)\n\t- '{gitbranch}' will be replaced with the current active branch name."
- },
- "discord.detailsIdle": {
+ "discord.details_idling": {
"type": "string",
"default": "Idling",
- "description": "Custom string for the details section of the rich presence when idling\n\t- '{null}' will be replaced with an empty space."
+ "description": "Custom string for the details section of the rich presence when idling\n\t- '{empty}' will be replaced with an empty space."
},
- "discord.lowerDetailsEditing": {
+ "discord.details_editing": {
+ "type": "string",
+ "default": "Editing {file_name}",
+ "description": "Custom string for the details section of the rich presence\n\t- '{empty}' will be replaced with an empty space.\n\t- '{file_name}' will be replaced with the current file name.\n\t- '{dir_name}' will get replaced with the folder name that has the current file.\n\t- '{full_dir_name}' will get replaced with the full directory name without the current file name.\n\t- '{workspace}' will be replaced with the current workspace name, if any.\n\t- '{workspace_folder}' will be replaced with the currently accessed workspace folder, if any.\n\t- '{workspace_and_folder} will be replaced with the currently accessed workspace and workspace folder like this: 'Workspace - WorkspaceFolder'\n\t- '{current_column}' will get replaced with the current column of the current line.\n\t- '{current_line}' will get replaced with the current line number.\n\t- '{total_lines}' will get replaced with the total line number.\n\t- '{file_size}' will get replaced with the current file's size.\n\t- '{git_repo_name}' will be replaced with the active Git repository name (from the git URL)\n\t- '{git_branch}' will be replaced with the current active branch name."
+ },
+ "discord.details_debugging": {
+ "type": "string",
+ "default": "Debugging {file_name}",
+ "description": "Custom string for the details section of the rich presence when debugging\n\t- '{empty}' will be replaced with an empty space.\n\t- '{file_name}' will be replaced with the current file name.\n\t- '{dir_name}' will get replaced with the folder name that has the current file.\n\t- '{full_dir_name}' will get replaced with the full directory name without the current file name.\n\t- '{workspace}' will be replaced with the current workspace name, if any.\n\t- '{workspace_folder}' will be replaced with the currently accessed workspace folder, if any.\n\t- '{workspace_and_folder} will be replaced with the currently accessed workspace and workspace folder like this: 'Workspace - WorkspaceFolder'\n\t- '{current_column}' will get replaced with the current column of the current line.\n\t- '{current_line}' will get replaced with the current line number.\n\t- '{total_lines}' will get replaced with the total line number.\n\t- '{file_size}' will get replaced with the current file's size.\n\t- '{git_repo_name}' will be replaced with the active Git repository name (from the git URL)\n\t- '{git_branch}' will be replaced with the current active branch name."
+ },
+ "discord.lower_details_idling": {
+ "type": "string",
+ "default": "Idling",
+ "description": "Custom string for the state section of the rich presence when idling\n\t- '{empty}' will be replaced with an empty space."
+ },
+ "discord.lower_details_editing": {
"type": "string",
"default": "Workspace: {workspace}",
- "description": "Custom string for the state section of the rich presence\n\t- '{null}' will be replaced with an empty space.\n\t- '{filename}' will be replaced with the current file name.\n\t- '{dirname}' will get replaced with the folder name that has the current file.\n\t- '{fulldirname}' will get replaced with the full directory name without the current file name.\n\t- '{workspace}' will be replaced with the current workspace name, if any.\n\t- '{workspaceFolder}' will be replaced with the currently accessed workspace folder, if any.\n\t- '{workspaceAndFolder} will be replaced with the currently accessed workspace and workspace folder like this: 'Workspace - WorkspaceFolder'\n\t- '{currentcolumn}' will get replaced with the current column of the current line.\n\t- '{currentline}' will get replaced with the current line number.\n\t- '{totallines}' will get replaced with the total line number.\n\t- '{filesize}' will get replaced with the current file's size.\n\t- '{gitreponame}' will be replaced with the active Git repository name (from the git URL)\n\t- '{gitbranch}' will be replaced with the current active branch name."
+ "description": "Custom string for the state section of the rich presence\n\t- '{empty}' will be replaced with an empty space.\n\t- '{file_name}' will be replaced with the current file name.\n\t- '{dir_name}' will get replaced with the folder name that has the current file.\n\t- '{full_dir_name}' will get replaced with the full directory name without the current file name.\n\t- '{workspace}' will be replaced with the current workspace name, if any.\n\t- '{workspace_folder}' will be replaced with the currently accessed workspace folder, if any.\n\t- '{workspace_and_folder} will be replaced with the currently accessed workspace and workspace folder like this: 'Workspace - WorkspaceFolder'\n\t- '{current_column}' will get replaced with the current column of the current line.\n\t- '{current_line}' will get replaced with the current line number.\n\t- '{total_lines}' will get replaced with the total line number.\n\t- '{file_size}' will get replaced with the current file's size.\n\t- '{git_repo_name}' will be replaced with the active Git repository name (from the git URL)\n\t- '{git_branch}' will be replaced with the current active branch name."
},
- "discord.lowerDetailsDebugging": {
+ "discord.lower_details_debugging": {
"type": "string",
"default": "Debugging: {workspace}",
- "description": "Custom string for the state section of the rich presence when debugging\n\t- '{null}' will be replaced with an empty space.\n\t- '{filename}' will be replaced with the current file name.\n\t- '{dirname}' will get replaced with the folder name that has the current file.\n\t- '{fulldirname}' will get replaced with the full directory name without the current file name..\n\t- '{workspace}' will be replaced with the current workspace name, if any.\n\t- '{workspaceFolder}' will be replaced with the currently accessed workspace folder, if any.\n\t- '{workspaceAndFolder} will be replaced with the currently accessed workspace and workspace folder like this: 'Workspace - WorkspaceFolder'\n\t- '{currentcolumn}' will get replaced with the current column of the current line.\n\t- '{currentline}' will get replaced with the current line number.\n\t- '{totallines}' will get replaced with the total line number.\n\t- '{filesize}' will get replaced with the current file's size.\n\t- '{gitreponame}' will be replaced with the active Git repository name (from the git URL)\n\t- '{gitbranch}' will be replaced with the current active branch name."
+ "description": "Custom string for the state section of the rich presence when debugging\n\t- '{empty}' will be replaced with an empty space.\n\t- '{file_name}' will be replaced with the current file name.\n\t- '{dir_name}' will get replaced with the folder name that has the current file.\n\t- '{full_dir_name}' will get replaced with the full directory name without the current file name.\n\t- '{workspace}' will be replaced with the current workspace name, if any.\n\t- '{workspace_folder}' will be replaced with the currently accessed workspace folder, if any.\n\t- '{workspace_and_folder} will be replaced with the currently accessed workspace and workspace folder like this: 'Workspace - WorkspaceFolder'\n\t- '{current_column}' will get replaced with the current column of the current line.\n\t- '{current_line}' will get replaced with the current line number.\n\t- '{total_lines}' will get replaced with the total line number.\n\t- '{file_size}' will get replaced with the current file's size.\n\t- '{git_repo_name}' will be replaced with the active Git repository name (from the git URL)\n\t- '{git_branch}' will be replaced with the current active branch name."
},
- "discord.lowerDetailsIdle": {
- "type": "string",
- "default": "Idling",
- "description": "Custom string for the state section of the rich presence when idling\n\t- '{null}' will be replaced with an empty space."
- },
- "discord.lowerDetailsNotFound": {
+ "discord.lower_details_no_workspace_found": {
"type": "string",
"default": "No workspace.",
- "description": "Custom string for the state section of the rich presence when no workspace is found.\nIf set to '{null}', this will be an empty space.\n\t- '{currentline}' will get replaced with the current line number.\n\t- '{totallines}' will get replaced with the total line number.\n\t- '{filesize}' will get replaced with the current file's size."
+ "description": "Custom string for the state section of the rich presence when no workspace is found.\nIf set to '{empty}', this will be an empty space.\n\t- '{current_line}' will get replaced with the current line number.\n\t- '{total_lines}' will get replaced with the total line number.\n\t- '{file_size}' will get replaced with the current file's size."
},
- "discord.largeImage": {
- "type": "string",
- "default": "Editing a {LANG} file",
- "description": "Custom string for the largeImageText section of the rich presence.\n\t- '{lang}' will be replaced with the lowercased language ID\n\t- '{LANG}' will be replaced with the uppercased language ID"
- },
- "discord.largeImageIdle": {
+ "discord.large_image_idling": {
"type": "string",
"default": "Idling",
"description": "Custom string for the largeImageText section of the rich presence when idling"
},
- "discord.smallImage": {
+ "discord.large_image": {
"type": "string",
- "default": "{appname}",
- "description": "Custom string for the smallImageText section of the rich presence\n\t- '{appname}' will get replaced with the current Visual Studio Code version."
+ "default": "Editing a {LANG} file",
+ "description": "Custom string for the largeImageText section of the rich presence.\n\t- '{lang}' will be replaced with the lowercased language ID\n\t- '{LANG}' will be replaced with the uppercased language ID"
},
- "discord.silent": {
+ "discord.small_image": {
+ "type": "string",
+ "default": "{app_name}",
+ "description": "Custom string for the smallImageText section of the rich presence\n\t- '{app_name}' will get replaced with the current Visual Studio Code version."
+ },
+ "discord.suppress_notifications": {
"type": "boolean",
"default": false,
"description": "Decides if error messages are shown to the user"
},
- "discord.workspaceElapsedTime": {
+ "discord.workspace_elapsed_time": {
"type": "boolean",
- "default": false,
+ "default": true,
"description": "Decides whether to display elapsed time for a workspace or a single file"
},
- "discord.workspaceExcludePatterns": {
+ "discord.workspace_exclude_patterns": {
"type": "array",
"items": {
"type": "string"
@@ -181,10 +160,10 @@
},
"dependencies": {
"bufferutil": "^4.0.3",
+ "dayjs": "^1.10.4",
"discord-rpc": "github:discordjs/RPC",
"tslib": "^2.1.0",
- "utf-8-validate": "^5.0.4",
- "vsls": "^1.0.3015"
+ "utf-8-validate": "^5.0.4"
},
"devDependencies": {
"@types/node": "^14.14.25",
@@ -193,7 +172,7 @@
"@typescript-eslint/parser": "^4.15.0",
"clean-webpack-plugin": "^3.0.0",
"eslint": "^7.19.0",
- "eslint-config-marine": "^7.2.0",
+ "eslint-config-marine": "^8.1.0",
"eslint-config-prettier": "^7.2.0",
"eslint-plugin-prettier": "^3.3.1",
"prettier": "^2.2.1",
@@ -204,6 +183,6 @@
"webpack-cli": "^4.5.0"
},
"engines": {
- "vscode": "^1.51.0"
+ "vscode": "^1.53.0"
}
}
diff --git a/src/activity.ts b/src/activity.ts
new file mode 100644
index 0000000..41cd962
--- /dev/null
+++ b/src/activity.ts
@@ -0,0 +1,193 @@
+import { basename, parse, sep } from 'path';
+import { debug, env, extensions, Selection, TextDocument, window, workspace } from 'vscode';
+
+import {
+ CONFIG_KEYS,
+ DEBUG_IMAGE_KEY,
+ EMPTY,
+ FILE_SIZES,
+ IDLE_IMAGE_KEY,
+ REPLACE_KEYS,
+ VSCODE_IMAGE_KEY,
+ VSCODE_INSIDERS_IMAGE_KEY,
+} from './constants';
+import { GitExtension } from './git';
+import { log, LogLevel } from './logger';
+import { getConfig, resolveFileIcon, toLower, toTitle, toUpper } from './util';
+
+interface ActivityPayload {
+ details: string;
+ state?: string;
+ startTimestamp?: number | null;
+ largeImageKey?: string;
+ largeImageText?: string;
+ smallImageKey?: string;
+ smallImageText?: string;
+ partyId?: string;
+ partySize?: number;
+ partyMax?: number;
+ matchSecret?: string;
+ joinSecret?: string;
+ spectateSecret?: string;
+ instance?: boolean;
+}
+
+export async function activity() {
+ const config = getConfig();
+
+ const appName = env.appName;
+ const defaultSmallImageKey = debug.activeDebugSession
+ ? DEBUG_IMAGE_KEY
+ : appName.includes('Insiders')
+ ? VSCODE_INSIDERS_IMAGE_KEY
+ : VSCODE_IMAGE_KEY;
+
+ let state: ActivityPayload = {
+ details: await details(CONFIG_KEYS.DetailsIdling, CONFIG_KEYS.DetailsEditing, CONFIG_KEYS.DetailsDebugging),
+ state: await details(
+ CONFIG_KEYS.LowerDetailsIdling,
+ CONFIG_KEYS.LowerDetailsEditing,
+ CONFIG_KEYS.LowerDetailsDebugging,
+ ),
+ startTimestamp: null,
+ largeImageKey: IDLE_IMAGE_KEY,
+ largeImageText: config[CONFIG_KEYS.LargeImageIdling],
+ smallImageKey: defaultSmallImageKey,
+ smallImageText: config[CONFIG_KEYS.SmallImage].replace(REPLACE_KEYS.AppName, appName),
+ };
+
+ if (window.activeTextEditor) {
+ const largeImageKey = resolveFileIcon(window.activeTextEditor.document);
+ const largeImageText = config[CONFIG_KEYS.LargeImage]
+ .replace(REPLACE_KEYS.LanguageLowerCase, toLower(largeImageKey))
+ .replace(REPLACE_KEYS.LanguageTitleCase, toTitle(largeImageKey))
+ .replace(REPLACE_KEYS.LanguageUpperCase, toUpper(largeImageKey))
+ .padEnd(2, EMPTY);
+
+ state = {
+ ...state,
+ details: await details(CONFIG_KEYS.DetailsIdling, CONFIG_KEYS.DetailsEditing, CONFIG_KEYS.DetailsDebugging),
+ state: await details(
+ CONFIG_KEYS.LowerDetailsIdling,
+ CONFIG_KEYS.LowerDetailsEditing,
+ CONFIG_KEYS.LowerDetailsDebugging,
+ ),
+ largeImageKey,
+ largeImageText,
+ };
+ }
+
+ log(LogLevel.Debug, JSON.stringify(state, null, 2));
+
+ return state;
+}
+
+async function details(idling: CONFIG_KEYS, editing: CONFIG_KEYS, debugging: CONFIG_KEYS) {
+ const config = getConfig();
+ let raw = (config[idling] as string).replace(REPLACE_KEYS.Empty, EMPTY);
+
+ if (window.activeTextEditor) {
+ const fileName = basename(window.activeTextEditor.document.fileName);
+ const { dir } = parse(window.activeTextEditor.document.fileName);
+ const split = dir.split(sep);
+ const dirName = split[split.length - 1];
+
+ const noWorkspaceFound = config[CONFIG_KEYS.LowerDetailsNoWorkspaceFound].replace(REPLACE_KEYS.Empty, EMPTY);
+ const workspaceFolder = workspace.getWorkspaceFolder(window.activeTextEditor.document.uri);
+ const workspaceFolderName = workspaceFolder?.name ?? noWorkspaceFound;
+ const workspaceName = workspace.name ?? workspaceFolderName;
+ const workspaceAndFolder = `${workspaceName}${workspaceFolderName === EMPTY ? '' : ` - ${workspaceFolderName}`}`;
+
+ const fileIcon = resolveFileIcon(window.activeTextEditor.document);
+
+ if (debug.activeDebugSession) {
+ raw = config[debugging] as string;
+ } else {
+ raw = config[editing] as string;
+ }
+
+ if (workspaceFolder) {
+ const { name } = workspaceFolder;
+ const relativePath = workspace.asRelativePath(window.activeTextEditor.document.fileName).split(sep);
+ relativePath.splice(-1, 1);
+ raw = raw.replace(REPLACE_KEYS.FullDirName, `${name}${sep}${relativePath.join(sep)}`);
+ }
+
+ raw = await fileDetails(raw, window.activeTextEditor.document, window.activeTextEditor.selection);
+ raw = raw
+ .replace(REPLACE_KEYS.FileName, fileName)
+ .replace(REPLACE_KEYS.DirName, dirName)
+ .replace(REPLACE_KEYS.Workspace, workspaceName)
+ .replace(REPLACE_KEYS.WorkspaceFolder, workspaceFolderName)
+ .replace(REPLACE_KEYS.WorkspaceAndFolder, workspaceAndFolder)
+ .replace(REPLACE_KEYS.LanguageLowerCase, toLower(fileIcon))
+ .replace(REPLACE_KEYS.LanguageTitleCase, toTitle(fileIcon))
+ .replace(REPLACE_KEYS.LanguageUpperCase, toUpper(fileIcon));
+ }
+
+ return raw;
+}
+
+async function fileDetails(_raw: string, document: TextDocument, selection: Selection) {
+ let raw = _raw.slice();
+ const gitExtension = extensions.getExtension
('vscode.git');
+ const git = gitExtension?.exports.getAPI(1);
+
+ if (raw.includes(REPLACE_KEYS.TotalLines)) {
+ raw = raw.replace(REPLACE_KEYS.TotalLines, document.toLocaleString());
+ }
+
+ if (raw.includes(REPLACE_KEYS.CurrentLine)) {
+ raw = raw.replace(REPLACE_KEYS.CurrentLine, (selection.active.line + 1).toLocaleString());
+ }
+
+ if (raw.includes(REPLACE_KEYS.CurrentColumn)) {
+ raw = raw.replace(REPLACE_KEYS.CurrentColumn, (selection.active.character + 1).toLocaleString());
+ }
+
+ if (raw.includes(REPLACE_KEYS.FileSize)) {
+ let currentDivision = 0;
+ let { size } = await workspace.fs.stat(document.uri);
+ const originalSize = size;
+ if (originalSize > 1000) {
+ size /= 1000;
+ currentDivision++;
+ while (size > 1000) {
+ currentDivision++;
+ size /= 1000;
+ }
+ }
+
+ raw = raw.replace(
+ REPLACE_KEYS.FileSize,
+ `${originalSize > 1000 ? size.toFixed(2) : size}${FILE_SIZES[currentDivision]}`,
+ );
+ }
+
+ if (raw.includes(REPLACE_KEYS.GitBranch)) {
+ if (git?.repositories.length) {
+ raw = raw.replace(
+ REPLACE_KEYS.GitBranch,
+ git.repositories.find((repo) => repo.ui.selected)?.state.HEAD?.name ?? EMPTY,
+ );
+ } else {
+ raw = raw.replace(REPLACE_KEYS.GitBranch, 'Unknown');
+ }
+ }
+
+ if (raw.includes(REPLACE_KEYS.GitRepoName)) {
+ if (git?.repositories.length) {
+ raw = raw.replace(
+ REPLACE_KEYS.GitRepoName,
+ git.repositories
+ .find((repo) => repo.ui.selected)
+ ?.state.remotes[0].fetchUrl?.split('/')[1]
+ .replace('.git', '') ?? EMPTY,
+ );
+ } else {
+ raw = raw.replace(REPLACE_KEYS.GitRepoName, 'Unknown');
+ }
+ }
+
+ return raw;
+}
diff --git a/src/client/RPCClient.ts b/src/client/RPCClient.ts
deleted file mode 100644
index 28209b8..0000000
--- a/src/client/RPCClient.ts
+++ /dev/null
@@ -1,172 +0,0 @@
-const { Client } = require('discord-rpc'); // eslint-disable-line
-import { Disposable, StatusBarItem, Uri, window, workspace, env } from 'vscode';
-import * as vsls from 'vsls';
-import Activity from '../structures/Activity';
-import Logger from '../structures/Logger';
-import { API } from '../git';
-
-let activityTimer: NodeJS.Timer | undefined;
-
-export default class RPCClient implements Disposable {
- public config = workspace.getConfiguration('discord');
-
- public git?: API;
-
- private rpc: any;
-
- private readonly activity = new Activity(this);
-
- public constructor(private readonly clientId: string, public statusBarIcon: StatusBarItem) {}
-
- public get client() {
- return this.rpc;
- }
-
- public async setActivity(workspaceElapsedTime = false) {
- if (!this.rpc) return;
- const activity = await this.activity.generate(workspaceElapsedTime);
- if (!activity) return;
- Logger.log('Sending activity to Discord.');
- this.rpc.setActivity(activity);
- }
-
- public allowSpectate() {
- if (!this.rpc) return;
- Logger.log('Allowed spectating.');
- Logger.log('Sending spectate activity to Discord.');
- void this.activity.allowSpectate();
- }
-
- public disableSpectate() {
- if (!this.rpc) return;
- Logger.log('Disabled spectating.');
- void this.activity.disableSpectate();
- }
-
- public allowJoinRequests() {
- if (!this.rpc) return;
- Logger.log('Allowed join requests.');
- Logger.log('Sending join activity to Discord.');
- void this.activity.allowJoinRequests();
- }
-
- public disableJoinRequests() {
- if (!this.rpc) return;
- Logger.log('Disabled join requests.');
- void this.activity.disableJoinRequests();
- }
-
- public async login() {
- if (this.rpc) {
- this.dispose();
- }
- this.rpc = new Client({ transport: 'ipc' });
-
- Logger.log('Logging into RPC...');
-
- this.rpc.transport.once('close', () => {
- if (!this.config.get('enabled')) return;
- void this.dispose();
- this.statusBarIcon.text = '$(plug) Reconnect to Discord';
- this.statusBarIcon.command = 'discord.reconnect';
- this.statusBarIcon.tooltip = '';
- });
-
- this.rpc.once('ready', async () => {
- Logger.log('Successfully connected to Discord.');
-
- this.statusBarIcon.text = '$(globe) Connected to Discord';
- this.statusBarIcon.tooltip = 'Connected to Discord';
-
- setTimeout(() => (this.statusBarIcon.text = '$(globe)'), 5000);
-
- if (activityTimer) clearInterval(activityTimer);
- void this.setActivity(this.config.get('workspaceElapsedTime'));
-
- activityTimer = setInterval(() => {
- this.config = workspace.getConfiguration('discord');
- void this.setActivity(this.config.get('workspaceElapsedTime'));
- }, 1000);
-
- this.rpc.subscribe('ACTIVITY_SPECTATE', async ({ secret }: { secret: string }) => {
- const liveshare = await vsls.getApi();
- if (!liveshare) return;
- try {
- const s = Buffer.from(secret, 'base64').toString();
- // You might be asking yourself: "but why?"
- // VS Liveshare has this annoying bug where you convert a URL string to a URI object to autofill
- // But the autofill will be empty, so to circumvent this I need to add copying the link to the clipboard
- // And immediately pasting it after the window pops up empty
- await env.clipboard.writeText(s);
- const uriString = await env.clipboard.readText();
- const uri = Uri.parse(uriString);
- await liveshare.join(uri);
- } catch (error) {
- Logger.log(error);
- }
- });
-
- // You might be asking yourself again: "but why?"
- // Same here, this is a real nasty race condition that happens inside the discord-rpc module currently
- // To circumvent this we need to timeout sending the subscribe events to the discord client
- setTimeout(() => {
- this.rpc.subscribe(
- 'ACTIVITY_JOIN_REQUEST',
- async ({ user }: { user: { username: string; discriminator: string } }) => {
- const val = await window.showInformationMessage(
- `${user.username}#${user.discriminator} wants to join your session`,
- { title: 'Accept' },
- { title: 'Decline' },
- );
- if (val && val.title === 'Accept') await this.rpc.sendJoinInvite(user);
- else await this.rpc.closeJoinRequest(user);
- },
- );
- }, 1000);
- setTimeout(() => {
- this.rpc.subscribe('ACTIVITY_JOIN', async ({ secret }: { secret: string }) => {
- const liveshare = await vsls.getApi();
- if (!liveshare) return;
- try {
- const s = Buffer.from(secret, 'base64').toString();
- // You might be asking yourself again again: "but why?"
- // See first comment above
- await env.clipboard.writeText(s);
- const uriString = await env.clipboard.readText();
- const uri = Uri.parse(uriString);
- await liveshare.join(uri);
- } catch (error) {
- Logger.log(error);
- }
- });
- }, 2000);
-
- const liveshare = await vsls.getApi();
- if (!liveshare) return;
-
- liveshare.onDidChangeSession(({ session }) => {
- if (session.id) return this.activity.changePartyId(session.id);
- return this.activity.changePartyId();
- });
- liveshare.onDidChangePeers(({ added, removed }) => {
- if (added.length) return this.activity.increasePartySize(added.length);
- else if (removed.length) return this.activity.decreasePartySize(removed.length);
- });
- });
-
- try {
- await this.rpc.login({ clientId: this.clientId });
- } catch (error) {
- throw error;
- }
- }
-
- public dispose() {
- this.activity.dispose();
- if (this.rpc) this.rpc.destroy();
- this.rpc = null;
- this.statusBarIcon.tooltip = '';
-
- if (activityTimer) clearInterval(activityTimer);
- }
-}
diff --git a/src/constants.ts b/src/constants.ts
index c4168f4..5bee0e7 100644
--- a/src/constants.ts
+++ b/src/constants.ts
@@ -1,8 +1,51 @@
-export const LIVE_SHARE_BASE_URL = 'insiders.liveshare.vsengsaas.visualstudio.com';
-export const VSLS_EXTENSION_ID = 'ms-vsliveshare.vsliveshare';
+import LANG from './data/languages.json';
-export const LIVE_SHARE_COMMANDS = {
- Start: 'liveshare.start',
- End: 'liveshare.end',
- Join: 'liveshare.join',
-};
+export const CLIENT_ID = '383226320970055681' as const;
+
+export const KNOWN_EXTENSIONS: { [key: string]: { image: string } } = LANG.KNOWN_EXTENSIONS;
+export const KNOWN_LANGUAGES: { language: string; image: string }[] = LANG.KNOWN_LANGUAGES;
+
+export const EMPTY = '\u200b\u200b';
+export const FILE_SIZES = [' bytes', 'kb', 'mb', 'gb', 'tb'];
+
+export const IDLE_IMAGE_KEY = 'vscode-big';
+export const DEBUG_IMAGE_KEY = 'debug';
+export const VSCODE_IMAGE_KEY = 'vscode';
+export const VSCODE_INSIDERS_IMAGE_KEY = 'vscode-insiders';
+
+export const enum REPLACE_KEYS {
+ Empty = '{empty}',
+ FileName = '{file_name}',
+ DirName = '{dir_name}',
+ FullDirName = '{full_dir_name}',
+ Workspace = '{workspace}',
+ WorkspaceFolder = '{workspace_folder}',
+ WorkspaceAndFolder = '{workspace_and_folder}',
+ LanguageLowerCase = '{lang}',
+ LanguageTitleCase = '{Lang}',
+ LanguageUpperCase = '{LANG}',
+ TotalLines = '{total_lines}',
+ CurrentLine = '{current_line}',
+ CurrentColumn = '{current_column}',
+ FileSize = '{file_size}',
+ AppName = '{app_name}',
+ GitRepoName = '{git_repo_name}',
+ GitBranch = '{git_branch}',
+}
+
+export const enum CONFIG_KEYS {
+ Enabled = 'enabled',
+ DetailsIdling = 'details_idling',
+ DetailsEditing = 'details_editing',
+ DetailsDebugging = 'details_debugging',
+ LowerDetailsIdling = 'lower_details_idling',
+ LowerDetailsEditing = 'lower_details_editing',
+ LowerDetailsDebugging = 'lower_details_debugging',
+ LowerDetailsNoWorkspaceFound = 'lower_details_no_workspace_found',
+ LargeImageIdling = 'large_image_idling',
+ LargeImage = 'large_image',
+ SmallImage = 'small_image',
+ SuppressNotifications = 'suppress_notifications',
+ WorkspaceElapsedTime = 'workspace_elapsed_time',
+ WorkspaceExcludePatterns = 'workspace_exclude_patterns',
+}
diff --git a/src/data/languages.json b/src/data/languages.json
index 5b6a5e4..78e4325 100644
--- a/src/data/languages.json
+++ b/src/data/languages.json
@@ -1,520 +1,445 @@
{
- "knownLanguages": [
- "ahk",
- "android",
- "angular",
- "applescript",
- "appveyor",
- "arduino",
- "as",
- "asp",
- "assembly",
- "autoit",
- "babel",
- "bat",
- "bower",
- "brainfuck",
- "c",
- "cargo",
- "cfml",
- "circleci",
- "clojure",
- "cmake",
- "codeclimate",
- "coffee",
- "cpp",
- "crystal",
- "csharp",
- "cshtml",
- "css",
- "cuda",
- "d",
- "dart",
- "delphi",
- "denizen",
- "dm",
- "docker",
- "editorconfig",
- "ejs",
- "elixir",
- "elm",
- "env",
- "erlang",
- "eslint",
- "flowconfig",
- "fsharp",
- "gemfile",
- "git",
- "go",
- "godot",
- "gradle",
- "graphql",
- "groovy",
- "gruntfile",
- "gulp",
- "handlebars",
- "harbour",
- "haskell",
- "haxe",
- "heroku",
- "hjson",
- "html",
- "http",
- "ini",
- "jar",
- "java",
- "jest",
- "jinja",
- "js",
- "jsmap",
- "json",
- "jsx",
- "julia",
- "jupyter",
- "kotlin",
- "less",
- "lisp",
- "livescript",
- "log",
- "lua",
- "makefile",
- "manifest",
- "markdown",
- "markdownx",
- "marko",
- "nim",
- "nix",
- "nodemon",
- "npm",
- "objc",
- "ocaml",
- "pascal",
- "pawn",
- "perl",
- "php",
- "ponylang",
- "postcss",
- "powershell",
- "prettier",
- "prisma",
- "processing",
- "pug",
- "purescript",
- "python",
- "r",
- "reasonml",
- "ruby",
- "rust",
- "scala",
- "scss",
- "shell",
- "sqf",
- "sql",
- "stylus",
- "svelte",
- "svg",
- "swift",
- "tex",
- "text",
- "toml",
- "travis",
- "ts",
- "tsx",
- "twig",
- "typescript-def",
- "v",
- "v",
- "vala",
- "vb",
- "vba",
- "vbhtml",
- "vbproj",
- "vcxproj",
- "vscodeignore",
- "vue",
- "wasm",
- "webpack",
- "xml",
- "yaml",
- "yarn",
- "zig"
- ],
- "knownExtensions": {
- ".ahk": { "image": "ahk" },
- ".ahkl": { "image": "ahk" },
- "androidmanifest.xml": { "image": "android" },
- "/^angular[^.]*\\.js$/i": { "image": "angular" },
- ".applescript": { "image": "applescript" },
- "/(\\.)?appveyor\\.yml/i": { "image": "appveyor" },
- ".ino": { "image": "arduino" },
- ".swf": { "image": "as" },
- ".as": { "image": "as" },
- ".jsfl": { "image": "as" },
- ".swc": { "image": "as" },
- ".asp": { "image": "asp" },
- ".asax": { "image": "asp" },
- ".ascx": { "image": "asp" },
- ".ashx": { "image": "asp" },
- ".asmx": { "image": "asp" },
- ".aspx": { "image": "asp" },
- ".axd": { "image": "asp" },
- "/\\.(l?a|[ls]?o|out|s|a51|asm|axf|elf|prx|puff|z80)$/i": { "image": "assembly" },
- ".agc": { "image": "assembly" },
- ".ko": { "image": "assembly" },
- ".lst": { "image": "assembly" },
- "/\\.((c([+px]{2}?)?-?)?objdump|bsdiff|bin|dat|pak|pdb)$/i": { "image": "assembly" },
- ".d-objdump": { "image": "assembly" },
- "/\\.gcode|\\.gco/i": { "image": "assembly" },
- "/\\.rpy[bc]$/i": { "image": "assembly" },
- "/\\.py[co]$/i": { "image": "assembly" },
- ".swp": { "image": "assembly" },
- ".DS_Store": { "image": "assembly" },
- ".au3": { "image": "autoit" },
- "babel.config.js": { "image": "babel" },
- "/\\.babelrc/i": { "image": "babel" },
- ".bat": { "image": "bat" },
- ".batch": { "image": "bat" },
- ".cmd": { "image": "bat" },
- "/\\.(exe|com|msi)$/i": { "image": "bat" },
- ".reg": { "image": "bat" },
- "/^(\\.bowerrc|bower\\.json|Bowerfile)$/i": { "image": "bower" },
- "/\\.bf?$/i": { "image": "brainfuck" },
- "/\\.c$/i": { "image": "c" },
- "/(cargo.toml|cargo.lock)/i": { "image": "cargo" },
- ".cfc": { "image": "cfml" },
- ".cfm": { "image": "cfml" },
- "circle.yml": { "image": "circleci" },
- ".clj": { "image": "clojure" },
- ".cl2": { "image": "clojure" },
- ".cljc": { "image": "clojure" },
- ".cljx": { "image": "clojure" },
- ".hic": { "image": "clojure" },
- "/\\.cljs(cm)?$/i": { "image": "clojure" },
- ".cmake": { "image": "cmake" },
- "/^CMakeLists\\.txt$/": { "image": "cmake" },
- "/\\.codeclimate\\.(yml|json)/i": { "image": "codeclimate" },
- ".coffee": { "image": "coffee" },
- ".cjsx": { "image": "coffee" },
- ".coffee.ecr": { "image": "coffee" },
- ".coffee.erb": { "image": "coffee" },
- ".litcoffee": { "image": "coffee" },
- ".iced": { "image": "coffee" },
- "/\\.c[+px]{2}$|\\.cc$/i": { "image": "cpp" },
- "/\\.h[+px]{2}$/i": { "image": "cpp" },
- "/\\.[it]pp$/i": { "image": "cpp" },
- "/\\.(tcc|inl)$/i": { "image": "cpp" },
- ".cats": { "image": "cpp" },
- ".idc": { "image": "cpp" },
- ".w": { "image": "cpp" },
- ".nc": { "image": "cpp" },
- ".upc": { "image": "cpp" },
- ".xpm": { "image": "cpp" },
- "/\\.e?cr$/i": { "image": "crystal" },
- ".cs": { "image": "csharp" },
- ".csx": { "image": "csharp" },
- ".cshtml": { "image": "cshtml" },
- ".css": { "image": "css" },
- ".css.map": { "image": "cssmap" },
- ".cu": { "image": "cuda" },
- "/\\.di?$/i": { "image": "d" },
- ".dart": { "image": "dart" },
- ".dfm": { "image": "delphi" },
- ".dpr": { "image": "delphi" },
- ".dsc": { "image": "denizen" },
- ".dm": { "image": "dm" },
- ".dme": { "image": "dm" },
- ".dmm": { "image": "dm" },
- "/^(Dockerfile|docker-compose)|\\.docker(file|ignore)$/i": { "image": "docker" },
- "/^docker-sync\\.yml$/i": { "image": "docker" },
- ".editorconfig": { "image": "editorconfig" },
- ".ejs": { "image": "ejs" },
- ".ex": { "image": "elixir" },
- "/\\.(exs|l?eex)$/i": { "image": "elixir" },
- "/^mix\\.(exs?|lock)$/i": { "image": "elixir" },
- ".elm": { "image": "elm" },
- ".env": { "image": "env" },
- ".erl": { "image": "erlang" },
- ".beam": { "image": "erlang" },
- ".hrl": { "image": "erlang" },
- ".xrl": { "image": "erlang" },
- ".yrl": { "image": "erlang" },
- ".app.src": { "image": "erlang" },
- "/^Emakefile$/": { "image": "erlang" },
- "/^rebar(\\.config)?\\.lock$/i": { "image": "erlang" },
- "/\\.(eslintrc|eslintignore)/i": { "image": "eslint" },
- "/(\\.firebaserc|firebase\\.json)/i": { "image": "firebase" },
- ".flowconfig": { "image": "flowconfig" },
- ".fs": { "image": "fsharp" },
- ".fsi": { "image": "fsharp" },
- ".fsscript": { "image": "fsharp" },
- ".fsx": { "image": "fsharp" },
- "/gatsby-(browser|node|ssr|config)\\.js/i": { "image": "gatsbyjs" },
- "/^Gemfile(\\.lock)?$/i": { "image": "gemfile" },
- "/^\\.git|^\\.keep$|\\.mailmap$/i": { "image": "git" },
- ".go": { "image": "go" },
- ".gd": { "image": "godot" },
- ".gradle": { "image": "gradle" },
- "gradlew": { "image": "gradle" },
- ".gql": { "image": "graphql" },
- ".graphql": { "image": "graphql" },
- ".groovy": { "image": "groovy" },
- ".gvy": { "image": "groovy" },
- ".gy": { "image": "groovy" },
- ".gsh": { "image": "groovy" },
- "/gruntfile\\.(js|coffee)/i": { "image": "gruntfile" },
- "gulpfile.js": { "image": "gulp" },
- "/\\.(hbs|handlebars|(mu)?stache)$/i": { "image": "handlebars" },
- ".prg": { "image": "harbour" },
- ".hbp": { "image": "harbour" },
- ".hbc": { "image": "harbour" },
- ".rc": { "image": "harbour" },
- ".fmg": { "image": "harbour" },
- ".hs": { "image": "haskell" },
- ".hsc": { "image": "haskell" },
- ".c2hs": { "image": "haskell" },
- ".lhs": { "image": "haskell" },
- ".hx": { "image": "haxe" },
- ".hxml": { "image": "haxe" },
- "/^procfile/i": { "image": "heroku" },
- "heroku.yml": { "image": "heroku" },
- ".hjson": { "image": "hjson" },
- "/\\.x?html?$/i": { "image": "html" },
- ".http": { "image": "http" },
- ".rest": { "image": "http" },
- ".jar": { "image": "jar" },
- ".java": { "image": "java" },
- "jest.config.js": { "image": "jest" },
- ".jinja": { "image": "jinja" },
- ".js": { "image": "js" },
- ".es6": { "image": "js" },
- ".es": { "image": "js" },
- ".mjs": { "image": "js" },
- ".js.map": { "image": "jsmap" },
- ".json": { "image": "json" },
- ".jsonc": { "image": "json" },
- ".jsx": { "image": "jsx" },
- "/\\.(jil|jl)/i": { "image": "julia" },
- ".ipynb": { "image": "jupyter" },
- ".kt": { "image": "kotlin" },
- ".ktm": { "image": "kotlin" },
- ".kts": { "image": "kotlin" },
- ".less": { "image": "less" },
- ".lsp": { "image": "lisp" },
- ".lisp": { "image": "lisp" },
- ".l": { "image": "lisp" },
- ".nl": { "image": "lisp" },
- ".ny": { "image": "lisp" },
- ".podsl": { "image": "lisp" },
- ".sexp": { "image": "lisp" },
- ".ls": { "image": "livescript" },
- ".log": { "image": "log" },
- ".lua": { "image": "lua" },
- ".pd_lua": { "image": "lua" },
- ".rbxs": { "image": "lua" },
- ".wlua": { "image": "lua" },
- "/^Makefile/": { "image": "makefile" },
- "/^mk\\.config$/": { "image": "makefile" },
- "/\\.(mk|mak|make)$/i": { "image": "makefile" },
- "/^BSDmakefile$/i": { "image": "makefile" },
- "/^GNUmakefile$/i": { "image": "makefile" },
- "/^makefile\\.sco$/i": { "image": "makefile" },
- "/^Kbuild$/": { "image": "makefile" },
- "/^makefile$/": { "image": "makefile" },
- "/^mkfile$/i": { "image": "makefile" },
- "/^\\.?qmake$/i": { "image": "makefile" },
- "/\\.(h|geo|topo)$/i": { "image": "manifest" },
- ".cson": { "image": "manifest" },
- ".json5": { "image": "manifest" },
- ".ndjson": { "image": "manifest" },
- ".fea": { "image": "manifest" },
- ".json.eex": { "image": "manifest" },
- ".proto": { "image": "manifest" },
- ".pytb": { "image": "manifest" },
- ".pydeps": { "image": "manifest" },
- "/\\.pot?$/i": { "image": "manifest" },
- ".ejson": { "image": "manifest" },
- ".edn": { "image": "manifest" },
- ".eam.fs": { "image": "manifest" },
- ".qml": { "image": "manifest" },
- ".qbs": { "image": "manifest" },
- ".ston": { "image": "manifest" },
- ".ttl": { "image": "manifest" },
- ".rviz": { "image": "manifest" },
- ".syntax": { "image": "manifest" },
- ".webmanifest": { "image": "manifest" },
- "/^pkginfo$/": { "image": "manifest" },
- "/^mime\\.types$/i": { "image": "manifest" },
- "/^METADATA\\.pb$/": { "image": "manifest" },
- "/[\\/\\\\](?:magic[\\/\\\\]Magdir|file[\\/\\\\]magic)[\\/\\\\][-.\\w]+$/i": { "image": "manifest" },
- "/(\\\\|\\/)dev[-\\w]+\\1(?:[^\\\\\\/]+\\1)*(?!DESC|NOTES)(?:[A-Z][-A-Z]*)(?:\\.in)?$/": { "image": "manifest" },
- "lib/icons/.icondb.js": { "image": "manifest" },
- "/\\.git[\\/\\\\](.*[\\/\\\\])?(HEAD|ORIG_HEAD|packed-refs|logs[\\/\\\\](.+[\\/\\\\])?[^\\/\\\\]+)$/": {
- "image": "manifest"
- },
- "/\\.(md|mdown|markdown|mkd|mkdown|mdwn|mkdn|rmd|ron|pmd)$/i": { "image": "markdown" },
- ".mdx": { "image": "markdownx" },
- ".marko": { "image": "marko" },
- ".nim": { "image": "nim" },
- ".nims": { "image": "nim" },
- ".nimble": { "image": "nim" },
- ".nix": { "image": "nix" },
- "nodemon.json": { "image": "nodemon" },
- ".npmrc": { "image": "npm" },
- "/\\.mm?$/i": { "image": "objc" },
- ".pch": { "image": "objc" },
- ".x": { "image": "objc" },
- ".ml": { "image": "ocaml" },
- ".mli": { "image": "ocaml" },
- ".eliom": { "image": "ocaml" },
- ".eliomi": { "image": "ocaml" },
- ".ml4": { "image": "ocaml" },
- ".mll": { "image": "ocaml" },
- ".mly": { "image": "ocaml" },
- "/\\.pas(cal)?$/i": { "image": "pascal" },
- ".lpr": { "image": "pascal" },
- ".p": { "image": "pawn" },
- ".inc": { "image": "pawn" },
- ".sma": { "image": "pawn" },
- ".pwn": { "image": "pawn" },
- ".sp": { "image": "pawn" },
- "/\\.p(er)?l$/i": { "image": "perl" },
- ".al": { "image": "perl" },
- ".ph": { "image": "perl" },
- ".plx": { "image": "perl" },
- ".pm": { "image": "perl" },
- "/\\.(psgi|xs)$/i": { "image": "perl" },
- ".pl6": { "image": "perl" },
- "/\\.[tp]6$|\\.6pl$/i": { "image": "perl" },
- "/\\.(pm6|p6m)$/i": { "image": "perl" },
- ".6pm": { "image": "perl" },
- ".nqp": { "image": "perl" },
- ".p6l": { "image": "perl" },
- ".pod6": { "image": "perl" },
- "/^Rexfile$/": { "image": "perl" },
- "/\\.php([st\\d]|_cs)?$/i": { "image": "php" },
- "/^Phakefile/": { "image": "php" },
- ".pony": { "image": "ponylang" },
- ".pcss": { "image": "postcss" },
- ".ps1": { "image": "powershell" },
- ".psd1": { "image": "powershell" },
- ".psm1": { "image": "powershell" },
- ".ps1xml": { "image": "powershell" },
- ".prettierignore": { "image": "prettier" },
- "/\\.prettier((rc)|(\\.(toml|yml|yaml|json|js))?$){2}/i": { "image": "prettier" },
- "prettier.config.js": { "image": "prettier" },
- "prisma.yml": { "image": "prisma" },
- ".pde": { "image": "processing" },
- ".jade": { "image": "pug" },
- ".pug": { "image": "pug" },
- ".purs": { "image": "purescript" },
- ".py": { "image": "python" },
- ".ipy": { "image": "python" },
- ".isolate": { "image": "python" },
- ".pep": { "image": "python" },
- ".gyp": { "image": "python" },
- ".gypi": { "image": "python" },
- ".pyde": { "image": "python" },
- ".pyp": { "image": "python" },
- ".pyt": { "image": "python" },
- ".py3": { "image": "python" },
- ".pyi": { "image": "python" },
- ".pyw": { "image": "python" },
- ".tac": { "image": "python" },
- ".wsgi": { "image": "python" },
- ".xpy": { "image": "python" },
- ".rpy": { "image": "python" },
- "/\\.?(pypirc|pythonrc|python-venv)$/i": { "image": "python" },
- "/^(SConstruct|SConscript)$/": { "image": "python" },
- "/^(Snakefile|WATCHLISTS)$/": { "image": "python" },
- "/^wscript$/": { "image": "python" },
- "/\\.(r|Rprofile|rsx|rd)$/i": { "image": "r" },
- ".re": { "image": "reasonml" },
- "/\\.(rb|ru|ruby|erb|gemspec|god|mspec|pluginspec|podspec|rabl|rake|opal)$/i": { "image": "ruby" },
- "/^\\.?(irbrc|gemrc|pryrc|ruby-(gemset|version))$/i": { "image": "ruby" },
- "/^(Appraisals|(Rake|[bB]uild|Cap|Danger|Deliver|Fast|Guard|Jar|Maven|Pod|Puppet|Snap)file(\\.lock)?)$/": {
- "image": "ruby"
- },
- "/\\.(jbuilder|rbuild|rb[wx]|builder)$/i": { "image": "ruby" },
- "/^rails$/": { "image": "ruby" },
- ".watchr": { "image": "ruby" },
- ".rs": { "image": "rust" },
- "/\\.(sc|scala)$/i": { "image": "scala" },
- ".scss": { "image": "scss" },
- ".sass": { "image": "scss" },
- "/\\.(sh|rc|bats|bash|tool|install|command)$/i": { "image": "shell" },
- "/^(\\.?bash(rc|[-_]?(profile|login|logout|history|prompt))|_osc|config|install-sh|PKGBUILD)$/i": {
- "image": "shell"
- },
- "/\\.(ksh|mksh|pdksh)$/i": { "image": "shell" },
- ".sh-session": { "image": "shell" },
- "/\\.zsh(-theme|_history)?$|^\\.?(antigen|zpreztorc|zlogin|zlogout|zprofile|zshenv|zshrc)$/i": { "image": "shell" },
- "/\\.fish$|^\\.fishrc$/i": { "image": "shell" },
- "/^\\.?(login|profile)$/": { "image": "shell" },
- ".inputrc": { "image": "shell" },
- ".tmux": { "image": "shell" },
- "/^(configure|config\\.(guess|rpath|status|sub)|depcomp|libtool|compile)$/": { "image": "shell" },
- "/^\\/(private\\/)?etc\\/([^\\/]+\\/)*(profile$|nanorc$|rc\\.|csh\\.)/i": { "image": "shell" },
- "/^\\.?cshrc$/i": { "image": "shell" },
- ".profile": { "image": "shell" },
- ".tcsh": { "image": "shell" },
- ".csh": { "image": "shell" },
- ".sqf": { "image": "sqf" },
- "/\\.(my)?sql$/i": { "image": "sql" },
- ".ddl": { "image": "sql" },
- ".udf": { "image": "sql" },
- ".hql": { "image": "sql" },
- ".viw": { "image": "sql" },
- ".prc": { "image": "sql" },
- ".cql": { "image": "sql" },
- ".db2": { "image": "sql" },
- "/\\.(styl|stylus)$/i": { "image": "stylus" },
- ".svelte": { "image": "svelte" },
- ".svg": { "image": "svg" },
- ".swift": { "image": "swift" },
- ".tex": { "image": "tex" },
- ".ltx": { "image": "tex" },
- ".aux": { "image": "tex" },
- ".sty": { "image": "tex" },
- ".dtx": { "image": "tex" },
- ".cls": { "image": "tex" },
- ".ins": { "image": "tex" },
- ".lbx": { "image": "tex" },
- ".mkiv": { "image": "tex" },
- ".mkvi": { "image": "tex" },
- ".mkii": { "image": "tex" },
- ".texi": { "image": "tex" },
- "/^hyphen(ex)?\\.(cs|den|det|fr|sv|us)$/": { "image": "tex" },
- "/\\.te?xt$/i": { "image": "text" },
- ".rtf": { "image": "text" },
- "/\\.i?nfo$/i": { "image": "text" },
- ".msg": { "image": "text" },
- "/\\.(utxt|utf8)$/i": { "image": "text" },
- ".toml": { "image": "toml" },
- ".travis.yml": { "image": "travis" },
- ".ts": { "image": "ts" },
- ".tsx": { "image": "tsx" },
- ".twig": { "image": "twig" },
- "/.*\\.d\\.ts/i": { "image": "typescript-def" },
- ".v": { "image": "v" },
- ".vh": { "image": "v" },
- ".vala": { "image": "vala" },
- ".vapi": { "image": "vala" },
- ".vb": { "image": "vb" },
- ".vbs": { "image": "vb" },
- ".vbhtml": { "image": "vb" },
- ".vbproj": { "image": "vb" },
- ".vba": { "image": "vba" },
- ".vcxproj": { "image": "vcxproj" },
- ".vscodeignore": { "image": "vscodeignore" },
- ".vue": { "image": "vue" },
- ".wat": { "image": "wasm" },
- ".wast": { "image": "wasm" },
- ".wasm": { "image": "wasm" },
- "/webpack(\\.dev|\\.development|\\.prod|\\.production)?\\.config(\\.babel)?\\.(js|jsx|coffee|ts|json|json5|yaml|yml)/i": { "image": "webpack" },
- ".xml": { "image": "xml" },
- "/\\.ya?ml$/i": { "image": "yaml" },
- "/^yarn(\\.lock)?$/i": { "image": "yarn" },
- ".yarnrc": { "image": "yarn" },
- ".zig": { "image": "zig" }
- }
+ "KNOWN_LANGUAGES": [
+ { "language": "abap", "image": "text" },
+ { "language": "bat", "image": "bat" },
+ { "language": "bibtex", "image": "text" },
+ { "language": "clojure", "image": "clojure" },
+ { "language": "coffeescript", "image": "coffeescript" },
+ { "language": "c", "image": "c" },
+ { "language": "cpp", "image": "cpp" },
+ { "language": "csharp", "image": "csharp" },
+ { "language": "css", "image": "css" },
+ { "language": "diff", "image": "manifest" },
+ { "language": "dockerfile", "image": "docker" },
+ { "language": "fsharp", "image": "fsharp" },
+ { "language": "git-commit", "image": "manifest" },
+ { "language": "git-rebase", "image": "manifest" },
+ { "language": "go", "image": "go" },
+ { "language": "groovy", "image": "groovy" },
+ { "language": "handlebars", "image": "handlebars" },
+ { "language": "haml", "image": "text" },
+ { "language": "html", "image": "html" },
+ { "language": "ini", "image": "manifest" },
+ { "language": "java", "image": "java" },
+ { "language": "javascript", "image": "javascript" },
+ { "language": "javascriptreact", "image": "jsx" },
+ { "language": "jsx", "image": "jsx" },
+ { "language": "json", "image": "json" },
+ { "language": "jsonc", "image": "json" },
+ { "language": "latex", "image": "text" },
+ { "language": "less", "image": "less" },
+ { "language": "lua", "image": "lua" },
+ { "language": "makefile", "image": "makefile" },
+ { "language": "markdown", "image": "markdown" },
+ { "language": "objective-c", "image": "objective-c" },
+ { "language": "objective-cpp", "image": "objective-c" },
+ { "language": "perl", "image": "perl" },
+ { "language": "perl6", "image": "perl" },
+ { "language": "php", "image": "php" },
+ { "language": "plaintext", "image": "text" },
+ { "language": "powershell", "image": "powershell" },
+ { "language": "jade", "image": "pug" },
+ { "language": "pug", "image": "pug" },
+ { "language": "python", "image": "python" },
+ { "language": "r", "image": "r" },
+ { "language": "razor", "image": "cshtml" },
+ { "language": "ruby", "image": "ruby" },
+ { "language": "rust", "image": "rust" },
+ { "language": "scss", "image": "scss" },
+ { "language": "sass", "image": "scss" },
+ { "language": "shaderlab", "image": "manifest" },
+ { "language": "slim", "image": "text" },
+ { "language": "sql", "image": "sql" },
+ { "language": "stylus", "image": "stylus" },
+ { "language": "swift", "image": "swift" },
+ { "language": "typescript", "image": "typescript" },
+ { "language": "typescriptreact", "image": "tsx" },
+ { "language": "tex", "image": "tex" },
+ { "language": "vb", "image": "vb" },
+ { "language": "vue", "image": "vue" },
+ { "language": "vue-html", "image": "vue" },
+ { "language": "xml", "image": "xml" },
+ { "language": "xsl", "image": "xml" },
+ { "language": "yaml", "image": "yaml" }
+ ],
+ "KNOWN_EXTENSIONS": {
+ ".ahk": { "image": "ahk" },
+ ".ahkl": { "image": "ahk" },
+ "androidmanifest.xml": { "image": "android" },
+ "/^angular[^.]*\\.js$/i": { "image": "angular" },
+ ".applescript": { "image": "applescript" },
+ "/(\\.)?appveyor\\.yml/i": { "image": "appveyor" },
+ ".ino": { "image": "arduino" },
+ ".swf": { "image": "as" },
+ ".as": { "image": "as" },
+ ".jsfl": { "image": "as" },
+ ".swc": { "image": "as" },
+ ".asp": { "image": "asp" },
+ ".asax": { "image": "asp" },
+ ".ascx": { "image": "asp" },
+ ".ashx": { "image": "asp" },
+ ".asmx": { "image": "asp" },
+ ".aspx": { "image": "asp" },
+ ".axd": { "image": "asp" },
+ "/\\.(l?a|[ls]?o|out|s|a51|asm|axf|elf|prx|puff|z80)$/i": { "image": "assembly" },
+ ".agc": { "image": "assembly" },
+ ".ko": { "image": "assembly" },
+ ".lst": { "image": "assembly" },
+ "/\\.((c([+px]{2}?)?-?)?objdump|bsdiff|bin|dat|pak|pdb)$/i": { "image": "assembly" },
+ ".d-objdump": { "image": "assembly" },
+ "/\\.gcode|\\.gco/i": { "image": "assembly" },
+ "/\\.rpy[bc]$/i": { "image": "assembly" },
+ "/\\.py[co]$/i": { "image": "assembly" },
+ ".swp": { "image": "assembly" },
+ ".DS_Store": { "image": "assembly" },
+ ".au3": { "image": "autoit" },
+ "babel.config.js": { "image": "babel" },
+ "/\\.babelrc/i": { "image": "babel" },
+ ".bat": { "image": "bat" },
+ ".batch": { "image": "bat" },
+ ".cmd": { "image": "bat" },
+ "/\\.(exe|com|msi)$/i": { "image": "bat" },
+ ".reg": { "image": "bat" },
+ "/^(\\.bowerrc|bower\\.json|Bowerfile)$/i": { "image": "bower" },
+ "/\\.bf?$/i": { "image": "brainfuck" },
+ "/\\.c$/i": { "image": "c" },
+ "/(cargo.toml|cargo.lock)/i": { "image": "cargo" },
+ ".cfc": { "image": "cfml" },
+ ".cfm": { "image": "cfml" },
+ "circle.yml": { "image": "circleci" },
+ ".clj": { "image": "clojure" },
+ ".cl2": { "image": "clojure" },
+ ".cljc": { "image": "clojure" },
+ ".cljx": { "image": "clojure" },
+ ".hic": { "image": "clojure" },
+ "/\\.cljs(cm)?$/i": { "image": "clojure" },
+ ".cmake": { "image": "cmake" },
+ "/^CMakeLists\\.txt$/": { "image": "cmake" },
+ "/\\.codeclimate\\.(yml|json)/i": { "image": "codeclimate" },
+ ".coffee": { "image": "coffeescript" },
+ ".cjsx": { "image": "coffeescript" },
+ ".coffee.ecr": { "image": "coffeescript" },
+ ".coffee.erb": { "image": "coffeescript" },
+ ".litcoffee": { "image": "coffeescript" },
+ ".iced": { "image": "coffeescript" },
+ "/\\.c[+px]{2}$|\\.cc$/i": { "image": "cpp" },
+ "/\\.h[+px]{2}$/i": { "image": "cpp" },
+ "/\\.[it]pp$/i": { "image": "cpp" },
+ "/\\.(tcc|inl)$/i": { "image": "cpp" },
+ ".cats": { "image": "cpp" },
+ ".idc": { "image": "cpp" },
+ ".w": { "image": "cpp" },
+ ".nc": { "image": "cpp" },
+ ".upc": { "image": "cpp" },
+ ".xpm": { "image": "cpp" },
+ "/\\.e?cr$/i": { "image": "crystal" },
+ ".cs": { "image": "csharp" },
+ ".csx": { "image": "csharp" },
+ ".cshtml": { "image": "cshtml" },
+ ".css": { "image": "css" },
+ ".css.map": { "image": "cssmap" },
+ ".cu": { "image": "cuda" },
+ "/\\.di?$/i": { "image": "d" },
+ ".dart": { "image": "dart" },
+ ".dfm": { "image": "delphi" },
+ ".dpr": { "image": "delphi" },
+ ".dsc": { "image": "denizen" },
+ ".dm": { "image": "dm" },
+ ".dme": { "image": "dm" },
+ ".dmm": { "image": "dm" },
+ "/^(Dockerfile|docker-compose)|\\.docker(file|ignore)$/i": { "image": "docker" },
+ "/^docker-sync\\.yml$/i": { "image": "docker" },
+ ".editorconfig": { "image": "editorconfig" },
+ ".ejs": { "image": "ejs" },
+ ".ex": { "image": "elixir" },
+ "/\\.(exs|l?eex)$/i": { "image": "elixir" },
+ "/^mix\\.(exs?|lock)$/i": { "image": "elixir" },
+ ".elm": { "image": "elm" },
+ ".env": { "image": "env" },
+ ".erl": { "image": "erlang" },
+ ".beam": { "image": "erlang" },
+ ".hrl": { "image": "erlang" },
+ ".xrl": { "image": "erlang" },
+ ".yrl": { "image": "erlang" },
+ ".app.src": { "image": "erlang" },
+ "/^Emakefile$/": { "image": "erlang" },
+ "/^rebar(\\.config)?\\.lock$/i": { "image": "erlang" },
+ "/\\.(eslintrc|eslintignore)/i": { "image": "eslint" },
+ "/(\\.firebaserc|firebase\\.json)/i": { "image": "firebase" },
+ ".flowconfig": { "image": "flowconfig" },
+ ".fs": { "image": "fsharp" },
+ ".fsi": { "image": "fsharp" },
+ ".fsscript": { "image": "fsharp" },
+ ".fsx": { "image": "fsharp" },
+ "/gatsby-(browser|node|ssr|config)\\.js/i": { "image": "gatsbyjs" },
+ "/^Gemfile(\\.lock)?$/i": { "image": "gemfile" },
+ "/^\\.git|^\\.keep$|\\.mailmap$/i": { "image": "git" },
+ ".go": { "image": "go" },
+ ".gd": { "image": "godot" },
+ ".gradle": { "image": "gradle" },
+ "gradlew": { "image": "gradle" },
+ ".gql": { "image": "graphql" },
+ ".graphql": { "image": "graphql" },
+ ".groovy": { "image": "groovy" },
+ ".gvy": { "image": "groovy" },
+ ".gy": { "image": "groovy" },
+ ".gsh": { "image": "groovy" },
+ "/gruntfile\\.(js|coffee)/i": { "image": "gruntfile" },
+ "gulpfile.js": { "image": "gulp" },
+ "/\\.(hbs|handlebars|(mu)?stache)$/i": { "image": "handlebars" },
+ ".prg": { "image": "harbour" },
+ ".hbp": { "image": "harbour" },
+ ".hbc": { "image": "harbour" },
+ ".rc": { "image": "harbour" },
+ ".fmg": { "image": "harbour" },
+ ".hs": { "image": "haskell" },
+ ".hsc": { "image": "haskell" },
+ ".c2hs": { "image": "haskell" },
+ ".lhs": { "image": "haskell" },
+ ".hx": { "image": "haxe" },
+ ".hxml": { "image": "haxe" },
+ "/^procfile/i": { "image": "heroku" },
+ "heroku.yml": { "image": "heroku" },
+ ".hjson": { "image": "hjson" },
+ "/\\.x?html?$/i": { "image": "html" },
+ ".http": { "image": "http" },
+ ".rest": { "image": "http" },
+ ".jar": { "image": "jar" },
+ ".java": { "image": "java" },
+ "jest.config.js": { "image": "jest" },
+ ".jinja": { "image": "jinja" },
+ ".js": { "image": "javascript" },
+ ".es6": { "image": "javascript" },
+ ".es": { "image": "javascript" },
+ ".mjs": { "image": "javascript" },
+ ".js.map": { "image": "jsmap" },
+ ".json": { "image": "json" },
+ ".jsonc": { "image": "json" },
+ ".jsx": { "image": "jsx" },
+ "/\\.(jil|jl)/i": { "image": "julia" },
+ ".ipynb": { "image": "jupyter" },
+ ".kt": { "image": "kotlin" },
+ ".ktm": { "image": "kotlin" },
+ ".kts": { "image": "kotlin" },
+ ".less": { "image": "less" },
+ ".lsp": { "image": "lisp" },
+ ".lisp": { "image": "lisp" },
+ ".l": { "image": "lisp" },
+ ".nl": { "image": "lisp" },
+ ".ny": { "image": "lisp" },
+ ".podsl": { "image": "lisp" },
+ ".sexp": { "image": "lisp" },
+ ".ls": { "image": "livescript" },
+ ".log": { "image": "log" },
+ ".lua": { "image": "lua" },
+ ".pd_lua": { "image": "lua" },
+ ".rbxs": { "image": "lua" },
+ ".wlua": { "image": "lua" },
+ "/^Makefile/": { "image": "makefile" },
+ "/^mk\\.config$/": { "image": "makefile" },
+ "/\\.(mk|mak|make)$/i": { "image": "makefile" },
+ "/^BSDmakefile$/i": { "image": "makefile" },
+ "/^GNUmakefile$/i": { "image": "makefile" },
+ "/^makefile\\.sco$/i": { "image": "makefile" },
+ "/^Kbuild$/": { "image": "makefile" },
+ "/^makefile$/": { "image": "makefile" },
+ "/^mkfile$/i": { "image": "makefile" },
+ "/^\\.?qmake$/i": { "image": "makefile" },
+ "/\\.(h|geo|topo)$/i": { "image": "manifest" },
+ ".cson": { "image": "manifest" },
+ ".json5": { "image": "manifest" },
+ ".ndjson": { "image": "manifest" },
+ ".fea": { "image": "manifest" },
+ ".json.eex": { "image": "manifest" },
+ ".proto": { "image": "manifest" },
+ ".pytb": { "image": "manifest" },
+ ".pydeps": { "image": "manifest" },
+ "/\\.pot?$/i": { "image": "manifest" },
+ ".ejson": { "image": "manifest" },
+ ".edn": { "image": "manifest" },
+ ".eam.fs": { "image": "manifest" },
+ ".qml": { "image": "manifest" },
+ ".qbs": { "image": "manifest" },
+ ".ston": { "image": "manifest" },
+ ".ttl": { "image": "manifest" },
+ ".rviz": { "image": "manifest" },
+ ".syntax": { "image": "manifest" },
+ ".webmanifest": { "image": "manifest" },
+ "/^pkginfo$/": { "image": "manifest" },
+ "/^mime\\.types$/i": { "image": "manifest" },
+ "/^METADATA\\.pb$/": { "image": "manifest" },
+ "/[\\/\\\\](?:magic[\\/\\\\]Magdir|file[\\/\\\\]magic)[\\/\\\\][-.\\w]+$/i": { "image": "manifest" },
+ "/(\\\\|\\/)dev[-\\w]+\\1(?:[^\\\\\\/]+\\1)*(?!DESC|NOTES)(?:[A-Z][-A-Z]*)(?:\\.in)?$/": { "image": "manifest" },
+ "lib/icons/.icondb.js": { "image": "manifest" },
+ "/\\.git[\\/\\\\](.*[\\/\\\\])?(HEAD|ORIG_HEAD|packed-refs|logs[\\/\\\\](.+[\\/\\\\])?[^\\/\\\\]+)$/": {
+ "image": "manifest"
+ },
+ "/\\.(md|mdown|markdown|mkd|mkdown|mdwn|mkdn|rmd|ron|pmd)$/i": { "image": "markdown" },
+ ".mdx": { "image": "markdownx" },
+ ".marko": { "image": "marko" },
+ ".nim": { "image": "nim" },
+ ".nims": { "image": "nim" },
+ ".nimble": { "image": "nim" },
+ ".nix": { "image": "nix" },
+ "nodemon.json": { "image": "nodemon" },
+ ".npmrc": { "image": "npm" },
+ "/\\.mm?$/i": { "image": "objective-c" },
+ ".pch": { "image": "objective-c" },
+ ".x": { "image": "objective-c" },
+ ".ml": { "image": "ocaml" },
+ ".mli": { "image": "ocaml" },
+ ".eliom": { "image": "ocaml" },
+ ".eliomi": { "image": "ocaml" },
+ ".ml4": { "image": "ocaml" },
+ ".mll": { "image": "ocaml" },
+ ".mly": { "image": "ocaml" },
+ "/\\.pas(cal)?$/i": { "image": "pascal" },
+ ".lpr": { "image": "pascal" },
+ ".p": { "image": "pawn" },
+ ".inc": { "image": "pawn" },
+ ".sma": { "image": "pawn" },
+ ".pwn": { "image": "pawn" },
+ ".sp": { "image": "pawn" },
+ "/\\.p(er)?l$/i": { "image": "perl" },
+ ".al": { "image": "perl" },
+ ".ph": { "image": "perl" },
+ ".plx": { "image": "perl" },
+ ".pm": { "image": "perl" },
+ "/\\.(psgi|xs)$/i": { "image": "perl" },
+ ".pl6": { "image": "perl" },
+ "/\\.[tp]6$|\\.6pl$/i": { "image": "perl" },
+ "/\\.(pm6|p6m)$/i": { "image": "perl" },
+ ".6pm": { "image": "perl" },
+ ".nqp": { "image": "perl" },
+ ".p6l": { "image": "perl" },
+ ".pod6": { "image": "perl" },
+ "/^Rexfile$/": { "image": "perl" },
+ "/\\.php([st\\d]|_cs)?$/i": { "image": "php" },
+ "/^Phakefile/": { "image": "php" },
+ ".pony": { "image": "ponylang" },
+ ".pcss": { "image": "postcss" },
+ ".ps1": { "image": "powershell" },
+ ".psd1": { "image": "powershell" },
+ ".psm1": { "image": "powershell" },
+ ".ps1xml": { "image": "powershell" },
+ ".prettierignore": { "image": "prettier" },
+ "/\\.prettier((rc)|(\\.(toml|yml|yaml|json|js))?$){2}/i": { "image": "prettier" },
+ "prettier.config.js": { "image": "prettier" },
+ "prisma.yml": { "image": "prisma" },
+ ".pde": { "image": "processing" },
+ ".jade": { "image": "pug" },
+ ".pug": { "image": "pug" },
+ ".purs": { "image": "purescript" },
+ ".py": { "image": "python" },
+ ".ipy": { "image": "python" },
+ ".isolate": { "image": "python" },
+ ".pep": { "image": "python" },
+ ".gyp": { "image": "python" },
+ ".gypi": { "image": "python" },
+ ".pyde": { "image": "python" },
+ ".pyp": { "image": "python" },
+ ".pyt": { "image": "python" },
+ ".py3": { "image": "python" },
+ ".pyi": { "image": "python" },
+ ".pyw": { "image": "python" },
+ ".tac": { "image": "python" },
+ ".wsgi": { "image": "python" },
+ ".xpy": { "image": "python" },
+ ".rpy": { "image": "python" },
+ "/\\.?(pypirc|pythonrc|python-venv)$/i": { "image": "python" },
+ "/^(SConstruct|SConscript)$/": { "image": "python" },
+ "/^(Snakefile|WATCHLISTS)$/": { "image": "python" },
+ "/^wscript$/": { "image": "python" },
+ "/\\.(r|Rprofile|rsx|rd)$/i": { "image": "r" },
+ ".re": { "image": "reasonml" },
+ "/\\.(rb|ru|ruby|erb|gemspec|god|mspec|pluginspec|podspec|rabl|rake|opal)$/i": { "image": "ruby" },
+ "/^\\.?(irbrc|gemrc|pryrc|ruby-(gemset|version))$/i": { "image": "ruby" },
+ "/^(Appraisals|(Rake|[bB]uild|Cap|Danger|Deliver|Fast|Guard|Jar|Maven|Pod|Puppet|Snap)file(\\.lock)?)$/": {
+ "image": "ruby"
+ },
+ "/\\.(jbuilder|rbuild|rb[wx]|builder)$/i": { "image": "ruby" },
+ "/^rails$/": { "image": "ruby" },
+ ".watchr": { "image": "ruby" },
+ ".rs": { "image": "rust" },
+ "/\\.(sc|scala)$/i": { "image": "scala" },
+ ".scss": { "image": "scss" },
+ ".sass": { "image": "scss" },
+ "/\\.(sh|rc|bats|bash|tool|install|command)$/i": { "image": "shell" },
+ "/^(\\.?bash(rc|[-_]?(profile|login|logout|history|prompt))|_osc|config|install-sh|PKGBUILD)$/i": {
+ "image": "shell"
+ },
+ "/\\.(ksh|mksh|pdksh)$/i": { "image": "shell" },
+ ".sh-session": { "image": "shell" },
+ "/\\.zsh(-theme|_history)?$|^\\.?(antigen|zpreztorc|zlogin|zlogout|zprofile|zshenv|zshrc)$/i": { "image": "shell" },
+ "/\\.fish$|^\\.fishrc$/i": { "image": "shell" },
+ "/^\\.?(login|profile)$/": { "image": "shell" },
+ ".inputrc": { "image": "shell" },
+ ".tmux": { "image": "shell" },
+ "/^(configure|config\\.(guess|rpath|status|sub)|depcomp|libtool|compile)$/": { "image": "shell" },
+ "/^\\/(private\\/)?etc\\/([^\\/]+\\/)*(profile$|nanorc$|rc\\.|csh\\.)/i": { "image": "shell" },
+ "/^\\.?cshrc$/i": { "image": "shell" },
+ ".profile": { "image": "shell" },
+ ".tcsh": { "image": "shell" },
+ ".csh": { "image": "shell" },
+ ".sqf": { "image": "sqf" },
+ "/\\.(my)?sql$/i": { "image": "sql" },
+ ".ddl": { "image": "sql" },
+ ".udf": { "image": "sql" },
+ ".hql": { "image": "sql" },
+ ".viw": { "image": "sql" },
+ ".prc": { "image": "sql" },
+ ".cql": { "image": "sql" },
+ ".db2": { "image": "sql" },
+ "/\\.(styl|stylus)$/i": { "image": "stylus" },
+ ".svelte": { "image": "svelte" },
+ ".svg": { "image": "svg" },
+ ".swift": { "image": "swift" },
+ ".tex": { "image": "tex" },
+ ".ltx": { "image": "tex" },
+ ".aux": { "image": "tex" },
+ ".sty": { "image": "tex" },
+ ".dtx": { "image": "tex" },
+ ".cls": { "image": "tex" },
+ ".ins": { "image": "tex" },
+ ".lbx": { "image": "tex" },
+ ".mkiv": { "image": "tex" },
+ ".mkvi": { "image": "tex" },
+ ".mkii": { "image": "tex" },
+ ".texi": { "image": "tex" },
+ "/^hyphen(ex)?\\.(cs|den|det|fr|sv|us)$/": { "image": "tex" },
+ "/\\.te?xt$/i": { "image": "text" },
+ ".rtf": { "image": "text" },
+ "/\\.i?nfo$/i": { "image": "text" },
+ ".msg": { "image": "text" },
+ "/\\.(utxt|utf8)$/i": { "image": "text" },
+ ".toml": { "image": "toml" },
+ ".travis.yml": { "image": "travis" },
+ ".ts": { "image": "typescript" },
+ ".tsx": { "image": "tsx" },
+ ".twig": { "image": "twig" },
+ "/.*\\.d\\.ts/i": { "image": "typescript-def" },
+ ".v": { "image": "v" },
+ ".vh": { "image": "v" },
+ ".vala": { "image": "vala" },
+ ".vapi": { "image": "vala" },
+ ".vb": { "image": "vb" },
+ ".vbs": { "image": "vb" },
+ ".vbhtml": { "image": "vb" },
+ ".vbproj": { "image": "vb" },
+ ".vba": { "image": "vba" },
+ ".vcxproj": { "image": "vcxproj" },
+ ".vscodeignore": { "image": "vscodeignore" },
+ ".vue": { "image": "vue" },
+ ".wat": { "image": "wasm" },
+ ".wast": { "image": "wasm" },
+ ".wasm": { "image": "wasm" },
+ "/webpack(\\.dev|\\.development|\\.prod|\\.production)?\\.config(\\.babel)?\\.(js|jsx|coffee|ts|json|json5|yaml|yml)/i": {
+ "image": "webpack"
+ },
+ ".xml": { "image": "xml" },
+ "/\\.ya?ml$/i": { "image": "yaml" },
+ "/^yarn(\\.lock)?$/i": { "image": "yarn" },
+ ".yarnrc": { "image": "yarn" },
+ ".zig": { "image": "zig" }
+ }
}
diff --git a/src/extension.ts b/src/extension.ts
index 2e6d013..feaee46 100644
--- a/src/extension.ts
+++ b/src/extension.ts
@@ -1,112 +1,118 @@
-import { commands, ExtensionContext, StatusBarAlignment, StatusBarItem, window, workspace, extensions } from 'vscode';
-import RPCClient from './client/RPCClient';
-import Logger from './structures/Logger';
-import { GitExtension } from './git';
-const { register } = require('discord-rpc'); // eslint-disable-line
+const { Client } = require('discord-rpc'); // eslint-disable-line
+import {
+ commands,
+ ExtensionContext,
+ StatusBarAlignment,
+ StatusBarItem,
+ window,
+ workspace,
+ extensions,
+ debug,
+} from 'vscode';
+import { activity } from './activity';
-let loginTimeout: NodeJS.Timer | undefined;
+import { CLIENT_ID, CONFIG_KEYS } from './constants';
+import { GitExtension } from './git';
+import { log, LogLevel } from './logger';
+import { getConfig } from './util';
const statusBarIcon: StatusBarItem = window.createStatusBarItem(StatusBarAlignment.Left);
statusBarIcon.text = '$(pulse) Connecting to Discord...';
-const clientId = '383226320970055681';
-const config = workspace.getConfiguration('discord');
-register(clientId);
-const rpc = new RPCClient(clientId, statusBarIcon);
+const rpc = new Client({ transport: 'ipc' });
+const config = getConfig();
-export async function activate(context: ExtensionContext) {
- Logger.log('Discord Presence activated!');
+async function sendActivity() {
+ rpc.setActivity(await activity());
+}
+
+async function login(context: ExtensionContext) {
+ rpc.once('ready', () => {
+ log(LogLevel.Info, 'Successfully connected to Discord');
+
+ statusBarIcon.text = '$(globe) Connected to Discord';
+ statusBarIcon.tooltip = 'Connected to Discord';
+
+ void sendActivity();
+ const onChangeActiveTextEditor = window.onDidChangeActiveTextEditor(() => sendActivity());
+ const onChangeTextDocument = workspace.onDidChangeTextDocument(() => sendActivity());
+ const onStartDebugSession = debug.onDidStartDebugSession(() => sendActivity());
+ const onTerminateDebugSession = debug.onDidTerminateDebugSession(() => sendActivity());
+
+ context.subscriptions.push(
+ onChangeActiveTextEditor,
+ onChangeTextDocument,
+ onStartDebugSession,
+ onTerminateDebugSession,
+ );
+ });
+
+ try {
+ await rpc.login({ clientId: CLIENT_ID });
+ } catch (error) {
+ log(LogLevel.Error, `Encountered following error while trying to login:\n${error as string}`);
+ rpc.dispose();
+ if (!config[CONFIG_KEYS.SuppressNotifications]) {
+ if (error?.message?.includes('ENOENT')) void window.showErrorMessage('No Discord client detected');
+ else void window.showErrorMessage(`Couldn't connect to Discord via RPC: ${error as string}`);
+ }
+ rpc.statusBarIcon.text = '$(pulse) Reconnect to Discord';
+ rpc.statusBarIcon.command = 'discord.reconnect';
+ }
+}
+
+export function activate(context: ExtensionContext) {
+ log(LogLevel.Info, 'Discord Presence activated');
let isWorkspaceExcluded = false;
- const excludePatterns = config.get('workspaceExcludePatterns');
- if (excludePatterns?.length) {
- for (const pattern of excludePatterns) {
- const regex = new RegExp(pattern);
- const folders = workspace.workspaceFolders;
- if (!folders) break;
- if (folders.some((folder) => regex.test(folder.uri.fsPath))) {
- isWorkspaceExcluded = true;
- break;
- }
+ for (const pattern of config[CONFIG_KEYS.WorkspaceExcludePatterns]) {
+ const regex = new RegExp(pattern);
+ const folders = workspace.workspaceFolders;
+ if (!folders) break;
+ if (folders.some((folder) => regex.test(folder.uri.fsPath))) {
+ isWorkspaceExcluded = true;
+ break;
}
}
const enabler = commands.registerCommand('discord.enable', () => {
- rpc.dispose();
+ rpc.destroy();
void config.update('enabled', true);
- rpc.config = workspace.getConfiguration('discord');
- rpc.statusBarIcon.text = '$(pulse) Connecting to Discord...';
- rpc.statusBarIcon.show();
- void rpc.login();
- void window.showInformationMessage('Enabled Discord Rich Presence for this workspace.');
+ statusBarIcon.text = '$(pulse) Connecting to Discord...';
+ statusBarIcon.show();
+ void login(context);
+ void window.showInformationMessage('Enabled Discord Presence for this workspace');
});
+
const disabler = commands.registerCommand('discord.disable', () => {
void config.update('enabled', false);
- rpc.config = workspace.getConfiguration('discord');
- rpc.dispose();
+ rpc.destroy();
rpc.statusBarIcon.hide();
- void window.showInformationMessage('Disabled Discord Rich Presence for this workspace.');
+ void window.showInformationMessage('Disabled Discord Presence for this workspace');
});
+
const reconnecter = commands.registerCommand('discord.reconnect', () => {
- if (loginTimeout) clearTimeout(loginTimeout);
- rpc.dispose();
- loginTimeout = setTimeout(() => {
- void rpc.login();
- if (!config.get('silent')) void window.showInformationMessage('Reconnecting to Discord RPC...');
- rpc.statusBarIcon.text = '$(pulse) Reconnecting to Discord...';
- rpc.statusBarIcon.command = 'discord.reconnect';
- }, 1000);
+ deactivate();
+ void activate(context);
});
+
const disconnect = commands.registerCommand('discord.disconnect', () => {
- rpc.dispose();
+ rpc.destroy();
rpc.statusBarIcon.text = '$(pulse) Reconnect to Discord';
rpc.statusBarIcon.command = 'discord.reconnect';
});
- const allowSpectate = commands.registerCommand('discord.allowSpectate', () => rpc.allowSpectate());
- const disableSpectate = commands.registerCommand('discord.disableSpectate', () => rpc.disableSpectate());
- const allowJoinRequests = commands.registerCommand('discord.allowJoinRequests', () => rpc.allowJoinRequests());
- const disableJoinRequests = commands.registerCommand('discord.disableJoinRequests', () => rpc.disableJoinRequests());
- context.subscriptions.push(
- enabler,
- disabler,
- reconnecter,
- disconnect,
- allowSpectate,
- disableSpectate,
- allowJoinRequests,
- disableJoinRequests,
- );
+ context.subscriptions.push(enabler, disabler, reconnecter, disconnect);
- if (!isWorkspaceExcluded && config.get('enabled')) {
+ if (!isWorkspaceExcluded && config[CONFIG_KEYS.Enabled]) {
statusBarIcon.show();
- try {
- await rpc.login();
- } catch (error) {
- Logger.log(`Encountered following error after trying to login:\n${error as string}`);
- rpc.dispose();
- if (!config.get('silent')) {
- if (error?.message?.includes('ENOENT')) void window.showErrorMessage('No Discord Client detected!');
- else void window.showErrorMessage(`Couldn't connect to Discord via RPC: ${error as string}`);
- }
- rpc.statusBarIcon.text = '$(pulse) Reconnect to Discord';
- rpc.statusBarIcon.command = 'discord.reconnect';
- }
+ void login(context);
}
const gitExtension = extensions.getExtension('vscode.git');
- if (gitExtension) {
- if (gitExtension.isActive) {
- rpc.git = gitExtension.exports.getAPI(1);
- } else {
- const extension = await gitExtension.activate();
- rpc.git = extension.getAPI(1);
- }
- }
+ void gitExtension?.activate();
}
export function deactivate() {
- rpc.dispose();
+ rpc.destroy();
}
-
-process.on('unhandledRejection', (err) => Logger.log(err as string));
diff --git a/src/git.d.ts b/src/git.d.ts
index bc46dde..338b733 100644
--- a/src/git.d.ts
+++ b/src/git.d.ts
@@ -1,10 +1,10 @@
-/*
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- */
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
-// eslint-disable-next-line
-import { Uri, SourceControlInputBox, Event, CancellationToken } from 'vscode';
+import { Uri, Event, Disposable, ProviderResult } from 'vscode';
+export { ProviderResult } from 'vscode';
export interface Git {
readonly path: string;
@@ -14,6 +14,11 @@ export interface InputBox {
value: string;
}
+export const enum ForcePushMode {
+ Force,
+ ForceWithLease,
+}
+
export const enum RefType {
Head,
RemoteHead,
@@ -42,7 +47,10 @@ export interface Commit {
readonly hash: string;
readonly message: string;
readonly parents: string[];
- readonly authorEmail?: string | undefined;
+ readonly authorDate?: Date;
+ readonly authorName?: string;
+ readonly authorEmail?: string;
+ readonly commitDate?: Date;
}
export interface Submodule {
@@ -117,6 +125,24 @@ export interface RepositoryUIState {
export interface LogOptions {
/** Max number of log entries to retrieve. If not specified, the default is 32. */
readonly maxEntries?: number;
+ readonly path?: string;
+}
+
+export interface CommitOptions {
+ all?: boolean | 'tracked';
+ amend?: boolean;
+ signoff?: boolean;
+ signCommit?: boolean;
+ empty?: boolean;
+ noVerify?: boolean;
+ requireUserConfig?: boolean;
+}
+
+export interface BranchQuery {
+ readonly remote?: boolean;
+ readonly pattern?: string;
+ readonly count?: number;
+ readonly contains?: string;
}
export interface Repository {
@@ -157,6 +183,7 @@ export interface Repository {
createBranch(name: string, checkout: boolean, ref?: string): Promise;
deleteBranch(name: string, force?: boolean): Promise;
getBranch(name: string): Promise;
+ getBranches(query: BranchQuery): Promise[;
setBranchUpstream(name: string, upstream: string): Promise;
getMergeBase(ref1: string, ref2: string): Promise;
@@ -166,24 +193,75 @@ export interface Repository {
addRemote(name: string, url: string): Promise;
removeRemote(name: string): Promise;
+ renameRemote(name: string, newName: string): Promise;
fetch(remote?: string, ref?: string, depth?: number): Promise;
pull(unshallow?: boolean): Promise;
- push(remoteName?: string, branchName?: string, setUpstream?: boolean): Promise;
+ push(remoteName?: string, branchName?: string, setUpstream?: boolean, force?: ForcePushMode): Promise;
blame(path: string): Promise;
log(options?: LogOptions): Promise;
+
+ commit(message: string, opts?: CommitOptions): Promise;
+}
+
+export interface RemoteSource {
+ readonly name: string;
+ readonly description?: string;
+ readonly url: string | string[];
+}
+
+export interface RemoteSourceProvider {
+ readonly name: string;
+ readonly icon?: string; // codicon name
+ readonly supportsQuery?: boolean;
+ getRemoteSources(query?: string): ProviderResult;
+ getBranches?(url: string): ProviderResult;
+ publishRepository?(repository: Repository): Promise;
+}
+
+export interface Credentials {
+ readonly username: string;
+ readonly password: string;
+}
+
+export interface CredentialsProvider {
+ getCredentials(host: Uri): ProviderResult;
+}
+
+export interface PushErrorHandler {
+ handlePushError(
+ repository: Repository,
+ remote: Remote,
+ refspec: string,
+ error: Error & { gitErrorCode: GitErrorCodes },
+ ): Promise;
}
export type APIState = 'uninitialized' | 'initialized';
+export interface PublishEvent {
+ repository: Repository;
+ branch?: string;
+}
+
export interface API {
readonly state: APIState;
readonly onDidChangeState: Event;
+ readonly onDidPublish: Event;
readonly git: Git;
readonly repositories: Repository[];
readonly onDidOpenRepository: Event;
readonly onDidCloseRepository: Event;
+
+ toGitUri(uri: Uri, ref: string): Uri;
+ getRepository(uri: Uri): Repository | null;
+ init(root: Uri): Promise;
+ openRepository(root: Uri): Promise;
+
+ registerRemoteSourceProvider(provider: RemoteSourceProvider): Disposable;
+ registerCredentialsProvider(provider: CredentialsProvider): Disposable;
+ registerPushErrorHandler(handler: PushErrorHandler): Disposable;
}
export interface GitExtension {
@@ -220,6 +298,7 @@ export const enum GitErrorCodes {
CantOpenResource = 'CantOpenResource',
GitNotFound = 'GitNotFound',
CantCreatePipe = 'CantCreatePipe',
+ PermissionDenied = 'PermissionDenied',
CantAccessRemote = 'CantAccessRemote',
RepositoryNotFound = 'RepositoryNotFound',
RepositoryIsLocked = 'RepositoryIsLocked',
diff --git a/src/logger.ts b/src/logger.ts
new file mode 100644
index 0000000..5e8e8c5
--- /dev/null
+++ b/src/logger.ts
@@ -0,0 +1,33 @@
+import { window } from 'vscode';
+import dayjs from 'dayjs';
+
+const outputChannel = window.createOutputChannel('Discord Presence');
+
+export const enum LogLevel {
+ Trace = 'TRACE',
+ Debug = 'DEBUG',
+ Info = 'INFO',
+ Warn = 'WARN',
+ Error = 'ERROR',
+}
+
+function send(level: string, message: string) {
+ outputChannel.appendLine(`[${dayjs().format('DD/MM/YYYY HH:mm:ss')} - ${level}] ${message}`);
+}
+
+export function log(level: LogLevel, message: string | Error) {
+ if (typeof message === 'string') {
+ send(level, message);
+ } else if (message instanceof Error) {
+ send(level, message.message);
+
+ if (message.stack) {
+ send(level, message.stack);
+ }
+ } else if (typeof message === 'object') {
+ try {
+ const json = JSON.stringify(message, null, 2);
+ send(level, json);
+ } catch {}
+ }
+}
diff --git a/src/structures/Activity.ts b/src/structures/Activity.ts
deleted file mode 100644
index da25c16..0000000
--- a/src/structures/Activity.ts
+++ /dev/null
@@ -1,376 +0,0 @@
-import { basename, parse, sep } from 'path';
-import { debug, Disposable, env, window, workspace } from 'vscode';
-import * as vsls from 'vsls';
-import RPCClient from '../client/RPCClient';
-import lang from '../data/languages.json';
-
-const knownExtensions: { [key: string]: { image: string } } = lang.knownExtensions;
-const knownLanguages: string[] = lang.knownLanguages;
-
-const empty = '\u200b\u200b';
-const sizes = [' bytes', 'kb', 'mb', 'gb', 'tb'];
-
-export interface State {
- details?: string;
- state?: string;
- startTimestamp?: number | null;
- largeImageKey?: string;
- largeImageText?: string;
- smallImageKey?: string;
- smallImageText?: string;
- partyId?: string;
- partySize?: number;
- partyMax?: number;
- matchSecret?: string;
- joinSecret?: string;
- spectateSecret?: string;
- instance?: boolean;
-}
-
-interface FileDetail {
- size?: string;
- totalLines?: string;
- currentLine?: string;
- currentColumn?: string;
- gitbranch?: string;
- gitreponame?: string;
-}
-
-export default class Activity implements Disposable {
- private _state: State | null = null;
-
- private lastKnownFile = '';
-
- public constructor(private readonly client: RPCClient) {}
-
- public get state() {
- return this._state;
- }
-
- public async generate(workspaceElapsedTime = false) {
- let largeImageKey: any = 'vscode-big';
- if (window.activeTextEditor) {
- if (window.activeTextEditor.document.languageId === 'Log') return this._state;
- if (this._state && window.activeTextEditor.document.fileName === this.lastKnownFile) {
- return (this._state = {
- ...this._state,
- details: await this._generateDetails(
- 'detailsDebugging',
- 'detailsEditing',
- 'detailsIdle',
- this._state.largeImageKey,
- ),
- smallImageKey: debug.activeDebugSession
- ? 'debug'
- : env.appName.includes('Insiders')
- ? 'vscode-insiders'
- : 'vscode',
- state: await this._generateDetails(
- 'lowerDetailsDebugging',
- 'lowerDetailsEditing',
- 'lowerDetailsIdle',
- this._state.largeImageKey,
- ),
- });
- }
- this.lastKnownFile = window.activeTextEditor.document.fileName;
- const filename = basename(window.activeTextEditor.document.fileName);
- largeImageKey =
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
- knownExtensions[
- Object.keys(knownExtensions).find((key) => {
- if (filename.endsWith(key)) return true;
- const match = /^\/(.*)\/([mgiy]+)$/.exec(key);
- if (!match) return false;
- const regex = new RegExp(match[1], match[2]);
- return regex.test(filename);
- })!
- ] ??
- (knownLanguages.includes(window.activeTextEditor.document.languageId)
- ? window.activeTextEditor.document.languageId
- : null);
- }
-
- let previousTimestamp = null;
- if (this._state?.startTimestamp) previousTimestamp = this._state.startTimestamp;
-
- this._state = {
- ...this._state,
- details: await this._generateDetails('detailsDebugging', 'detailsEditing', 'detailsIdle', largeImageKey),
- startTimestamp:
- window.activeTextEditor && previousTimestamp && workspaceElapsedTime
- ? previousTimestamp
- : window.activeTextEditor
- ? new Date().getTime()
- : null,
- state: await this._generateDetails(
- 'lowerDetailsDebugging',
- 'lowerDetailsEditing',
- 'lowerDetailsIdle',
- largeImageKey,
- ),
- largeImageKey: largeImageKey ? largeImageKey.image || largeImageKey : 'txt',
- largeImageText: window.activeTextEditor
- ? this.client.config
- .get('largeImage')!
- .replace('{lang}', largeImageKey ? largeImageKey.image || largeImageKey : 'txt')
- .replace(
- '{Lang}',
- largeImageKey
- ? (largeImageKey.image || largeImageKey).toLowerCase().replace(/^\w/, (c: string) => c.toUpperCase())
- : 'Txt',
- )
- .replace('{LANG}', largeImageKey ? (largeImageKey.image || largeImageKey).toUpperCase() : 'TXT') ||
- window.activeTextEditor.document.languageId.padEnd(2, '\u200b')
- : this.client.config.get('largeImageIdle'),
- smallImageKey: debug.activeDebugSession
- ? 'debug'
- : env.appName.includes('Insiders')
- ? 'vscode-insiders'
- : 'vscode',
- smallImageText: this.client.config.get('smallImage')!.replace('{appname}', env.appName),
- };
-
- return this._state;
- }
-
- public async allowSpectate() {
- if (!this._state) return;
- const liveshare = await vsls.getApi();
- if (!liveshare) return;
- const join = await liveshare.share({ suppressNotification: true, access: vsls.Access.ReadOnly });
- this._state = {
- ...this._state,
- spectateSecret: join ? Buffer.from(join.toString()).toString('base64') : undefined,
- instance: true,
- };
-
- return this._state;
- }
-
- public async disableSpectate() {
- if (!this._state) return;
- const liveshare = await vsls.getApi();
- if (!liveshare) return;
- await liveshare.end();
-
- delete this._state.spectateSecret;
- this._state.instance = false;
-
- return this._state;
- }
-
- public async allowJoinRequests() {
- if (!this._state) return;
- const liveshare = await vsls.getApi();
- if (!liveshare) return;
- const join = await liveshare.share({ suppressNotification: true });
- this._state = {
- ...this._state,
- partyId: join ? join.query : undefined,
- partySize: 1,
- partyMax: 5,
- joinSecret: join ? Buffer.from(join.toString()).toString('base64') : undefined,
- instance: true,
- };
-
- return this._state;
- }
-
- public async disableJoinRequests() {
- if (!this._state) return;
- const liveshare = await vsls.getApi();
- if (!liveshare) return;
- await liveshare.end();
-
- delete this._state.partyId;
- delete this._state.partySize;
- delete this._state.partyMax;
- delete this._state.joinSecret;
- this._state.instance = false;
-
- return this._state;
- }
-
- public changePartyId(id?: string) {
- if (!this._state) return;
- if (!id) {
- delete this._state.partyId;
- delete this._state.partySize;
- delete this._state.partyMax;
- this._state.instance = false;
-
- return this._state;
- }
- this._state = {
- ...this._state,
- partyId: id,
- partySize: this._state.partySize ? this._state.partySize + 1 : 1,
- partyMax: 5,
- instance: true,
- };
-
- return this._state;
- }
-
- public increasePartySize(size?: number) {
- if (!this._state) return;
- if (this._state.partySize === 5) return;
- this._state = {
- ...this._state,
- partySize: this._state.partySize ? this._state.partySize + 1 : size,
- };
-
- return this._state;
- }
-
- public decreasePartySize(size?: number) {
- if (!this._state) return;
- if (this._state.partySize === 1) return;
- this._state = {
- ...this._state,
- partySize: this._state.partySize ? this._state.partySize - 1 : size,
- };
-
- return this._state;
- }
-
- public dispose() {
- this._state = null;
- this.lastKnownFile = '';
- }
-
- private async _generateDetails(debugging: string, editing: string, idling: string, largeImageKey: any) {
- let raw = this.client.config.get(idling)!.replace('{null}', empty);
- let filename = null;
- let dirname = null;
- let checkState = false;
- let workspaceName = null;
- let workspaceFolder = null;
- let fullDirname = null;
- if (window.activeTextEditor) {
- filename = basename(window.activeTextEditor.document.fileName);
-
- const { dir } = parse(window.activeTextEditor.document.fileName);
- const split = dir.split(sep);
- dirname = split[split.length - 1];
-
- checkState = Boolean(workspace.getWorkspaceFolder(window.activeTextEditor.document.uri));
- workspaceName = workspace.name;
- workspaceFolder = checkState ? workspace.getWorkspaceFolder(window.activeTextEditor.document.uri) : null;
-
- if (workspaceFolder) {
- const { name } = workspaceFolder;
- const relativePath = workspace.asRelativePath(window.activeTextEditor.document.fileName).split(sep);
- relativePath.splice(-1, 1);
- fullDirname = `${name}${sep}${relativePath.join(sep)}`;
- }
-
- if (debug.activeDebugSession) {
- raw = this.client.config.get(debugging)!;
- } else {
- raw = this.client.config.get(editing)!;
- }
-
- const { totalLines, size, currentLine, currentColumn, gitbranch, gitreponame } = await this._generateFileDetails(
- raw,
- );
- raw = raw
- .replace('{null}', empty)
- .replace('{filename}', filename)
- .replace('{dirname}', dirname)
- .replace('{fulldirname}', fullDirname!)
- .replace(
- '{workspace}',
- workspaceName
- ? workspaceName
- : checkState && workspaceFolder
- ? workspaceFolder.name
- : this.client.config.get('lowerDetailsNotFound')!.replace('{null}', empty),
- )
- .replace(
- '{workspaceFolder}',
- checkState && workspaceFolder
- ? workspaceFolder.name
- : this.client.config.get('lowerDetailsNotFound')!.replace('{null}', empty),
- )
- .replace(
- '{workspaceAndFolder}',
- checkState && workspaceName && workspaceFolder
- ? `${workspaceName} - ${workspaceFolder.name}`
- : this.client.config.get('lowerDetailsNotFound')!.replace('{null}', empty),
- )
- .replace('{lang}', largeImageKey ? largeImageKey.image || largeImageKey : 'txt')
- .replace(
- '{Lang}',
- largeImageKey
- ? (largeImageKey.image || largeImageKey).toLowerCase().replace(/^\w/, (c: string) => c.toUpperCase())
- : 'Txt',
- )
- .replace('{LANG}', largeImageKey ? (largeImageKey.image || largeImageKey).toUpperCase() : 'TXT');
- if (totalLines) raw = raw.replace('{totallines}', totalLines);
- if (size) raw = raw.replace('{filesize}', size);
- if (currentLine) raw = raw.replace('{currentline}', currentLine);
- if (currentColumn) raw = raw.replace('{currentcolumn}', currentColumn);
- if (gitbranch) raw = raw.replace('{gitbranch}', gitbranch);
- if (gitreponame) raw = raw.replace('{gitreponame}', gitreponame);
- }
-
- return raw;
- }
-
- private async _generateFileDetails(str?: string) {
- const fileDetail: FileDetail = {};
- if (!str) return fileDetail;
-
- if (window.activeTextEditor) {
- if (str.includes('{totallines}')) {
- fileDetail.totalLines = window.activeTextEditor.document.lineCount.toLocaleString();
- }
-
- if (str.includes('{currentline}')) {
- fileDetail.currentLine = (window.activeTextEditor.selection.active.line + 1).toLocaleString();
- }
-
- if (str.includes('{currentcolumn}')) {
- fileDetail.currentColumn = (window.activeTextEditor.selection.active.character + 1).toLocaleString();
- }
-
- if (str.includes('{filesize}')) {
- let currentDivision = 0;
- let { size } = await workspace.fs.stat(window.activeTextEditor.document.uri);
- const originalSize = size;
- if (originalSize > 1000) {
- size /= 1000;
- currentDivision++;
- while (size > 1000) {
- currentDivision++;
- size /= 1000;
- }
- }
- fileDetail.size = `${originalSize > 1000 ? size.toFixed(2) : size}${sizes[currentDivision]}`;
- }
-
- if (str.includes('{gitbranch}')) {
- if (this.client.git?.repositories.length) {
- fileDetail.gitbranch = this.client.git.repositories.find((repo) => repo.ui.selected)!.state.HEAD!.name;
- } else {
- fileDetail.gitbranch = 'Unknown';
- }
- }
-
- if (str.includes('{gitreponame}')) {
- if (this.client.git?.repositories.length) {
- fileDetail.gitreponame = this.client.git.repositories
- .find((repo) => repo.ui.selected)!
- .state.remotes[0].fetchUrl!.split('/')[1]
- .replace('.git', '');
- } else {
- fileDetail.gitreponame = 'Unknown';
- }
- }
- }
-
- return fileDetail;
- }
-}
diff --git a/src/structures/Logger.ts b/src/structures/Logger.ts
deleted file mode 100644
index bbe244e..0000000
--- a/src/structures/Logger.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import { OutputChannel, window } from 'vscode';
-
-// eslint-disable-next-line
-export default class Logger {
- private static output?: OutputChannel;
-
- public static log(message: string) {
- if (!this.output) {
- this.output = window.createOutputChannel('Discord Presence');
- }
- this.output.appendLine(message);
- }
-}
diff --git a/src/util.ts b/src/util.ts
new file mode 100644
index 0000000..57fa778
--- /dev/null
+++ b/src/util.ts
@@ -0,0 +1,56 @@
+import { basename } from 'path';
+import { TextDocument, workspace, WorkspaceConfiguration } from 'vscode';
+
+import { KNOWN_EXTENSIONS, KNOWN_LANGUAGES } from './constants';
+
+type WorkspaceExtensionConfigurationuration = WorkspaceConfiguration & {
+ enabled: boolean;
+ details_editing: string;
+ details_debugging: string;
+ details_idling: string;
+ lower_details_editing: string;
+ lower_details_debugging: string;
+ lower_details_idling: string;
+ lower_details_no_workspace_found: string;
+ large_image: string;
+ large_image_idling: string;
+ small_image: string;
+ suppress_notifications: boolean;
+ workspace_elapsed_time: boolean;
+ workspace_exclude_patterns: string[];
+};
+
+export function getConfig() {
+ return workspace.getConfiguration('discord') as WorkspaceExtensionConfigurationuration;
+}
+
+export const toLower = (str: string) => str.toLocaleLowerCase();
+
+export const toUpper = (str: string) => str.toLocaleUpperCase();
+
+export const toTitle = (str: string) => toLower(str).replace(/^\w/, (c) => toUpper(c));
+
+export function resolveFileIcon(document: TextDocument) {
+ const filename = basename(document.fileName);
+ const findKnownExtension = Object.keys(KNOWN_EXTENSIONS).find((key) => {
+ if (filename.endsWith(key)) {
+ return true;
+ }
+
+ const match = /^\/(.*)\/([mgiy]+)$/.exec(key);
+ if (!match) {
+ return false;
+ }
+
+ const regex = new RegExp(match[1], match[2]);
+ return regex.test(filename);
+ });
+ const findKnownLanguage = KNOWN_LANGUAGES.find((key) => key.language === document.languageId);
+ const fileIcon = findKnownExtension
+ ? KNOWN_EXTENSIONS[findKnownExtension]
+ : findKnownLanguage
+ ? findKnownLanguage.image
+ : null;
+
+ return typeof fileIcon === 'string' ? fileIcon : fileIcon?.image ?? 'text';
+}
diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json
index 08ac212..ebf375a 100644
--- a/tsconfig.eslint.json
+++ b/tsconfig.eslint.json
@@ -1,7 +1,7 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
- "allowJs": true,
+ "allowJs": true
},
"include": [
"**/*.ts",
@@ -11,7 +11,7 @@
"**/*.test.ts",
"**/*.test.js",
"**/*.spec.ts",
- "**/*.spec.js",
+ "**/*.spec.js"
],
"exclude": []
}
diff --git a/tsconfig.json b/tsconfig.json
index 849b86a..3da9923 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -6,11 +6,9 @@
"removeComments": false,
"alwaysStrict": true,
"pretty": true,
- "target": "es2017",
+ "target": "ES2019",
"module": "commonjs",
- "lib": [
- "ESNext"
- ],
+ "lib": ["ESNext"],
"outDir": "dist",
"sourceMap": true,
"inlineSources": true,
diff --git a/webpack.config.js b/webpack.config.js
index 7ef135d..349b25f 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -1,7 +1,11 @@
+/* eslint-disable @typescript-eslint/no-var-requires */
+/* eslint-disable @typescript-eslint/no-require-imports */
+
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const TerserPlugin = require('terser-webpack-plugin');
const path = require('path');
+/** @type {import('webpack').Configuration} */
module.exports = {
target: 'node',
entry: './src/extension.ts',
]