From 0e989440766e23f188dda29de5530404bd2d8863 Mon Sep 17 00:00:00 2001 From: Anthony Lawn Date: Sun, 27 Feb 2022 18:11:01 -0600 Subject: [PATCH] Initial commit --- .eslintrc.js | 28 + .gitignore | 23 + .prettierrc.json | 7 + .replit | 2 + .vs/ProjectSettings.json | 3 + .vs/VSWorkspaceState.json | 10 + .vs/slnx.sqlite | Bin 0 -> 98304 bytes LICENSE | 21 + README.md | 24 + babel.config.js | 12 + package-lock.json | 21517 ++++++++++++++++++++ package.json | 58 + public/Logo.png | Bin 0 -> 19395 bytes public/android-chrome-192x192.png | Bin 0 -> 10696 bytes public/android-chrome-512x512.png | Bin 0 -> 39043 bytes public/apple-touch-icon.png | Bin 0 -> 9679 bytes public/favicon-16x16.png | Bin 0 -> 442 bytes public/favicon-32x32.png | Bin 0 -> 873 bytes public/favicon.ico | Bin 0 -> 15406 bytes public/index.html | 29 + public/site.webmanifest | 1 + saves/.placehold | 0 saves/safff.txt | 1 + src/App.vue | 48 + src/components/Game.vue | 86 + src/components/GameOverScreen.vue | 107 + src/components/Info.vue | 112 + src/components/Layer.vue | 214 + src/components/MarkNode.vue | 61 + src/components/Modal.vue | 136 + src/components/NaNScreen.vue | 124 + src/components/Nav.vue | 264 + src/components/Options.vue | 88 + src/components/Profectus.vue | 195 + src/components/Save.vue | 190 + src/components/SavesManager.vue | 280 + src/components/TPS.vue | 52 + src/components/Tooltip.vue | 167 + src/components/common/features.css | 35 + src/components/common/fields.css | 13 + src/components/common/table.css | 91 + src/components/fields/DangerButton.vue | 78 + src/components/fields/FeedbackButton.vue | 74 + src/components/fields/Select.vue | 93 + src/components/fields/Slider.vue | 40 + src/components/fields/Text.vue | 92 + src/components/fields/Toggle.vue | 115 + src/components/layout/Column.vue | 16 + src/components/layout/Row.vue | 16 + src/components/layout/Spacer.vue | 16 + src/components/layout/Sticky.vue | 59 + src/components/layout/VerticalRule.vue | 18 + src/components/links/Link.vue | 43 + src/components/links/LinkNode.vue | 42 + src/components/links/Links.vue | 112 + src/data/Changelog.vue | 83 + src/data/common.tsx | 153 + src/data/layers/aca/a.tsx | 135 + src/data/layers/aca/c.tsx | 686 + src/data/layers/aca/f.tsx | 179 + src/data/layers/demo-infinity.ts | 354 + src/data/layers/demo.ts | 2298 +++ src/data/mod.tsx | 112 + src/data/modInfo.json | 21 + src/data/themes.ts | 128 + src/features/achievements/Achievement.vue | 79 + src/features/achievements/achievement.tsx | 143 + src/features/bars/Bar.vue | 182 + src/features/bars/bar.ts | 140 + src/features/boards/Board.vue | 231 + src/features/boards/BoardLink.vue | 59 + src/features/boards/BoardNode.vue | 371 + src/features/boards/board.ts | 363 + src/features/buyable.tsx | 225 + src/features/challenges/Challenge.vue | 208 + src/features/challenges/challenge.tsx | 272 + src/features/clickables/Clickable.vue | 143 + src/features/clickables/clickable.ts | 115 + src/features/conversion.ts | 253 + src/features/feature.ts | 77 + src/features/grids/Grid.vue | 60 + src/features/grids/GridCell.vue | 91 + src/features/grids/grid.ts | 288 + src/features/hotkey.ts | 90 + src/features/infoboxes/Infobox.vue | 179 + src/features/infoboxes/infobox.ts | 116 + src/features/links.ts | 21 + src/features/milestones/Milestone.vue | 127 + src/features/milestones/milestone.tsx | 207 + src/features/reset.ts | 109 + src/features/resources/MainDisplay.vue | 38 + src/features/resources/Resource.vue | 17 + src/features/resources/resource.ts | 109 + src/features/tabs/Tab.vue | 13 + src/features/tabs/TabButton.vue | 109 + src/features/tabs/TabFamily.vue | 249 + src/features/tabs/tab.ts | 53 + src/features/tabs/tabFamily.ts | 155 + src/features/tooltip.ts | 25 + src/features/trees/Tree.vue | 105 + src/features/trees/TreeNode.vue | 185 + src/features/trees/tree.ts | 275 + src/features/upgrades/Upgrade.vue | 144 + src/features/upgrades/upgrade.ts | 185 + src/game/events.ts | 102 + src/game/layers.tsx | 187 + src/game/notifications.ts | 18 + src/game/persistence.ts | 117 + src/game/player.ts | 118 + src/game/settings.ts | 62 + src/game/state.ts | 14 + src/lib/break_eternity.ts | 3195 +++ src/main.css | 68 + src/main.ts | 55 + src/util/bignum.ts | 31 + src/util/break_eternity.ts | 183 + src/util/common.ts | 16 + src/util/computed.ts | 50 + src/util/proxies.ts | 60 + src/util/save.ts | 116 + src/util/vue.tsx | 171 + tsconfig.json | 44 + vue.config.js | 17 + 123 files changed, 39397 insertions(+) create mode 100644 .eslintrc.js create mode 100644 .gitignore create mode 100644 .prettierrc.json create mode 100644 .replit create mode 100644 .vs/ProjectSettings.json create mode 100644 .vs/VSWorkspaceState.json create mode 100644 .vs/slnx.sqlite create mode 100644 LICENSE create mode 100644 README.md create mode 100644 babel.config.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/Logo.png create mode 100644 public/android-chrome-192x192.png create mode 100644 public/android-chrome-512x512.png create mode 100644 public/apple-touch-icon.png create mode 100644 public/favicon-16x16.png create mode 100644 public/favicon-32x32.png create mode 100644 public/favicon.ico create mode 100644 public/index.html create mode 100644 public/site.webmanifest create mode 100644 saves/.placehold create mode 100644 saves/safff.txt create mode 100644 src/App.vue create mode 100644 src/components/Game.vue create mode 100644 src/components/GameOverScreen.vue create mode 100644 src/components/Info.vue create mode 100644 src/components/Layer.vue create mode 100644 src/components/MarkNode.vue create mode 100644 src/components/Modal.vue create mode 100644 src/components/NaNScreen.vue create mode 100644 src/components/Nav.vue create mode 100644 src/components/Options.vue create mode 100644 src/components/Profectus.vue create mode 100644 src/components/Save.vue create mode 100644 src/components/SavesManager.vue create mode 100644 src/components/TPS.vue create mode 100644 src/components/Tooltip.vue create mode 100644 src/components/common/features.css create mode 100644 src/components/common/fields.css create mode 100644 src/components/common/table.css create mode 100644 src/components/fields/DangerButton.vue create mode 100644 src/components/fields/FeedbackButton.vue create mode 100644 src/components/fields/Select.vue create mode 100644 src/components/fields/Slider.vue create mode 100644 src/components/fields/Text.vue create mode 100644 src/components/fields/Toggle.vue create mode 100644 src/components/layout/Column.vue create mode 100644 src/components/layout/Row.vue create mode 100644 src/components/layout/Spacer.vue create mode 100644 src/components/layout/Sticky.vue create mode 100644 src/components/layout/VerticalRule.vue create mode 100644 src/components/links/Link.vue create mode 100644 src/components/links/LinkNode.vue create mode 100644 src/components/links/Links.vue create mode 100644 src/data/Changelog.vue create mode 100644 src/data/common.tsx create mode 100644 src/data/layers/aca/a.tsx create mode 100644 src/data/layers/aca/c.tsx create mode 100644 src/data/layers/aca/f.tsx create mode 100644 src/data/layers/demo-infinity.ts create mode 100644 src/data/layers/demo.ts create mode 100644 src/data/mod.tsx create mode 100644 src/data/modInfo.json create mode 100644 src/data/themes.ts create mode 100644 src/features/achievements/Achievement.vue create mode 100644 src/features/achievements/achievement.tsx create mode 100644 src/features/bars/Bar.vue create mode 100644 src/features/bars/bar.ts create mode 100644 src/features/boards/Board.vue create mode 100644 src/features/boards/BoardLink.vue create mode 100644 src/features/boards/BoardNode.vue create mode 100644 src/features/boards/board.ts create mode 100644 src/features/buyable.tsx create mode 100644 src/features/challenges/Challenge.vue create mode 100644 src/features/challenges/challenge.tsx create mode 100644 src/features/clickables/Clickable.vue create mode 100644 src/features/clickables/clickable.ts create mode 100644 src/features/conversion.ts create mode 100644 src/features/feature.ts create mode 100644 src/features/grids/Grid.vue create mode 100644 src/features/grids/GridCell.vue create mode 100644 src/features/grids/grid.ts create mode 100644 src/features/hotkey.ts create mode 100644 src/features/infoboxes/Infobox.vue create mode 100644 src/features/infoboxes/infobox.ts create mode 100644 src/features/links.ts create mode 100644 src/features/milestones/Milestone.vue create mode 100644 src/features/milestones/milestone.tsx create mode 100644 src/features/reset.ts create mode 100644 src/features/resources/MainDisplay.vue create mode 100644 src/features/resources/Resource.vue create mode 100644 src/features/resources/resource.ts create mode 100644 src/features/tabs/Tab.vue create mode 100644 src/features/tabs/TabButton.vue create mode 100644 src/features/tabs/TabFamily.vue create mode 100644 src/features/tabs/tab.ts create mode 100644 src/features/tabs/tabFamily.ts create mode 100644 src/features/tooltip.ts create mode 100644 src/features/trees/Tree.vue create mode 100644 src/features/trees/TreeNode.vue create mode 100644 src/features/trees/tree.ts create mode 100644 src/features/upgrades/Upgrade.vue create mode 100644 src/features/upgrades/upgrade.ts create mode 100644 src/game/events.ts create mode 100644 src/game/layers.tsx create mode 100644 src/game/notifications.ts create mode 100644 src/game/persistence.ts create mode 100644 src/game/player.ts create mode 100644 src/game/settings.ts create mode 100644 src/game/state.ts create mode 100644 src/lib/break_eternity.ts create mode 100644 src/main.css create mode 100644 src/main.ts create mode 100644 src/util/bignum.ts create mode 100644 src/util/break_eternity.ts create mode 100644 src/util/common.ts create mode 100644 src/util/computed.ts create mode 100644 src/util/proxies.ts create mode 100644 src/util/save.ts create mode 100644 src/util/vue.tsx create mode 100644 tsconfig.json create mode 100644 vue.config.js diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..2a1d0bc --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,28 @@ +require("@rushstack/eslint-patch/modern-module-resolution"); + +module.exports = { + root: true, + env: { + node: true + }, + extends: [ + "plugin:vue/vue3-essential", + "@vue/eslint-config-typescript/recommended", + "@vue/eslint-config-prettier" + ], + parserOptions: { + ecmaVersion: 2020 + }, + ignorePatterns: ["src/lib"], + rules: { + "no-console": process.env.NODE_ENV === "production" ? "warn" : "off", + "no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off", + "vue/script-setup-uses-vars": "warn", + "vue/no-mutating-props": "off", + "vue/multi-word-component-names": "off" + }, + globals: { + defineProps: "readonly", + defineEmits: "readonly" + } +}; diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..403adbc --- /dev/null +++ b/.gitignore @@ -0,0 +1,23 @@ +.DS_Store +node_modules +/dist + + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..008a2f9 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "arrowParens": "avoid", + "endOfLine": "auto", + "printWidth": 100, + "tabWidth": 4, + "trailingComma": "none" +} diff --git a/.replit b/.replit new file mode 100644 index 0000000..9978ad8 --- /dev/null +++ b/.replit @@ -0,0 +1,2 @@ +language = "nodejs" +run = "npm run serve" diff --git a/.vs/ProjectSettings.json b/.vs/ProjectSettings.json new file mode 100644 index 0000000..f8b4888 --- /dev/null +++ b/.vs/ProjectSettings.json @@ -0,0 +1,3 @@ +{ + "CurrentProjectSetting": null +} \ No newline at end of file diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json new file mode 100644 index 0000000..16ebc3e --- /dev/null +++ b/.vs/VSWorkspaceState.json @@ -0,0 +1,10 @@ +{ + "ExpandedNodes": [ + "", + "\\src", + "\\src\\typings", + "\\src\\util" + ], + "SelectedNode": "\\src\\App.vue", + "PreviewInSolutionExplorer": false +} \ No newline at end of file diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..02181ac177baa54c77633333470dd62cf44a2584 GIT binary patch literal 98304 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 if%oBQWsM~iv;Y}IpyB=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.8.tgz", + "integrity": "sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.7.tgz", + "integrity": "sha512-aeLaqcqThRNZYmbMqtulsetOQZ/5gbR/dWruUCJcpas4Qoyy+QeagfDsPdMrqwsPRDNxJvBlRiZxxX7THO7qtA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.16.7", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helpers": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz", + "integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.8", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", + "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", + "dev": true, + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", + "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.16.4", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.7.tgz", + "integrity": "sha512-kIFozAvVfK05DM4EVQYKK+zteWvY85BFdGBRQBytRyY3y+6PX0DkDOn/CZ3lEuczCfrCxEzwt0YtP/87YPTWSw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.7.tgz", + "integrity": "sha512-fk5A6ymfp+O5+p2yCkXAu5Kyj6v0xh0RBeNcAkYUMDvvAAoxvSKXn+Jb37t/yWFiQVDFK1ELpUTD8/aLhCPu+g==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "regexpu-core": "^4.7.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.0.tgz", + "integrity": "sha512-7hfT8lUljl/tM3h+izTX/pO3W3frz2ok6Pk+gzys8iJqDfZrZy2pXjRTZAvG2YmfHun1X4q8/UZRLatMfqc5Tg==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", + "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "dev": true, + "dependencies": { + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz", + "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", + "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", + "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", + "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-wrap-function": "^7.16.8", + "@babel/types": "^7.16.8" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", + "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", + "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", + "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", + "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.8", + "@babel/types": "^7.16.8" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.7.tgz", + "integrity": "sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", + "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.8.tgz", + "integrity": "sha512-i7jDUfrVBWc+7OKcBzEe5n7fbv3i2fWtxKzzCvOjnzSxMfWMigAhtfJ7qzZNGFNMsCCd67+uz553dYKWXPvCKw==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz", + "integrity": "sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz", + "integrity": "sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", + "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", + "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.7.tgz", + "integrity": "sha512-dgqJJrcZoG/4CkMopzhPJjGxsIe9A8RlkQLnL/Vhhx8AA9ZuaRwGSlscSh42hazc7WSrya/IK7mTeoF0DP9tEw==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.16.7.tgz", + "integrity": "sha512-DoEpnuXK14XV9btI1k8tzNGCutMclpj4yru8aXKoHlVmbO1s+2A+g2+h4JhcjrxkFJqzbymnLG6j/niOf3iFXQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-decorators": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", + "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz", + "integrity": "sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz", + "integrity": "sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz", + "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz", + "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", + "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.7.tgz", + "integrity": "sha512-3O0Y4+dw94HA86qSg9IHfyPktgR7q3gpNVAeiKQd+8jBKFaU5NQS1Yatgo4wY+UFNuLjvxcSmzcsHqrhgTyBUA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.16.4", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", + "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", + "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.7.tgz", + "integrity": "sha512-7twV3pzhrRxSwHeIvFE6coPgvo+exNDOiGUMg39o2LiLo1Y+4aKpfkcLGcg1UHonzorCt7SNXnoMyCnnIOA8Sw==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz", + "integrity": "sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz", + "integrity": "sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.16.7.tgz", + "integrity": "sha512-vQ+PxL+srA7g6Rx6I1e15m55gftknl2X8GCUW1JTlkTaXZLJOS0UcaY0eK9jYT7IYf4awn6qwyghVHLDz1WyMw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", + "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz", + "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", + "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", + "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz", + "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz", + "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz", + "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.7.tgz", + "integrity": "sha512-VqAwhTHBnu5xBVDCvrvqJbtLUa++qZaWC0Fgr2mqokBlulZARGyIvZDoqbPlPaKImQ9dKAcCzbv+ul//uqu70A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", + "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz", + "integrity": "sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", + "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz", + "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", + "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz", + "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", + "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz", + "integrity": "sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", + "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz", + "integrity": "sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz", + "integrity": "sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz", + "integrity": "sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz", + "integrity": "sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", + "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz", + "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", + "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz", + "integrity": "sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==", + "dev": true, + "dependencies": { + "regenerator-transform": "^0.14.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz", + "integrity": "sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.8.tgz", + "integrity": "sha512-6Kg2XHPFnIarNweZxmzbgYnnWsXxkx9WQUVk2sksBRL80lBC1RAQV3wQagWxdCHiYHqPN+oenwNIuttlYgIbQQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", + "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz", + "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", + "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz", + "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz", + "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", + "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", + "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.8.tgz", + "integrity": "sha512-9rNKgVCdwHb3z1IlbMyft6yIXIeP3xz6vWvGaLHrJThuEIqWfHb0DNBH9VuTgnDfdbUDhkmkvMZS/YMCtP7Elg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.16.8", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.7", + "@babel/plugin-proposal-async-generator-functions": "^7.16.8", + "@babel/plugin-proposal-class-properties": "^7.16.7", + "@babel/plugin-proposal-class-static-block": "^7.16.7", + "@babel/plugin-proposal-dynamic-import": "^7.16.7", + "@babel/plugin-proposal-export-namespace-from": "^7.16.7", + "@babel/plugin-proposal-json-strings": "^7.16.7", + "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", + "@babel/plugin-proposal-numeric-separator": "^7.16.7", + "@babel/plugin-proposal-object-rest-spread": "^7.16.7", + "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", + "@babel/plugin-proposal-optional-chaining": "^7.16.7", + "@babel/plugin-proposal-private-methods": "^7.16.7", + "@babel/plugin-proposal-private-property-in-object": "^7.16.7", + "@babel/plugin-proposal-unicode-property-regex": "^7.16.7", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.16.7", + "@babel/plugin-transform-async-to-generator": "^7.16.8", + "@babel/plugin-transform-block-scoped-functions": "^7.16.7", + "@babel/plugin-transform-block-scoping": "^7.16.7", + "@babel/plugin-transform-classes": "^7.16.7", + "@babel/plugin-transform-computed-properties": "^7.16.7", + "@babel/plugin-transform-destructuring": "^7.16.7", + "@babel/plugin-transform-dotall-regex": "^7.16.7", + "@babel/plugin-transform-duplicate-keys": "^7.16.7", + "@babel/plugin-transform-exponentiation-operator": "^7.16.7", + "@babel/plugin-transform-for-of": "^7.16.7", + "@babel/plugin-transform-function-name": "^7.16.7", + "@babel/plugin-transform-literals": "^7.16.7", + "@babel/plugin-transform-member-expression-literals": "^7.16.7", + "@babel/plugin-transform-modules-amd": "^7.16.7", + "@babel/plugin-transform-modules-commonjs": "^7.16.8", + "@babel/plugin-transform-modules-systemjs": "^7.16.7", + "@babel/plugin-transform-modules-umd": "^7.16.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.8", + "@babel/plugin-transform-new-target": "^7.16.7", + "@babel/plugin-transform-object-super": "^7.16.7", + "@babel/plugin-transform-parameters": "^7.16.7", + "@babel/plugin-transform-property-literals": "^7.16.7", + "@babel/plugin-transform-regenerator": "^7.16.7", + "@babel/plugin-transform-reserved-words": "^7.16.7", + "@babel/plugin-transform-shorthand-properties": "^7.16.7", + "@babel/plugin-transform-spread": "^7.16.7", + "@babel/plugin-transform-sticky-regex": "^7.16.7", + "@babel/plugin-transform-template-literals": "^7.16.7", + "@babel/plugin-transform-typeof-symbol": "^7.16.7", + "@babel/plugin-transform-unicode-escapes": "^7.16.7", + "@babel/plugin-transform-unicode-regex": "^7.16.7", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.16.8", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "core-js-compat": "^3.20.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.7.tgz", + "integrity": "sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.8.tgz", + "integrity": "sha512-xe+H7JlvKsDQwXRsBhSnq1/+9c+LlQcCK3Tn/l5sbx02HYns/cn7ibp9+RV1sIUqu7hKg91NWsgHurO9dowITQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.16.8", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.16.8", + "@babel/types": "^7.16.8", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", + "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", + "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.2.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/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/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.1.tgz", + "integrity": "sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw==", + "dev": true + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dev": true, + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", + "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@ivanv/vue-collapse-transition": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@ivanv/vue-collapse-transition/-/vue-collapse-transition-1.0.2.tgz", + "integrity": "sha512-eWEameFXJM/1khcoKbITvKjYYXDP1WKQ/Xf9ItJVPoEjCiOdocR3AgDAERzDrNNg4oWK28gRGi+0ft8Te27zxw==", + "dev": true + }, + "node_modules/@jetblack/operator-overloading": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@jetblack/operator-overloading/-/operator-overloading-0.2.0.tgz", + "integrity": "sha512-Y6iNzYnNUoCUcRMoUL1NflWLHkrzkxCC6VHB5h57pcjiUaPHTidZH9uyz123d6utA9w9VO+cS7S/KLA1DEpS/g==", + "dev": true + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.21", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", + "dev": true + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.0.tgz", + "integrity": "sha512-JLo+Y592QzIE+q7Dl2pMUtt4q8SKYI5jDrZxrozEQxnGVOyYE+GWK9eLkwTaeN9DDctlaRAQ3TBmzZ1qdLE30A==", + "dev": true + }, + "node_modules/@sideway/address": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.3.tgz", + "integrity": "sha512-8ncEUtmnTsMmL7z1YPB47kPUq7LpKWJNFPsRzHiIajGC5uXlWGn+AmkYPcHNl8S4tcEGx+cnORnNYaw2wvL+LQ==", + "dev": true, + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", + "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==", + "dev": true + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "dev": true + }, + "node_modules/@soda/friendly-errors-webpack-plugin": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz", + "integrity": "sha512-h2ooWqP8XuFqTXT+NyAFbrArzfQA7R6HTezADrvD9Re8fxMLTPPniLdqVTdDaO0eIoLaAwKT+d6w+5GeTk7Vbg==", + "dev": true, + "dependencies": { + "chalk": "^3.0.0", + "error-stack-parser": "^2.0.6", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.0.0" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/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/@soda/friendly-errors-webpack-plugin/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/@soda/friendly-errors-webpack-plugin/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/@soda/friendly-errors-webpack-plugin/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/@soda/get-current-script": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@soda/get-current-script/-/get-current-script-1.0.2.tgz", + "integrity": "sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w==", + "dev": true + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", + "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "dev": true, + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.29.0.tgz", + "integrity": "sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.50", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", + "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", + "dev": true + }, + "node_modules/@types/express": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.28", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", + "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "dev": true + }, + "node_modules/@types/http-proxy": { + "version": "1.17.8", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz", + "integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, + "node_modules/@types/lodash": { + "version": "4.14.178", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.178.tgz", + "integrity": "sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==", + "dev": true + }, + "node_modules/@types/lodash.clonedeep": { + "version": "4.5.6", + "resolved": "https://registry.npmjs.org/@types/lodash.clonedeep/-/lodash.clonedeep-4.5.6.tgz", + "integrity": "sha512-cE1jYr2dEg1wBImvXlNtp0xDoS79rfEdGozQVgliDZj1uERH4k+rmEMTudP9b4VQ8O6nRb5gPqft0QzEQGMQgA==", + "dev": true, + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "17.0.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.8.tgz", + "integrity": "sha512-YofkM6fGv4gDJq78g4j0mMuGMkZVxZDgtU0JRdx6FgiJDG+0fY0GKVolOV8WqVmEhLCXkQRjwDdKyPxJp/uucg==", + "dev": true + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "node_modules/@types/retry": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", + "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==", + "dev": true + }, + "node_modules/@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.13.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", + "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/webpack-dev-server": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@types/webpack-dev-server/-/webpack-dev-server-4.7.2.tgz", + "integrity": "sha512-Y3p0Fmfvp0MHBDoCzo+xFJaWTw0/z37mWIo6P15j+OtmUDLvznJWdZNeD7Q004R+MpQlys12oXbXsrXRmxwg4Q==", + "deprecated": "This is a stub types definition. webpack-dev-server provides its own type definitions, so you do not need this installed.", + "dev": true, + "dependencies": { + "webpack-dev-server": "*" + } + }, + "node_modules/@types/webpack-env": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.16.3.tgz", + "integrity": "sha512-9gtOPPkfyNoEqCQgx4qJKkuNm/x0R2hKR7fdl7zvTJyHnIisuE/LfvXOsYWL0o3qq6uiBnKZNNNzi3l0y/X+xw==", + "dev": true + }, + "node_modules/@types/ws": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.2.tgz", + "integrity": "sha512-NOn5eIcgWLOo6qW8AcuLZ7G8PycXu0xTxxkS6Q18VWFxgPUSOwV0pBj2a/4viNZVu25i7RIB7GttdkAIUUXOOg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.9.1.tgz", + "integrity": "sha512-Xv9tkFlyD4MQGpJgTo6wqDqGvHIRmRgah/2Sjz1PUnJTawjHWIwBivUE9x0QtU2WVii9baYgavo/bHjrZJkqTw==", + "dev": true, + "dependencies": { + "@typescript-eslint/experimental-utils": "5.9.1", + "@typescript-eslint/scope-manager": "5.9.1", + "@typescript-eslint/type-utils": "5.9.1", + "debug": "^4.3.2", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.2.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.9.1.tgz", + "integrity": "sha512-cb1Njyss0mLL9kLXgS/eEY53SZQ9sT519wpX3i+U457l2UXRDuo87hgKfgRazmu9/tQb0x2sr3Y0yrU+Zz0y+w==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.9.1", + "@typescript-eslint/types": "5.9.1", + "@typescript-eslint/typescript-estree": "5.9.1", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.9.1.tgz", + "integrity": "sha512-PLYO0AmwD6s6n0ZQB5kqPgfvh73p0+VqopQQLuNfi7Lm0EpfKyDalchpVwkE+81k5HeiRrTV/9w1aNHzjD7C4g==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.9.1", + "@typescript-eslint/types": "5.9.1", + "@typescript-eslint/typescript-estree": "5.9.1", + "debug": "^4.3.2" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.9.1.tgz", + "integrity": "sha512-8BwvWkho3B/UOtzRyW07ffJXPaLSUKFBjpq8aqsRvu6HdEuzCY57+ffT7QoV4QXJXWSU1+7g3wE4AlgImmQ9pQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.9.1", + "@typescript-eslint/visitor-keys": "5.9.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.9.1.tgz", + "integrity": "sha512-tRSpdBnPRssjlUh35rE9ug5HrUvaB9ntREy7gPXXKwmIx61TNN7+l5YKgi1hMKxo5NvqZCfYhA5FvyuJG6X6vg==", + "dev": true, + "dependencies": { + "@typescript-eslint/experimental-utils": "5.9.1", + "debug": "^4.3.2", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.9.1.tgz", + "integrity": "sha512-SsWegWudWpkZCwwYcKoDwuAjoZXnM1y2EbEerTHho19Hmm+bQ56QG4L4jrtCu0bI5STaRTvRTZmjprWlTw/5NQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.9.1.tgz", + "integrity": "sha512-gL1sP6A/KG0HwrahVXI9fZyeVTxEYV//6PmcOn1tD0rw8VhUWYeZeuWHwwhnewnvEMcHjhnJLOBhA9rK4vmb8A==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.9.1", + "@typescript-eslint/visitor-keys": "5.9.1", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.9.1.tgz", + "integrity": "sha512-Xh37pNz9e9ryW4TVdwiFzmr4hloty8cFj8GTWMXh3Z8swGwyQWeCcNgF0hm6t09iZd6eiZmIf4zHedQVP6TVtg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.9.1", + "eslint-visitor-keys": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vue/babel-helper-vue-jsx-merge-props": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.2.1.tgz", + "integrity": "sha512-QOi5OW45e2R20VygMSNhyQHvpdUwQZqGPc748JLGCYEy+yp8fNFNdbNIGAgZmi9e+2JHPd6i6idRuqivyicIkA==", + "dev": true + }, + "node_modules/@vue/babel-helper-vue-transform-on": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.0.2.tgz", + "integrity": "sha512-hz4R8tS5jMn8lDq6iD+yWL6XNB699pGIVLk7WSJnn1dbpjaazsjZQkieJoRX6gW5zpYSCFqQ7jUquPNY65tQYA==", + "dev": true + }, + "node_modules/@vue/babel-plugin-jsx": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.1.1.tgz", + "integrity": "sha512-j2uVfZjnB5+zkcbc/zsOc0fSNGCMMjaEXP52wdwdIfn0qjFfEYpYZBFKFg+HHnQeJCVrjOeO0YxgaL7DMrym9w==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.0.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "@vue/babel-helper-vue-transform-on": "^1.0.2", + "camelcase": "^6.0.0", + "html-tags": "^3.1.0", + "svg-tags": "^1.0.0" + } + }, + "node_modules/@vue/babel-plugin-transform-vue-jsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.2.1.tgz", + "integrity": "sha512-HJuqwACYehQwh1fNT8f4kyzqlNMpBuUK4rSiSES5D4QsYncv5fxFsLyrxFPG2ksO7t5WP+Vgix6tt6yKClwPzA==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1", + "html-tags": "^2.0.0", + "lodash.kebabcase": "^4.1.1", + "svg-tags": "^1.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-plugin-transform-vue-jsx/node_modules/html-tags": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", + "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@vue/babel-preset-app": { + "version": "5.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@vue/babel-preset-app/-/babel-preset-app-5.0.0-rc.1.tgz", + "integrity": "sha512-inJV1lxC+dUvqwPy9gbEjELX+Vk/Ys961S61aIn52gSCZBLHfk8/7mM7B3PamgHSG8yQmgrd3BOZsKSSsAMNJQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.16", + "@babel/helper-compilation-targets": "^7.12.16", + "@babel/helper-module-imports": "^7.12.13", + "@babel/plugin-proposal-class-properties": "^7.12.13", + "@babel/plugin-proposal-decorators": "^7.12.13", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-jsx": "^7.12.13", + "@babel/plugin-transform-runtime": "^7.12.15", + "@babel/preset-env": "^7.12.16", + "@babel/runtime": "^7.12.13", + "@vue/babel-plugin-jsx": "^1.0.3", + "@vue/babel-preset-jsx": "^1.1.2", + "babel-plugin-dynamic-import-node": "^2.3.3", + "core-js": "^3.8.3", + "core-js-compat": "^3.8.3", + "semver": "^7.3.4" + }, + "peerDependencies": { + "@babel/core": "*", + "core-js": "^3", + "vue": "^2 || ^3.2.13" + }, + "peerDependenciesMeta": { + "core-js": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/@vue/babel-preset-app/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vue/babel-preset-jsx": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@vue/babel-preset-jsx/-/babel-preset-jsx-1.2.4.tgz", + "integrity": "sha512-oRVnmN2a77bYDJzeGSt92AuHXbkIxbf/XXSE3klINnh9AXBmVS1DGa1f0d+dDYpLfsAKElMnqKTQfKn7obcL4w==", + "dev": true, + "dependencies": { + "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1", + "@vue/babel-plugin-transform-vue-jsx": "^1.2.1", + "@vue/babel-sugar-composition-api-inject-h": "^1.2.1", + "@vue/babel-sugar-composition-api-render-instance": "^1.2.4", + "@vue/babel-sugar-functional-vue": "^1.2.2", + "@vue/babel-sugar-inject-h": "^1.2.2", + "@vue/babel-sugar-v-model": "^1.2.3", + "@vue/babel-sugar-v-on": "^1.2.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-composition-api-inject-h": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.2.1.tgz", + "integrity": "sha512-4B3L5Z2G+7s+9Bwbf+zPIifkFNcKth7fQwekVbnOA3cr3Pq71q71goWr97sk4/yyzH8phfe5ODVzEjX7HU7ItQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-composition-api-render-instance": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.2.4.tgz", + "integrity": "sha512-joha4PZznQMsxQYXtR3MnTgCASC9u3zt9KfBxIeuI5g2gscpTsSKRDzWQt4aqNIpx6cv8On7/m6zmmovlNsG7Q==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-functional-vue": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.2.2.tgz", + "integrity": "sha512-JvbgGn1bjCLByIAU1VOoepHQ1vFsroSA/QkzdiSs657V79q6OwEWLCQtQnEXD/rLTA8rRit4rMOhFpbjRFm82w==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-inject-h": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.2.2.tgz", + "integrity": "sha512-y8vTo00oRkzQTgufeotjCLPAvlhnpSkcHFEp60+LJUwygGcd5Chrpn5480AQp/thrxVm8m2ifAk0LyFel9oCnw==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-v-model": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.2.3.tgz", + "integrity": "sha512-A2jxx87mySr/ulAsSSyYE8un6SIH0NWHiLaCWpodPCVOlQVODCaSpiR4+IMsmBr73haG+oeCuSvMOM+ttWUqRQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1", + "@vue/babel-plugin-transform-vue-jsx": "^1.2.1", + "camelcase": "^5.0.0", + "html-tags": "^2.0.0", + "svg-tags": "^1.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-v-model/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@vue/babel-sugar-v-model/node_modules/html-tags": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", + "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@vue/babel-sugar-v-on": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.2.3.tgz", + "integrity": "sha512-kt12VJdz/37D3N3eglBywV8GStKNUhNrsxChXIV+o0MwVXORYuhDTHJRKPgLJRb/EY3vM2aRFQdxJBp9CLikjw==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.2.1", + "camelcase": "^5.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-v-on/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@vue/cli-overlay": { + "version": "5.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@vue/cli-overlay/-/cli-overlay-5.0.0-rc.1.tgz", + "integrity": "sha512-pJ8DxDlFiM73FaNlpKqOi3haG15c/6jPLiFZKIGJDoMxLLufSxEZ8aSfvbFRjqwGy/o3I4jzg086Yy+3ZhdG1g==", + "dev": true + }, + "node_modules/@vue/cli-plugin-babel": { + "version": "5.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-babel/-/cli-plugin-babel-5.0.0-rc.1.tgz", + "integrity": "sha512-ldVuIkPDAuW831l4u7QMkqEhn4/Gil5Wv617i6h4rwDYAAXPgdf8Ce6b7jH4XEyQ2HCu93TzAK1i2njkWV1wrw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.16", + "@vue/babel-preset-app": "^5.0.0-rc.1", + "@vue/cli-shared-utils": "^5.0.0-rc.1", + "babel-loader": "^8.2.2", + "thread-loader": "^3.0.0", + "webpack": "^5.54.0" + }, + "peerDependencies": { + "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0" + } + }, + "node_modules/@vue/cli-plugin-eslint": { + "version": "5.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-eslint/-/cli-plugin-eslint-5.0.0-rc.1.tgz", + "integrity": "sha512-CK/T00XeibQCMHzSenBWDROB11HbCL69bEc1nwT8gjXq5MMw9AB8qlaZzSuoHbbUE0PDyD272V/RDePO1ExT7w==", + "dev": true, + "dependencies": { + "@vue/cli-shared-utils": "^5.0.0-rc.1", + "eslint-webpack-plugin": "^3.1.0", + "globby": "^11.0.2", + "webpack": "^5.54.0", + "yorkie": "^2.0.0" + }, + "peerDependencies": { + "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0", + "eslint": ">=7.5.0" + } + }, + "node_modules/@vue/cli-plugin-router": { + "version": "5.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-router/-/cli-plugin-router-5.0.0-rc.1.tgz", + "integrity": "sha512-eRMeUNY89PbyH/Gkt0IGfNT2qK4fZhTdBDKrR/hwyk57TBDse/h2jZ9inPqfSnrdIrMOqYsLU2ixzSzJVXXOVw==", + "dev": true, + "dependencies": { + "@vue/cli-shared-utils": "^5.0.0-rc.1" + }, + "peerDependencies": { + "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0" + } + }, + "node_modules/@vue/cli-plugin-typescript": { + "version": "5.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-typescript/-/cli-plugin-typescript-5.0.0-rc.1.tgz", + "integrity": "sha512-09tq8f1LiYJcmLMfoSiOZX+K2sA/tY3hM99vt5fRevpePFR4TRTbuNjVwtKiYLMq7UsZ2mmbYl9ViQ8Ium1i0w==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.16", + "@types/webpack-env": "^1.15.2", + "@vue/cli-shared-utils": "^5.0.0-rc.1", + "babel-loader": "^8.2.2", + "cache-loader": "^4.1.0", + "fork-ts-checker-webpack-plugin": "^6.4.0", + "globby": "^11.0.2", + "thread-loader": "^3.0.0", + "ts-loader": "^9.2.5", + "webpack": "^5.54.0", + "yorkie": "^2.0.0" + }, + "peerDependencies": { + "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0", + "typescript": ">=2", + "vue": "^2 || ^3.2.13", + "vue-template-compiler": "^2.0.0" + }, + "peerDependenciesMeta": { + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/@vue/cli-plugin-vuex": { + "version": "5.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-vuex/-/cli-plugin-vuex-5.0.0-rc.1.tgz", + "integrity": "sha512-ShfPIvuD+AFUtUcTw5okLUnBy8o4NrC0ICPpD7z+KG4gbfWzZMmT2TAkjqO9pp21cI+bYzigsBZ/FoXiU5+h7Q==", + "dev": true, + "peerDependencies": { + "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0" + } + }, + "node_modules/@vue/cli-service": { + "version": "5.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@vue/cli-service/-/cli-service-5.0.0-rc.1.tgz", + "integrity": "sha512-xQIHBJzSK+tuOrMnfywRAqfcshClBG/3z/6L/ep8m9O1egsnrkjf2252znJqNaSXvER6b5exDr8M4wnNvhinBw==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.12.16", + "@soda/friendly-errors-webpack-plugin": "^1.8.0", + "@soda/get-current-script": "^1.0.2", + "@types/minimist": "^1.2.0", + "@types/webpack-dev-server": "^4.1.0", + "@vue/cli-overlay": "^5.0.0-rc.1", + "@vue/cli-plugin-router": "^5.0.0-rc.1", + "@vue/cli-plugin-vuex": "^5.0.0-rc.1", + "@vue/cli-shared-utils": "^5.0.0-rc.1", + "@vue/component-compiler-utils": "^3.3.0", + "@vue/vue-loader-v15": "npm:vue-loader@^15.9.7", + "@vue/web-component-wrapper": "^1.3.0", + "acorn": "^8.0.5", + "acorn-walk": "^8.0.2", + "address": "^1.1.2", + "autoprefixer": "^10.2.4", + "browserslist": "^4.16.3", + "cache-loader": "^4.1.0", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "cli-highlight": "^2.1.10", + "clipboardy": "^2.3.0", + "cliui": "^7.0.4", + "copy-webpack-plugin": "^9.0.1", + "css-loader": "^6.5.0", + "css-minimizer-webpack-plugin": "^3.0.2", + "cssnano": "^5.0.0", + "debug": "^4.1.1", + "default-gateway": "^6.0.3", + "dotenv": "^10.0.0", + "dotenv-expand": "^5.1.0", + "fs-extra": "^9.1.0", + "globby": "^11.0.2", + "hash-sum": "^2.0.0", + "html-webpack-plugin": "^5.1.0", + "is-file-esm": "^1.0.0", + "launch-editor-middleware": "^2.2.1", + "lodash.defaultsdeep": "^4.6.1", + "lodash.mapvalues": "^4.6.0", + "mini-css-extract-plugin": "^2.4.3", + "minimist": "^1.2.5", + "module-alias": "^2.2.2", + "portfinder": "^1.0.26", + "postcss": "^8.2.6", + "postcss-loader": "^6.1.1", + "progress-webpack-plugin": "^1.0.12", + "ssri": "^8.0.1", + "terser-webpack-plugin": "^5.1.1", + "thread-loader": "^3.0.0", + "vue-loader": "^16.8.2", + "vue-style-loader": "^4.1.3", + "webpack": "^5.54.0", + "webpack-bundle-analyzer": "^4.4.0", + "webpack-chain": "^6.5.1", + "webpack-dev-server": "^4.1.0", + "webpack-merge": "^5.7.3", + "webpack-virtual-modules": "^0.4.2", + "whatwg-fetch": "^3.6.2" + }, + "bin": { + "vue-cli-service": "bin/vue-cli-service.js" + }, + "engines": { + "node": "^12.0.0 || >= 14.0.0" + }, + "peerDependencies": { + "vue-template-compiler": "^2.0.0", + "webpack-sources": "*" + }, + "peerDependenciesMeta": { + "less-loader": { + "optional": true + }, + "pug-plain-loader": { + "optional": true + }, + "raw-loader": { + "optional": true + }, + "sass-loader": { + "optional": true + }, + "stylus-loader": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + }, + "webpack-sources": { + "optional": true + } + } + }, + "node_modules/@vue/cli-shared-utils": { + "version": "5.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-5.0.0-rc.1.tgz", + "integrity": "sha512-rZVTGfSQ0Sqw76BD/Z6iARfnO2r5ICSxt0iIpzjM8w9ohpRtI2B45NrngF0rILwy9d8we4A/n7gQQ0rqwkAX7g==", + "dev": true, + "dependencies": { + "chalk": "^4.1.2", + "execa": "^1.0.0", + "joi": "^17.4.0", + "launch-editor": "^2.2.1", + "lru-cache": "^6.0.0", + "node-fetch": "^2.6.1", + "node-ipc": "^9.1.1", + "open": "^8.0.2", + "ora": "^5.3.0", + "read-pkg": "^5.1.1", + "semver": "^7.3.4", + "strip-ansi": "^6.0.0" + } + }, + "node_modules/@vue/cli-shared-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@vue/cli-shared-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@vue/cli-shared-utils/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/@vue/cli-shared-utils/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/@vue/cli-shared-utils/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/@vue/cli-shared-utils/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vue/cli-shared-utils/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/@vue/compiler-core": { + "version": "3.2.26", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.26.tgz", + "integrity": "sha512-N5XNBobZbaASdzY9Lga2D9Lul5vdCIOXvUMd6ThcN8zgqQhPKfCV+wfAJNNJKQkSHudnYRO2gEB+lp0iN3g2Tw==", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/shared": "3.2.26", + "estree-walker": "^2.0.2", + "source-map": "^0.6.1" + } + }, + "node_modules/@vue/compiler-core/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.2.26", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.26.tgz", + "integrity": "sha512-smBfaOW6mQDxcT3p9TKT6mE22vjxjJL50GFVJiI0chXYGU/xzC05QRGrW3HHVuJrmLTLx5zBhsZ2dIATERbarg==", + "dependencies": { + "@vue/compiler-core": "3.2.26", + "@vue/shared": "3.2.26" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.2.26", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.26.tgz", + "integrity": "sha512-ePpnfktV90UcLdsDQUh2JdiTuhV0Skv2iYXxfNMOK/F3Q+2BO0AulcVcfoksOpTJGmhhfosWfMyEaEf0UaWpIw==", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.26", + "@vue/compiler-dom": "3.2.26", + "@vue/compiler-ssr": "3.2.26", + "@vue/reactivity-transform": "3.2.26", + "@vue/shared": "3.2.26", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7", + "postcss": "^8.1.10", + "source-map": "^0.6.1" + } + }, + "node_modules/@vue/compiler-sfc/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.2.26", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.26.tgz", + "integrity": "sha512-2mywLX0ODc4Zn8qBoA2PDCsLEZfpUGZcyoFRLSOjyGGK6wDy2/5kyDOWtf0S0UvtoyVq95OTSGIALjZ4k2q/ag==", + "dependencies": { + "@vue/compiler-dom": "3.2.26", + "@vue/shared": "3.2.26" + } + }, + "node_modules/@vue/component-compiler-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz", + "integrity": "sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==", + "dev": true, + "dependencies": { + "consolidate": "^0.15.1", + "hash-sum": "^1.0.2", + "lru-cache": "^4.1.2", + "merge-source-map": "^1.1.0", + "postcss": "^7.0.36", + "postcss-selector-parser": "^6.0.2", + "source-map": "~0.6.1", + "vue-template-es2015-compiler": "^1.9.0" + }, + "optionalDependencies": { + "prettier": "^1.18.2 || ^2.0.0" + } + }, + "node_modules/@vue/component-compiler-utils/node_modules/hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + }, + "node_modules/@vue/component-compiler-utils/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/@vue/component-compiler-utils/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/@vue/component-compiler-utils/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/@vue/component-compiler-utils/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/@vue/component-compiler-utils/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "node_modules/@vue/eslint-config-prettier": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-7.0.0.tgz", + "integrity": "sha512-/CTc6ML3Wta1tCe1gUeO0EYnVXfo3nJXsIhZ8WJr3sov+cGASr6yuiibJTL6lmIBm7GobopToOuB3B6AWyV0Iw==", + "dev": true, + "dependencies": { + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-prettier": "^4.0.0" + }, + "peerDependencies": { + "eslint": ">= 7.28.0", + "prettier": ">= 2.0.0" + } + }, + "node_modules/@vue/eslint-config-typescript": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-10.0.0.tgz", + "integrity": "sha512-F94cL8ug3FaYXlCfU5/wiGjk1qeadmoBpRGAOBq+qre3Smdupa59dd6ZJrsfRODpsMPyTG7330juMDsUvpZ3Rw==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "^5.0.0", + "@typescript-eslint/parser": "^5.0.0", + "vue-eslint-parser": "^8.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0", + "eslint-plugin-vue": "^8.0.1" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.2.26", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.26.tgz", + "integrity": "sha512-h38bxCZLW6oFJVDlCcAiUKFnXI8xP8d+eO0pcDxx+7dQfSPje2AO6M9S9QO6MrxQB7fGP0DH0dYQ8ksf6hrXKQ==", + "dependencies": { + "@vue/shared": "3.2.26" + } + }, + "node_modules/@vue/reactivity-transform": { + "version": "3.2.26", + "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.26.tgz", + "integrity": "sha512-XKMyuCmzNA7nvFlYhdKwD78rcnmPb7q46uoR00zkX6yZrUmcCQ5OikiwUEVbvNhL5hBJuvbSO95jB5zkUon+eQ==", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.26", + "@vue/shared": "3.2.26", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.2.26", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.26.tgz", + "integrity": "sha512-BcYi7qZ9Nn+CJDJrHQ6Zsmxei2hDW0L6AB4vPvUQGBm2fZyC0GXd/4nVbyA2ubmuhctD5RbYY8L+5GUJszv9mQ==", + "dependencies": { + "@vue/reactivity": "3.2.26", + "@vue/shared": "3.2.26" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.2.26", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.26.tgz", + "integrity": "sha512-dY56UIiZI+gjc4e8JQBwAifljyexfVCkIAu/WX8snh8vSOt/gMSEGwPRcl2UpYpBYeyExV8WCbgvwWRNt9cHhQ==", + "dependencies": { + "@vue/runtime-core": "3.2.26", + "@vue/shared": "3.2.26", + "csstype": "^2.6.8" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.2.26", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.26.tgz", + "integrity": "sha512-Jp5SggDUvvUYSBIvYEhy76t4nr1vapY/FIFloWmQzn7UxqaHrrBpbxrqPcTrSgGrcaglj0VBp22BKJNre4aA1w==", + "dependencies": { + "@vue/compiler-ssr": "3.2.26", + "@vue/shared": "3.2.26" + }, + "peerDependencies": { + "vue": "3.2.26" + } + }, + "node_modules/@vue/shared": { + "version": "3.2.26", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.26.tgz", + "integrity": "sha512-vPV6Cq+NIWbH5pZu+V+2QHE9y1qfuTq49uNWw4f7FDEeZaDU2H2cx5jcUZOAKW7qTrUS4k6qZPbMy1x4N96nbA==" + }, + "node_modules/@vue/vue-loader-v15": { + "name": "vue-loader", + "version": "15.9.8", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.8.tgz", + "integrity": "sha512-GwSkxPrihfLR69/dSV3+5CdMQ0D+jXg8Ma1S4nQXKJAznYFX14vHdc/NetQc34Dw+rBbIJyP7JOuVb9Fhprvog==", + "dev": true, + "dependencies": { + "@vue/component-compiler-utils": "^3.1.0", + "hash-sum": "^1.0.2", + "loader-utils": "^1.1.0", + "vue-hot-reload-api": "^2.3.0", + "vue-style-loader": "^4.1.0" + }, + "peerDependencies": { + "css-loader": "*", + "webpack": "^3.0.0 || ^4.1.0 || ^5.0.0-0" + }, + "peerDependenciesMeta": { + "cache-loader": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/@vue/vue-loader-v15/node_modules/hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + }, + "node_modules/@vue/web-component-wrapper": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz", + "integrity": "sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA==", + "dev": true + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "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/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", + "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", + "dev": true, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", + "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/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/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, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "node_modules/amator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/amator/-/amator-1.1.0.tgz", + "integrity": "sha1-CMa2C8k67Cthu/wMTWd9MDI8wPE=", + "dependencies": { + "bezier-easing": "^2.0.3" + } + }, + "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-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "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/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "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/async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.2.tgz", + "integrity": "sha512-9fOPpHKuDW1w/0EKfRmVnxTDt8166MAnLI3mgZ1JCnhNtYWxcJ6Ud5CO/AVOZi/AvFa8DY9RTy3h3+tFBlrrdQ==", + "dev": true, + "dependencies": { + "browserslist": "^4.19.1", + "caniuse-lite": "^1.0.30001297", + "fraction.js": "^4.1.2", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + }, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "eslint": ">= 4.12.1" + } + }, + "node_modules/babel-eslint/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/babel-loader": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz", + "integrity": "sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==", + "dev": true, + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.0.tgz", + "integrity": "sha512-wMDoBJ6uG4u4PNFh72Ty6t3EgfA91puCuAwKIazbQlci+ENb/UU9A3xG5lutjUIiXCIn1CY5L15r9LimiJyrSA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.3.0", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.0.tgz", + "integrity": "sha512-Hcrgnmkf+4JTj73GbK3bBhlVPiLL47owUAnoJIf69Hakl3q+KfodbDXiZWGMM7iqCZTxCG3Z2VRfPNYES4rXqQ==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.0", + "core-js-compat": "^3.20.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.0.tgz", + "integrity": "sha512-dhAPTDLGoMW5/84wkgwiLRwMnio2i1fUe53EuvtKMv0pn2p3S8OCoV1xAzfJPl0KOX7IB89s2ib85vbYiea3jg==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "node_modules/bezier-easing": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/bezier-easing/-/bezier-easing-2.1.0.tgz", + "integrity": "sha1-wE3+i5JtbsrKGBPWn/F5t8ICXYY=" + }, + "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/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/body-parser": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", + "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==", + "dev": true, + "dependencies": { + "bytes": "3.1.1", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.9.6", + "raw-body": "2.4.2", + "type-is": "~1.6.18" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", + "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "dependencies": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/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.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001286", + "electron-to-chromium": "^1.4.17", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "node_modules/buffer-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/buffer-json/-/buffer-json-2.0.0.tgz", + "integrity": "sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw==", + "dev": true + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cache-loader": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cache-loader/-/cache-loader-4.1.0.tgz", + "integrity": "sha512-ftOayxve0PwKzBF/GLsZNC9fJBXl8lkZE3TOsjkboHfVHVkL39iUEs1FO07A33mizmci5Dudt38UZrrYXDtbhw==", + "dev": true, + "dependencies": { + "buffer-json": "^2.0.0", + "find-cache-dir": "^3.0.0", + "loader-utils": "^1.2.3", + "mkdirp": "^0.5.1", + "neo-async": "^2.6.1", + "schema-utils": "^2.0.0" + }, + "engines": { + "node": ">= 8.9.0" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001299", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001299.tgz", + "integrity": "sha512-iujN4+x7QzqA2NCSrS5VUy+4gLmRd4xv6vbBBsmfVqTx8bLAD8097euLqQgKxSVLvxjSDcvF1T/i9ocgnUFexw==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "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/chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", + "dev": true + }, + "node_modules/clean-css": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.2.tgz", + "integrity": "sha512-/eR8ru5zyxKzpBLv9YZvMXgTSSQn7AdkMItMYynsFgGwTveCRVam9IUPFloE85B4vAIj05IuKmmEoV7/AQjT0w==", + "dev": true, + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-css/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/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz", + "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "highlight.js": "^10.7.1", + "mz": "^2.4.0", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^6.0.0", + "yargs": "^16.0.0" + }, + "bin": { + "highlight": "bin/highlight" + }, + "engines": { + "node": ">=8.0.0", + "npm": ">=5.0.0" + } + }, + "node_modules/cli-highlight/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cli-highlight/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/cli-highlight/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/cli-highlight/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/cli-highlight/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/cli-highlight/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/cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clipboardy": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz", + "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==", + "dev": true, + "dependencies": { + "arch": "^2.1.1", + "execa": "^1.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "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/colord": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", + "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "dev": true + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/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/connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/consolidate": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz", + "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", + "dev": true, + "dependencies": { + "bluebird": "^3.1.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "node_modules/copy-webpack-plugin": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.1.0.tgz", + "integrity": "sha512-rxnR7PaGigJzhqETHGmAcxKnLZSR5u1Y3/bcIv/1FnqXedcL/E2ewK7ZCNrArJKCiSv8yVXhTqetJh8inDvfsA==", + "dev": true, + "dependencies": { + "fast-glob": "^3.2.7", + "glob-parent": "^6.0.1", + "globby": "^11.0.3", + "normalize-path": "^3.0.0", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/core-js": { + "version": "3.20.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.20.2.tgz", + "integrity": "sha512-nuqhq11DcOAbFBV4zCbKeGbKQsUDRqTX0oqx7AttUBuqe3h20ixsE039QHelbL6P4h+9kytVqyEtyZ6gsiwEYw==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.20.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.20.2.tgz", + "integrity": "sha512-qZEzVQ+5Qh6cROaTPFLNS4lkvQ6mBzE3R6A6EEpssj7Zr2egMHgsy4XapdifqJDGC9CBiNv7s+ejI96rLNQFdg==", + "dev": true, + "dependencies": { + "browserslist": "^4.19.1", + "semver": "7.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + }, + "engines": { + "node": ">=8" + } + }, + "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/css-declaration-sorter": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.1.4.tgz", + "integrity": "sha512-lpfkqS0fctcmZotJGhnxkIyJWvBXgpyi2wsFd4J8VB7wzyrT6Ch/3Q+FMNJpjK4gu1+GN5khOnpU2ZVKrLbhCw==", + "dev": true, + "dependencies": { + "timsort": "^0.3.0" + }, + "engines": { + "node": ">= 10" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-loader": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.5.1.tgz", + "integrity": "sha512-gEy2w9AnJNnD9Kuo4XAP9VflW/ujKoS9c/syO+uWMlm5igc7LysKzPXaDoR2vroROkSwsTS2tGr1yGGEbZOYZQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/css-loader/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/css-minimizer-webpack-plugin": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.3.1.tgz", + "integrity": "sha512-SHA7Hu/EiF0dOwdmV2+agvqYpG+ljlUa7Dvn1AVOmSH3N8KOERoaM9lGpstz9nGsoTjANGyUXdrxl/EwdMScRg==", + "dev": true, + "dependencies": { + "cssnano": "^5.0.6", + "jest-worker": "^27.0.2", + "postcss": "^8.3.5", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", + "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/css-minimizer-webpack-plugin/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/css-minimizer-webpack-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/css-minimizer-webpack-plugin/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/css-select": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", + "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^5.1.0", + "domhandler": "^4.3.0", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-tree/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/css-what": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.15.tgz", + "integrity": "sha512-ppZsS7oPpi2sfiyV5+i+NbB/3GtQ+ab2Vs1azrZaXWujUSN4o+WdTxlCZIMcT9yLW3VO/5yX3vpyDaQ1nIn8CQ==", + "dev": true, + "dependencies": { + "cssnano-preset-default": "^5.1.10", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-default": { + "version": "5.1.10", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.10.tgz", + "integrity": "sha512-BcpSzUVygHMOnp9uG5rfPzTOCb0GAHQkqtUQx8j1oMNF9A1Q8hziOOhiM4bdICpmrBIU85BE64RD5XGYsVQZNA==", + "dev": true, + "dependencies": { + "css-declaration-sorter": "^6.0.3", + "cssnano-utils": "^3.0.0", + "postcss-calc": "^8.2.0", + "postcss-colormin": "^5.2.3", + "postcss-convert-values": "^5.0.2", + "postcss-discard-comments": "^5.0.1", + "postcss-discard-duplicates": "^5.0.1", + "postcss-discard-empty": "^5.0.1", + "postcss-discard-overridden": "^5.0.2", + "postcss-merge-longhand": "^5.0.4", + "postcss-merge-rules": "^5.0.4", + "postcss-minify-font-values": "^5.0.2", + "postcss-minify-gradients": "^5.0.4", + "postcss-minify-params": "^5.0.3", + "postcss-minify-selectors": "^5.1.1", + "postcss-normalize-charset": "^5.0.1", + "postcss-normalize-display-values": "^5.0.2", + "postcss-normalize-positions": "^5.0.2", + "postcss-normalize-repeat-style": "^5.0.2", + "postcss-normalize-string": "^5.0.2", + "postcss-normalize-timing-functions": "^5.0.2", + "postcss-normalize-unicode": "^5.0.2", + "postcss-normalize-url": "^5.0.4", + "postcss-normalize-whitespace": "^5.0.2", + "postcss-ordered-values": "^5.0.3", + "postcss-reduce-initial": "^5.0.2", + "postcss-reduce-transforms": "^5.0.2", + "postcss-svgo": "^5.0.3", + "postcss-unique-selectors": "^5.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.0.0.tgz", + "integrity": "sha512-Pzs7/BZ6OgT+tXXuF12DKR8SmSbzUeVYCtMBbS8lI0uAm3mrYmkyqCXXPsQESI6kmLfEVBppbdVY/el3hg3nAA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csstype": { + "version": "2.6.19", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.19.tgz", + "integrity": "sha512-ZVxXaNy28/k3kJg0Fou5MiYpp88j7H9hLZp8PDC3jV0WFjfH5E9xHb56L0W59cPbKbcHXeP4qyT8PrHp8t6LcQ==" + }, + "node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "dependencies": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/default-gateway/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "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" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/default-gateway/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-gateway/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-gateway/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/defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/del": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", + "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", + "dev": true, + "dependencies": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "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/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "node_modules/dns-packet": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", + "dev": true, + "dependencies": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "dependencies": { + "buffer-indexof": "^1.0.0" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "node_modules/easy-stack": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/easy-stack/-/easy-stack-1.0.1.tgz", + "integrity": "sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.45", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.45.tgz", + "integrity": "sha512-czF9eYVuOmlY/vxyMQz2rGlNSjZpxNQYBe1gmQv7al171qOIhgyO9k7D5AKlgeTCSPKk+LHhj5ZyIdmEub9oNg==", + "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/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", + "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/enhanced-resolve/node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", + "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", + "dev": true, + "dependencies": { + "stackframe": "^1.1.1" + } + }, + "node_modules/es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "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-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "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": "8.6.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.6.0.tgz", + "integrity": "sha512-UvxdOJ7mXFlw7iuHZA4jmzPaUqIw54mZrv+XPYKNbKdLR0et4rf60lIZUU9kiNtnzzMzGWxMV+tQ7uG7JG8DPw==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.0.5", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.0", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.1.0", + "espree": "^9.3.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.2.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz", + "integrity": "sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "eslint": ">=7.28.0", + "prettier": ">=2.0.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-vue": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-8.3.0.tgz", + "integrity": "sha512-IIuLHw4vQxGlHcoP2dG6t/2OVdQf2qoyAzEGAxreU1afZOHGA7y3TWq8I+r3ZA6Wjs6xpeUWGHlT31QGr9Rb5g==", + "dev": true, + "peer": true, + "dependencies": { + "eslint-utils": "^3.0.0", + "natural-compare": "^1.4.0", + "semver": "^7.3.5", + "vue-eslint-parser": "^8.0.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-plugin-vue/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "peer": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "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": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", + "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-webpack-plugin": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.1.1.tgz", + "integrity": "sha512-xSucskTN9tOkfW7so4EaiFIkulWLXwCB/15H917lR6pTv0Zot6/fetFucmENRb7J5whVSFKIvwnrnsa78SG2yg==", + "dev": true, + "dependencies": { + "@types/eslint": "^7.28.2", + "jest-worker": "^27.3.1", + "micromatch": "^4.0.4", + "normalize-path": "^3.0.0", + "schema-utils": "^3.1.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", + "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/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/eslint/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", + "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", + "dev": true, + "dependencies": { + "acorn": "^8.7.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.1.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "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.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "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/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "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/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-pubsub": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/event-pubsub/-/event-pubsub-4.3.0.tgz", + "integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/execa/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/execa/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/execa/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/execa/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/express": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.2.tgz", + "integrity": "sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg==", + "dev": true, + "dependencies": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.4.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.9.6", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.17.2", + "serve-static": "1.14.2", + "setprototypeof": "1.2.0", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/express/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-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.10", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.10.tgz", + "integrity": "sha512-s9nFhFnvR63wls6/kM88kQqDhMu0AfdjqouE2l5GVQPbqLgyFjjU5ry/r2yKsJxpb9Py1EYNqieFrmMaX4v++A==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "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/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/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/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", + "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.14.7", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz", + "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.0.tgz", + "integrity": "sha512-cS178Y+xxtIjEUorcHddKS7yCMlrDPV31mt47blKKRfMd70Kxu5xruAFE2o9sDY6wVC5deuob/u/alD04YYHnw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=10", + "yarn": ">=1.0.0" + }, + "peerDependencies": { + "eslint": ">= 6", + "typescript": ">= 2.7", + "vue-template-compiler": "*", + "webpack": ">= 4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/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/fork-ts-checker-webpack-plugin/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/fork-ts-checker-webpack-plugin/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/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/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/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.2.tgz", + "integrity": "sha512-o2RiJQ6DZaR/5+Si0qJUIy637QMRudSi9kU/FFzx9EZazrIdnBgpU+3sEWCxAVhH2RtxW2Oz+T4p2o8uOPVcgA==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "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": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dev": true, + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", + "dev": true + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/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/hpack.js/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/html-entities": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", + "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==", + "dev": true + }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dev": true, + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-tags": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", + "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", + "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", + "dev": true, + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "webpack": "^5.20.0" + } + }, + "node_modules/html-webpack-plugin/node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.5.tgz", + "integrity": "sha512-x+JVEkO2PoM8qqpbPbOL3cqHPwerep7OwzK7Ay+sMQjKzaKCqWvjoXm5tqMP9tXWWTnTzAjIhXg+J99XYuPhPA==", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.1.tgz", + "integrity": "sha512-cfaXRVoZxSed/BmkA7SwBVNI9Kj7HFltaE5rqYOub5kWzWZ+gofV2koVN1j2rMW7pEfSSlCHGJ31xmuyFyfLOg==", + "dev": true, + "dependencies": { + "@types/http-proxy": "^1.17.5", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "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/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/immutable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz", + "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/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/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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/ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "node_modules/ipaddr.js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "dev": true, + "dependencies": { + "ci-info": "^1.5.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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-file-esm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-file-esm/-/is-file-esm-1.0.0.tgz", + "integrity": "sha512-rZlaNKb4Mr8WlRu2A9XdeoKgnO5aA53XdPHgCKVyCrQ/rWi89RET1+bq37Ru46obaQXeiX4vmFIm1vks41hoSA==", + "dev": true, + "dependencies": { + "read-pkg-up": "^7.0.1" + } + }, + "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.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "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/javascript-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz", + "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==", + "dev": true + }, + "node_modules/jest-worker": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.6.tgz", + "integrity": "sha512-gHWJF/6Xi5CTG5QCvROr6GcmpIqNYpDJyc8A1h/DyXqH1tD6SnRCM0d3U5msV31D2LB/U+E0M+W4oyvKV44oNw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.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": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/joi": { + "version": "17.5.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.5.0.tgz", + "integrity": "sha512-R7hR50COp7StzLnDi4ywOXHrBrgNXuUUfJWIR5lPY5Bm/pOD3jZaTwpluUXVLRWcoWZxkrHBBJ5hLxgnlehbdw==", + "dev": true, + "dependencies": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.3", + "@sideway/formula": "^3.0.0", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/js-message": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.7.tgz", + "integrity": "sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==", + "dev": true, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/js-queue": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/js-queue/-/js-queue-2.0.2.tgz", + "integrity": "sha512-pbKLsbCfi7kriM3s1J4DDCo7jQkI58zPLHi0heXPzPlj0hjUsm+FesPUbE0DSbIVIK503A36aUBoCN7eMFedkA==", + "dev": true, + "dependencies": { + "easy-stack": "^1.0.1" + }, + "engines": { + "node": ">=1.0.0" + } + }, + "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": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-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-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-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/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.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/klona": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/launch-editor": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.3.0.tgz", + "integrity": "sha512-3QrsCXejlWYHjBPFXTyGNhPj4rrQdB+5+r5r3wArpLH201aR+nWUgw/zKKkTmilCfY/sv6u8qo98pNvtg8LUTA==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.6.1" + } + }, + "node_modules/launch-editor-middleware": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/launch-editor-middleware/-/launch-editor-middleware-2.3.0.tgz", + "integrity": "sha512-GJR64trLdFFwCoL9DMn/d1SZX0OzTDPixu4mcfWTShQ4tIqCHCGvlg9fOEYQXyBlrSMQwylsJfUWncheShfV2w==", + "dev": true, + "dependencies": { + "launch-editor": "^2.3.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/lilconfig": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz", + "integrity": "sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "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": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/loader-utils/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "node_modules/lodash.defaultsdeep": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz", + "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==", + "dev": true + }, + "node_modules/lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=", + "dev": true + }, + "node_modules/lodash.mapvalues": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", + "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=", + "dev": true + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/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/log-symbols/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/log-symbols/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/log-symbols/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/log-update": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", + "integrity": "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=", + "dev": true, + "dependencies": { + "ansi-escapes": "^3.0.0", + "cli-cursor": "^2.0.0", + "wrap-ansi": "^3.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", + "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=", + "dev": true, + "dependencies": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "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/magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dependencies": { + "sourcemap-codec": "^1.4.4" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.1.tgz", + "integrity": "sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw==", + "dev": true, + "dependencies": { + "fs-monkey": "1.0.3" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "node_modules/merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dev": true, + "dependencies": { + "source-map": "^0.6.1" + } + }, + "node_modules/merge-source-map/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/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/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "dev": true, + "dependencies": { + "mime-db": "1.51.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/mini-css-extract-plugin": { + "version": "2.4.7", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.4.7.tgz", + "integrity": "sha512-euWmddf0sk9Nv1O0gfeeUAvAkoSlWncNLF77C0TP2+WoPvy8mAHKOzMajcCz2dzvyt3CNgxb1obIEVFIRxaipg==", + "dev": true, + "dependencies": { + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/ajv": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", + "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/mini-css-extract-plugin/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/mini-css-extract-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/module-alias": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.2.2.tgz", + "integrity": "sha512-A/78XjoX2EmNvppVWEhM2oGk3x4lLxnkEA4jTbaK97QKSDjkIoOsKQlfylt/d3kKKi596Qy3NP5XrXJ6fZIC9Q==", + "dev": true + }, + "node_modules/mrmime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.0.tgz", + "integrity": "sha512-a70zx7zFfVO7XpnQ2IX1Myh9yY4UYvfld/dikWRnsXxbyvMcfz+u6UfgNAtH+k2QqtJuzVpv6eLTx1G2+WKZbQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "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/multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "dependencies": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoevents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/nanoevents/-/nanoevents-6.0.2.tgz", + "integrity": "sha512-FRS2otuFcPPYDPYViNWQ42+1iZqbXydinkRHTHFxrF4a1CpBfmydR9zkI44WSXAXCyPrkcGtPk5CnpW6Y3lFKQ==", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.1.32", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.32.tgz", + "integrity": "sha512-F8mf7R3iT9bvThBoW4tGXhXFHCctyCiUUPrWF8WaTqa3h96d9QybkSeba43XVOOE3oiLfkVDe4bT8MeGmkrTxw==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "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/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "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/ngraph.events": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ngraph.events/-/ngraph.events-1.2.1.tgz", + "integrity": "sha512-D4C+nXH/RFxioGXQdHu8ELDtC6EaCiNsZtih0IvyGN81OZSUby4jXoJ5+RNWasfsd0FnKxxpAROyUMzw64QNsw==" + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-fetch": { + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", + "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/node-forge": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.2.1.tgz", + "integrity": "sha512-Fcvtbb+zBcZXbTTVwqGA5W+MKBj56UjVRevvchv5XrcyXbmNdesfZL37nlcWOfpgHhgmxApw3tQbTr4CqNmX4w==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-ipc": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/node-ipc/-/node-ipc-9.2.1.tgz", + "integrity": "sha512-mJzaM6O3xHf9VT8BULvJSbdVbmHUKRNOH7zDDkCrA1/T+CVjq2WVIDfLt0azZRXpgArJtl3rtmEozrbXPZ9GaQ==", + "dev": true, + "dependencies": { + "event-pubsub": "4.3.0", + "js-message": "1.0.7", + "js-queue": "2.0.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", + "dev": true + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/nth-check": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "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/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "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" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true, + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "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/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/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/ora/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/ora/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/ora/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/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", + "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==", + "dev": true, + "dependencies": { + "@types/retry": "^0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/panzoom": { + "version": "9.4.2", + "resolved": "https://registry.npmjs.org/panzoom/-/panzoom-9.4.2.tgz", + "integrity": "sha512-sQLr0t6EmNFXpZHag0HQVtOKqF9xjF7iZdgWg3Ss1o7uh2QZLvcrz7S0Cl8M0d2TkPZ69JfPJdknXN3I0e/2aQ==", + "dependencies": { + "amator": "^1.1.0", + "ngraph.events": "^1.2.1", + "wheel": "^1.0.0" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "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/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "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/portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "dependencies": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/postcss": { + "version": "8.4.5", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz", + "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==", + "dependencies": { + "nanoid": "^3.1.30", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-calc": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.2.tgz", + "integrity": "sha512-B5R0UeB4zLJvxNt1FVCaDZULdzsKLPc6FhjFJ+xwFiq7VG4i9cuaJLxVjNtExNK8ocm3n2o4unXXLiVX1SCqxA==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-colormin": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.3.tgz", + "integrity": "sha512-dra4xoAjub2wha6RUXAgadHEn2lGxbj8drhFcIGLOMn914Eu7DkPUurugDXgstwttCYkJtZ/+PkWRWdp3UHRIA==", + "dev": true, + "dependencies": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-convert-values": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.2.tgz", + "integrity": "sha512-KQ04E2yadmfa1LqXm7UIDwW1ftxU/QWZmz6NKnHnUvJ3LEYbbcX6i329f/ig+WnEByHegulocXrECaZGLpL8Zg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-comments": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz", + "integrity": "sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.1.tgz", + "integrity": "sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-empty": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.1.tgz", + "integrity": "sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.2.tgz", + "integrity": "sha512-+56BLP6NSSUuWUXjRgAQuho1p5xs/hU5Sw7+xt9S3JSg+7R6+WMGnJW7Hre/6tTuZ2xiXMB42ObkiZJ2hy/Pew==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-loader": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", + "dev": true, + "dependencies": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-loader/node_modules/cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/postcss-loader/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.4.tgz", + "integrity": "sha512-2lZrOVD+d81aoYkZDpWu6+3dTAAGkCKbV5DoRhnIR7KOULVrI/R7bcMjhrH9KTRy6iiHKqmtG+n/MMj1WmqHFw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.1.0", + "stylehacks": "^5.0.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-rules": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.4.tgz", + "integrity": "sha512-yOj7bW3NxlQxaERBB0lEY1sH5y+RzevjbdH4DBJurjKERNpknRByFNdNe+V72i5pIZL12woM9uGdS5xbSB+kDQ==", + "dev": true, + "dependencies": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.0.0", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.2.tgz", + "integrity": "sha512-R6MJZryq28Cw0AmnyhXrM7naqJZZLoa1paBltIzh2wM7yb4D45TLur+eubTQ4jCmZU9SGeZdWsc5KcSoqTMeTg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.4.tgz", + "integrity": "sha512-RVwZA7NC4R4J76u8X0Q0j+J7ItKUWAeBUJ8oEEZWmtv3Xoh19uNJaJwzNpsydQjk6PkuhRrK+YwwMf+c+68EYg==", + "dev": true, + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^3.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-params": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.3.tgz", + "integrity": "sha512-NY92FUikE+wralaiVexFd5gwb7oJTIDhgTNeIw89i1Ymsgt4RWiPXfz3bg7hDy4NL6gepcThJwOYNtZO/eNi7Q==", + "dev": true, + "dependencies": { + "alphanum-sort": "^1.0.2", + "browserslist": "^4.16.6", + "cssnano-utils": "^3.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.1.tgz", + "integrity": "sha512-TOzqOPXt91O2luJInaVPiivh90a2SIK5Nf1Ea7yEIM/5w+XA5BGrZGUSW8aEx9pJ/oNj7ZJBhjvigSiBV+bC1Q==", + "dev": true, + "dependencies": { + "alphanum-sort": "^1.0.2", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.1.tgz", + "integrity": "sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.2.tgz", + "integrity": "sha512-RxXoJPUR0shSjkMMzgEZDjGPrgXUVYyWA/YwQRicb48H15OClPuaDR7tYokLAlGZ2tCSENEN5WxjgxSD5m4cUw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.2.tgz", + "integrity": "sha512-tqghWFVDp2btqFg1gYob1etPNxXLNh3uVeWgZE2AQGh6b2F8AK2Gj36v5Vhyh+APwIzNjmt6jwZ9pTBP+/OM8g==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.2.tgz", + "integrity": "sha512-/rIZn8X9bBzC7KvY4iKUhXUGW3MmbXwfPF23jC9wT9xTi7kAvgj8sEgwxjixBmoL6MVa4WOgxNz2hAR6wTK8tw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-string": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.2.tgz", + "integrity": "sha512-zaI1yzwL+a/FkIzUWMQoH25YwCYxi917J4pYm1nRXtdgiCdnlTkx5eRzqWEC64HtRa06WCJ9TIutpb6GmW4gFw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.2.tgz", + "integrity": "sha512-Ao0PP6MoYsRU1LxeVUW740ioknvdIUmfr6uAA3xWlQJ9s69/Tupy8qwhuKG3xWfl+KvLMAP9p2WXF9cwuk/7Bg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.2.tgz", + "integrity": "sha512-3y/V+vjZ19HNcTizeqwrbZSUsE69ZMRHfiiyLAJb7C7hJtYmM4Gsbajy7gKagu97E8q5rlS9k8FhojA8cpGhWw==", + "dev": true, + "dependencies": { + "browserslist": "^4.16.6", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-url": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.4.tgz", + "integrity": "sha512-cNj3RzK2pgQQyNp7dzq0dqpUpQ/wYtdDZM3DepPmFjCmYIfceuD9VIAcOdvrNetjIU65g1B4uwdP/Krf6AFdXg==", + "dev": true, + "dependencies": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.2.tgz", + "integrity": "sha512-CXBx+9fVlzSgbk0IXA/dcZn9lXixnQRndnsPC5ht3HxlQ1bVh77KQDL1GffJx1LTzzfae8ftMulsjYmO2yegxA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-ordered-values": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.3.tgz", + "integrity": "sha512-T9pDS+P9bWeFvqivXd5ACzQmrCmHjv3ZP+djn8E1UZY7iK79pFSm7i3WbKw2VSmFmdbMm8sQ12OPcNpzBo3Z2w==", + "dev": true, + "dependencies": { + "cssnano-utils": "^3.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.2.tgz", + "integrity": "sha512-v/kbAAQ+S1V5v9TJvbGkV98V2ERPdU6XvMcKMjqAlYiJ2NtsHGlKYLPjWWcXlaTKNxooId7BGxeraK8qXvzKtw==", + "dev": true, + "dependencies": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.2.tgz", + "integrity": "sha512-25HeDeFsgiPSUx69jJXZn8I06tMxLQJJNF5h7i9gsUg8iP4KOOJ8EX8fj3seeoLt3SLU2YDD6UPnDYVGUO7DEA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.8.tgz", + "integrity": "sha512-D5PG53d209Z1Uhcc0qAZ5U3t5HagH3cxu+WLZ22jt3gLUpXM4eXXfiO14jiDWST3NNooX/E8wISfOhZ9eIjGTQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.3.tgz", + "integrity": "sha512-41XZUA1wNDAZrQ3XgWREL/M2zSw8LJPvb5ZWivljBsUQAGoEKMYm6okHsTjJxKYI4M75RQEH4KYlEM52VwdXVA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.1.0", + "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.2.tgz", + "integrity": "sha512-w3zBVlrtZm7loQWRPVC0yjUwwpty7OM6DnEHkxcSQXO1bMS3RJ+JUS5LFMSDZHJcvGsRwhZinCWVqn8Kej4EDA==", + "dev": true, + "dependencies": { + "alphanum-sort": "^1.0.2", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "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.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "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/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.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/progress-webpack-plugin": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/progress-webpack-plugin/-/progress-webpack-plugin-1.0.12.tgz", + "integrity": "sha512-b0dMK6D7pFicDzSdh+sU0p/gp3n5QAGwjPbgacmYB/eVQpayzf9lKTQLYMnTAbk69fKoXSoVNl/+IkobJblL1A==", + "dev": true, + "dependencies": { + "chalk": "^2.1.0", + "figures": "^2.0.0", + "log-update": "^2.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "peerDependencies": { + "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "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/qs": { + "version": "6.9.6", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", + "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==", + "dev": true, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "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/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", + "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", + "dev": true, + "dependencies": { + "bytes": "3.1.1", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", + "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-loader": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", + "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/raw-loader/node_modules/loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/raw-loader/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/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/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz", + "integrity": "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.0.tgz", + "integrity": "sha512-OE85RadmCYZJzYgIcWd2Qum/wJ20WwY5Z6Bfv5FeBPU46uPD01s3pe2LNoi0etmr83ibsFidC0ZiKXmPY5UpmQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/regexpu-core": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz", + "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^9.0.0", + "regjsgen": "^0.5.2", + "regjsparser": "^0.7.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "dev": true + }, + "node_modules/regjsparser": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz", + "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dev": true, + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "node_modules/resolve": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", + "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==", + "dev": true, + "dependencies": { + "is-core-module": "^2.8.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "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": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "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/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sass": { + "version": "1.48.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.48.0.tgz", + "integrity": "sha512-hQi5g4DcfjcipotoHZ80l7GNJHGqQS5LwMBjVYB/TaT0vcSSpbgM8Ad7cgfsB2M0MinbkEQQPO9+sjjSiwxqmw==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/sass-loader": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.2.0.tgz", + "integrity": "sha512-kUceLzC1gIHz0zNJPpqRsJyisWatGYNFRmv2CKZK2/ngMJgLqxTbXwe/hJ85luyvZkgqU3VlJ33UVF2T/0g6mw==", + "dev": true, + "dependencies": { + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0", + "semver": "^7.3.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0", + "sass": "^1.3.0", + "webpack": "^4.36.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/sass-loader/node_modules/loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/sass-loader/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/sass-loader/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "node_modules/selfsigned": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.0.tgz", + "integrity": "sha512-cUdFiCbKoa1mZ6osuJs2uDHrs0k0oprsKveFiiaBKCNq3SYyb5gs2HxhQyDNLCmL51ZZThqi4YNDpCK6GOP1iQ==", + "dev": true, + "dependencies": { + "node-forge": "^1.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "1.8.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/serve-static": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "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/shell-quote": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", + "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", + "dev": true + }, + "node_modules/signal-exit": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", + "dev": true + }, + "node_modules/sirv": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", + "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", + "dev": true, + "dependencies": { + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^1.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "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/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/sortablejs": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.14.0.tgz", + "integrity": "sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==" + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.1.tgz", + "integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "dev": true + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "node_modules/stackframe": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz", + "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==", + "dev": true + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylehacks": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.1.tgz", + "integrity": "sha512-Es0rVnHIqbWzveU1b24kbw92HsebBepxfcqe5iix7t9j0PQqhs0IxXVXv0pY2Bxa08CgMkzD6OWql7kbGOuEdA==", + "dev": true, + "dependencies": { + "browserslist": "^4.16.0", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "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/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=", + "dev": true + }, + "node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "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.10.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", + "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "acorn": "^8.5.0" + }, + "peerDependenciesMeta": { + "acorn": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.0.tgz", + "integrity": "sha512-LPIisi3Ol4chwAaPP8toUJ3L4qCM1G0wao7L3qNv57Drezxj6+VEyySpPw4B1HSO2Eg/hDY/MNF5XihCAoqnsQ==", + "dev": true, + "dependencies": { + "jest-worker": "^27.4.1", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser-webpack-plugin/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/terser/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/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/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/thread-loader": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/thread-loader/-/thread-loader-3.0.4.tgz", + "integrity": "sha512-ByaL2TPb+m6yArpqQUZvP+5S1mZtXsEP7nWKKlAUTm7fCml8kB5s1uI3+eHRP2bk5mVYfRSBI7FFf+tWEyLZwA==", + "dev": true, + "dependencies": { + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.1.0", + "loader-utils": "^2.0.0", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.27.0 || ^5.0.0" + } + }, + "node_modules/thread-loader/node_modules/loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/thread-loader/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "node_modules/timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/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/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/totalist": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", + "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "dev": true + }, + "node_modules/ts-loader": { + "version": "9.2.6", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.2.6.tgz", + "integrity": "sha512-QMTC4UFzHmu9wU2VHZEmWWE9cUajjfcdcws+Gh7FhiO+Dy0RnR1bNz0YCHqhI0yRowCE9arVnNxYHqELOy9Hjw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, + "node_modules/ts-loader/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ts-loader/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ts-loader/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/ts-loader/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/ts-loader/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/ts-loader/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-loader/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/tsconfig-paths": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", + "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths-webpack-plugin": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-3.5.2.tgz", + "integrity": "sha512-EhnfjHbzm5IYI9YPNVIxx1moxMI4bpHD2e0zTXeDNQcwjjRaGepP7IhTHJkyDBG0CAOoxRfe7jCG630Ou+C6Pw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.7.0", + "tsconfig-paths": "^3.9.0" + } + }, + "node_modules/tsconfig-paths-webpack-plugin/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/tsconfig-paths-webpack-plugin/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/tsconfig-paths-webpack-plugin/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/tsconfig-paths-webpack-plugin/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/tsconfig-paths-webpack-plugin/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/tsconfig-paths-webpack-plugin/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/tsconfig-paths/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "dev": true + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/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/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.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typescript": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", + "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/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/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vue": { + "version": "3.2.26", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.26.tgz", + "integrity": "sha512-KD4lULmskL5cCsEkfhERVRIOEDrfEL9CwAsLYpzptOGjaGFNWo3BQ9g8MAb7RaIO71rmVOziZ/uEN/rHwcUIhg==", + "dependencies": { + "@vue/compiler-dom": "3.2.26", + "@vue/compiler-sfc": "3.2.26", + "@vue/runtime-dom": "3.2.26", + "@vue/server-renderer": "3.2.26", + "@vue/shared": "3.2.26" + } + }, + "node_modules/vue-eslint-parser": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-8.0.1.tgz", + "integrity": "sha512-lhWjDXJhe3UZw2uu3ztX51SJAPGPey1Tff2RK3TyZURwbuI4vximQLzz4nQfCv8CZq4xx7uIiogHMMoSJPr33A==", + "dev": true, + "dependencies": { + "debug": "^4.3.2", + "eslint-scope": "^6.0.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/eslint-scope": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-6.0.0.tgz", + "integrity": "sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/vue-hot-reload-api": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", + "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==", + "dev": true + }, + "node_modules/vue-loader": { + "version": "16.8.3", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.3.tgz", + "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "hash-sum": "^2.0.0", + "loader-utils": "^2.0.0" + }, + "peerDependencies": { + "webpack": "^4.1.0 || ^5.0.0-0" + } + }, + "node_modules/vue-loader/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/vue-loader/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/vue-loader/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/vue-loader/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/vue-loader/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/vue-loader/node_modules/loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/vue-loader/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/vue-next-select": { + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/vue-next-select/-/vue-next-select-2.10.2.tgz", + "integrity": "sha512-uHauEecNQLlazfDwkuLf1cGcU/gH+stgNpTWwXKfafjDAw9VxjAqZ7AYDZvhNB3IpbnOf0qbn6zQ00JvqFQBBQ==", + "hasInstallScript": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/vue-panzoom": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/vue-panzoom/-/vue-panzoom-1.1.6.tgz", + "integrity": "sha512-yEE60C/gnc5NGL6YBD++CErD820va7fkBJE5dCWZZzXX2aMGklj/UKmtqu1u5xDkuOIjnGUr412LNHwOOE711w==", + "dependencies": { + "panzoom": "^9.4.1" + } + }, + "node_modules/vue-style-loader": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz", + "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==", + "dev": true, + "dependencies": { + "hash-sum": "^1.0.2", + "loader-utils": "^1.0.2" + } + }, + "node_modules/vue-style-loader/node_modules/hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + }, + "node_modules/vue-template-es2015-compiler": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", + "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", + "dev": true + }, + "node_modules/vue-textarea-autosize": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vue-textarea-autosize/-/vue-textarea-autosize-1.1.1.tgz", + "integrity": "sha512-B33Mg5ZDEfj/whhoPBLg25qqAdGHGM2NjDT99Qi5MXRyeLmXb4C3s6EprAHqy3nU0cooWXFU+IekI5DpoEbnFg==", + "dependencies": { + "core-js": "^2.6.5" + } + }, + "node_modules/vue-textarea-autosize/node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "deprecated": "core-js@<3.4 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.", + "hasInstallScript": true + }, + "node_modules/vue-toastification": { + "version": "2.0.0-rc.5", + "resolved": "https://registry.npmjs.org/vue-toastification/-/vue-toastification-2.0.0-rc.5.tgz", + "integrity": "sha512-q73e5jy6gucEO/U+P48hqX+/qyXDozAGmaGgLFm5tXX4wJBcVsnGp4e/iJqlm9xzHETYOilUuwOUje2Qg1JdwA==", + "peerDependencies": { + "vue": "^3.0.2" + } + }, + "node_modules/vue-transition-expand": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/vue-transition-expand/-/vue-transition-expand-0.1.0.tgz", + "integrity": "sha512-4UKkK/ILk+Qh3WWJoupt7pXfzpjvb7vTQTaVUhnkr+FeXArndJVDyIn2eWIn7i37cVFXKu2jsDR47QELOCq/gQ==", + "dependencies": { + "vue": "^2.5.16" + } + }, + "node_modules/vue-transition-expand/node_modules/vue": { + "version": "2.6.14", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.14.tgz", + "integrity": "sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ==" + }, + "node_modules/vuedraggable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-4.1.0.tgz", + "integrity": "sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==", + "dependencies": { + "sortablejs": "1.14.0" + }, + "peerDependencies": { + "vue": "^3.0.1" + } + }, + "node_modules/watchpack": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", + "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "dev": true + }, + "node_modules/webpack": { + "version": "5.66.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.66.0.tgz", + "integrity": "sha512-NJNtGT7IKpGzdW7Iwpn/09OXz9inIkeIQ/ibY6B+MdV1x6+uReqz/5z1L89ezWnpPDWpXF0TY5PCYKQdWVn8Vg==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.50", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.8.3", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "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.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.3.1", + "webpack-sources": "^3.2.2" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-bundle-analyzer": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.5.0.tgz", + "integrity": "sha512-GUMZlM3SKwS8Z+CKeIFx7CVoHn3dXFcUAjT/dcZQQmfSZGvitPfMob2ipjai7ovFFqPvTqkEZ/leL4O0YOdAYQ==", + "dev": true, + "dependencies": { + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "chalk": "^4.1.0", + "commander": "^7.2.0", + "gzip-size": "^6.0.0", + "lodash": "^4.17.20", + "opener": "^1.5.2", + "sirv": "^1.0.7", + "ws": "^7.3.1" + }, + "bin": { + "webpack-bundle-analyzer": "lib/bin/analyzer.js" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/webpack-bundle-analyzer/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/webpack-bundle-analyzer/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/webpack-bundle-analyzer/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-bundle-analyzer/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/webpack-bundle-analyzer/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/webpack-chain": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/webpack-chain/-/webpack-chain-6.5.1.tgz", + "integrity": "sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA==", + "dev": true, + "dependencies": { + "deepmerge": "^1.5.2", + "javascript-stringify": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/webpack-chain/node_modules/deepmerge": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz", + "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.0.tgz", + "integrity": "sha512-MouJz+rXAm9B1OTOYaJnn6rtD/lWZPy2ufQCH3BPs8Rloh/Du6Jze4p7AeLYHkVi0giJnYLaSGDC7S+GM9arhg==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.2.2", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", + "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-middleware/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/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.7.3.tgz", + "integrity": "sha512-mlxq2AsIw2ag016nixkzUkdyOE8ST2GTy34uKSABp1c4nhjZvH90D5ZRR+UOLSsG4Z3TFahAi72a3ymRtfRm+Q==", + "dev": true, + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/serve-index": "^1.9.1", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.2.2", + "ansi-html-community": "^0.0.8", + "bonjour": "^3.5.0", + "chokidar": "^3.5.2", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "default-gateway": "^6.0.3", + "del": "^6.0.0", + "express": "^4.17.1", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.0", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "portfinder": "^1.0.28", + "schema-utils": "^4.0.0", + "selfsigned": "^2.0.0", + "serve-index": "^1.9.1", + "sockjs": "^0.3.21", + "spdy": "^4.0.2", + "strip-ansi": "^7.0.0", + "webpack-dev-middleware": "^5.3.0", + "ws": "^8.1.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ajv": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", + "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-server/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-server/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/webpack-dev-server/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/webpack-dev-server/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.4.1.tgz", + "integrity": "sha512-6eqQ4yN2y2xv8b+BgbkUzPPyfo/PDl3VOWb06ZE0jIFYwuHMsMQN6F7o84yxJYCblfCRAxzpU59We4Rr4w0Luw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-virtual-modules": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.4.3.tgz", + "integrity": "sha512-5NUqC2JquIL2pBAAo/VfBP6KuGkHIZQXW/lNKupLPfhViwh8wNsu0BObtl09yuKZszeEUfbXz8xhrHvSG16Nqw==", + "dev": true + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack/node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-fetch": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", + "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/wheel": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wheel/-/wheel-1.0.0.tgz", + "integrity": "sha512-XiCMHibOiqalCQ+BaNSwRoZ9FDTAvOsXxGHXChBugewDj7HC8VBIER71dEOiRH1fSdLbRCQzngKTSiZ06ZQzeA==" + }, + "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/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-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/wrap-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/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.5.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz", + "integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "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/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yorkie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yorkie/-/yorkie-2.0.0.tgz", + "integrity": "sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "execa": "^0.8.0", + "is-ci": "^1.0.10", + "normalize-path": "^1.0.0", + "strip-indent": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/yorkie/node_modules/cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "dependencies": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "node_modules/yorkie/node_modules/execa": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", + "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", + "dev": true, + "dependencies": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/yorkie/node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/yorkie/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/yorkie/node_modules/normalize-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz", + "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yorkie/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yorkie/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yorkie/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/yorkie/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.16.7" + } + }, + "@babel/compat-data": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.8.tgz", + "integrity": "sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q==", + "dev": true + }, + "@babel/core": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.7.tgz", + "integrity": "sha512-aeLaqcqThRNZYmbMqtulsetOQZ/5gbR/dWruUCJcpas4Qoyy+QeagfDsPdMrqwsPRDNxJvBlRiZxxX7THO7qtA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.16.7", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helpers": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + } + }, + "@babel/generator": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz", + "integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.8", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", + "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", + "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.16.4", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.7.tgz", + "integrity": "sha512-kIFozAvVfK05DM4EVQYKK+zteWvY85BFdGBRQBytRyY3y+6PX0DkDOn/CZ3lEuczCfrCxEzwt0YtP/87YPTWSw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.7.tgz", + "integrity": "sha512-fk5A6ymfp+O5+p2yCkXAu5Kyj6v0xh0RBeNcAkYUMDvvAAoxvSKXn+Jb37t/yWFiQVDFK1ELpUTD8/aLhCPu+g==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "regexpu-core": "^4.7.1" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.0.tgz", + "integrity": "sha512-7hfT8lUljl/tM3h+izTX/pO3W3frz2ok6Pk+gzys8iJqDfZrZy2pXjRTZAvG2YmfHun1X4q8/UZRLatMfqc5Tg==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", + "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz", + "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-module-transforms": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", + "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", + "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", + "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-wrap-function": "^7.16.8", + "@babel/types": "^7.16.8" + } + }, + "@babel/helper-replace-supers": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", + "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-simple-access": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", + "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", + "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", + "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.8", + "@babel/types": "^7.16.8" + } + }, + "@babel/helpers": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.7.tgz", + "integrity": "sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==", + "dev": true, + "requires": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/highlight": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", + "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.8.tgz", + "integrity": "sha512-i7jDUfrVBWc+7OKcBzEe5n7fbv3i2fWtxKzzCvOjnzSxMfWMigAhtfJ7qzZNGFNMsCCd67+uz553dYKWXPvCKw==" + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz", + "integrity": "sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz", + "integrity": "sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.7" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", + "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", + "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.7.tgz", + "integrity": "sha512-dgqJJrcZoG/4CkMopzhPJjGxsIe9A8RlkQLnL/Vhhx8AA9ZuaRwGSlscSh42hazc7WSrya/IK7mTeoF0DP9tEw==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-proposal-decorators": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.16.7.tgz", + "integrity": "sha512-DoEpnuXK14XV9btI1k8tzNGCutMclpj4yru8aXKoHlVmbO1s+2A+g2+h4JhcjrxkFJqzbymnLG6j/niOf3iFXQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-decorators": "^7.16.7" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", + "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz", + "integrity": "sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz", + "integrity": "sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz", + "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz", + "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", + "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.7.tgz", + "integrity": "sha512-3O0Y4+dw94HA86qSg9IHfyPktgR7q3gpNVAeiKQd+8jBKFaU5NQS1Yatgo4wY+UFNuLjvxcSmzcsHqrhgTyBUA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.16.4", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.16.7" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", + "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", + "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.7.tgz", + "integrity": "sha512-7twV3pzhrRxSwHeIvFE6coPgvo+exNDOiGUMg39o2LiLo1Y+4aKpfkcLGcg1UHonzorCt7SNXnoMyCnnIOA8Sw==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz", + "integrity": "sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz", + "integrity": "sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-decorators": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.16.7.tgz", + "integrity": "sha512-vQ+PxL+srA7g6Rx6I1e15m55gftknl2X8GCUW1JTlkTaXZLJOS0UcaY0eK9jYT7IYf4awn6qwyghVHLDz1WyMw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", + "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz", + "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", + "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", + "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz", + "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz", + "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz", + "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.7.tgz", + "integrity": "sha512-VqAwhTHBnu5xBVDCvrvqJbtLUa++qZaWC0Fgr2mqokBlulZARGyIvZDoqbPlPaKImQ9dKAcCzbv+ul//uqu70A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", + "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz", + "integrity": "sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", + "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz", + "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", + "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz", + "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", + "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz", + "integrity": "sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", + "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz", + "integrity": "sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz", + "integrity": "sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz", + "integrity": "sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz", + "integrity": "sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", + "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz", + "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", + "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz", + "integrity": "sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==", + "dev": true, + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz", + "integrity": "sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.8.tgz", + "integrity": "sha512-6Kg2XHPFnIarNweZxmzbgYnnWsXxkx9WQUVk2sksBRL80lBC1RAQV3wQagWxdCHiYHqPN+oenwNIuttlYgIbQQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "semver": "^6.3.0" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", + "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz", + "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", + "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz", + "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz", + "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", + "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", + "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/preset-env": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.8.tgz", + "integrity": "sha512-9rNKgVCdwHb3z1IlbMyft6yIXIeP3xz6vWvGaLHrJThuEIqWfHb0DNBH9VuTgnDfdbUDhkmkvMZS/YMCtP7Elg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.16.8", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.7", + "@babel/plugin-proposal-async-generator-functions": "^7.16.8", + "@babel/plugin-proposal-class-properties": "^7.16.7", + "@babel/plugin-proposal-class-static-block": "^7.16.7", + "@babel/plugin-proposal-dynamic-import": "^7.16.7", + "@babel/plugin-proposal-export-namespace-from": "^7.16.7", + "@babel/plugin-proposal-json-strings": "^7.16.7", + "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", + "@babel/plugin-proposal-numeric-separator": "^7.16.7", + "@babel/plugin-proposal-object-rest-spread": "^7.16.7", + "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", + "@babel/plugin-proposal-optional-chaining": "^7.16.7", + "@babel/plugin-proposal-private-methods": "^7.16.7", + "@babel/plugin-proposal-private-property-in-object": "^7.16.7", + "@babel/plugin-proposal-unicode-property-regex": "^7.16.7", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.16.7", + "@babel/plugin-transform-async-to-generator": "^7.16.8", + "@babel/plugin-transform-block-scoped-functions": "^7.16.7", + "@babel/plugin-transform-block-scoping": "^7.16.7", + "@babel/plugin-transform-classes": "^7.16.7", + "@babel/plugin-transform-computed-properties": "^7.16.7", + "@babel/plugin-transform-destructuring": "^7.16.7", + "@babel/plugin-transform-dotall-regex": "^7.16.7", + "@babel/plugin-transform-duplicate-keys": "^7.16.7", + "@babel/plugin-transform-exponentiation-operator": "^7.16.7", + "@babel/plugin-transform-for-of": "^7.16.7", + "@babel/plugin-transform-function-name": "^7.16.7", + "@babel/plugin-transform-literals": "^7.16.7", + "@babel/plugin-transform-member-expression-literals": "^7.16.7", + "@babel/plugin-transform-modules-amd": "^7.16.7", + "@babel/plugin-transform-modules-commonjs": "^7.16.8", + "@babel/plugin-transform-modules-systemjs": "^7.16.7", + "@babel/plugin-transform-modules-umd": "^7.16.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.8", + "@babel/plugin-transform-new-target": "^7.16.7", + "@babel/plugin-transform-object-super": "^7.16.7", + "@babel/plugin-transform-parameters": "^7.16.7", + "@babel/plugin-transform-property-literals": "^7.16.7", + "@babel/plugin-transform-regenerator": "^7.16.7", + "@babel/plugin-transform-reserved-words": "^7.16.7", + "@babel/plugin-transform-shorthand-properties": "^7.16.7", + "@babel/plugin-transform-spread": "^7.16.7", + "@babel/plugin-transform-sticky-regex": "^7.16.7", + "@babel/plugin-transform-template-literals": "^7.16.7", + "@babel/plugin-transform-typeof-symbol": "^7.16.7", + "@babel/plugin-transform-unicode-escapes": "^7.16.7", + "@babel/plugin-transform-unicode-regex": "^7.16.7", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.16.8", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "core-js-compat": "^3.20.2", + "semver": "^6.3.0" + } + }, + "@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/runtime": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.7.tgz", + "integrity": "sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/traverse": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.8.tgz", + "integrity": "sha512-xe+H7JlvKsDQwXRsBhSnq1/+9c+LlQcCK3Tn/l5sbx02HYns/cn7ibp9+RV1sIUqu7hKg91NWsgHurO9dowITQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.16.8", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.16.8", + "@babel/types": "^7.16.8", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", + "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + }, + "@eslint/eslintrc": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", + "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.2.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "globals": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "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 + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } + } + }, + "@hapi/hoek": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.1.tgz", + "integrity": "sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw==", + "dev": true + }, + "@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dev": true, + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@humanwhocodes/config-array": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", + "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@ivanv/vue-collapse-transition": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@ivanv/vue-collapse-transition/-/vue-collapse-transition-1.0.2.tgz", + "integrity": "sha512-eWEameFXJM/1khcoKbITvKjYYXDP1WKQ/Xf9ItJVPoEjCiOdocR3AgDAERzDrNNg4oWK28gRGi+0ft8Te27zxw==", + "dev": true + }, + "@jetblack/operator-overloading": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@jetblack/operator-overloading/-/operator-overloading-0.2.0.tgz", + "integrity": "sha512-Y6iNzYnNUoCUcRMoUL1NflWLHkrzkxCC6VHB5h57pcjiUaPHTidZH9uyz123d6utA9w9VO+cS7S/KLA1DEpS/g==", + "dev": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@polka/url": { + "version": "1.0.0-next.21", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", + "dev": true + }, + "@rushstack/eslint-patch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.0.tgz", + "integrity": "sha512-JLo+Y592QzIE+q7Dl2pMUtt4q8SKYI5jDrZxrozEQxnGVOyYE+GWK9eLkwTaeN9DDctlaRAQ3TBmzZ1qdLE30A==", + "dev": true + }, + "@sideway/address": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.3.tgz", + "integrity": "sha512-8ncEUtmnTsMmL7z1YPB47kPUq7LpKWJNFPsRzHiIajGC5uXlWGn+AmkYPcHNl8S4tcEGx+cnORnNYaw2wvL+LQ==", + "dev": true, + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@sideway/formula": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", + "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==", + "dev": true + }, + "@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "dev": true + }, + "@soda/friendly-errors-webpack-plugin": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz", + "integrity": "sha512-h2ooWqP8XuFqTXT+NyAFbrArzfQA7R6HTezADrvD9Re8fxMLTPPniLdqVTdDaO0eIoLaAwKT+d6w+5GeTk7Vbg==", + "dev": true, + "requires": { + "chalk": "^3.0.0", + "error-stack-parser": "^2.0.6", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@soda/get-current-script": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@soda/get-current-script/-/get-current-script-1.0.2.tgz", + "integrity": "sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w==", + "dev": true + }, + "@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true + }, + "@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect-history-api-fallback": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", + "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "dev": true, + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "@types/eslint": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.29.0.tgz", + "integrity": "sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.50", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", + "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", + "dev": true + }, + "@types/express": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.28", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", + "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "dev": true + }, + "@types/http-proxy": { + "version": "1.17.8", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz", + "integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, + "@types/lodash": { + "version": "4.14.178", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.178.tgz", + "integrity": "sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==", + "dev": true + }, + "@types/lodash.clonedeep": { + "version": "4.5.6", + "resolved": "https://registry.npmjs.org/@types/lodash.clonedeep/-/lodash.clonedeep-4.5.6.tgz", + "integrity": "sha512-cE1jYr2dEg1wBImvXlNtp0xDoS79rfEdGozQVgliDZj1uERH4k+rmEMTudP9b4VQ8O6nRb5gPqft0QzEQGMQgA==", + "dev": true, + "requires": { + "@types/lodash": "*" + } + }, + "@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, + "@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "@types/node": { + "version": "17.0.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.8.tgz", + "integrity": "sha512-YofkM6fGv4gDJq78g4j0mMuGMkZVxZDgtU0JRdx6FgiJDG+0fY0GKVolOV8WqVmEhLCXkQRjwDdKyPxJp/uucg==", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "@types/retry": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", + "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==", + "dev": true + }, + "@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "dev": true, + "requires": { + "@types/express": "*" + } + }, + "@types/serve-static": { + "version": "1.13.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", + "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "dev": true, + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/webpack-dev-server": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@types/webpack-dev-server/-/webpack-dev-server-4.7.2.tgz", + "integrity": "sha512-Y3p0Fmfvp0MHBDoCzo+xFJaWTw0/z37mWIo6P15j+OtmUDLvznJWdZNeD7Q004R+MpQlys12oXbXsrXRmxwg4Q==", + "dev": true, + "requires": { + "webpack-dev-server": "*" + } + }, + "@types/webpack-env": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.16.3.tgz", + "integrity": "sha512-9gtOPPkfyNoEqCQgx4qJKkuNm/x0R2hKR7fdl7zvTJyHnIisuE/LfvXOsYWL0o3qq6uiBnKZNNNzi3l0y/X+xw==", + "dev": true + }, + "@types/ws": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.2.tgz", + "integrity": "sha512-NOn5eIcgWLOo6qW8AcuLZ7G8PycXu0xTxxkS6Q18VWFxgPUSOwV0pBj2a/4viNZVu25i7RIB7GttdkAIUUXOOg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.9.1.tgz", + "integrity": "sha512-Xv9tkFlyD4MQGpJgTo6wqDqGvHIRmRgah/2Sjz1PUnJTawjHWIwBivUE9x0QtU2WVii9baYgavo/bHjrZJkqTw==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "5.9.1", + "@typescript-eslint/scope-manager": "5.9.1", + "@typescript-eslint/type-utils": "5.9.1", + "debug": "^4.3.2", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.2.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/experimental-utils": { + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.9.1.tgz", + "integrity": "sha512-cb1Njyss0mLL9kLXgS/eEY53SZQ9sT519wpX3i+U457l2UXRDuo87hgKfgRazmu9/tQb0x2sr3Y0yrU+Zz0y+w==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.9.1", + "@typescript-eslint/types": "5.9.1", + "@typescript-eslint/typescript-estree": "5.9.1", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.9.1.tgz", + "integrity": "sha512-PLYO0AmwD6s6n0ZQB5kqPgfvh73p0+VqopQQLuNfi7Lm0EpfKyDalchpVwkE+81k5HeiRrTV/9w1aNHzjD7C4g==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.9.1", + "@typescript-eslint/types": "5.9.1", + "@typescript-eslint/typescript-estree": "5.9.1", + "debug": "^4.3.2" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.9.1.tgz", + "integrity": "sha512-8BwvWkho3B/UOtzRyW07ffJXPaLSUKFBjpq8aqsRvu6HdEuzCY57+ffT7QoV4QXJXWSU1+7g3wE4AlgImmQ9pQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.9.1", + "@typescript-eslint/visitor-keys": "5.9.1" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.9.1.tgz", + "integrity": "sha512-tRSpdBnPRssjlUh35rE9ug5HrUvaB9ntREy7gPXXKwmIx61TNN7+l5YKgi1hMKxo5NvqZCfYhA5FvyuJG6X6vg==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "5.9.1", + "debug": "^4.3.2", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/types": { + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.9.1.tgz", + "integrity": "sha512-SsWegWudWpkZCwwYcKoDwuAjoZXnM1y2EbEerTHho19Hmm+bQ56QG4L4jrtCu0bI5STaRTvRTZmjprWlTw/5NQ==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.9.1.tgz", + "integrity": "sha512-gL1sP6A/KG0HwrahVXI9fZyeVTxEYV//6PmcOn1tD0rw8VhUWYeZeuWHwwhnewnvEMcHjhnJLOBhA9rK4vmb8A==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.9.1", + "@typescript-eslint/visitor-keys": "5.9.1", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.9.1.tgz", + "integrity": "sha512-Xh37pNz9e9ryW4TVdwiFzmr4hloty8cFj8GTWMXh3Z8swGwyQWeCcNgF0hm6t09iZd6eiZmIf4zHedQVP6TVtg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.9.1", + "eslint-visitor-keys": "^3.0.0" + } + }, + "@vue/babel-helper-vue-jsx-merge-props": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.2.1.tgz", + "integrity": "sha512-QOi5OW45e2R20VygMSNhyQHvpdUwQZqGPc748JLGCYEy+yp8fNFNdbNIGAgZmi9e+2JHPd6i6idRuqivyicIkA==", + "dev": true + }, + "@vue/babel-helper-vue-transform-on": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.0.2.tgz", + "integrity": "sha512-hz4R8tS5jMn8lDq6iD+yWL6XNB699pGIVLk7WSJnn1dbpjaazsjZQkieJoRX6gW5zpYSCFqQ7jUquPNY65tQYA==", + "dev": true + }, + "@vue/babel-plugin-jsx": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.1.1.tgz", + "integrity": "sha512-j2uVfZjnB5+zkcbc/zsOc0fSNGCMMjaEXP52wdwdIfn0qjFfEYpYZBFKFg+HHnQeJCVrjOeO0YxgaL7DMrym9w==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.0.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "@vue/babel-helper-vue-transform-on": "^1.0.2", + "camelcase": "^6.0.0", + "html-tags": "^3.1.0", + "svg-tags": "^1.0.0" + } + }, + "@vue/babel-plugin-transform-vue-jsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.2.1.tgz", + "integrity": "sha512-HJuqwACYehQwh1fNT8f4kyzqlNMpBuUK4rSiSES5D4QsYncv5fxFsLyrxFPG2ksO7t5WP+Vgix6tt6yKClwPzA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1", + "html-tags": "^2.0.0", + "lodash.kebabcase": "^4.1.1", + "svg-tags": "^1.0.0" + }, + "dependencies": { + "html-tags": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", + "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=", + "dev": true + } + } + }, + "@vue/babel-preset-app": { + "version": "5.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@vue/babel-preset-app/-/babel-preset-app-5.0.0-rc.1.tgz", + "integrity": "sha512-inJV1lxC+dUvqwPy9gbEjELX+Vk/Ys961S61aIn52gSCZBLHfk8/7mM7B3PamgHSG8yQmgrd3BOZsKSSsAMNJQ==", + "dev": true, + "requires": { + "@babel/core": "^7.12.16", + "@babel/helper-compilation-targets": "^7.12.16", + "@babel/helper-module-imports": "^7.12.13", + "@babel/plugin-proposal-class-properties": "^7.12.13", + "@babel/plugin-proposal-decorators": "^7.12.13", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-jsx": "^7.12.13", + "@babel/plugin-transform-runtime": "^7.12.15", + "@babel/preset-env": "^7.12.16", + "@babel/runtime": "^7.12.13", + "@vue/babel-plugin-jsx": "^1.0.3", + "@vue/babel-preset-jsx": "^1.1.2", + "babel-plugin-dynamic-import-node": "^2.3.3", + "core-js": "^3.8.3", + "core-js-compat": "^3.8.3", + "semver": "^7.3.4" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@vue/babel-preset-jsx": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@vue/babel-preset-jsx/-/babel-preset-jsx-1.2.4.tgz", + "integrity": "sha512-oRVnmN2a77bYDJzeGSt92AuHXbkIxbf/XXSE3klINnh9AXBmVS1DGa1f0d+dDYpLfsAKElMnqKTQfKn7obcL4w==", + "dev": true, + "requires": { + "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1", + "@vue/babel-plugin-transform-vue-jsx": "^1.2.1", + "@vue/babel-sugar-composition-api-inject-h": "^1.2.1", + "@vue/babel-sugar-composition-api-render-instance": "^1.2.4", + "@vue/babel-sugar-functional-vue": "^1.2.2", + "@vue/babel-sugar-inject-h": "^1.2.2", + "@vue/babel-sugar-v-model": "^1.2.3", + "@vue/babel-sugar-v-on": "^1.2.3" + } + }, + "@vue/babel-sugar-composition-api-inject-h": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.2.1.tgz", + "integrity": "sha512-4B3L5Z2G+7s+9Bwbf+zPIifkFNcKth7fQwekVbnOA3cr3Pq71q71goWr97sk4/yyzH8phfe5ODVzEjX7HU7ItQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-composition-api-render-instance": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.2.4.tgz", + "integrity": "sha512-joha4PZznQMsxQYXtR3MnTgCASC9u3zt9KfBxIeuI5g2gscpTsSKRDzWQt4aqNIpx6cv8On7/m6zmmovlNsG7Q==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-functional-vue": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.2.2.tgz", + "integrity": "sha512-JvbgGn1bjCLByIAU1VOoepHQ1vFsroSA/QkzdiSs657V79q6OwEWLCQtQnEXD/rLTA8rRit4rMOhFpbjRFm82w==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-inject-h": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.2.2.tgz", + "integrity": "sha512-y8vTo00oRkzQTgufeotjCLPAvlhnpSkcHFEp60+LJUwygGcd5Chrpn5480AQp/thrxVm8m2ifAk0LyFel9oCnw==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-v-model": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.2.3.tgz", + "integrity": "sha512-A2jxx87mySr/ulAsSSyYE8un6SIH0NWHiLaCWpodPCVOlQVODCaSpiR4+IMsmBr73haG+oeCuSvMOM+ttWUqRQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1", + "@vue/babel-plugin-transform-vue-jsx": "^1.2.1", + "camelcase": "^5.0.0", + "html-tags": "^2.0.0", + "svg-tags": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "html-tags": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", + "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=", + "dev": true + } + } + }, + "@vue/babel-sugar-v-on": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.2.3.tgz", + "integrity": "sha512-kt12VJdz/37D3N3eglBywV8GStKNUhNrsxChXIV+o0MwVXORYuhDTHJRKPgLJRb/EY3vM2aRFQdxJBp9CLikjw==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.2.1", + "camelcase": "^5.0.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + } + } + }, + "@vue/cli-overlay": { + "version": "5.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@vue/cli-overlay/-/cli-overlay-5.0.0-rc.1.tgz", + "integrity": "sha512-pJ8DxDlFiM73FaNlpKqOi3haG15c/6jPLiFZKIGJDoMxLLufSxEZ8aSfvbFRjqwGy/o3I4jzg086Yy+3ZhdG1g==", + "dev": true + }, + "@vue/cli-plugin-babel": { + "version": "5.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-babel/-/cli-plugin-babel-5.0.0-rc.1.tgz", + "integrity": "sha512-ldVuIkPDAuW831l4u7QMkqEhn4/Gil5Wv617i6h4rwDYAAXPgdf8Ce6b7jH4XEyQ2HCu93TzAK1i2njkWV1wrw==", + "dev": true, + "requires": { + "@babel/core": "^7.12.16", + "@vue/babel-preset-app": "^5.0.0-rc.1", + "@vue/cli-shared-utils": "^5.0.0-rc.1", + "babel-loader": "^8.2.2", + "thread-loader": "^3.0.0", + "webpack": "^5.54.0" + } + }, + "@vue/cli-plugin-eslint": { + "version": "5.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-eslint/-/cli-plugin-eslint-5.0.0-rc.1.tgz", + "integrity": "sha512-CK/T00XeibQCMHzSenBWDROB11HbCL69bEc1nwT8gjXq5MMw9AB8qlaZzSuoHbbUE0PDyD272V/RDePO1ExT7w==", + "dev": true, + "requires": { + "@vue/cli-shared-utils": "^5.0.0-rc.1", + "eslint-webpack-plugin": "^3.1.0", + "globby": "^11.0.2", + "webpack": "^5.54.0", + "yorkie": "^2.0.0" + } + }, + "@vue/cli-plugin-router": { + "version": "5.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-router/-/cli-plugin-router-5.0.0-rc.1.tgz", + "integrity": "sha512-eRMeUNY89PbyH/Gkt0IGfNT2qK4fZhTdBDKrR/hwyk57TBDse/h2jZ9inPqfSnrdIrMOqYsLU2ixzSzJVXXOVw==", + "dev": true, + "requires": { + "@vue/cli-shared-utils": "^5.0.0-rc.1" + } + }, + "@vue/cli-plugin-typescript": { + "version": "5.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-typescript/-/cli-plugin-typescript-5.0.0-rc.1.tgz", + "integrity": "sha512-09tq8f1LiYJcmLMfoSiOZX+K2sA/tY3hM99vt5fRevpePFR4TRTbuNjVwtKiYLMq7UsZ2mmbYl9ViQ8Ium1i0w==", + "dev": true, + "requires": { + "@babel/core": "^7.12.16", + "@types/webpack-env": "^1.15.2", + "@vue/cli-shared-utils": "^5.0.0-rc.1", + "babel-loader": "^8.2.2", + "cache-loader": "^4.1.0", + "fork-ts-checker-webpack-plugin": "^6.4.0", + "globby": "^11.0.2", + "thread-loader": "^3.0.0", + "ts-loader": "^9.2.5", + "webpack": "^5.54.0", + "yorkie": "^2.0.0" + } + }, + "@vue/cli-plugin-vuex": { + "version": "5.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-vuex/-/cli-plugin-vuex-5.0.0-rc.1.tgz", + "integrity": "sha512-ShfPIvuD+AFUtUcTw5okLUnBy8o4NrC0ICPpD7z+KG4gbfWzZMmT2TAkjqO9pp21cI+bYzigsBZ/FoXiU5+h7Q==", + "dev": true, + "requires": {} + }, + "@vue/cli-service": { + "version": "5.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@vue/cli-service/-/cli-service-5.0.0-rc.1.tgz", + "integrity": "sha512-xQIHBJzSK+tuOrMnfywRAqfcshClBG/3z/6L/ep8m9O1egsnrkjf2252znJqNaSXvER6b5exDr8M4wnNvhinBw==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.12.16", + "@soda/friendly-errors-webpack-plugin": "^1.8.0", + "@soda/get-current-script": "^1.0.2", + "@types/minimist": "^1.2.0", + "@types/webpack-dev-server": "^4.1.0", + "@vue/cli-overlay": "^5.0.0-rc.1", + "@vue/cli-plugin-router": "^5.0.0-rc.1", + "@vue/cli-plugin-vuex": "^5.0.0-rc.1", + "@vue/cli-shared-utils": "^5.0.0-rc.1", + "@vue/component-compiler-utils": "^3.3.0", + "@vue/vue-loader-v15": "npm:vue-loader@^15.9.7", + "@vue/web-component-wrapper": "^1.3.0", + "acorn": "^8.0.5", + "acorn-walk": "^8.0.2", + "address": "^1.1.2", + "autoprefixer": "^10.2.4", + "browserslist": "^4.16.3", + "cache-loader": "^4.1.0", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "cli-highlight": "^2.1.10", + "clipboardy": "^2.3.0", + "cliui": "^7.0.4", + "copy-webpack-plugin": "^9.0.1", + "css-loader": "^6.5.0", + "css-minimizer-webpack-plugin": "^3.0.2", + "cssnano": "^5.0.0", + "debug": "^4.1.1", + "default-gateway": "^6.0.3", + "dotenv": "^10.0.0", + "dotenv-expand": "^5.1.0", + "fs-extra": "^9.1.0", + "globby": "^11.0.2", + "hash-sum": "^2.0.0", + "html-webpack-plugin": "^5.1.0", + "is-file-esm": "^1.0.0", + "launch-editor-middleware": "^2.2.1", + "lodash.defaultsdeep": "^4.6.1", + "lodash.mapvalues": "^4.6.0", + "mini-css-extract-plugin": "^2.4.3", + "minimist": "^1.2.5", + "module-alias": "^2.2.2", + "portfinder": "^1.0.26", + "postcss": "^8.2.6", + "postcss-loader": "^6.1.1", + "progress-webpack-plugin": "^1.0.12", + "ssri": "^8.0.1", + "terser-webpack-plugin": "^5.1.1", + "thread-loader": "^3.0.0", + "vue-loader": "^16.8.2", + "vue-style-loader": "^4.1.3", + "webpack": "^5.54.0", + "webpack-bundle-analyzer": "^4.4.0", + "webpack-chain": "^6.5.1", + "webpack-dev-server": "^4.1.0", + "webpack-merge": "^5.7.3", + "webpack-virtual-modules": "^0.4.2", + "whatwg-fetch": "^3.6.2" + } + }, + "@vue/cli-shared-utils": { + "version": "5.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-5.0.0-rc.1.tgz", + "integrity": "sha512-rZVTGfSQ0Sqw76BD/Z6iARfnO2r5ICSxt0iIpzjM8w9ohpRtI2B45NrngF0rILwy9d8we4A/n7gQQ0rqwkAX7g==", + "dev": true, + "requires": { + "chalk": "^4.1.2", + "execa": "^1.0.0", + "joi": "^17.4.0", + "launch-editor": "^2.2.1", + "lru-cache": "^6.0.0", + "node-fetch": "^2.6.1", + "node-ipc": "^9.1.1", + "open": "^8.0.2", + "ora": "^5.3.0", + "read-pkg": "^5.1.1", + "semver": "^7.3.4", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@vue/compiler-core": { + "version": "3.2.26", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.26.tgz", + "integrity": "sha512-N5XNBobZbaASdzY9Lga2D9Lul5vdCIOXvUMd6ThcN8zgqQhPKfCV+wfAJNNJKQkSHudnYRO2gEB+lp0iN3g2Tw==", + "requires": { + "@babel/parser": "^7.16.4", + "@vue/shared": "3.2.26", + "estree-walker": "^2.0.2", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "@vue/compiler-dom": { + "version": "3.2.26", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.26.tgz", + "integrity": "sha512-smBfaOW6mQDxcT3p9TKT6mE22vjxjJL50GFVJiI0chXYGU/xzC05QRGrW3HHVuJrmLTLx5zBhsZ2dIATERbarg==", + "requires": { + "@vue/compiler-core": "3.2.26", + "@vue/shared": "3.2.26" + } + }, + "@vue/compiler-sfc": { + "version": "3.2.26", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.26.tgz", + "integrity": "sha512-ePpnfktV90UcLdsDQUh2JdiTuhV0Skv2iYXxfNMOK/F3Q+2BO0AulcVcfoksOpTJGmhhfosWfMyEaEf0UaWpIw==", + "requires": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.26", + "@vue/compiler-dom": "3.2.26", + "@vue/compiler-ssr": "3.2.26", + "@vue/reactivity-transform": "3.2.26", + "@vue/shared": "3.2.26", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7", + "postcss": "^8.1.10", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "@vue/compiler-ssr": { + "version": "3.2.26", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.26.tgz", + "integrity": "sha512-2mywLX0ODc4Zn8qBoA2PDCsLEZfpUGZcyoFRLSOjyGGK6wDy2/5kyDOWtf0S0UvtoyVq95OTSGIALjZ4k2q/ag==", + "requires": { + "@vue/compiler-dom": "3.2.26", + "@vue/shared": "3.2.26" + } + }, + "@vue/component-compiler-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz", + "integrity": "sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==", + "dev": true, + "requires": { + "consolidate": "^0.15.1", + "hash-sum": "^1.0.2", + "lru-cache": "^4.1.2", + "merge-source-map": "^1.1.0", + "postcss": "^7.0.36", + "postcss-selector-parser": "^6.0.2", + "prettier": "^1.18.2 || ^2.0.0", + "source-map": "~0.6.1", + "vue-template-es2015-compiler": "^1.9.0" + }, + "dependencies": { + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "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 + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } + }, + "@vue/eslint-config-prettier": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-7.0.0.tgz", + "integrity": "sha512-/CTc6ML3Wta1tCe1gUeO0EYnVXfo3nJXsIhZ8WJr3sov+cGASr6yuiibJTL6lmIBm7GobopToOuB3B6AWyV0Iw==", + "dev": true, + "requires": { + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-prettier": "^4.0.0" + } + }, + "@vue/eslint-config-typescript": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-10.0.0.tgz", + "integrity": "sha512-F94cL8ug3FaYXlCfU5/wiGjk1qeadmoBpRGAOBq+qre3Smdupa59dd6ZJrsfRODpsMPyTG7330juMDsUvpZ3Rw==", + "dev": true, + "requires": { + "@typescript-eslint/eslint-plugin": "^5.0.0", + "@typescript-eslint/parser": "^5.0.0", + "vue-eslint-parser": "^8.0.0" + } + }, + "@vue/reactivity": { + "version": "3.2.26", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.26.tgz", + "integrity": "sha512-h38bxCZLW6oFJVDlCcAiUKFnXI8xP8d+eO0pcDxx+7dQfSPje2AO6M9S9QO6MrxQB7fGP0DH0dYQ8ksf6hrXKQ==", + "requires": { + "@vue/shared": "3.2.26" + } + }, + "@vue/reactivity-transform": { + "version": "3.2.26", + "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.26.tgz", + "integrity": "sha512-XKMyuCmzNA7nvFlYhdKwD78rcnmPb7q46uoR00zkX6yZrUmcCQ5OikiwUEVbvNhL5hBJuvbSO95jB5zkUon+eQ==", + "requires": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.26", + "@vue/shared": "3.2.26", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7" + } + }, + "@vue/runtime-core": { + "version": "3.2.26", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.26.tgz", + "integrity": "sha512-BcYi7qZ9Nn+CJDJrHQ6Zsmxei2hDW0L6AB4vPvUQGBm2fZyC0GXd/4nVbyA2ubmuhctD5RbYY8L+5GUJszv9mQ==", + "requires": { + "@vue/reactivity": "3.2.26", + "@vue/shared": "3.2.26" + } + }, + "@vue/runtime-dom": { + "version": "3.2.26", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.26.tgz", + "integrity": "sha512-dY56UIiZI+gjc4e8JQBwAifljyexfVCkIAu/WX8snh8vSOt/gMSEGwPRcl2UpYpBYeyExV8WCbgvwWRNt9cHhQ==", + "requires": { + "@vue/runtime-core": "3.2.26", + "@vue/shared": "3.2.26", + "csstype": "^2.6.8" + } + }, + "@vue/server-renderer": { + "version": "3.2.26", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.26.tgz", + "integrity": "sha512-Jp5SggDUvvUYSBIvYEhy76t4nr1vapY/FIFloWmQzn7UxqaHrrBpbxrqPcTrSgGrcaglj0VBp22BKJNre4aA1w==", + "requires": { + "@vue/compiler-ssr": "3.2.26", + "@vue/shared": "3.2.26" + } + }, + "@vue/shared": { + "version": "3.2.26", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.26.tgz", + "integrity": "sha512-vPV6Cq+NIWbH5pZu+V+2QHE9y1qfuTq49uNWw4f7FDEeZaDU2H2cx5jcUZOAKW7qTrUS4k6qZPbMy1x4N96nbA==" + }, + "@vue/vue-loader-v15": { + "version": "npm:vue-loader@15.9.8", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.8.tgz", + "integrity": "sha512-GwSkxPrihfLR69/dSV3+5CdMQ0D+jXg8Ma1S4nQXKJAznYFX14vHdc/NetQc34Dw+rBbIJyP7JOuVb9Fhprvog==", + "dev": true, + "requires": { + "@vue/component-compiler-utils": "^3.1.0", + "hash-sum": "^1.0.2", + "loader-utils": "^1.1.0", + "vue-hot-reload-api": "^2.3.0", + "vue-style-loader": "^4.1.0" + }, + "dependencies": { + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + } + } + }, + "@vue/web-component-wrapper": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz", + "integrity": "sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA==", + "dev": true + }, + "@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@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 + }, + "@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 + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true + }, + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true, + "requires": {} + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, + "address": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", + "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", + "dev": true + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "requires": { + "ajv": "^8.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", + "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + } + } + }, + "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, + "requires": {} + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "amator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/amator/-/amator-1.1.0.tgz", + "integrity": "sha1-CMa2C8k67Cthu/wMTWd9MDI8wPE=", + "requires": { + "bezier-easing": "^2.0.3" + } + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", + "dev": true + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "dev": true + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "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 + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, + "autoprefixer": { + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.2.tgz", + "integrity": "sha512-9fOPpHKuDW1w/0EKfRmVnxTDt8166MAnLI3mgZ1JCnhNtYWxcJ6Ud5CO/AVOZi/AvFa8DY9RTy3h3+tFBlrrdQ==", + "dev": true, + "requires": { + "browserslist": "^4.19.1", + "caniuse-lite": "^1.0.30001297", + "fraction.js": "^4.1.2", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + } + }, + "babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + }, + "dependencies": { + "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 + } + } + }, + "babel-loader": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz", + "integrity": "sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==", + "dev": true, + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.0.tgz", + "integrity": "sha512-wMDoBJ6uG4u4PNFh72Ty6t3EgfA91puCuAwKIazbQlci+ENb/UU9A3xG5lutjUIiXCIn1CY5L15r9LimiJyrSA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.3.0", + "semver": "^6.1.1" + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.0.tgz", + "integrity": "sha512-Hcrgnmkf+4JTj73GbK3bBhlVPiLL47owUAnoJIf69Hakl3q+KfodbDXiZWGMM7iqCZTxCG3Z2VRfPNYES4rXqQ==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.0", + "core-js-compat": "^3.20.0" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.0.tgz", + "integrity": "sha512-dhAPTDLGoMW5/84wkgwiLRwMnio2i1fUe53EuvtKMv0pn2p3S8OCoV1xAzfJPl0KOX7IB89s2ib85vbYiea3jg==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "bezier-easing": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/bezier-easing/-/bezier-easing-2.1.0.tgz", + "integrity": "sha1-wE3+i5JtbsrKGBPWn/F5t8ICXYY=" + }, + "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 + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "body-parser": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", + "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==", + "dev": true, + "requires": { + "bytes": "3.1.1", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.9.6", + "raw-body": "2.4.2", + "type-is": "~1.6.18" + }, + "dependencies": { + "bytes": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", + "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001286", + "electron-to-chromium": "^1.4.17", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "buffer-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/buffer-json/-/buffer-json-2.0.0.tgz", + "integrity": "sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw==", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "cache-loader": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cache-loader/-/cache-loader-4.1.0.tgz", + "integrity": "sha512-ftOayxve0PwKzBF/GLsZNC9fJBXl8lkZE3TOsjkboHfVHVkL39iUEs1FO07A33mizmci5Dudt38UZrrYXDtbhw==", + "dev": true, + "requires": { + "buffer-json": "^2.0.0", + "find-cache-dir": "^3.0.0", + "loader-utils": "^1.2.3", + "mkdirp": "^0.5.1", + "neo-async": "^2.6.1", + "schema-utils": "^2.0.0" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "requires": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001299", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001299.tgz", + "integrity": "sha512-iujN4+x7QzqA2NCSrS5VUy+4gLmRd4xv6vbBBsmfVqTx8bLAD8097euLqQgKxSVLvxjSDcvF1T/i9ocgnUFexw==", + "dev": true + }, + "case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true + }, + "ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", + "dev": true + }, + "clean-css": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.2.tgz", + "integrity": "sha512-/eR8ru5zyxKzpBLv9YZvMXgTSSQn7AdkMItMYynsFgGwTveCRVam9IUPFloE85B4vAIj05IuKmmEoV7/AQjT0w==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-highlight": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz", + "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "highlight.js": "^10.7.1", + "mz": "^2.4.0", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^6.0.0", + "yargs": "^16.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "dev": true + }, + "clipboardy": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz", + "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==", + "dev": true, + "requires": { + "arch": "^2.1.1", + "execa": "^1.0.0", + "is-wsl": "^2.1.1" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, + "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, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "colord": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", + "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==", + "dev": true + }, + "colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "dev": true + }, + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "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 + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, + "consolidate": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz", + "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", + "dev": true, + "requires": { + "bluebird": "^3.1.1" + } + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "requires": { + "safe-buffer": "5.2.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-webpack-plugin": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.1.0.tgz", + "integrity": "sha512-rxnR7PaGigJzhqETHGmAcxKnLZSR5u1Y3/bcIv/1FnqXedcL/E2ewK7ZCNrArJKCiSv8yVXhTqetJh8inDvfsA==", + "dev": true, + "requires": { + "fast-glob": "^3.2.7", + "glob-parent": "^6.0.1", + "globby": "^11.0.3", + "normalize-path": "^3.0.0", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "core-js": { + "version": "3.20.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.20.2.tgz", + "integrity": "sha512-nuqhq11DcOAbFBV4zCbKeGbKQsUDRqTX0oqx7AttUBuqe3h20ixsE039QHelbL6P4h+9kytVqyEtyZ6gsiwEYw==" + }, + "core-js-compat": { + "version": "3.20.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.20.2.tgz", + "integrity": "sha512-qZEzVQ+5Qh6cROaTPFLNS4lkvQ6mBzE3R6A6EEpssj7Zr2egMHgsy4XapdifqJDGC9CBiNv7s+ejI96rLNQFdg==", + "dev": true, + "requires": { + "browserslist": "^4.19.1", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "css-declaration-sorter": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.1.4.tgz", + "integrity": "sha512-lpfkqS0fctcmZotJGhnxkIyJWvBXgpyi2wsFd4J8VB7wzyrT6Ch/3Q+FMNJpjK4gu1+GN5khOnpU2ZVKrLbhCw==", + "dev": true, + "requires": { + "timsort": "^0.3.0" + } + }, + "css-loader": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.5.1.tgz", + "integrity": "sha512-gEy2w9AnJNnD9Kuo4XAP9VflW/ujKoS9c/syO+uWMlm5igc7LysKzPXaDoR2vroROkSwsTS2tGr1yGGEbZOYZQ==", + "dev": true, + "requires": { + "icss-utils": "^5.1.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "semver": "^7.3.5" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "css-minimizer-webpack-plugin": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.3.1.tgz", + "integrity": "sha512-SHA7Hu/EiF0dOwdmV2+agvqYpG+ljlUa7Dvn1AVOmSH3N8KOERoaM9lGpstz9nGsoTjANGyUXdrxl/EwdMScRg==", + "dev": true, + "requires": { + "cssnano": "^5.0.6", + "jest-worker": "^27.0.2", + "postcss": "^8.3.5", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "ajv": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", + "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "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 + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "css-select": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", + "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^5.1.0", + "domhandler": "^4.3.0", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "css-what": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "cssnano": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.15.tgz", + "integrity": "sha512-ppZsS7oPpi2sfiyV5+i+NbB/3GtQ+ab2Vs1azrZaXWujUSN4o+WdTxlCZIMcT9yLW3VO/5yX3vpyDaQ1nIn8CQ==", + "dev": true, + "requires": { + "cssnano-preset-default": "^5.1.10", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + } + }, + "cssnano-preset-default": { + "version": "5.1.10", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.10.tgz", + "integrity": "sha512-BcpSzUVygHMOnp9uG5rfPzTOCb0GAHQkqtUQx8j1oMNF9A1Q8hziOOhiM4bdICpmrBIU85BE64RD5XGYsVQZNA==", + "dev": true, + "requires": { + "css-declaration-sorter": "^6.0.3", + "cssnano-utils": "^3.0.0", + "postcss-calc": "^8.2.0", + "postcss-colormin": "^5.2.3", + "postcss-convert-values": "^5.0.2", + "postcss-discard-comments": "^5.0.1", + "postcss-discard-duplicates": "^5.0.1", + "postcss-discard-empty": "^5.0.1", + "postcss-discard-overridden": "^5.0.2", + "postcss-merge-longhand": "^5.0.4", + "postcss-merge-rules": "^5.0.4", + "postcss-minify-font-values": "^5.0.2", + "postcss-minify-gradients": "^5.0.4", + "postcss-minify-params": "^5.0.3", + "postcss-minify-selectors": "^5.1.1", + "postcss-normalize-charset": "^5.0.1", + "postcss-normalize-display-values": "^5.0.2", + "postcss-normalize-positions": "^5.0.2", + "postcss-normalize-repeat-style": "^5.0.2", + "postcss-normalize-string": "^5.0.2", + "postcss-normalize-timing-functions": "^5.0.2", + "postcss-normalize-unicode": "^5.0.2", + "postcss-normalize-url": "^5.0.4", + "postcss-normalize-whitespace": "^5.0.2", + "postcss-ordered-values": "^5.0.3", + "postcss-reduce-initial": "^5.0.2", + "postcss-reduce-transforms": "^5.0.2", + "postcss-svgo": "^5.0.3", + "postcss-unique-selectors": "^5.0.2" + } + }, + "cssnano-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.0.0.tgz", + "integrity": "sha512-Pzs7/BZ6OgT+tXXuF12DKR8SmSbzUeVYCtMBbS8lI0uAm3mrYmkyqCXXPsQESI6kmLfEVBppbdVY/el3hg3nAA==", + "dev": true, + "requires": {} + }, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "requires": { + "css-tree": "^1.1.2" + } + }, + "csstype": { + "version": "2.6.19", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.19.tgz", + "integrity": "sha512-ZVxXaNy28/k3kJg0Fou5MiYpp88j7H9hLZp8PDC3jV0WFjfH5E9xHb56L0W59cPbKbcHXeP4qyT8PrHp8t6LcQ==" + }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, + "default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "requires": { + "execa": "^5.0.0" + }, + "dependencies": { + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "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" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "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, + "requires": { + "path-key": "^3.0.0" + } + } + } + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "del": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", + "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", + "dev": true, + "requires": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "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, + "requires": { + "path-type": "^4.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", + "dev": true, + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "^1.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "requires": { + "utila": "~0.4" + } + }, + "dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true + }, + "domhandler": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "dev": true + }, + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "easy-stack": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/easy-stack/-/easy-stack-1.0.1.tgz", + "integrity": "sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==", + "dev": true + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.45", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.45.tgz", + "integrity": "sha512-czF9eYVuOmlY/vxyMQz2rGlNSjZpxNQYBe1gmQv7al171qOIhgyO9k7D5AKlgeTCSPKk+LHhj5ZyIdmEub9oNg==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", + "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "dependencies": { + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + } + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "error-stack-parser": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", + "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", + "dev": true, + "requires": { + "stackframe": "^1.1.1" + } + }, + "es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.6.0.tgz", + "integrity": "sha512-UvxdOJ7mXFlw7iuHZA4jmzPaUqIw54mZrv+XPYKNbKdLR0et4rf60lIZUU9kiNtnzzMzGWxMV+tQ7uG7JG8DPw==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.0.5", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.0", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.1.0", + "espree": "^9.3.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.2.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint-scope": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", + "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "globals": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "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 + }, + "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 + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } + } + }, + "eslint-config-prettier": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "dev": true, + "requires": {} + }, + "eslint-plugin-prettier": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz", + "integrity": "sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-plugin-vue": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-8.3.0.tgz", + "integrity": "sha512-IIuLHw4vQxGlHcoP2dG6t/2OVdQf2qoyAzEGAxreU1afZOHGA7y3TWq8I+r3ZA6Wjs6xpeUWGHlT31QGr9Rb5g==", + "dev": true, + "peer": true, + "requires": { + "eslint-utils": "^3.0.0", + "natural-compare": "^1.4.0", + "semver": "^7.3.5", + "vue-eslint-parser": "^8.0.1" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "peer": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", + "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", + "dev": true + }, + "eslint-webpack-plugin": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.1.1.tgz", + "integrity": "sha512-xSucskTN9tOkfW7so4EaiFIkulWLXwCB/15H917lR6pTv0Zot6/fetFucmENRb7J5whVSFKIvwnrnsa78SG2yg==", + "dev": true, + "requires": { + "@types/eslint": "^7.28.2", + "jest-worker": "^27.3.1", + "micromatch": "^4.0.4", + "normalize-path": "^3.0.0", + "schema-utils": "^3.1.1" + }, + "dependencies": { + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "espree": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", + "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", + "dev": true, + "requires": { + "acorn": "^8.7.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.1.0" + } + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "event-pubsub": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/event-pubsub/-/event-pubsub-4.3.0.tgz", + "integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "express": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.2.tgz", + "integrity": "sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg==", + "dev": true, + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.4.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.9.6", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.17.2", + "serve-static": "1.14.2", + "setprototypeof": "1.2.0", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "fast-glob": { + "version": "3.2.10", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.10.tgz", + "integrity": "sha512-s9nFhFnvR63wls6/kM88kQqDhMu0AfdjqouE2l5GVQPbqLgyFjjU5ry/r2yKsJxpb9Py1EYNqieFrmMaX4v++A==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", + "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", + "dev": true + }, + "follow-redirects": { + "version": "1.14.7", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz", + "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==", + "dev": true + }, + "fork-ts-checker-webpack-plugin": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.0.tgz", + "integrity": "sha512-cS178Y+xxtIjEUorcHddKS7yCMlrDPV31mt47blKKRfMd70Kxu5xruAFE2o9sDY6wVC5deuob/u/alD04YYHnw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "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 + }, + "schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true + }, + "fraction.js": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.2.tgz", + "integrity": "sha512-o2RiJQ6DZaR/5+Si0qJUIy637QMRudSi9kU/FFzx9EZazrIdnBgpU+3sEWCxAVhH2RtxW2Oz+T4p2o8uOPVcgA==", + "dev": true + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "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 + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true + }, + "gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dev": true, + "requires": { + "duplexer": "^0.1.2" + } + }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", + "dev": true + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "dev": true + }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + }, + "dependencies": { + "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, + "requires": { + "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" + } + }, + "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" + } + } + } + }, + "html-entities": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", + "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==", + "dev": true + }, + "html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dev": true, + "requires": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + } + }, + "html-tags": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", + "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", + "dev": true + }, + "html-webpack-plugin": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", + "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", + "dev": true, + "requires": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "dependencies": { + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + } + } + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + } + }, + "http-parser-js": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.5.tgz", + "integrity": "sha512-x+JVEkO2PoM8qqpbPbOL3cqHPwerep7OwzK7Ay+sMQjKzaKCqWvjoXm5tqMP9tXWWTnTzAjIhXg+J99XYuPhPA==", + "dev": true + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.1.tgz", + "integrity": "sha512-cfaXRVoZxSed/BmkA7SwBVNI9Kj7HFltaE5rqYOub5kWzWZ+gofV2koVN1j2rMW7pEfSSlCHGJ31xmuyFyfLOg==", + "dev": true, + "requires": { + "@types/http-proxy": "^1.17.5", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + } + }, + "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 + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "requires": {} + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "immutable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz", + "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ipaddr.js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", + "dev": true + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "dev": true, + "requires": { + "ci-info": "^1.5.0" + } + }, + "is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-file-esm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-file-esm/-/is-file-esm-1.0.0.tgz", + "integrity": "sha512-rZlaNKb4Mr8WlRu2A9XdeoKgnO5aA53XdPHgCKVyCrQ/rWi89RET1+bq37Ru46obaQXeiX4vmFIm1vks41hoSA==", + "dev": true, + "requires": { + "read-pkg-up": "^7.0.1" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-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 + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, + "is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true + }, + "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, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "javascript-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz", + "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==", + "dev": true + }, + "jest-worker": { + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.6.tgz", + "integrity": "sha512-gHWJF/6Xi5CTG5QCvROr6GcmpIqNYpDJyc8A1h/DyXqH1tD6SnRCM0d3U5msV31D2LB/U+E0M+W4oyvKV44oNw==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "joi": { + "version": "17.5.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.5.0.tgz", + "integrity": "sha512-R7hR50COp7StzLnDi4ywOXHrBrgNXuUUfJWIR5lPY5Bm/pOD3jZaTwpluUXVLRWcoWZxkrHBBJ5hLxgnlehbdw==", + "dev": true, + "requires": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.3", + "@sideway/formula": "^3.0.0", + "@sideway/pinpoint": "^2.0.0" + } + }, + "js-message": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.7.tgz", + "integrity": "sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==", + "dev": true + }, + "js-queue": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/js-queue/-/js-queue-2.0.2.tgz", + "integrity": "sha512-pbKLsbCfi7kriM3s1J4DDCo7jQkI58zPLHi0heXPzPlj0hjUsm+FesPUbE0DSbIVIK503A36aUBoCN7eMFedkA==", + "dev": true, + "requires": { + "easy-stack": "^1.0.1" + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "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 + }, + "klona": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", + "dev": true + }, + "launch-editor": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.3.0.tgz", + "integrity": "sha512-3QrsCXejlWYHjBPFXTyGNhPj4rrQdB+5+r5r3wArpLH201aR+nWUgw/zKKkTmilCfY/sv6u8qo98pNvtg8LUTA==", + "dev": true, + "requires": { + "picocolors": "^1.0.0", + "shell-quote": "^1.6.1" + } + }, + "launch-editor-middleware": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/launch-editor-middleware/-/launch-editor-middleware-2.3.0.tgz", + "integrity": "sha512-GJR64trLdFFwCoL9DMn/d1SZX0OzTDPixu4mcfWTShQ4tIqCHCGvlg9fOEYQXyBlrSMQwylsJfUWncheShfV2w==", + "dev": true, + "requires": { + "launch-editor": "^2.3.0" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lilconfig": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz", + "integrity": "sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==", + "dev": true + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "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 + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "lodash.defaultsdeep": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz", + "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==", + "dev": true + }, + "lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=", + "dev": true + }, + "lodash.mapvalues": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", + "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "log-update": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", + "integrity": "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "cli-cursor": "^2.0.0", + "wrap-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", + "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0" + } + } + } + }, + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "requires": { + "tslib": "^2.0.3" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "memfs": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.1.tgz", + "integrity": "sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw==", + "dev": true, + "requires": { + "fs-monkey": "1.0.3" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "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 + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "dev": true + }, + "mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "dev": true, + "requires": { + "mime-db": "1.51.0" + } + }, + "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 + }, + "mini-css-extract-plugin": { + "version": "2.4.7", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.4.7.tgz", + "integrity": "sha512-euWmddf0sk9Nv1O0gfeeUAvAkoSlWncNLF77C0TP2+WoPvy8mAHKOzMajcCz2dzvyt3CNgxb1obIEVFIRxaipg==", + "dev": true, + "requires": { + "schema-utils": "^4.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", + "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "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 + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + } + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "module-alias": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.2.2.tgz", + "integrity": "sha512-A/78XjoX2EmNvppVWEhM2oGk3x4lLxnkEA4jTbaK97QKSDjkIoOsKQlfylt/d3kKKi596Qy3NP5XrXJ6fZIC9Q==", + "dev": true + }, + "mrmime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.0.tgz", + "integrity": "sha512-a70zx7zFfVO7XpnQ2IX1Myh9yY4UYvfld/dikWRnsXxbyvMcfz+u6UfgNAtH+k2QqtJuzVpv6eLTx1G2+WKZbQ==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "requires": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "nanoevents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/nanoevents/-/nanoevents-6.0.2.tgz", + "integrity": "sha512-FRS2otuFcPPYDPYViNWQ42+1iZqbXydinkRHTHFxrF4a1CpBfmydR9zkI44WSXAXCyPrkcGtPk5CnpW6Y3lFKQ==" + }, + "nanoid": { + "version": "3.1.32", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.32.tgz", + "integrity": "sha512-F8mf7R3iT9bvThBoW4tGXhXFHCctyCiUUPrWF8WaTqa3h96d9QybkSeba43XVOOE3oiLfkVDe4bT8MeGmkrTxw==" + }, + "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 + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "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 + }, + "ngraph.events": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ngraph.events/-/ngraph.events-1.2.1.tgz", + "integrity": "sha512-D4C+nXH/RFxioGXQdHu8ELDtC6EaCiNsZtih0IvyGN81OZSUby4jXoJ5+RNWasfsd0FnKxxpAROyUMzw64QNsw==" + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node-fetch": { + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", + "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "node-forge": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.2.1.tgz", + "integrity": "sha512-Fcvtbb+zBcZXbTTVwqGA5W+MKBj56UjVRevvchv5XrcyXbmNdesfZL37nlcWOfpgHhgmxApw3tQbTr4CqNmX4w==", + "dev": true + }, + "node-ipc": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/node-ipc/-/node-ipc-9.2.1.tgz", + "integrity": "sha512-mJzaM6O3xHf9VT8BULvJSbdVbmHUKRNOH7zDDkCrA1/T+CVjq2WVIDfLt0azZRXpgArJtl3rtmEozrbXPZ9GaQ==", + "dev": true, + "requires": { + "event-pubsub": "4.3.0", + "js-message": "1.0.7", + "js-queue": "2.0.2" + } + }, + "node-releases": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + }, + "dependencies": { + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + } + } + }, + "nth-check": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "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 + }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "requires": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-retry": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", + "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==", + "dev": true, + "requires": { + "@types/retry": "^0.12.0", + "retry": "^0.13.1" + } + }, + "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 + }, + "panzoom": { + "version": "9.4.2", + "resolved": "https://registry.npmjs.org/panzoom/-/panzoom-9.4.2.tgz", + "integrity": "sha512-sQLr0t6EmNFXpZHag0HQVtOKqF9xjF7iZdgWg3Ss1o7uh2QZLvcrz7S0Cl8M0d2TkPZ69JfPJdknXN3I0e/2aQ==", + "requires": { + "amator": "^1.1.0", + "ngraph.events": "^1.2.1", + "wheel": "^1.0.0" + } + }, + "param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + }, + "parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "requires": { + "parse5": "^6.0.1" + }, + "dependencies": { + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + } + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "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 + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "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, + "requires": { + "find-up": "^4.0.0" + } + }, + "portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "postcss": { + "version": "8.4.5", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz", + "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==", + "requires": { + "nanoid": "^3.1.30", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.1" + } + }, + "postcss-calc": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.2.tgz", + "integrity": "sha512-B5R0UeB4zLJvxNt1FVCaDZULdzsKLPc6FhjFJ+xwFiq7VG4i9cuaJLxVjNtExNK8ocm3n2o4unXXLiVX1SCqxA==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + } + }, + "postcss-colormin": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.3.tgz", + "integrity": "sha512-dra4xoAjub2wha6RUXAgadHEn2lGxbj8drhFcIGLOMn914Eu7DkPUurugDXgstwttCYkJtZ/+PkWRWdp3UHRIA==", + "dev": true, + "requires": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-convert-values": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.2.tgz", + "integrity": "sha512-KQ04E2yadmfa1LqXm7UIDwW1ftxU/QWZmz6NKnHnUvJ3LEYbbcX6i329f/ig+WnEByHegulocXrECaZGLpL8Zg==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-discard-comments": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz", + "integrity": "sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==", + "dev": true, + "requires": {} + }, + "postcss-discard-duplicates": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.1.tgz", + "integrity": "sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==", + "dev": true, + "requires": {} + }, + "postcss-discard-empty": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.1.tgz", + "integrity": "sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==", + "dev": true, + "requires": {} + }, + "postcss-discard-overridden": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.2.tgz", + "integrity": "sha512-+56BLP6NSSUuWUXjRgAQuho1p5xs/hU5Sw7+xt9S3JSg+7R6+WMGnJW7Hre/6tTuZ2xiXMB42ObkiZJ2hy/Pew==", + "dev": true, + "requires": {} + }, + "postcss-loader": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", + "dev": true, + "requires": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.5" + }, + "dependencies": { + "cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "postcss-merge-longhand": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.4.tgz", + "integrity": "sha512-2lZrOVD+d81aoYkZDpWu6+3dTAAGkCKbV5DoRhnIR7KOULVrI/R7bcMjhrH9KTRy6iiHKqmtG+n/MMj1WmqHFw==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.1.0", + "stylehacks": "^5.0.1" + } + }, + "postcss-merge-rules": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.4.tgz", + "integrity": "sha512-yOj7bW3NxlQxaERBB0lEY1sH5y+RzevjbdH4DBJurjKERNpknRByFNdNe+V72i5pIZL12woM9uGdS5xbSB+kDQ==", + "dev": true, + "requires": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.0.0", + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-minify-font-values": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.2.tgz", + "integrity": "sha512-R6MJZryq28Cw0AmnyhXrM7naqJZZLoa1paBltIzh2wM7yb4D45TLur+eubTQ4jCmZU9SGeZdWsc5KcSoqTMeTg==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-gradients": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.4.tgz", + "integrity": "sha512-RVwZA7NC4R4J76u8X0Q0j+J7ItKUWAeBUJ8oEEZWmtv3Xoh19uNJaJwzNpsydQjk6PkuhRrK+YwwMf+c+68EYg==", + "dev": true, + "requires": { + "colord": "^2.9.1", + "cssnano-utils": "^3.0.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-params": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.3.tgz", + "integrity": "sha512-NY92FUikE+wralaiVexFd5gwb7oJTIDhgTNeIw89i1Ymsgt4RWiPXfz3bg7hDy4NL6gepcThJwOYNtZO/eNi7Q==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.2", + "browserslist": "^4.16.6", + "cssnano-utils": "^3.0.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.1.tgz", + "integrity": "sha512-TOzqOPXt91O2luJInaVPiivh90a2SIK5Nf1Ea7yEIM/5w+XA5BGrZGUSW8aEx9pJ/oNj7ZJBhjvigSiBV+bC1Q==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.2", + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "requires": {} + }, + "postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-normalize-charset": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.1.tgz", + "integrity": "sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==", + "dev": true, + "requires": {} + }, + "postcss-normalize-display-values": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.2.tgz", + "integrity": "sha512-RxXoJPUR0shSjkMMzgEZDjGPrgXUVYyWA/YwQRicb48H15OClPuaDR7tYokLAlGZ2tCSENEN5WxjgxSD5m4cUw==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-positions": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.2.tgz", + "integrity": "sha512-tqghWFVDp2btqFg1gYob1etPNxXLNh3uVeWgZE2AQGh6b2F8AK2Gj36v5Vhyh+APwIzNjmt6jwZ9pTBP+/OM8g==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-repeat-style": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.2.tgz", + "integrity": "sha512-/rIZn8X9bBzC7KvY4iKUhXUGW3MmbXwfPF23jC9wT9xTi7kAvgj8sEgwxjixBmoL6MVa4WOgxNz2hAR6wTK8tw==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-string": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.2.tgz", + "integrity": "sha512-zaI1yzwL+a/FkIzUWMQoH25YwCYxi917J4pYm1nRXtdgiCdnlTkx5eRzqWEC64HtRa06WCJ9TIutpb6GmW4gFw==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-timing-functions": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.2.tgz", + "integrity": "sha512-Ao0PP6MoYsRU1LxeVUW740ioknvdIUmfr6uAA3xWlQJ9s69/Tupy8qwhuKG3xWfl+KvLMAP9p2WXF9cwuk/7Bg==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-unicode": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.2.tgz", + "integrity": "sha512-3y/V+vjZ19HNcTizeqwrbZSUsE69ZMRHfiiyLAJb7C7hJtYmM4Gsbajy7gKagu97E8q5rlS9k8FhojA8cpGhWw==", + "dev": true, + "requires": { + "browserslist": "^4.16.6", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-url": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.4.tgz", + "integrity": "sha512-cNj3RzK2pgQQyNp7dzq0dqpUpQ/wYtdDZM3DepPmFjCmYIfceuD9VIAcOdvrNetjIU65g1B4uwdP/Krf6AFdXg==", + "dev": true, + "requires": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-whitespace": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.2.tgz", + "integrity": "sha512-CXBx+9fVlzSgbk0IXA/dcZn9lXixnQRndnsPC5ht3HxlQ1bVh77KQDL1GffJx1LTzzfae8ftMulsjYmO2yegxA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-ordered-values": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.3.tgz", + "integrity": "sha512-T9pDS+P9bWeFvqivXd5ACzQmrCmHjv3ZP+djn8E1UZY7iK79pFSm7i3WbKw2VSmFmdbMm8sQ12OPcNpzBo3Z2w==", + "dev": true, + "requires": { + "cssnano-utils": "^3.0.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-reduce-initial": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.2.tgz", + "integrity": "sha512-v/kbAAQ+S1V5v9TJvbGkV98V2ERPdU6XvMcKMjqAlYiJ2NtsHGlKYLPjWWcXlaTKNxooId7BGxeraK8qXvzKtw==", + "dev": true, + "requires": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.2.tgz", + "integrity": "sha512-25HeDeFsgiPSUx69jJXZn8I06tMxLQJJNF5h7i9gsUg8iP4KOOJ8EX8fj3seeoLt3SLU2YDD6UPnDYVGUO7DEA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-selector-parser": { + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.8.tgz", + "integrity": "sha512-D5PG53d209Z1Uhcc0qAZ5U3t5HagH3cxu+WLZ22jt3gLUpXM4eXXfiO14jiDWST3NNooX/E8wISfOhZ9eIjGTQ==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-svgo": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.3.tgz", + "integrity": "sha512-41XZUA1wNDAZrQ3XgWREL/M2zSw8LJPvb5ZWivljBsUQAGoEKMYm6okHsTjJxKYI4M75RQEH4KYlEM52VwdXVA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.1.0", + "svgo": "^2.7.0" + } + }, + "postcss-unique-selectors": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.2.tgz", + "integrity": "sha512-w3zBVlrtZm7loQWRPVC0yjUwwpty7OM6DnEHkxcSQXO1bMS3RJ+JUS5LFMSDZHJcvGsRwhZinCWVqn8Kej4EDA==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.2", + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prettier": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "dev": true + }, + "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, + "requires": { + "fast-diff": "^1.1.2" + } + }, + "pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dev": true, + "requires": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "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 + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "progress-webpack-plugin": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/progress-webpack-plugin/-/progress-webpack-plugin-1.0.12.tgz", + "integrity": "sha512-b0dMK6D7pFicDzSdh+sU0p/gp3n5QAGwjPbgacmYB/eVQpayzf9lKTQLYMnTAbk69fKoXSoVNl/+IkobJblL1A==", + "dev": true, + "requires": { + "chalk": "^2.1.0", + "figures": "^2.0.0", + "log-update": "^2.1.0" + } + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "dependencies": { + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + } + } + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "qs": { + "version": "6.9.6", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", + "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", + "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", + "dev": true, + "requires": { + "bytes": "3.1.1", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", + "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", + "dev": true + } + } + }, + "raw-loader": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", + "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "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 + } + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz", + "integrity": "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "dev": true + }, + "regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regexp.prototype.flags": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.0.tgz", + "integrity": "sha512-OE85RadmCYZJzYgIcWd2Qum/wJ20WwY5Z6Bfv5FeBPU46uPD01s3pe2LNoi0etmr83ibsFidC0ZiKXmPY5UpmQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "regexpu-core": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz", + "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==", + "dev": true, + "requires": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^9.0.0", + "regjsgen": "^0.5.2", + "regjsparser": "^0.7.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + } + }, + "regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "dev": true + }, + "regjsparser": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz", + "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true + }, + "renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dev": true, + "requires": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-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 + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", + "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==", + "dev": true, + "requires": { + "is-core-module": "^2.8.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "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 + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "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 + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sass": { + "version": "1.48.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.48.0.tgz", + "integrity": "sha512-hQi5g4DcfjcipotoHZ80l7GNJHGqQS5LwMBjVYB/TaT0vcSSpbgM8Ad7cgfsB2M0MinbkEQQPO9+sjjSiwxqmw==", + "dev": true, + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, + "sass-loader": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.2.0.tgz", + "integrity": "sha512-kUceLzC1gIHz0zNJPpqRsJyisWatGYNFRmv2CKZK2/ngMJgLqxTbXwe/hJ85luyvZkgqU3VlJ33UVF2T/0g6mw==", + "dev": true, + "requires": { + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0", + "semver": "^7.3.2" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selfsigned": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.0.tgz", + "integrity": "sha512-cUdFiCbKoa1mZ6osuJs2uDHrs0k0oprsKveFiiaBKCNq3SYyb5gs2HxhQyDNLCmL51ZZThqi4YNDpCK6GOP1iQ==", + "dev": true, + "requires": { + "node-forge": "^1.2.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "send": { + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "1.8.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.2" + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "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, + "requires": { + "kind-of": "^6.0.2" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "shell-quote": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", + "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", + "dev": true + }, + "signal-exit": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", + "dev": true + }, + "sirv": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", + "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", + "dev": true, + "requires": { + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^1.0.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "sortablejs": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.14.0.tgz", + "integrity": "sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.1.tgz", + "integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==" + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "dev": true + }, + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "stackframe": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz", + "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==", + "dev": true + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-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 + }, + "strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "stylehacks": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.1.tgz", + "integrity": "sha512-Es0rVnHIqbWzveU1b24kbw92HsebBepxfcqe5iix7t9j0PQqhs0IxXVXv0pY2Bxa08CgMkzD6OWql7kbGOuEdA==", + "dev": true, + "requires": { + "browserslist": "^4.16.0", + "postcss-selector-parser": "^6.0.4" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=", + "dev": true + }, + "svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "requires": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + } + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true + }, + "terser": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", + "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "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 + }, + "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 + } + } + }, + "terser-webpack-plugin": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.0.tgz", + "integrity": "sha512-LPIisi3Ol4chwAaPP8toUJ3L4qCM1G0wao7L3qNv57Drezxj6+VEyySpPw4B1HSO2Eg/hDY/MNF5XihCAoqnsQ==", + "dev": true, + "requires": { + "jest-worker": "^27.4.1", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.2" + }, + "dependencies": { + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "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 + } + } + }, + "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 + }, + "thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "dev": true, + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, + "thread-loader": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/thread-loader/-/thread-loader-3.0.4.tgz", + "integrity": "sha512-ByaL2TPb+m6yArpqQUZvP+5S1mZtXsEP7nWKKlAUTm7fCml8kB5s1uI3+eHRP2bk5mVYfRSBI7FFf+tWEyLZwA==", + "dev": true, + "requires": { + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.1.0", + "loader-utils": "^2.0.0", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true + }, + "totalist": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", + "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", + "dev": true + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "dev": true + }, + "ts-loader": { + "version": "9.2.6", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.2.6.tgz", + "integrity": "sha512-QMTC4UFzHmu9wU2VHZEmWWE9cUajjfcdcws+Gh7FhiO+Dy0RnR1bNz0YCHqhI0yRowCE9arVnNxYHqELOy9Hjw==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "tsconfig-paths": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", + "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "tsconfig-paths-webpack-plugin": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-3.5.2.tgz", + "integrity": "sha512-EhnfjHbzm5IYI9YPNVIxx1moxMI4bpHD2e0zTXeDNQcwjjRaGepP7IhTHJkyDBG0CAOoxRfe7jCG630Ou+C6Pw==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.7.0", + "tsconfig-paths": "^3.9.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typescript": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", + "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", + "dev": true + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", + "dev": true + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "vue": { + "version": "3.2.26", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.26.tgz", + "integrity": "sha512-KD4lULmskL5cCsEkfhERVRIOEDrfEL9CwAsLYpzptOGjaGFNWo3BQ9g8MAb7RaIO71rmVOziZ/uEN/rHwcUIhg==", + "requires": { + "@vue/compiler-dom": "3.2.26", + "@vue/compiler-sfc": "3.2.26", + "@vue/runtime-dom": "3.2.26", + "@vue/server-renderer": "3.2.26", + "@vue/shared": "3.2.26" + } + }, + "vue-eslint-parser": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-8.0.1.tgz", + "integrity": "sha512-lhWjDXJhe3UZw2uu3ztX51SJAPGPey1Tff2RK3TyZURwbuI4vximQLzz4nQfCv8CZq4xx7uIiogHMMoSJPr33A==", + "dev": true, + "requires": { + "debug": "^4.3.2", + "eslint-scope": "^6.0.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.5" + }, + "dependencies": { + "eslint-scope": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-6.0.0.tgz", + "integrity": "sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "vue-hot-reload-api": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", + "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==", + "dev": true + }, + "vue-loader": { + "version": "16.8.3", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.3.tgz", + "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "hash-sum": "^2.0.0", + "loader-utils": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "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 + }, + "loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "vue-next-select": { + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/vue-next-select/-/vue-next-select-2.10.2.tgz", + "integrity": "sha512-uHauEecNQLlazfDwkuLf1cGcU/gH+stgNpTWwXKfafjDAw9VxjAqZ7AYDZvhNB3IpbnOf0qbn6zQ00JvqFQBBQ==", + "requires": {} + }, + "vue-panzoom": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/vue-panzoom/-/vue-panzoom-1.1.6.tgz", + "integrity": "sha512-yEE60C/gnc5NGL6YBD++CErD820va7fkBJE5dCWZZzXX2aMGklj/UKmtqu1u5xDkuOIjnGUr412LNHwOOE711w==", + "requires": { + "panzoom": "^9.4.1" + } + }, + "vue-style-loader": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz", + "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==", + "dev": true, + "requires": { + "hash-sum": "^1.0.2", + "loader-utils": "^1.0.2" + }, + "dependencies": { + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + } + } + }, + "vue-template-es2015-compiler": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", + "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", + "dev": true + }, + "vue-textarea-autosize": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vue-textarea-autosize/-/vue-textarea-autosize-1.1.1.tgz", + "integrity": "sha512-B33Mg5ZDEfj/whhoPBLg25qqAdGHGM2NjDT99Qi5MXRyeLmXb4C3s6EprAHqy3nU0cooWXFU+IekI5DpoEbnFg==", + "requires": { + "core-js": "^2.6.5" + }, + "dependencies": { + "core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" + } + } + }, + "vue-toastification": { + "version": "2.0.0-rc.5", + "resolved": "https://registry.npmjs.org/vue-toastification/-/vue-toastification-2.0.0-rc.5.tgz", + "integrity": "sha512-q73e5jy6gucEO/U+P48hqX+/qyXDozAGmaGgLFm5tXX4wJBcVsnGp4e/iJqlm9xzHETYOilUuwOUje2Qg1JdwA==", + "requires": {} + }, + "vue-transition-expand": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/vue-transition-expand/-/vue-transition-expand-0.1.0.tgz", + "integrity": "sha512-4UKkK/ILk+Qh3WWJoupt7pXfzpjvb7vTQTaVUhnkr+FeXArndJVDyIn2eWIn7i37cVFXKu2jsDR47QELOCq/gQ==", + "requires": { + "vue": "^2.5.16" + }, + "dependencies": { + "vue": { + "version": "2.6.14", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.14.tgz", + "integrity": "sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ==" + } + } + }, + "vuedraggable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-4.1.0.tgz", + "integrity": "sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==", + "requires": { + "sortablejs": "1.14.0" + } + }, + "watchpack": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", + "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "dev": true + }, + "webpack": { + "version": "5.66.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.66.0.tgz", + "integrity": "sha512-NJNtGT7IKpGzdW7Iwpn/09OXz9inIkeIQ/ibY6B+MdV1x6+uReqz/5z1L89ezWnpPDWpXF0TY5PCYKQdWVn8Vg==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.50", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.8.3", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "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.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.3.1", + "webpack-sources": "^3.2.2" + }, + "dependencies": { + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + } + } + }, + "webpack-bundle-analyzer": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.5.0.tgz", + "integrity": "sha512-GUMZlM3SKwS8Z+CKeIFx7CVoHn3dXFcUAjT/dcZQQmfSZGvitPfMob2ipjai7ovFFqPvTqkEZ/leL4O0YOdAYQ==", + "dev": true, + "requires": { + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "chalk": "^4.1.0", + "commander": "^7.2.0", + "gzip-size": "^6.0.0", + "lodash": "^4.17.20", + "opener": "^1.5.2", + "sirv": "^1.0.7", + "ws": "^7.3.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "webpack-chain": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/webpack-chain/-/webpack-chain-6.5.1.tgz", + "integrity": "sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA==", + "dev": true, + "requires": { + "deepmerge": "^1.5.2", + "javascript-stringify": "^2.0.1" + }, + "dependencies": { + "deepmerge": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz", + "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==", + "dev": true + } + } + }, + "webpack-dev-middleware": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.0.tgz", + "integrity": "sha512-MouJz+rXAm9B1OTOYaJnn6rtD/lWZPy2ufQCH3BPs8Rloh/Du6Jze4p7AeLYHkVi0giJnYLaSGDC7S+GM9arhg==", + "dev": true, + "requires": { + "colorette": "^2.0.10", + "memfs": "^3.2.2", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", + "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "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 + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + } + } + }, + "webpack-dev-server": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.7.3.tgz", + "integrity": "sha512-mlxq2AsIw2ag016nixkzUkdyOE8ST2GTy34uKSABp1c4nhjZvH90D5ZRR+UOLSsG4Z3TFahAi72a3ymRtfRm+Q==", + "dev": true, + "requires": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/serve-index": "^1.9.1", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.2.2", + "ansi-html-community": "^0.0.8", + "bonjour": "^3.5.0", + "chokidar": "^3.5.2", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "default-gateway": "^6.0.3", + "del": "^6.0.0", + "express": "^4.17.1", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.0", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "portfinder": "^1.0.28", + "schema-utils": "^4.0.0", + "selfsigned": "^2.0.0", + "serve-index": "^1.9.1", + "sockjs": "^0.3.21", + "spdy": "^4.0.2", + "strip-ansi": "^7.0.0", + "webpack-dev-middleware": "^5.3.0", + "ws": "^8.1.0" + }, + "dependencies": { + "ajv": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", + "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "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 + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "ws": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.4.1.tgz", + "integrity": "sha512-6eqQ4yN2y2xv8b+BgbkUzPPyfo/PDl3VOWb06ZE0jIFYwuHMsMQN6F7o84yxJYCblfCRAxzpU59We4Rr4w0Luw==", + "dev": true, + "requires": {} + } + } + }, + "webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + } + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true + }, + "webpack-virtual-modules": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.4.3.tgz", + "integrity": "sha512-5NUqC2JquIL2pBAAo/VfBP6KuGkHIZQXW/lNKupLPfhViwh8wNsu0BObtl09yuKZszeEUfbXz8xhrHvSG16Nqw==", + "dev": true + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true + }, + "whatwg-fetch": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", + "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", + "dev": true + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "wheel": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wheel/-/wheel-1.0.0.tgz", + "integrity": "sha512-XiCMHibOiqalCQ+BaNSwRoZ9FDTAvOsXxGHXChBugewDj7HC8VBIER71dEOiRH1fSdLbRCQzngKTSiZ06ZQzeA==" + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, + "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 + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "ws": { + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz", + "integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==", + "dev": true, + "requires": {} + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + }, + "yorkie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yorkie/-/yorkie-2.0.0.tgz", + "integrity": "sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw==", + "dev": true, + "requires": { + "execa": "^0.8.0", + "is-ci": "^1.0.10", + "normalize-path": "^1.0.0", + "strip-indent": "^2.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", + "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "normalize-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz", + "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..e3aacfb --- /dev/null +++ b/package.json @@ -0,0 +1,58 @@ +{ + "name": "profectus", + "version": "0.1.0", + "private": true, + "scripts": { + "serve": "vue-cli-service serve", + "build": "vue-cli-service build", + "lint": "vue-cli-service lint" + }, + "dependencies": { + "core-js": "^3.6.5", + "lodash.clonedeep": "^4.5.0", + "nanoevents": "^6.0.2", + "vue": "^3.2.26", + "vue-next-select": "^2.10.2", + "vue-panzoom": "^1.1.6", + "vue-textarea-autosize": "^1.1.1", + "vue-toastification": "^2.0.0-rc.1", + "vue-transition-expand": "^0.1.0", + "vuedraggable": "^4.1.0" + }, + "devDependencies": { + "@ivanv/vue-collapse-transition": "^1.0.2", + "@jetblack/operator-overloading": "^0.2.0", + "@rushstack/eslint-patch": "^1.1.0", + "@types/lodash.clonedeep": "^4.5.6", + "@vue/babel-plugin-jsx": "^1.1.1", + "@vue/cli-plugin-babel": "~5.0.0-rc.1", + "@vue/cli-plugin-eslint": "~5.0.0-rc.1", + "@vue/cli-plugin-typescript": "~5.0.0-rc.1", + "@vue/cli-service": "~5.0.0-rc.1", + "@vue/compiler-sfc": "^3.2.26", + "@vue/eslint-config-prettier": "^7.0.0", + "@vue/eslint-config-typescript": "^10.0.0", + "babel-eslint": "^10.1.0", + "eslint": "^8.6.0", + "prettier": "^2.5.1", + "raw-loader": "^4.0.2", + "sass": "^1.48.0", + "sass-loader": "^10.2.0", + "tsconfig-paths-webpack-plugin": "^3.5.1", + "typescript": "^4.5.4" + }, + "browserslist": [ + "> 1%", + "last 2 versions", + "not dead" + ], + "gitHooks": { + "pre-commit": "lint-staged" + }, + "lint-staged": { + "*.{js,jsx,ts,tsx,vue}": [ + "vue-cli-service lint", + "git add" + ] + } +} diff --git a/public/Logo.png b/public/Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..53973a75569fb0a946da2fbe3c7063beb265e198 GIT binary patch literal 19395 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 literal 0 HcmV?d00001 diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..00eaafdb4af6e9b81a77e3da4498ee57ed494117 GIT binary patch literal 10696 zcmYLPRa6{Zvz=jZcXtnNL53i~Wzb;3U4y$@a6)i*x1b5`?(QL22=4Cu!*?IXC_;2|bzz!G*(R-zC%<@EN}SMBbPA zqP`A&4PZFMg&ze+$?H~DQsBL)P3WQoY7v;~1}UdlvW{ukhJ}FO2^~OSA2hNTH{QP+ z!mMJ3aR7*R%iMegR_6@SnLNOHkRsVr4TFppq3O~fxcltXLW$KI?Jk8)KHDM!u!n8I z>N}h}`;5=gq;sJ>FXgyVeY$$ zI^7(co-_f9yw_&d9FZV=huj}UuIhdhj^$_1;6ZrRz(jynm+5?;o50k{Hulc!<=|#`*TGrnF^XOu9?izO;RN&$bkQXVk$ZnWcLsj2!0NeZaCg8>gW}Hy zm)zzuwCnc@r7WE>2O}9x`m}+I(Mr{@EYy2wx=D?8)FWri!cdrZcMelY-XEbBV+~fdK)?n9w z#%dDtLP%HQo#EYGbMNpnRtq^_Wz_^5&mU{?PbMVkBs$ZptASNjZ2STOUH$V&C*%_j zZmwT5TAg!XdS7tEGp<<~hdVmZ6D3(0PbpPQU}5d0C8&8Pe%!^_97`p&~;krP6!wKHvP zvzok`$y1OkR5Y}rR%{wg9ks(3q(oyaZbOm@=F025Oi9_KB&~$fGk#Ca3%DFa6cmuN z*(o9-Uw(wBGUl5EZ64hG@D3GoYc50|ydj7Ll+TJHb;YvzpPcyxW~a9DAkX6TZfumM z>^3&K=NFd)m-mZ?CR>7TZZ;d|&g`%V4}$NOu~JD%VA<{Y_Q;|SRCMGK6e(K6kFL0Q zRxN7}1$#EsbGP68RXN*G$zBtpge)m02m2KK;UhQ0wTHI3lahhdW;4@j%Q9CXjKy#- zW8w#_;(;(j?H-T2yH=9H1*@)q@~-^ON7#{*2ETMJ_czoj=>Ukx*8}lMoQU7APBq*u zzX`Z*Q%{&B|26mJMs;7N9iAN$nF2W{OPE;qc<_V4;ivUQMP$2NBXJ#_%9&qoq=E?m zf*r84JhBNpGhrtE$l?ck+?>Gxj6qIEcUHD(|b{~V{r{;ARd z5`htSL+Wq#S!m`4FSoL3!R`c34!~2T%GNei7O2$##_s@<8?S7mYip|oi+f+HIA8C? zYP)%1eAmd@aG-#s6NlFz`JG)j<46 z@Xo2P$M;iUkpaSf!#EdIAtBsmN*hh6w_*k@>?BJgJI%V68S6cej5G$+evqz-~dVdm^&k1x= zWQ*B~y`SK6k>19#kPc^ z)X^r|gC$|cSS>w}w`H`<>RG2e9+`F?uR zD;57L0ao0L6Y?FLM*xg;KBiCo;Rk4(MDM3k7r|I*30>6)KSt5b1Ph+Tj1!es+Y(>s z&5RD>IVUShxjLrY@CvQVGmG%R?iYocMmY_(!mRPu7o}!}-lXChP zIekII-jN8ms$*=F+j3(XsR{-<(0S^SwfvjsK`JJRDufm7tyIPEKS&BO zwlf9%7JT*em_kXUnz^EZq=V7t@zD6|*eTRg>`|N33pTm?Q)-;Vxr`Hf3xCIqGpJ

i7;``0##qXQRNjHA*RUy)F8!xU%#z7yF+_2K5Bg5vumT!Kl zz1k!!WQj>;du+%_ian^62^Ik!4Pi-LoA%0I_Mi7fS4^%6eY=R)9zP5s-~Jp$&FO7a zSSrAPj{kS0ADmIwQ0ZljU(67lV*hA<>uE~PHvN=UkQWRF@{D26Ctb5o;3Uwpaz2WT z&$n@3ywo`PV$&;SYk_9$HQQ{T;?mbUUg*83L6bgn!XL~-1X zf?+?u)K5!{GMmAqx|k>gZ2|>f7Zzvw zXjdrCx7rSdO+7qXHll1T`YUWkC7xf`-g9G$JnGb(R=Z`2YqWeO^woK(^c&>$0M^hj z$7Y0aYX}M8;4pkYG~X-H;gZbSk0R`ITVEkUj5zD(%lVhj(KzDf{_>lGvSgL}9U{{0 zu~hZa^_tbTg?jV|oSog29AM0`bnuiY<#GyV7(3S-!owMk7iQkm5l#j7RXlIyQ#>D- zn%U}p`ECT}9FP(3BkV=`^F!K`PI0ro$PRSAYE<$67m-JVQXVN$4{R&IjosTcpR*+c+_EXjj9OY zpSubo;&mrVAp@Z4mdjoLSM6AQ8B`j>x{=_+1lZu+t}5M(`b&(fVVj&R5R3y{%q@1N zD)Rk;2zmc?y43$qF1Yr@KoG<^Y(xzpxU8lE^AhH?B?Q({7f7e>O<;&{;*hVgK; zgw2uc+J-xLOE7XG;=XT+V>ozTU6C%X#`o{uhH5C`DAw|ePh=ha7)~E{hzUX7(!Iv!)B{olL-QGel ziLIlR!=A+ONoH;a)~nJuUO3d6I{nKki;X(9qycv%i(q3syoUn8MElKrktRMRK*s=6 z8IEZ07?)&hIOgR^8jJaOaO>pXgQN^>%0XCHed6_($=-`gOKLCw=DP@%andmF#Xfm! z`cnaeFQWq?&PfIP&OG1Lkpk%5fG8&!k#mp5k-nLnToy3~JxVW&$o%~Kj{9P04X?*v z2N>3#cgF0O&bEA-=PqB2uV5c#qH*R0wlZSWRhvYKE!6P} z80f_|z4T)!4j%QZc)ThN!m=9kU{T>VZ`jZA8m$j5r}EQbR^+79(f{emWIB5C-m!cj z9XC-=G5p4o(aeD@PZ1gSLI0B&1maZs^xNAXOiw>OE#a~)^dwQIyBC2yzR_OjiSrMq zV=awFIItE1UFav+d;wQ*QxYB*hP8z#Gb~^ex2A1)R6fS4flc(K%=NRO;^p|l`sZp= zZ|>~ZYt=w;quh0!S4T|Oc@u8fo<2foGS^kPf|(_ORCCyFhuv&Pn1$mfPVaDLmYR0$HL;MGQYa`LsR zrOWO#BjC_HzeH5J^V5f6!sUkrdki_VkvZ=Y8AMgBW+*xm4ChlOgC-?$-0urHG_a59r#TEOYQ_e9`|>RksYm=fgFK>yzD7tcL-jHbNh7g#*Xrj1 z#AUETI)3=P(uCLpU&zo0HEPB7&nVQjUl&-Vg&;vf#2sceZ5m9mQs{NyF>#UvI=wS7 zMZAtXMiQIs?2wE_owIAj-vof2_x`8*%P^jGe~(d@pS|fHI0ho_M@`-%b=1C!!d4om3y@NXhsl$G~$ZR!jGQZYAeEOqHyRqjfg(-dP#$Wf@l z9V8wv$v!Zy-t<>ECtn?Q=@AGH;p`vo#b9AQBgXv)f2T1Hw^|R=3`&qd^GeCIsW2@h z|DB#gFUGF?djfDjA-%0lpLW-9SseCodIP%wB&Y2zzL@T-@%1O}f4c|e8A}%iR=mu8 zz1^Bnf81t5Srobn7Enz|fjcB*8OSG!PP53fn(djnTQagG7hpxi_>dePIRo~2QE_wk zqRBEkG)QI8|1zUh1)8D=o=3`c+`n$)&~NtM&-IvFWC{L`DjQZw%ut`vdUB!%B4^H|qaHAlf^a>fuq z7Wg;bsBg@FOS(*TET(m*#DB7nyHkt$;5)0j%4U_KJ-Z{Mb2%w$m0PngzAYlCrws}N zE=4;5R7!+HgM#1M<3E@)-}`4i)0@hxe5A zDI@Zn8zZ!YU0iCnnGR7bNZGJIesHIf?Dplv#)IY%R`?f;_%`{z&_V+U8I1|_e5sY zyL)DWUVHT@3)LiFN1O7Qp9}#?`T25d$pFhvNzrUMY?rFywWV~ug(0GeMf5eGDOCy^ zGs>Fql=7=ZMEHgD^nFFpr70UMYBjUc?2*@Ho!fX@FC20H!y|+$aUK|k z_#_FQxM(3XV-sV!x;!KXijqqbCPgwcC%1|ik3soJ2}t+vqNw2-o}Ttchajzt94w&a zQzC>uM&$=~!V-y03T;0r9G6E2{ua)S*tM6bxH5m`ulwPTNtItrIcpqp%tmbJ(H z%ljGTgTs#t`k2$sfD7XV;+KW`-;dm-^p5A;=;4AQ5!q{hPIGEoJ#qqzwLS+{Vg^X( z(VIXB_>?N z6F1Z1oJvnOl0v<&-`Y@$aGFZSa~W@`{rV@K(!CwQ%27cv0*x>o>BqnA{eA|CIw6^# z{xxY#2Q)0W)w_mTWf?o7;9u@sYE4|Ls{Eoos*pc*_pE~LiYyvc75ijC2p3R_xiA25 zEOB>r{i+nu%JS5dW)xq!wz?XcPs;W*TH5Y4dbBUb&K`BCki|)UnWBW{o6~nSHq&EW zdt1@Jek*~Y4>)2WPW(cfX$VnGbx7pAQj`CQSw9@~M#6M!x>>)9Vth2OU}&z9<}G!nf<5K-toinpj)L))3Q&J&xoSVqX$o`SAW_jt_NxU0LEqq zm-7H0YJ^qBVrf@i_YpXx+os^d?!)OAKFk8rz>%mvUEay>dbexWh&iE8)y6z@JaI+t)01ja}*|=O8c@d=pXh1eDq_=2airIl2@Fj3m*K6+(5wH6CQ5Flos4AF&R#w1$$*0>} zlxGJq6EUihL$jlBP|6UyVsezFH~s!paUv#vs zxAaeFZOFXz=M&(@FO^O!omMJxCcfUVp9hJPen*&nh`xqp4M^_uLDtPF;X&+_MW`87 z^W=bM=tN;RW!Q7x+2c#E2L=6KiyRibby4q%W9sS8-78q9`6mF4noPHw<*59^-CYXv zsI2VPtLQ`|Rnh7_AH0}T_J{`LQA(r}!ueHuXyErqZl^S0fjfq1G|NCK&Fn~|ux3)@Vtrjl$ z*@T{&>+e<|a8_#A;pRSd9xkd9{Y<7TSw7R;%uGznfsRux{R7YO{eh}YKkerw$v;3A zQ?*HR==bybSBn;fGlFLFwMkcI{k3>l1rz=TVP)WkZaC!FMWN5$On z*gwR6siPT_vyS{|1655$ZkDnIZ$L!}=2Sjt@x`Jq(5?f}GDu0z!+6bP)A~rCub0!) zBhSVvGWQQjK085$jX+1kf{3zkJutypH++zxH~0Za2%|?x!6> zoe%0OlqC_tD*W#2`?2j;LpZf99J7=!fh&v_XGl9-K#B(bu*dB@k4jk69T8i1d^v5t zRHm>W5(7H!yT^9CC-Mol1K66NR_Luo@!39}KsQ?<*3B^%fxe(wHSawv;fHy+%uz;7 zULR%;p;bL7ci+9a1|vFe{>S-UeBF@9cPQYC*Ci}X_RB>i3X8ODaZANxA>`IeL^kbL zyTK309CPa4v_MtrF9MJ02uo&<^d)DVn&uaIx~P3`48kkucyos0nnnPowdqNn<(MAt z=bp@On6!E@DVE<;A2n*Os$5lI4B-yFQ2^a#UiecxG|gusccYH=R^K$*^j(R>&`Sja z@Wzhh0jYg;o6==LL~`IZJ`5MS3)_WkcS{HG8C$W~r34Rz6PQ|6)!V?LFn3zCg7Q8UNQ_tTOWIp@z3-BJcN=0Oa0AZ1f78$X&lXMQDG4aF=-z zpcdd1c}D7L+1;f);5FT9ttP|Eq>yYF2SO9Y7)I38c;}+!p#=})579zt-f?_f#CYf* z5_%J~Kt-sa{q{>B1g6H?q|P*CnC`Bc!9j(_I1^7?MGt=X?FAe)?owI{=c=9~zBU$= zR@qqWd$Ukr+_NmloL$utO^c97%vwI)1rAg!9-iMtU2bgt4f_5P&*ln%%n>lb`tw=H z@+5!2r5Q&*9`BX?hgg44m!}v2EDlf2hPYW!?I(oEwe+T?2$M3;6Uox+QofLi2#Sqh z#YxrKrH)r~k&tg}CvWB0V(H@Dh6W_l}8WGBfn&T ze%P{p$IVn&Hxv5sK!^`eB%5AY=;X&h5FVF2v7&)BRs!C+$kVf}!Vi)WY=v0(*GjDD zcBnBF$>6#a^AvLHbcbgqm*1GcN0g`~LYv=RdlnJ_Wwq)_(6;_ID(2I^ro-7QE1cjXye(3)-#9c3eKw|Hp;ZL0 zu|=q?q!d;F-wa&Ix`aeD4IzHSJdsin(ciDQ%k&6yNQRqj%GIyaBJ2da8p^5c#eHz{ zlWQOCE6InM;%UY5d}>*L_wbdPy9Yy6As&aUY@@9g?}rwuFZnqt0DXmo*1!m@m#Z>O zd_-c>K&N&8=Tx!4*{;8Fc3=-Y%jid-mm*@6F+?6Ui5kCnb$z^3khY&0(%0jr^kmtA zJ3ym+vLHex{z?2$X0pO7Cxld)As{5$n0w(??-3F?cWV}hGPAQz9$(HuPfa_Lu2A0{ z$@x`qy;eZHNXmNST!zoq*3Pq#QqwbtbxUwOPw9zK-NB!bzB}Lb^y!7ey86$-$?4Hn zINl+4p#+nS_c^-Z1+LB&_PnKpK&~Q`xjJcXttZLDSigscM5v1+A&n!HAzpOkGtih_JgizX> zA%qdY1Uc91`9(9*UocoVZ)Pouq@`4%g}DqUW~DZ&P=>HsHEq z#&S&=*c;onRmoah>+w!I{jLPfR6JF`_;?25_L*?3dROC6|I;xDyth(em5PL>o|z#l z^N1gQ*2SWE&YG{WW^rC~aNI(6%e}R!zJfMK8`+mb{A&5<3g!1Q4x(8A;^rfQJ*v38 zwGJui#W4FqdCtQ%Ts)kwu9L*|y&f1#FO3Pr>xJpxVG-cj0VX`}Iz)D6d*zkbuf11Z z8=tRXiM?pYG9EbH_6A=sg==AdHMneC`#&QeA7{~UmK=}~^K(GC*?Pf%?>U0xubUsv zPN4#+;ZXfM%_hF}eV&5b)St)WF1iO;yg!U$)Mkyg16n|qrd0;H3=5qcnrf8!J51Jl z005HPTQ7hJ_go+qhA);$*d8v8897@wU+biePlmPd>YFo3p>v-}BSVSb0g95y;l!ScHHz=$#-7CYLaXCY)_dDQxs-1~hz}uqt%|WzD{8VK6W?Fd zVEf-8Q%}#3O1Z3BN-6KVIx?utKgCb*^Vt714Hqfggr3j_#4Vl6o?pH3@{1cYft0@g z5=v!(aH8`E7Rz^f`=D`5Ohm#vOku-2jxEv!UFnyeyNQ1CTT`F;u)zJNVRS0JY)O`j&cQsuAsO%Zv6AFzx%IgMLL8Q# zjsZk~w}-2%*UBBT3WQ17+c{xT-@LV*#257U?+ba|9!1&Un*iCek}W-y6u6tlqIHv& zOQQyX-iY=~5F`c#3!tmX$I$)yWIZVG^VbbKATuM3mzK)Sya|#Z7D?D=O%__kL<6Du z1V{d_R-&m1jC|1hk|kg+)D|}ze75I2P=mOD_WNP5fP=A%|63+S_Raz9)R3mOi{)}& z2m^CF?z&I1%|gTJUg2QWt8KGZOe)>Y%_;hyIH@v6#PWMgCsCvTDf2q`u6CQP&Fv$~ z{&Vz`hOu(z_1mpD9{>0@R$qUrm?P$?JM(!Te*WA_QR3!we*1jDKdzx~k{sx#<5-L5oFwM@sv9w6Q;uTbo07|7z;PKDTB*e{3 zK!}<%TcSQeGoUepM%M59(GtV%=h?0#@9ij`%qeBW@8L5nMI$IKvM=gK_mmX|>~#Z1 zWjh*9Z;?gRxbadZ)9zlb7Aerghfxxv74tGin?7j3wS$eRYIbNNo%CLY<~6JZ%H5%n z&ST;K|M&>&J#Uu(0P4tf9RwrKYX86Q5p*U zX7>EK6LO+{>A=l6gF2_s4+v@g4K&?!$!ObK_UEB1Y4x>JnC9^-J)RtsYyk0pQwEV< zMu>O{f}lE_C1Hd$Sna<7DPkXN2VO^{5>rrX0QJgf?7hZMcT`G6A4-Xpo5lRU3acx*0y|FuX}oq0^&{5VYZ7s!LKV4-+d0uHJru zFIau+u)OmJdcmg3Ok(!t8>X1cjfr6!#@W-e5k2Hq_l8;@CO6O^dQbQENf$QM1Bv=PKsqk~P9j&vff4)dONRdXxY z(%6g>O^o%X5?p5FQC@~esti?OAlwT8MLaEua;8d*fn47BwT}qx`u>mhFO>;$@l!zf z9sm(4HvFIGl6rYRH%I4q+Q)Z}RI1WPXS<&KNp7-PFvL4%912j1G0=PU9?4P61`{rz z^?gWS(B}SMCasT8WH>uSuaiqu$S}6gx~tI?`3PzJVvxu@oM``^0vHZ&BU(c1kMdI% zI*NI<6it$7z3K|A8v*6mR=@;^!V^g7>^X-G+cktvwXAN6YkThqfY4437K(1|Aj~_jKiTW4x}C`7koFD_X}&FA_fG-6DXWNt%#=$glP|r-94sw- zSSPX9T`f(eg3VoM?xmc%s~^y|)i7OU8ScA%Rn$F&)}UY{5}OPdp-yB(oJvZ%6Z{6Q zgi1SSNycJ#9@3>&OYQO30phgU8G=)5YmU;khS}JPis**?A*FKJ6ZyiP_buIvlci$k zrc|8$9_u&t{3$BMMlR)L?@0-tkPM}V9B}dnjgGnNRXm%?;g<2Btv*yWyT`U_(48limX@*@3+)sE2QWyxR;|gev zexKDGthoa^n6uVj2%WoGCxBE~5qU;&f-d0pTJ%`zejv%NsD<=n_elAL=0W+$1<(bZ zN7osqYyD9%JjQ!&kYVF>@9M!ZmeNo%62v;Sf>C$pF{ zXlgD_)r9XK{%LFTD_sh_c)||we#gz9YYZDG`sGWd zv#hLaX`{Pgyn(|W_rye%yel}XvFQ2O*L?04g8~5+rpdI_%GTmG8cFJ3DHu)B3E2E!WaiaPY+8mtH4Le0zAuDHwPlT(si$v?%1&~$*76*{o6P#pBo z5;;cV>RJQ{H6oUT<7+&jv^%RGX)5#OPM40 zb`W)to7H@YoZBJV6-|1n{?zx3F`D+!@8iBWV#pZV^ zAYxhQ8KJCQh5Iro)YFz$6H9^Lpd}z6nznJi^-ByC`+u>Mn+uSN2fb1paJ4-BJblK8 Qwq^okB^4#A#0-P}2j;p`AOHXW literal 0 HcmV?d00001 diff --git a/public/android-chrome-512x512.png b/public/android-chrome-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..1ad85e8aa7543bf5be2c20270facac1e02b0b15c GIT binary patch literal 39043 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%0DLi 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

(?Ci z+RuRtmVZ=cc(DRAs+mJKSZ80ur3_Vffpc&VWJ2Xbv)}sIDALF=J$SR!hzTP^?=*z% z;WTs~@ISgjw z^kBI#XdZZ|G#SH7=vQkWhlsVVb4tKKVY%+IErcCZ{FK68wb~~0a0T=4gkcq0MItb# zMHp#n)DFb+mv34>9sSsoZ|bNuq5QX}7_>axb^Bs>p5J;x$|L*v^x?^PxjUK@7vi

JHvd%zcw*MA0j<8v0cD6W3Ir-Xotf8IHe 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 R>QVpz002ovPDHLkV1h-M2?GEC literal 0 HcmV?d00001 diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..9d30deac645374e56e7d57a225b967fb6dcb60c0 GIT binary patch literal 442 zcmV;r0Y(0aP)Px$bV)=(R5(wS)5}i6P!I;-e_9X{E=J1T8={B?G%kosi81mHE_CNBxz~ly;1d`( zMiN6vjA9TB#2^I<^a5>-b;HFrFxzwHJ9B2vp`F7M&aSGLL>h~^f)pr@D@tdw=M3m( zGS}sHz!!1@I?&62dl9@m*JcCOxBTdJWi;x7k-)Ny0TlC}vjHm`K6H2yoz~yI zgHbP78-v z3YNf<--W_s6`D42>BasVv@LH%_1N)im89=wAyIdXzhzRxt7JQ>;0pOTov6$24 kUCwFqerF=3n7_aK0o2*8H&EJmr2qf`07*qoM6N<$g2CCim;e9( literal 0 HcmV?d00001 diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..c2142d0dc81c5e771970687651db60eff3c09f6d GIT binary patch literal 873 zcmV-v1D5=WP)Px&BS}O-R9HvFmswAfK@^7H`C7J8C|wYQ3Po8(5QGSbAkv7&1ujU87hd@vjC$>j zCjJEffO=)P5KRz4QCSKilvpZI=mwM>SxVb)%r}IDXn`_iIk)|0-sj9Y=bb6RF$aw^ z{ZPh7qp&OuwqXxkha029`<*gYBS_R@%F|d!${wJbIR3be~hrX}2g9m7Qa1qUK z`k~S&cFZuZI0Z7941+!Pg9k7+4d!#KNB0OCN9nNG0fM8-YGUgNR5u#DK^~QgT6apA%D#O?M0>xB;eJiiqQVnWQdQ1S3QF7e8SHx`C^3#pAm5s1YfvX4Z+`oXn4jZI$ zNEc2x!3A)+E*qVnMo?Ulj;^-RaP;|%NV*Nbw^-SY*YRQa=m8`rlqR6GDg%Q(4y>;o zu@7tkNcNj{M$2BoyusB2TL6-1)s0+yZvMrq&({Oeb!@ZFKrR=Md@2FI%~P0k?EfC% zG9qbFeu`wi=d~7?)00000NkvXXu0mjfdN_-( literal 0 HcmV?d00001 diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..028a67e202e3f36f153787511252050eca3780ca GIT binary patch literal 15406 zcmeHO*>6-;7{7=y1|`8rV?sh40}&WH(`AN2X*)~XneOd$@3gd?F4Mh*p$jbq$`%lT z00C5tF@^_?PsTT2jBow}#)KE5Pey(5NnbSi{C=mL$?Y)rcIM9MmUNPnbC>ho@AsYc z+eXuNXgjq%do-?X+Q_S#R-kE`&9;1h_$^KQoS)_9zIgw>ru~?uX@|KDlQ6~dbFPy9 zY&P5LMNWHtVa}1pbjr!xBQ^ZNonE&y>~lLwUn=~CR9SkGYAU@ep6lBzUuXL~?xQ`4 z&zsw81#L%flPSH|ogGL<-_%+y=qt;LEYUZ&)lhSLjVUcK8}aWPY^NsvMxtDa_eS&` zz0Cv}65A)<8_|Qdd$f!E1-Yi*Fr%-lEv13!0cz`Rr1Bzn((f42w|0f7yx2`;h52F} zdMA6ycWmVxfhiuk?k2P68HjyeK<*{<|>9(D1U$a`5E(RW0e zsj|F?0>#JTG~vFM`1NY^^>t;`&=8=Y?*vr^imA1;o-n5*ovgv1OSin&*A>1(F$Y0c z6)1U$cDb#iysY5x+dh|L-s5&Irc-#`&IX;%HoEg8gYT|8fu8Y(+Wt zk5A^mc(v=@N6L@bFf5i##0r0mJ@y|dM@@xSoQLR-{<8zD3s=V9$u>r{ z75+GXarP&EGsLpPwu#+cApdc5+d|S>;g7XvWdET5TRR)X{FFS*YSsL~3;GcB5;MN? zoi+YLV!Y)y5^LDjQyjcAEdh9C4Q6buba~TVf(zE-~Y+B_dn}Yp8JpG z9F_dH>y7IH_(|ABt3|kMc0UP2RPo!fZ{O~{2lwwkuvyEYci(w0D@%JbiLg7|_Jb{+ z{Oq5-F6XbCw>W+&&ddHG`{4cqdKpfzql<5n z`P@iK$Npy(_EgeuyPeNmu6?^Ces8|Lgy+m325pn$V|@ed+u7cjV*S5o{1mnKG_w8C zO#QJwVF#J%Lsod{Xr9^aS@Cs{34Zw5p&Lg|N4OqmJ!O;zW(FyCXF=$6I-aKekY+n& z_~H9U>_pEWJ_*=eQYX{DQ*^Bi|FW&RQg@%cF>Tp?PEkH(_|eyxFOo0fCv%@%UCX`) zFJ<_lr$aZF_;C$iio9Q=S{eROV~|EJP6)hZg)Un7><0THlE?oP%AyQEVuj;ZPYe8r z8IE09zE+4e*;p#WUt8lRtXJR_XTT~ka7A({!wbMv2G7rs;UKjQFP1wZt&F81rpKe;aQ2BP!BmhJ8|WmYnOFjqPU z+GzIC5@8=2V4p>rIIOl;h95qkxyM(ixucdM90S@)_ElC8FX%Kk^Z2fj|M<%SIM4^kXAW&MwsE!J=M zSeNh@13S(GoXLnMV?3<-GEHPrho5t%W*=P^`Co_uVjYJgEyDjh{otaAJ>gu_`=(8B zrMiBU;Ya_@JX{id5lgSG;2aLlr@?$eP8xDLVB^Dw4%-+xa+?W1VvI{)-Dh9PN?eFX zVm)+^gvHqSS-->i7G?WJfegy}ANJzXm-h_k2lOG>n26yaKMy_%*!&refinDv^C2A$}5ca9^vC*`mIu3_tQ!FFw5^?Dw`)jVb3ZR`IzEJqhQ>Dt(>oy)yhbi=gKK z19S!SD{Pw8Fk$bResDqLEUeZx$$Mq^VgF(;kvxDMc35qd`F}y6UyNRwq#8aGByAeC zGW^In5dWRf?IX~IkpGXh0i6MBl;i3GCu-c|3>dq7TKHYkz%6A}h95d6ayNP>dS06Q zIB#3{yuyE5uumb!3N}IX+z6d}a!tgWEXFvL;YZ)WhUw$@QS9#dqrNNdK&fkU-%v1 z$8Bn>roJ-Hw>VF6)xKyexh<;B`CZHf!O0t{MLCQ^@D@@joE9 Lf7?B<-2?vvQ#phj literal 0 HcmV?d00001 diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..47e896d --- /dev/null +++ b/public/index.html @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + <%= htmlWebpackPlugin.options.title %> + + + + +

+ + + diff --git a/public/site.webmanifest b/public/site.webmanifest new file mode 100644 index 0000000..87d8130 --- /dev/null +++ b/public/site.webmanifest @@ -0,0 +1 @@ +{"name":"Profectus","short_name":"Profectus","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#2E3440","background_color":"#2E3440","display":"standalone"} \ No newline at end of file diff --git a/saves/.placehold b/saves/.placehold new file mode 100644 index 0000000..e69de29 diff --git a/saves/safff.txt b/saves/safff.txt new file mode 100644 index 0000000..7a1451d --- /dev/null +++ b/saves/safff.txt @@ -0,0 +1 @@ +eyJpZCI6InRtdC14LTEwNSIsIm5hbWUiOiJEZWZhdWx0IFNhZmZmZiAtIHNvbWV0aGluZyBlbHNlIiwidGFicyI6WyJtYWluIiwiYyJdLCJ0aW1lIjoxNjI0MjQ1MjYxMDg3LCJhdXRvc2F2ZSI6dHJ1ZSwib2ZmbGluZVByb2QiOnRydWUsInRpbWVQbGF5ZWQiOiIzNDQ4LjYxNTc4MTcwOTAxIiwia2VlcEdvaW5nIjpmYWxzZSwibGFzdFRlblRpY2tzIjpbMC4wNTEsMC4wNSwwLjA0OSwwLjA1LDAuMDUsMC4wNTEsMC4wNDksMC4wNSwwLjA1LDAuMDUxXSwic2hvd1RQUyI6dHJ1ZSwibXNEaXNwbGF5IjoiYWxsIiwiaGlkZUNoYWxsZW5nZXMiOmZhbHNlLCJ0aGVtZSI6InBhcGVyIiwic3VidGFicyI6e30sIm1pbmltaXplZCI6e30sIm1vZElEIjoidG10LXgiLCJtb2RWZXJzaW9uIjoiMC4wIiwicG9pbnRzIjoiMzMwMC4zNzc3NzM4NTkwNTUiLCJtYWluIjp7InVwZ3JhZGVzIjpbXSwiYWNoaWV2ZW1lbnRzIjpbXSwibWlsZXN0b25lcyI6W10sImluZm9ib3hlcyI6e319LCJmIjp7InVwZ3JhZGVzIjpbXSwiYWNoaWV2ZW1lbnRzIjpbXSwibWlsZXN0b25lcyI6W10sImluZm9ib3hlcyI6e30sImNsaWNrYWJsZXMiOnsiMTEiOiJTdGFydCJ9LCJ1bmxvY2tlZCI6ZmFsc2UsInBvaW50cyI6IjAiLCJib29wIjpmYWxzZX0sImMiOnsidXBncmFkZXMiOlsiMTEiXSwiYWNoaWV2ZW1lbnRzIjpbXSwibWlsZXN0b25lcyI6W10sImluZm9ib3hlcyI6e30sImJ1eWFibGVzIjp7IjExIjoiMCJ9LCJjaGFsbGVuZ2VzIjp7IjExIjoiMCJ9LCJ1bmxvY2tlZCI6dHJ1ZSwicG9pbnRzIjoiMCIsImJlc3QiOiIxIiwidG90YWwiOiIwIiwiYmVlcCI6ZmFsc2UsInRoaW5neSI6InBvaW50eSIsIm90aGVyVGhpbmd5IjoxMCwic3BlbnRPbkJ1eWFibGVzIjoiMCJ9LCJhIjp7InVwZ3JhZGVzIjpbXSwiYWNoaWV2ZW1lbnRzIjpbIjExIl0sIm1pbGVzdG9uZXMiOltdLCJpbmZvYm94ZXMiOnt9LCJ1bmxvY2tlZCI6dHJ1ZSwicG9pbnRzIjoiMCJ9LCJnIjp7InVwZ3JhZGVzIjpbXSwiYWNoaWV2ZW1lbnRzIjpbXSwibWlsZXN0b25lcyI6W10sImluZm9ib3hlcyI6e319LCJoIjp7InVwZ3JhZGVzIjpbXSwiYWNoaWV2ZW1lbnRzIjpbXSwibWlsZXN0b25lcyI6W10sImluZm9ib3hlcyI6e319LCJzcG9vayI6eyJ1cGdyYWRlcyI6W10sImFjaGlldmVtZW50cyI6W10sIm1pbGVzdG9uZXMiOltdLCJpbmZvYm94ZXMiOnt9fSwib29tcHNNYWciOjAsImxhc3RQb2ludHMiOiIzMzAwLjM3Nzc3Mzg1OTA1NSJ9 \ No newline at end of file diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..d222465 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,48 @@ + + + + + diff --git a/src/components/Game.vue b/src/components/Game.vue new file mode 100644 index 0000000..fb649ac --- /dev/null +++ b/src/components/Game.vue @@ -0,0 +1,86 @@ + + + + + + + diff --git a/src/components/GameOverScreen.vue b/src/components/GameOverScreen.vue new file mode 100644 index 0000000..e30e3d7 --- /dev/null +++ b/src/components/GameOverScreen.vue @@ -0,0 +1,107 @@ + + + + + diff --git a/src/components/Info.vue b/src/components/Info.vue new file mode 100644 index 0000000..3fd17ce --- /dev/null +++ b/src/components/Info.vue @@ -0,0 +1,112 @@ + + + + + diff --git a/src/components/Layer.vue b/src/components/Layer.vue new file mode 100644 index 0000000..8fd0838 --- /dev/null +++ b/src/components/Layer.vue @@ -0,0 +1,214 @@ + + + + + diff --git a/src/components/MarkNode.vue b/src/components/MarkNode.vue new file mode 100644 index 0000000..c730279 --- /dev/null +++ b/src/components/MarkNode.vue @@ -0,0 +1,61 @@ + + + + + diff --git a/src/components/Modal.vue b/src/components/Modal.vue new file mode 100644 index 0000000..7b8a5fd --- /dev/null +++ b/src/components/Modal.vue @@ -0,0 +1,136 @@ + + + + + diff --git a/src/components/NaNScreen.vue b/src/components/NaNScreen.vue new file mode 100644 index 0000000..d3cfef7 --- /dev/null +++ b/src/components/NaNScreen.vue @@ -0,0 +1,124 @@ + + + + + diff --git a/src/components/Nav.vue b/src/components/Nav.vue new file mode 100644 index 0000000..333f88d --- /dev/null +++ b/src/components/Nav.vue @@ -0,0 +1,264 @@ + + + + + diff --git a/src/components/Options.vue b/src/components/Options.vue new file mode 100644 index 0000000..69d1453 --- /dev/null +++ b/src/components/Options.vue @@ -0,0 +1,88 @@ + + + + + diff --git a/src/components/Profectus.vue b/src/components/Profectus.vue new file mode 100644 index 0000000..3a7700b --- /dev/null +++ b/src/components/Profectus.vue @@ -0,0 +1,195 @@ + + + diff --git a/src/components/Save.vue b/src/components/Save.vue new file mode 100644 index 0000000..9eaf60b --- /dev/null +++ b/src/components/Save.vue @@ -0,0 +1,190 @@ + + + + + + + diff --git a/src/components/SavesManager.vue b/src/components/SavesManager.vue new file mode 100644 index 0000000..d09fb3b --- /dev/null +++ b/src/components/SavesManager.vue @@ -0,0 +1,280 @@ + + + + + + + diff --git a/src/components/TPS.vue b/src/components/TPS.vue new file mode 100644 index 0000000..fae9558 --- /dev/null +++ b/src/components/TPS.vue @@ -0,0 +1,52 @@ + + + + + diff --git a/src/components/Tooltip.vue b/src/components/Tooltip.vue new file mode 100644 index 0000000..54db1de --- /dev/null +++ b/src/components/Tooltip.vue @@ -0,0 +1,167 @@ + + + + + diff --git a/src/components/common/features.css b/src/components/common/features.css new file mode 100644 index 0000000..f0ef0cf --- /dev/null +++ b/src/components/common/features.css @@ -0,0 +1,35 @@ +.feature:not(li), +.feature:not(li) button { + position: relative; + padding: 5px; + border-radius: var(--border-radius); + border: 2px solid rgba(0, 0, 0, 0.125); + margin: var(--feature-margin); + box-sizing: border-box; + color: var(--feature-foreground); +} + +.can, +.can button { + background-color: var(--layer-color); + cursor: pointer; +} + +.can:hover, +.can:hover button { + transform: scale(1.15, 1.15); + box-shadow: 0 0 20px var(--points); + z-index: 1; +} + +.locked, +.locked button { + background-color: var(--locked); + cursor: not-allowed; +} + +.bought, +.bought button { + background-color: var(--bought); + cursor: default; +} diff --git a/src/components/common/fields.css b/src/components/common/fields.css new file mode 100644 index 0000000..48737e1 --- /dev/null +++ b/src/components/common/fields.css @@ -0,0 +1,13 @@ +.field { + display: flex; + position: relative; + min-height: 2em; + margin: 10px 0; + user-select: none; + justify-content: space-between; + align-items: center; +} + +.field > * { + margin: 0; +} diff --git a/src/components/common/table.css b/src/components/common/table.css new file mode 100644 index 0000000..1971fb2 --- /dev/null +++ b/src/components/common/table.css @@ -0,0 +1,91 @@ +.table { + display: flex; + flex-flow: column wrap; + justify-content: center; + align-items: center; + max-width: 100%; + margin: 0 auto; +} + +.table + .table { + margin-top: 10px; +} + +.row { + display: flex; + flex-flow: row wrap; + justify-content: center; + align-items: stretch; + max-width: 100%; + margin: 0 10px; +} + +.row > :not(.feature) { + margin: 0; + display: flex; +} + +.col { + display: flex; + flex-flow: column wrap; + justify-content: center; + align-items: center; + height: 100%; + margin: 10px 0; +} + +.row.mergeAdjacent > .feature, +.row.mergeAdjacent > .tooltip-container > .feature { + margin-left: 0; + margin-right: 0; + border-radius: 0; +} + +.row.mergeAdjacent > .feature:first-child, +.row.mergeAdjacent > .tooltip-container:first-child > .feature { + border-radius: var(--border-radius) 0 0 var(--border-radius); +} + +.row.mergeAdjacent > .feature:last-child, +.row.mergeAdjacent > .tooltip-container:last-child > .feature { + border-radius: 0 var(--border-radius) var(--border-radius) 0; +} + +.row.mergeAdjacent > .feature:first-child:last-child, +.row.mergeAdjacent > .tooltip-container:first-child:last-child > .feature { + border-radius: var(--border-radius); +} + +/* +TODO how to implement mergeAdjacent for grids? +.row.mergeAdjacent + .row.mergeAdjacent > .feature { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +*/ + +.col.mergeAdjacent .feature { + margin-top: 0; + margin-bottom: 0; + border-radius: 0; +} + +.col.mergeAdjacent .feature:first-child { + border-radius: var(--border-radius) var(--border-radius) 0 0; +} + +.col.mergeAdjacent .feature:last-child { + border-radius: 0 0 var(--border-radius) var(--border-radius); +} + +.col.mergeAdjacent .feature:first-child:last-child { + border-radius: var(--border-radius); +} + +/* +TODO how to implement mergeAdjacent for grids? +.col.mergeAdjacent + .col.mergeAdjacent > .feature { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +*/ diff --git a/src/components/fields/DangerButton.vue b/src/components/fields/DangerButton.vue new file mode 100644 index 0000000..9fb1836 --- /dev/null +++ b/src/components/fields/DangerButton.vue @@ -0,0 +1,78 @@ + + + + + + + diff --git a/src/components/fields/FeedbackButton.vue b/src/components/fields/FeedbackButton.vue new file mode 100644 index 0000000..3317d4a --- /dev/null +++ b/src/components/fields/FeedbackButton.vue @@ -0,0 +1,74 @@ + + + + + diff --git a/src/components/fields/Select.vue b/src/components/fields/Select.vue new file mode 100644 index 0000000..5387104 --- /dev/null +++ b/src/components/fields/Select.vue @@ -0,0 +1,93 @@ + + + + + diff --git a/src/components/fields/Slider.vue b/src/components/fields/Slider.vue new file mode 100644 index 0000000..7ad7433 --- /dev/null +++ b/src/components/fields/Slider.vue @@ -0,0 +1,40 @@ + + + + + diff --git a/src/components/fields/Text.vue b/src/components/fields/Text.vue new file mode 100644 index 0000000..bdacbce --- /dev/null +++ b/src/components/fields/Text.vue @@ -0,0 +1,92 @@ + + + + + diff --git a/src/components/fields/Toggle.vue b/src/components/fields/Toggle.vue new file mode 100644 index 0000000..4a922e6 --- /dev/null +++ b/src/components/fields/Toggle.vue @@ -0,0 +1,115 @@ + + + + + diff --git a/src/components/layout/Column.vue b/src/components/layout/Column.vue new file mode 100644 index 0000000..7764dc7 --- /dev/null +++ b/src/components/layout/Column.vue @@ -0,0 +1,16 @@ + + + diff --git a/src/components/layout/Row.vue b/src/components/layout/Row.vue new file mode 100644 index 0000000..55221d0 --- /dev/null +++ b/src/components/layout/Row.vue @@ -0,0 +1,16 @@ + + + diff --git a/src/components/layout/Spacer.vue b/src/components/layout/Spacer.vue new file mode 100644 index 0000000..a5cfa56 --- /dev/null +++ b/src/components/layout/Spacer.vue @@ -0,0 +1,16 @@ + + + diff --git a/src/components/layout/Sticky.vue b/src/components/layout/Sticky.vue new file mode 100644 index 0000000..f4d79af --- /dev/null +++ b/src/components/layout/Sticky.vue @@ -0,0 +1,59 @@ + + + + + diff --git a/src/components/layout/VerticalRule.vue b/src/components/layout/VerticalRule.vue new file mode 100644 index 0000000..04a8adf --- /dev/null +++ b/src/components/layout/VerticalRule.vue @@ -0,0 +1,18 @@ + + + + + diff --git a/src/components/links/Link.vue b/src/components/links/Link.vue new file mode 100644 index 0000000..f16dd70 --- /dev/null +++ b/src/components/links/Link.vue @@ -0,0 +1,43 @@ + + + + + diff --git a/src/components/links/LinkNode.vue b/src/components/links/LinkNode.vue new file mode 100644 index 0000000..837b534 --- /dev/null +++ b/src/components/links/LinkNode.vue @@ -0,0 +1,42 @@ + + + + + diff --git a/src/components/links/Links.vue b/src/components/links/Links.vue new file mode 100644 index 0000000..8cd888a --- /dev/null +++ b/src/components/links/Links.vue @@ -0,0 +1,112 @@ + + + + + diff --git a/src/data/Changelog.vue b/src/data/Changelog.vue new file mode 100644 index 0000000..76a2ffd --- /dev/null +++ b/src/data/Changelog.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/src/data/common.tsx b/src/data/common.tsx new file mode 100644 index 0000000..5fc2ce1 --- /dev/null +++ b/src/data/common.tsx @@ -0,0 +1,153 @@ +import { + Clickable, + ClickableOptions, + createClickable, + GenericClickable +} from "@/features/clickables/clickable"; +import { GenericConversion } from "@/features/conversion"; +import { CoercableComponent, jsx, Replace, setDefault } from "@/features/feature"; +import { displayResource } from "@/features/resources/resource"; +import { + createTreeNode, + GenericTree, + GenericTreeNode, + TreeNode, + TreeNodeOptions +} from "@/features/trees/tree"; +import player from "@/game/player"; +import Decimal from "@/util/bignum"; +import { + Computable, + GetComputableTypeWithDefault, + processComputable, + ProcessedComputable +} from "@/util/computed"; +import { computed, Ref, unref } from "vue"; + +export interface ResetButtonOptions extends ClickableOptions { + conversion: GenericConversion; + tree: GenericTree; + treeNode: GenericTreeNode; + resetDescription?: Computable; + showNextAt?: Computable; + display?: Computable; + canClick?: Computable; +} + +type ResetButton = Replace< + Clickable, + { + resetDescription: GetComputableTypeWithDefault>; + showNextAt: GetComputableTypeWithDefault; + display: GetComputableTypeWithDefault>; + canClick: GetComputableTypeWithDefault>; + onClick: VoidFunction; + } +>; + +export type GenericResetButton = Replace< + GenericClickable & ResetButton, + { + resetDescription: ProcessedComputable; + showNextAt: ProcessedComputable; + display: ProcessedComputable; + canClick: ProcessedComputable; + } +>; + +export function createResetButton( + optionsFunc: () => T +): ResetButton { + return createClickable(() => { + const resetButton = optionsFunc(); + + processComputable(resetButton as T, "showNextAt"); + setDefault(resetButton, "showNextAt", true); + + if (resetButton.resetDescription == null) { + resetButton.resetDescription = computed(() => + Decimal.lt(resetButton.conversion.gainResource.value, 1e3) ? "Reset for " : "" + ); + } else { + processComputable(resetButton as T, "resetDescription"); + } + + if (resetButton.display == null) { + resetButton.display = jsx(() => ( + + {unref(resetButton.resetDescription as ProcessedComputable)} + + {displayResource( + resetButton.conversion.gainResource, + unref(resetButton.conversion.currentGain) + )} + {" "} + {resetButton.conversion.gainResource.displayName} +
+
+ Next:{" "} + {displayResource( + resetButton.conversion.baseResource, + unref(resetButton.conversion.nextAt) + )}{" "} + {resetButton.conversion.baseResource.displayName} +
+
+ )); + } + + if (resetButton.canClick == null) { + resetButton.canClick = computed(() => + Decimal.gt(unref(resetButton.conversion.currentGain), 0) + ); + } + + const onClick = resetButton.onClick; + resetButton.onClick = function () { + resetButton.conversion.convert(); + resetButton.tree.reset(resetButton.treeNode); + onClick?.(); + }; + + return resetButton; + }) as unknown as ResetButton; +} + +export interface LayerTreeNodeOptions extends TreeNodeOptions { + layerID: string; + color: string; + append?: boolean; +} +export type LayerTreeNode = Replace< + TreeNode, + { + append: ProcessedComputable; + } +>; +export type GenericLayerTreeNode = LayerTreeNode; + +export function createLayerTreeNode( + optionsFunc: () => T +): LayerTreeNode { + return createTreeNode(() => { + const options = optionsFunc(); + processComputable(options as T, "append"); + return { + ...options, + display: options.layerID, + onClick: + options.append != null && options.append + ? function () { + if (player.tabs.includes(options.layerID)) { + const index = player.tabs.lastIndexOf(options.layerID); + player.tabs.splice(index, 1); + } else { + player.tabs.push(options.layerID); + } + } + : function () { + player.tabs.splice(1, 1, options.layerID); + } + }; + }) as unknown as LayerTreeNode; +} diff --git a/src/data/layers/aca/a.tsx b/src/data/layers/aca/a.tsx new file mode 100644 index 0000000..a1642a5 --- /dev/null +++ b/src/data/layers/aca/a.tsx @@ -0,0 +1,135 @@ +import Row from "@/components/layout/Row.vue"; +import Tooltip from "@/components/Tooltip.vue"; +import { main } from "@/data/mod"; +import { createAchievement } from "@/features/achievements/achievement"; +import { jsx } from "@/features/feature"; +import { createGrid } from "@/features/grids/grid"; +import { createResource } from "@/features/resources/resource"; +import { createTreeNode } from "@/features/trees/tree"; +import { createLayer } from "@/game/layers"; +import { DecimalSource } from "@/lib/break_eternity"; +import Decimal from "@/util/bignum"; +import { render, renderRow } from "@/util/vue"; +import { computed } from "vue"; +import f from "./f"; + +const layer = createLayer(() => { + const id = "a"; + const color = "yellow"; + const name = "Achievements"; + const points = createResource(0, "achievement power"); + + const treeNode = createTreeNode(() => ({ + display: "A", + color, + tooltip: { + display: "Achievements", + right: true + }, + onClick() { + main.showAchievements(); + } + })); + + const ach1 = createAchievement(() => ({ + image: "https://unsoftcapped2.github.io/The-Modding-Tree-2/discord.png", + display: "Get me!", + tooltip: computed(() => { + if (ach1.earned.value) { + return "You did it!"; + } + return "How did this happen?"; + }), + shouldEarn: true + })); + const ach2 = createAchievement(() => ({ + display: "Impossible!", + tooltip: computed(() => { + if (ach2.earned.value) { + return "HOW????"; + } + return "Mwahahaha!"; + }), + style: { color: "#04e050" } + })); + const ach3 = createAchievement(() => ({ + display: "EIEIO", + tooltip: + "Get a farm point.\n\nReward: The dinosaur is now your friend (you can max Farm Points).", + shouldEarn: function () { + return Decimal.gte(f.points.value, 1); + }, + onComplete() { + console.log("Bork bork bork!"); + } + })); + const achievements = [ach1, ach2, ach3]; + + const grid = createGrid(() => ({ + rows: 2, + cols: 2, + getStartState(id) { + return id; + }, + getStyle(id, state) { + return { backgroundColor: `#${(Number(state) * 1234) % 999999}` }; + }, + // TODO display should return an object + getTitle(id) { + let direction = ""; + if (id === "101") { + direction = "top"; + } else if (id === "102") { + direction = "bottom"; + } else if (id === "201") { + direction = "left"; + } else if (id === "202") { + direction = "right"; + } + return jsx(() => ( + +

Gridable #{id}

+
+ )); + }, + getDisplay(id, state) { + return String(state); + }, + getCanClick() { + return Decimal.eq(main.points.value, 10); + }, + onClick(id, state) { + this.cells[id].state = Number(state) + 1; + } + })); + + const display = jsx(() => ( + <> + + + {render(ach1)} + + + {render(ach2)} + + + {render(ach3)} + + + {renderRow(grid)} + + )); + + return { + id, + color, + name, + points, + achievements, + grid, + treeNode, + display + }; +}); + +export default layer; diff --git a/src/data/layers/aca/c.tsx b/src/data/layers/aca/c.tsx new file mode 100644 index 0000000..aab8664 --- /dev/null +++ b/src/data/layers/aca/c.tsx @@ -0,0 +1,686 @@ +import Slider from "@/components/fields/Slider.vue"; +import Text from "@/components/fields/Text.vue"; +import Toggle from "@/components/fields/Toggle.vue"; +import Column from "@/components/layout/Column.vue"; +import Row from "@/components/layout/Row.vue"; +import Spacer from "@/components/layout/Spacer.vue"; +import Sticky from "@/components/layout/Sticky.vue"; +import VerticalRule from "@/components/layout/VerticalRule.vue"; +import Modal from "@/components/Modal.vue"; +import { createLayerTreeNode, createResetButton } from "@/data/common"; +import { main } from "@/data/mod"; +import themes from "@/data/themes"; +import { createBar, Direction } from "@/features/bars/bar"; +import { createBuyable } from "@/features/buyable"; +import { createChallenge } from "@/features/challenges/challenge"; +import { createClickable } from "@/features/clickables/clickable"; +import { + addSoftcap, + createCumulativeConversion, + createExponentialScaling +} from "@/features/conversion"; +import { jsx, showIf, Visibility } from "@/features/feature"; +import { createHotkey } from "@/features/hotkey"; +import { createInfobox } from "@/features/infoboxes/infobox"; +import { createMilestone } from "@/features/milestones/milestone"; +import { createReset } from "@/features/reset"; +import MainDisplay from "@/features/resources/MainDisplay.vue"; +import { createResource, displayResource, trackBest } from "@/features/resources/resource"; +import Resource from "@/features/resources/Resource.vue"; +import { createTab } from "@/features/tabs/tab"; +import { createTabFamily } from "@/features/tabs/tabFamily"; +import { createTree, createTreeNode, GenericTreeNode, TreeBranch } from "@/features/trees/tree"; +import { createUpgrade } from "@/features/upgrades/upgrade"; +import { createLayer } from "@/game/layers"; +import { persistent } from "@/game/persistence"; +import settings from "@/game/settings"; +import { DecimalSource } from "@/lib/break_eternity"; +import Decimal, { format, formatWhole } from "@/util/bignum"; +import { render, renderCol, renderRow } from "@/util/vue"; +import { computed, ComputedRef, ref } from "vue"; +import f from "./f"; + +const layer = createLayer(() => { + const id = "c"; + const color = "#4BDC13"; + const name = "Candies"; + const points = createResource(0, "lollipops"); + const best = trackBest(points); + const beep = persistent(false); + const thingy = persistent("pointy"); + const otherThingy = persistent(10); + const spentOnBuyables = persistent(new Decimal(10)); + + const waffleBoost = computed(() => Decimal.pow(points.value, 0.2)); + const icecreamCap = computed(() => Decimal.times(points.value, 10)); + + const coolInfo = createInfobox(() => ({ + title: "Lore", + titleStyle: { color: "#FE0000" }, + display: "DEEP LORE!", + bodyStyle: { backgroundColor: "#0000EE" }, + color: "rgb(75, 220, 19)" + })); + + const lollipopMilestone3 = createMilestone(() => ({ + shouldEarn() { + return Decimal.gte(best.value, 3); + }, + display: { + requirement: "3 Lollipops", + effectDisplay: "Unlock the next milestone" + } + })); + const lollipopMilestone4 = createMilestone(() => ({ + visibility() { + return showIf(lollipopMilestone3.earned.value); + }, + shouldEarn() { + return Decimal.gte(best.value, 4); + }, + display: { + requirement: "4 Lollipops", + effectDisplay: "You can toggle beep and boop (which do nothing)", + optionsDisplay: jsx(() => ( + <> + (beep.value = value)} + modelValue={beep.value} + /> + (f.boop.value = value)} + modelValue={f.boop.value} + /> + + )) + }, + style() { + if (this.earned) { + return { backgroundColor: "#1111DD" }; + } + return {}; + } + })); + const lollipopMilestones = [lollipopMilestone3, lollipopMilestone4]; + + const funChallenge = createChallenge(() => ({ + title: "Fun", + completionLimit: 3, + display() { + return { + description: `Makes the game 0% harder
${formatWhole(this.completions.value)}/${ + this.completionLimit + } completions`, + goal: "Have 20 points I guess", + reward: "Says hi", + effectDisplay: format(funEffect.value) + "x" + }; + }, + visibility() { + return showIf(Decimal.gt(best.value, 0)); + }, + goal: 20, + resource: main.points, + onComplete() { + console.log("hiii"); + }, + onEnter() { + main.points.value = 0; + main.best.value = main.points.value; + main.total.value = main.points.value; + console.log("So challenging"); + }, + onExit() { + console.log("Sweet freedom!"); + }, + style: { + height: "200px" + } + })); + const funEffect = computed(() => Decimal.add(points.value, 1).tetrate(0.02)); + + const generatorUpgrade = createUpgrade(() => ({ + display: { + title: "Generator of Genericness", + description: "Gain 1 point every second" + }, + cost: 1, + resource: points + })); + const lollipopMultiplierUpgrade = createUpgrade(() => ({ + display: () => ({ + description: "Point generation is faster based on your unspent Lollipops", + effectDisplay: `${format(lollipopMultiplierEffect.value)}x` + }), + cost: 1, + resource: points, + visibility: () => showIf(generatorUpgrade.bought.value) + })); + const lollipopMultiplierEffect = computed(() => { + let ret = Decimal.add(points.value, 1).pow(0.5); + if (ret.gte("1e20000000")) ret = ret.sqrt().times("1e10000000"); + return ret; + }); + const unlockIlluminatiUpgrade = createUpgrade(() => ({ + visibility() { + return showIf(lollipopMultiplierUpgrade.bought.value); + }, + canAfford() { + return Decimal.lt(main.points.value, 7); + }, + onPurchase() { + main.points.value = Decimal.add(main.points.value, 7); + }, + display: + "Only buyable with less than 7 points, and gives you 7 more. Unlocks a secret subtab.", + style() { + if (this.bought) { + return { backgroundColor: "#1111dd" }; + } + if (!this.canAfford) { + return { backgroundColor: "#dd1111" }; + } + return {}; + } + })); + const quasiUpgrade = createUpgrade(() => ({ + resource: createResource(exhancers.amount, "Exhancers", 0), + cost: 3, + display: { + title: "This upgrade doesn't exist", + description: "Or does it?" + } + })); + const upgrades = [generatorUpgrade, lollipopMultiplierUpgrade, unlockIlluminatiUpgrade]; + + const exhancers = createBuyable(() => ({ + resource: points, + cost() { + let x = new Decimal(this.amount.value); + if (x.gte(25)) { + x = x.pow(2).div(25); + } + const cost = Decimal.pow(2, x.pow(1.5)); + return cost.floor(); + }, + display() { + return { + title: "Exhancers", + description: `Adds ${format( + thingEffect.value + )} things and multiplies stuff by ${format(stuffEffect.value)}.` + }; + }, + onPurchase(cost) { + spentOnBuyables.value = Decimal.add(spentOnBuyables.value, cost); + }, + style: { height: "222px" }, + purchaseLimit: 4 + })); + // The following need redundant ComputedRef type annotations because otherwise the ts + // interpreter thinks exhancers are cyclically referenced + const thingEffect: ComputedRef = computed(() => { + if (Decimal.gte(exhancers.amount.value, 0)) { + return Decimal.pow(25, Decimal.pow(exhancers.amount.value, 1.1)); + } + return Decimal.pow(1 / 25, Decimal.times(exhancers.amount.value, -1).pow(1.1)); + }); + const stuffEffect: ComputedRef = computed(() => { + if (Decimal.gte(exhancers.amount.value, 0)) { + return Decimal.pow(25, Decimal.pow(exhancers.amount.value, 1.1)); + } + return Decimal.pow(1 / 25, Decimal.times(exhancers.amount.value, -1).pow(1.1)); + }); + const confirmRespec = persistent(false); + const confirming = ref(false); + const respecBuyables = createClickable(() => ({ + small: true, + display: "Respec Thingies", + onClick() { + if (confirmRespec.value && !confirming.value) { + confirming.value = true; + return; + } + + points.value = Decimal.add(points.value, spentOnBuyables.value); + exhancers.amount.value = 0; + main.tree.reset(treeNode); + } + })); + const sellExhancer = createClickable(() => ({ + small: true, + display: "Sell One", + onClick() { + if (Decimal.lte(exhancers.amount.value, 0)) { + return; + } + exhancers.amount.value = Decimal.sub(exhancers.amount.value, 1); + points.value = Decimal.add(points.value, exhancers.cost.value); + spentOnBuyables.value = Decimal.sub(spentOnBuyables.value, exhancers.cost.value); + } + })); + const buyablesDisplay = jsx(() => ( + + + (confirmRespec.value = value)} + modelValue={confirmRespec.value} + /> + {renderRow(respecBuyables)} + + {renderRow(exhancers)} + {renderRow(sellExhancer)} + (confirming.value = value)} + v-slots={{ + header: () =>

Confirm Respec

, + body: () => <>Are you sure? Respeccing these doesn't accomplish much, + footer: () => ( + + ) + }} + /> +
+ )); + + const longBoi = createBar(() => ({ + fillStyle: { backgroundColor: "#FFFFFF" }, + baseStyle: { backgroundColor: "#696969" }, + textStyle: { color: "#04e050" }, + direction: Direction.Right, + width: 300, + height: 30, + progress() { + return Decimal.add(main.points.value, 1).log(10).div(10).toNumber(); + }, + display() { + return format(main.points.value) + " / 1e10 points"; + } + })); + const tallBoi = createBar(() => ({ + fillStyle: { backgroundColor: "#4BEC13" }, + baseStyle: { backgroundColor: "#000000" }, + textStyle: { textShadow: "0px 0px 2px #000000" }, + borderStyle: { borderWidth: "7px" }, + direction: Direction.Up, + width: 50, + height: 200, + progress() { + return Decimal.div(main.points.value, 100); + }, + display() { + return formatWhole(Decimal.div(main.points.value, 1).min(100)) + "%"; + } + })); + const flatBoi = createBar(() => ({ + fillStyle: { backgroundColor: "#FE0102" }, + baseStyle: { backgroundColor: "#222222" }, + textStyle: { textShadow: "0px 0px 2px #000000" }, + direction: Direction.Up, + width: 100, + height: 30, + progress() { + return Decimal.div(points.value, 50); + } + })); + + const conversion = createCumulativeConversion(() => ({ + scaling: addSoftcap(createExponentialScaling(10, 5, 0.5), 1e100, 0.5), + baseResource: main.points, + gainResource: points, + roundUpCost: true + })); + + const reset = createReset(() => ({ + thingsToReset: (): Record[] => [layer] + })); + + const hotkeys = [ + createHotkey(() => ({ + key: "c", + description: "reset for lollipops or whatever", + onPress() { + if (resetButton.canClick.value) { + resetButton.onClick(); + } + } + })), + createHotkey(() => ({ + key: "ctrl+c", + description: "respec things", + onPress() { + respecBuyables.onClick(); + } + })) + ]; + + const treeNode = createLayerTreeNode(() => ({ + layerID: id, + color, + reset, + mark: "https://unsoftcapped2.github.io/The-Modding-Tree-2/discord.png", + tooltip() { + let tooltip = displayResource(points); + if (Decimal.gt(exhancers.amount.value, 0)) { + tooltip += `



${formatWhole( + exhancers.amount.value + )} Exhancers
`; + } + return tooltip; + }, + style: { + color: "#3325CC", + textDecoration: "underline" + } + })); + + const resetButton = createResetButton(() => ({ + conversion, + tree: main.tree, + treeNode, + style: { + color: "#AA66AA" + }, + resetDescription: "Melt your points into " + })); + + const g = createTreeNode(() => ({ + display: "TH", + color: "#6d3678", + canClick() { + return Decimal.gte(main.points.value, 10); + }, + tooltip: "Thanos your points", + onClick() { + main.points.value = Decimal.div(main.points.value, 2); + console.log("Thanos'd"); + }, + glowColor() { + if (Decimal.eq(exhancers.amount.value, 1)) { + return "orange"; + } + return ""; + } + })); + const h = createTreeNode(() => ({ + display: "h", + color() { + return themes[settings.theme].variables["--locked"]; + }, + tooltip: { + display: computed(() => `Restore your points to ${format(otherThingy.value)}`), + right: true + }, + canClick() { + return Decimal.lt(main.points.value, otherThingy.value); + }, + onClick() { + main.points.value = otherThingy.value; + } + })); + const spook = createTreeNode(() => ({ + visibility: Visibility.Hidden + })); + const tree = createTree(() => ({ + nodes(): GenericTreeNode[][] { + return [ + [f.treeNode, treeNode], + [g, spook, h] + ]; + }, + branches(): TreeBranch[] { + return [ + { + startNode: f.treeNode, + endNode: treeNode, + "stroke-width": "25px", + stroke: "green", + style: { + filter: "blur(5px)" + } + }, + { startNode: treeNode, endNode: g }, + { startNode: g, endNode: h } + ]; + } + })); + + const illuminatiTabs = createTabFamily(() => ({ + tabs: { + first: { + tab: jsx(() => ( + <> + {renderRow(...upgrades)} + {renderRow(quasiUpgrade)} +
confirmed
+ + )), + display: "first" + }, + second: { + tab: f.display, + display: "second" + } + }, + style: { + width: "660px", + backgroundColor: "brown", + "--background": "brown", + border: "solid white", + marginLeft: "auto", + marginRight: "auto" + } + })); + + const tabs = createTabFamily(() => ({ + tabs: { + mainTab: { + tab: createTab(() => ({ + display: jsx(() => ( + <> + + {render(resetButton)} + + + +
Name your points!
+ (thingy.value = value)} + /> + + I have {displayResource(main.points)} {thingy.value} points! + +
+ {renderCol(...lollipopMilestones)} + + {renderRow(...upgrades)} + {renderRow(quasiUpgrade)} + {renderRow(funChallenge)} + + )) + })), + display: "main tab", + glowColor() { + if ( + generatorUpgrade.canPurchase.value || + lollipopMultiplierUpgrade.canPurchase.value || + unlockIlluminatiUpgrade.canPurchase.value || + funChallenge.canComplete.value + ) { + return "blue"; + } + return ""; + }, + style: { color: "orange" } + }, + thingies: { + tab: createTab(() => ({ + style() { + return { backgroundColor: "#222222", "--background": "#222222" }; + }, + display: jsx(() => ( + <> + {render(buyablesDisplay)} + + + (beep.value = value)} + modelValue={beep.value} + /> + +
+ Beep +
+ + +
+ + + + )) + })), + glowColor: "white", + display: "thingies", + style: { borderColor: "orange" } + }, + jail: { + tab: createTab(() => ({ + display: jsx(() => ( + <> + {render(coolInfo)} + {render(longBoi)} + + + +
Sugar level:
+ + {render(tallBoi)} +
+ + +
idk
+ + {render(flatBoi)} +
+
+ +
It's jail because "bars"! So funny! Ha ha!
+ {render(tree)} + + )) + })), + display: "jail" + }, + illuminati: { + tab: createTab(() => ({ + display: jsx(() => ( + // This should really just be <> and , however for some reason the + // typescript interpreter can't figure out this layer and f.tsx otherwise +
+

C O N F I R M E D

+ + {render(illuminatiTabs)} +
Adjust how many points H gives you!
+ (otherThingy.value = value)} + modelValue={otherThingy.value} + min={1} + max={30} + /> +
+ )), + style: { + backgroundColor: "#3325CC" + } + })), + visibility() { + return showIf(unlockIlluminatiUpgrade.bought.value); + }, + display: "illuminati" + } + } + })); + + return { + id, + color, + name, + links() { + const links = tree.links.value.slice(); + links.push({ + startNode: h, + endNode: flatBoi, + "stroke-width": "5px", + stroke: "red", + offsetEnd: { x: -50 + 100 * flatBoi.progress.value.toNumber(), y: 0 } + }); + return links; + }, + points, + best, + beep, + thingy, + otherThingy, + spentOnBuyables, + waffleBoost, + icecreamCap, + coolInfo, + lollipopMilestones, + funChallenge, + funEffect, + generatorUpgrade, + lollipopMultiplierUpgrade, + lollipopMultiplierEffect, + unlockIlluminatiUpgrade, + quasiUpgrade, + exhancers, + respecBuyables, + sellExhancer, + bars: { tallBoi, longBoi, flatBoi }, + tree, + g, + h, + spook, + conversion, + reset, + hotkeys, + treeNode, + resetButton, + confirmRespec, + minWidth: 800, + tabs, + display: jsx(() => <>{render(tabs)}) + }; +}); + +export default layer; diff --git a/src/data/layers/aca/f.tsx b/src/data/layers/aca/f.tsx new file mode 100644 index 0000000..0aa7a90 --- /dev/null +++ b/src/data/layers/aca/f.tsx @@ -0,0 +1,179 @@ +import { createLayerTreeNode, createResetButton } from "@/data/common"; +import { main } from "@/data/mod"; +import { createClickable } from "@/features/clickables/clickable"; +import { createExponentialScaling, createIndependentConversion } from "@/features/conversion"; +import { jsx } from "@/features/feature"; +import { createInfobox } from "@/features/infoboxes/infobox"; +import { createReset } from "@/features/reset"; +import MainDisplay from "@/features/resources/MainDisplay.vue"; +import { createResource, displayResource } from "@/features/resources/resource"; +import { createLayer } from "@/game/layers"; +import { persistent } from "@/game/persistence"; +import Decimal, { DecimalSource, formatWhole } from "@/util/bignum"; +import { render } from "@/util/vue"; +import c from "./c"; + +const layer = createLayer(() => { + const id = "f"; + const color = "#FE0102"; + const name = "Farms"; + const points = createResource(0, "farm points"); + const boop = persistent(false); + + const coolInfo = createInfobox(() => ({ + title: "Lore", + titleStyle: { color: "#FE0000" }, + display: "DEEP LORE!", + bodyStyle: { backgroundColor: "#0000EE" } + })); + + const clickableState = persistent("Start"); + const clickable = createClickable(() => ({ + display() { + return { + title: "Clicky clicky!", + description: "Current state:
" + clickableState.value + }; + }, + initialState: "Start", + canClick() { + return clickableState.value !== "Borkened..."; + }, + onClick() { + switch (clickableState.value) { + case "Start": + clickableState.value = "A new state!"; + break; + case "A new state!": + clickableState.value = "Keep going!"; + break; + case "Keep going!": + clickableState.value = "Maybe that's a bit too far..."; + break; + case "Maybe that's a bit too far...": + //makeParticles(coolParticle, 4) + clickableState.value = "Borkened..."; + break; + default: + clickableState.value = "Start"; + break; + } + }, + onHold() { + console.log("Clickkkkk..."); + }, + style() { + switch (clickableState.value) { + case "Start": + return { "background-color": "green" }; + case "A new state!": + return { "background-color": "yellow" }; + case "Keep going!": + return { "background-color": "orange" }; + case "Maybe that's a bit too far...": + return { "background-color": "red" }; + default: + return {}; + } + } + })); + + const resetClickable = createClickable(() => ({ + onClick() { + if (clickableState.value == "Borkened...") { + clickableState.value = "Start"; + } + }, + display() { + return clickableState.value == "Borkened..." ? "Fix the clickable!" : "Does nothing"; + } + })); + + const reset = createReset(() => ({ + thingsToReset: (): Record[] => [layer] + })); + + const conversion = createIndependentConversion(() => ({ + scaling: createExponentialScaling(10, 3, 0.5), + baseResource: main.points, + gainResource: points, + modifyGainAmount: gain => Decimal.times(gain, c.otherThingy.value) + })); + + const treeNode = createLayerTreeNode(() => ({ + layerID: id, + color, + reset, + tooltip() { + if (treeNode.canClick.value) { + return `${displayResource(points)} ${points.displayName}`; + } + return `This weird farmer dinosaur will only see you if you have at least 10 points. You only have ${displayResource( + main.points + )}`; + }, + canClick() { + return Decimal.gte(main.points.value, 10); + } + })); + + const resetButton = createResetButton(() => ({ + conversion, + tree: main.tree, + treeNode, + display: jsx(() => { + if (resetButton.conversion.buyMax) { + return ( + + Hi! I'm a weird dinosaur and I'll give you{" "} + {formatWhole(resetButton.conversion.currentGain.value)} Farm Points + in exchange for all of your points and lollipops! (You'll get another one at{" "} + {formatWhole(resetButton.conversion.nextAt.value)} points) + + ); + } else { + return ( + + Hi! I'm a weird dinosaur and I'll give you a Farm Point in exchange + for all of your points and lollipops! (At least{" "} + {formatWhole(resetButton.conversion.nextAt.value)} points) + + ); + } + }) + })); + + const tab = jsx(() => ( + <> + {render(coolInfo)} + + {render(resetButton)} +
You have {formatWhole(conversion.baseResource.value)} points
+
+
+ +
Bork Bork!
+
+ {render(clickable)} + + )); + + return { + id, + color, + name, + points, + boop, + coolInfo, + clickable, + clickableState, + resetClickable, + reset, + conversion, + treeNode, + resetButton, + display: tab + }; +}); + +export default layer; diff --git a/src/data/layers/demo-infinity.ts b/src/data/layers/demo-infinity.ts new file mode 100644 index 0000000..6e62446 --- /dev/null +++ b/src/data/layers/demo-infinity.ts @@ -0,0 +1,354 @@ +/* eslint-disable */ +import { layers } from "@/game/layers"; +import player from "@/game/player"; +import { Layer, RawLayer } from "@/typings/layer"; +import Decimal, { format } from "@/util/bignum"; +import { + getBuyableAmount, hasChallenge, hasMilestone, hasUpgrade, setBuyableAmount +} from "@/util/features"; +import { resetLayer } from "@/util/layers"; + +export default { + id: "i", + position: 2, // Horizontal position within a row. By default it uses the layer id and sorts in alphabetical order + startData() { + return { + unlocked: false, + points: new Decimal(0) + }; + }, + branches: ["p"], + color: "#964B00", + requires() { + const require = new Decimal(8).plus( + player.layers.i.points + .div(10) + .floor() + .times(2) + ); + return require; + }, // Can be a function that takes requirement increases into account + effectDisplay() { + return ( + "Multiplying points and prestige points by " + + format( + player.layers[this.layer].points + .plus(1) + .pow(hasUpgrade("p", 235) ? 6.942 : 1) + ) + ); + }, + resource: "Infinity", // Name of prestige currency + baseResource: "pointy points", // Name of resource prestige is based on + baseAmount() { + return player.layers.p.buyables![21]; + }, // Get the current amount of baseResource + type: "custom", // normal: cost to gain currency depends on amount gained. static: cost depends on how much you already have + resetGain() { + if (hasMilestone("p", 12)) { + return getBuyableAmount("p", 21)! + .div(2) + .floor() + .times(2) + .times(5) + .sub(30) + .sub(player.layers.i.points); + } + return player.layers.p.buyables![21].gte(layers.i.requires!) ? 1 : 0; + }, // Prestige currency exponent + getNextAt() { + return new Decimal(100); + }, + canReset() { + return player.layers.p.buyables![21].gte(layers.i.requires!); + }, + prestigeButtonDisplay() { + return ( + "Reset everything for +" + + format(layers.i.resetGain) + + " Infinity.
You need " + + format(layers.i.requires!) + + " pointy points to reset." + ); + }, + row: 1, // Row the layer is in on the tree (0 is the first row) + hotkeys: [ + { + key: "i", + description: "I: Infinity", + press() { + if (layers.i.canReset) resetLayer(this.layer); + } + } + ], + layerShown() { + return ( + player.layers[this.layer].unlocked || + new Decimal(player.layers.p.buyables[21]).gte(8) + ); + }, + milestones: { + data: { + 0: { + requirementDisplay: "2 Infinity points", + effectDisplay: "Keep ALL milestones on reset", + done() { + return player.layers[this.layer].points.gte(2); + } + }, + 1: { + requirementDisplay: "3 Infinity points", + effectDisplay: "Pointy points don't reset generators", + done() { + return player.layers[this.layer].points.gte(3); + }, + unlocked() { + return hasMilestone(this.layer, Number(this.id) - 1); + } + }, + 2: { + requirementDisplay: "4 Infinity points", + effectDisplay: + "Start with 6 Time Dilation, 3 Point, and 1 of the other 2 challenges", + done() { + return player.layers[this.layer].points.gte(4); + }, + unlocked() { + return hasMilestone(this.layer, Number(this.id) - 1); + } + }, + 3: { + requirementDisplay: "5 Infinity points", + effectDisplay: "Start with 40 upgrades and 6 boosts", + done() { + return player.layers[this.layer].points.gte(5); + }, + unlocked() { + return hasMilestone(this.layer, Number(this.id) - 1); + } + }, + 4: { + requirementDisplay: "6 Infinity points", + effectDisplay: + "You can choose all of the 14th row upgrades, and remove the respec button", + done() { + return player.layers[this.layer].points.gte(6); + }, + unlocked() { + return hasMilestone(this.layer, Number(this.id) - 1); + } + }, + 5: { + requirementDisplay: "8 Infinity points", + effectDisplay: "Keep all upgrades and 7 Time dilation", + done() { + return player.layers[this.layer].points.gte(8); + }, + unlocked() { + return hasMilestone(this.layer, Number(this.id) - 1); + } + }, + 6: { + requirementDisplay: "10 Infinity points", + effectDisplay: "Infinity reset nothing and auto prestige", + done() { + return player.layers[this.layer].points.gte(10); + }, + unlocked() { + return hasMilestone(this.layer, Number(this.id) - 1); + } + } + } + }, + resetsNothing() { + return hasMilestone(this.layer, 6); + }, + update(this: Layer) { + if (hasMilestone(this.layer, 0)) { + if (!hasMilestone("p", 0)) { + player.layers.p.milestones!.push(0); + player.layers.p.milestones!.push(1); + player.layers.p.milestones!.push(2); + player.layers.p.milestones!.push(3); + player.layers.p.milestones!.push(4); + player.layers.p.milestones!.push(5); + player.layers.p.milestones!.push(6); + player.layers.p.milestones!.push(7); + player.layers.p.milestones!.push(8); + } + } + if (hasMilestone(this.layer, 2)) { + if (!hasChallenge("p", 11)) { + player.layers.p.challenges![11] = new Decimal( + hasMilestone(this.layer, 5) ? 7 : 6 + ); + player.layers.p.challenges![12] = new Decimal(3); + player.layers.p.challenges![21] = new Decimal(1); + player.layers.p.challenges![22] = new Decimal(1); + } + } + if (hasMilestone(this.layer, 3)) { + if (!hasUpgrade("p", 71)) { + player.layers.p.upgrades = [ + 11, + 12, + 13, + 14, + 21, + 22, + 23, + 24, + 31, + 32, + 33, + 34, + 41, + 42, + 43, + 44, + 51, + 52, + 53, + 54, + 61, + 62, + 63, + 64, + 71, + 72, + 73, + 74, + 81, + 82, + 83, + 84, + 91, + 92, + 93, + 94, + 101, + 102, + 103, + 104 + ]; + } + if (getBuyableAmount("p", 11)!.lt(6)) { + setBuyableAmount("p", 11, new Decimal(6)); + } + } + if (hasUpgrade(this.layer, 13)) { + for ( + let i = 0; + i < (hasUpgrade("p", 222) ? 100 : hasUpgrade("p", 215) ? 10 : 1); + i++ + ) { + if (layers.p.buyables!.data[12].canAfford) layers.p.buyables!.data[12].buy(); + if (layers.p.buyables!.data[13].canAfford) layers.p.buyables!.data[13].buy(); + if ( + layers.p.buyables!.data[14].canAfford && + layers.p.buyables!.data[14].unlocked + ) + layers.p.buyables!.data[14].buy(); + if (layers.p.buyables!.data[21].canAfford) layers.p.buyables!.data[21].buy(); + } + } + if (hasUpgrade("p", 223)) { + if (hasMilestone("p", 14)) + player.layers.p.buyables![22] = player.layers.p.buyables![22].max( + player.layers.p.buyables![21].sub(7) + ); + else if (layers.p.buyables!.data[22].canAfford) layers.p.buyables!.data[22].buy(); + } + if (hasMilestone(this.layer, 5) && !hasUpgrade("p", 111)) { + player.layers.p.upgrades = [ + 11, + 12, + 13, + 14, + 21, + 22, + 23, + 24, + 31, + 32, + 33, + 34, + 41, + 42, + 43, + 44, + 51, + 52, + 53, + 54, + 61, + 62, + 63, + 64, + 71, + 72, + 73, + 74, + 81, + 82, + 83, + 84, + 91, + 92, + 93, + 94, + 101, + 102, + 103, + 104, + 111, + 121, + 122, + 131, + 132, + 141, + 142, + 143 + ]; + } + if (hasMilestone(this.layer, 6)) { + this.reset(); + } + }, + upgrades: { + rows: 999, + cols: 5, + data: { + 11: { + title: "Prestige", + description: "Gain 100% of prestige points per second", + cost() { + return new Decimal(1); + }, + unlocked() { + return hasMilestone(this.layer, 4); + } + }, + 12: { + title: "Automation", + description: "Remove the nerf of upgrade Active", + cost() { + return new Decimal(2); + }, + unlocked() { + return hasUpgrade(this.layer, 11); + } + }, + 13: { + title: "Pointy", + description: "Automatically buy generators and pointy points", + cost() { + return new Decimal(5); + }, + unlocked() { + return hasUpgrade(this.layer, 11); + } + } + } + } +} as RawLayer; diff --git a/src/data/layers/demo.ts b/src/data/layers/demo.ts new file mode 100644 index 0000000..cb4630b --- /dev/null +++ b/src/data/layers/demo.ts @@ -0,0 +1,2298 @@ +/* eslint-disable */ +import { layers } from "@/game/layers"; +import player from "@/game/player"; +import { RawLayer } from "@/typings/layer"; +import Decimal, { format } from "@/util/bignum"; +import { + getBuyableAmount, hasChallenge, hasMilestone, hasUpgrade, setBuyableAmount +} from "@/util/features"; +import { resetLayer } from "@/util/layers"; + +export default { + id: "p", + position: 2, + startData() { + return { + unlocked: true, + points: new Decimal(0), + gp: new Decimal(0), + g: new Decimal(0), + geff: new Decimal(1), + cmult: new Decimal(1) + }; + }, + color: "#4BDC13", + requires() { + let require = new Decimal(68.99); + if (hasMilestone(this.layer, 0)) require = require.plus(0.01); + if (hasUpgrade(this.layer, 21)) + require = require.tetrate( + hasUpgrade("p", 34) + ? new Decimal(1) + .div( + new Decimal(1).plus( + layers.p.upgrades!.data[34].effect as Decimal + ) + ) + .toNumber() + : 1 + ); + if (hasUpgrade(this.layer, 22)) + require = require.pow( + hasUpgrade("p", 34) + ? new Decimal(1).div( + new Decimal(1).plus(layers.p.upgrades!.data[34].effect as Decimal) + ) + : 1 + ); + if (hasUpgrade(this.layer, 23)) + require = require.div( + hasUpgrade("p", 34) + ? new Decimal(1).plus(layers.p.upgrades!.data[34].effect as Decimal) + : 1 + ); + if (hasUpgrade(this.layer, 24)) + require = require.sub( + hasUpgrade("p", 34) + ? new Decimal(1).plus(layers.p.upgrades!.data[34].effect as Decimal) + : 1 + ); + return require.max(1); + }, + resource: "prestige points", + baseResource: "points", + baseAmount() { + return player.points; + }, // Get the current amount of baseResource + type: "normal", // normal: cost to gain currency depends on amount gained. static: cost depends on how much you already have + exponent: 0.5, // Prestige currency exponent + gainMult() { + // Calculate the multiplier for main currency from bonuses + let mult = new Decimal(1); + if (hasUpgrade(this.layer, 131)) mult = mult.times(10); + if (player.layers.i.unlocked) + mult = mult.times( + player.layers.i.points.plus(1).pow(hasUpgrade("p", 235) ? 6.942 : 1) + ); + if (hasUpgrade(this.layer, 222)) + mult = mult.times(getBuyableAmount(this.layer, 22)!.plus(1)); + if (hasUpgrade("p", 231)) { + const asdf = hasUpgrade("p", 132) + ? (player.layers.p.gp as Decimal).plus(1).pow(new Decimal(1).div(2)) + : hasUpgrade("p", 101) + ? (player.layers.p.gp as Decimal).plus(1).pow(new Decimal(1).div(3)) + : hasUpgrade("p", 93) + ? (player.layers.p.gp as Decimal).plus(1).pow(0.2) + : (player.layers.p.gp as Decimal).plus(1).log10(); + mult = mult.mul(asdf.plus(1)); + } + if (hasMilestone(this.layer, 13)) + mult = mult.mul( + new Decimal(2) + .plus(layers.p.buyables!.data[33].effect as Decimal) + .pow(getBuyableAmount(this.layer, 32)!) + ); + return mult; + }, + gainExp() { + // Calculate the exponent on main currency from bonuses + return new Decimal(1); + }, + row: 0, // Row the layer is in on the tree (0 is the first row) + hotkeys: [ + { + key: "p", + description: "P: Reset for prestige points", + press() { + if (layers.p.canReset) resetLayer(this.layer); + } + } + ], + layerShown() { + return true; + }, + upgrades: { + data: { + 11: { + title: "Gain points", + description: "Point generation is increased by 1", + cost() { + if (hasMilestone(this.layer, 2)) return new Decimal(1); + return new Decimal(1.00001); + }, + unlocked() { + return true; + } + }, + 12: { + title: "Gain more points", + description: "Point generation is singled", + cost() { + return new Decimal(1); + }, + unlocked() { + return hasUpgrade(this.layer, 11); + } + }, + 13: { + title: "Gain more points", + description: "Point generation is lined", + cost() { + return new Decimal(1); + }, + unlocked() { + return hasUpgrade(this.layer, 12); + } + }, + 14: { + title: "Gain more points", + description: "Point generation is tetrated by 1", + cost() { + return new Decimal(1); + }, + unlocked() { + return hasUpgrade(this.layer, 13); + } + }, + 21: { + title: "Lower prestige requirement", + description: "Prestige point requirement is superrooted by 1", + cost() { + return new Decimal(1); + }, + unlocked() { + return hasUpgrade(this.layer, 14); + } + }, + 22: { + title: "Lower prestige requirement more", + description: "Prestige point requirement is line rooted", + cost() { + return new Decimal(1); + }, + unlocked() { + return hasUpgrade(this.layer, 21); + } + }, + 23: { + title: "Lower prestige requirement more", + description: "Prestige point requirement is wholed", + cost() { + return new Decimal(1); + }, + unlocked() { + return hasUpgrade(this.layer, 22); + } + }, + 24: { + title: "Lower prestige requirement more", + description: "Prestige point requirement is decreased by 1", + cost() { + return new Decimal(1); + }, + unlocked() { + return hasUpgrade(this.layer, 23); + } + }, + 31: { + title: "Unlock", + description: "Unlock an upgrade", + cost() { + return new Decimal(1); + }, + unlocked() { + return hasUpgrade(this.layer, 24); + } + }, + 32: { + title: "An", + description: "Unlock an upgrade", + cost() { + return new Decimal(1); + }, + unlocked() { + return hasUpgrade(this.layer, 31); + } + }, + 33: { + title: "Upgrade", + description: "Unlock an upgrade", + cost() { + return new Decimal(1); + }, + unlocked() { + return hasUpgrade(this.layer, 32); + } + }, + 34: { + title: "Increase", + description() { + return ( + "Add 0.01 to all above upgrades. Currently: +" + + format(this.effect as Decimal) + ); + }, + cost() { + return new Decimal(1); + }, + unlocked() { + return hasUpgrade(this.layer, 33); + }, + effect() { + let r = hasUpgrade("p", 41) + ? new Decimal(0.01).times(layers.p.upgrades!.data[41].effect as Decimal) + : new Decimal(0.01); + r = r.times( + new Decimal(1).plus( + new Decimal(player.layers[this.layer].challenges![11]) + .add(1) + .pow(hasUpgrade(this.layer, 121) ? 1.2 : 1) + ) + ); + if (hasUpgrade(this.layer, 92)) + r = r.plus( + new Decimal(0.001) + .times((player.layers[this.layer].g as Decimal).plus(1)) + .min(0.05) + ); + return r; + } + }, + 41: { + title: "Increase again", + description() { + return ( + "Multiply the previous upgrade by 1.01. Currently: x" + + format(this.effect as Decimal) + ); + }, + cost() { + return new Decimal(1); + }, + unlocked() { + return hasUpgrade(this.layer, 34); + }, + effect() { + return new Decimal(1.01) + .pow(hasUpgrade("p", 42) ? layers.p.upgrades!.data[42].effect as Decimal : 1) + .times(hasUpgrade("p", 63) ? 2 : 1); + } + }, + 42: { + title: "Increase again", + description() { + return ( + "Exponentiate the previous upgrade by 1.01. Currently: ^" + + format(this.effect as Decimal) + ); + }, + cost() { + return new Decimal(1); + }, + unlocked() { + return hasUpgrade(this.layer, 41); + }, + effect() { + return new Decimal(1.01) + .tetrate(hasUpgrade("p", 43) ? (layers.p.upgrades!.data[43].effect as Decimal).toNumber() : 1) + .times(hasUpgrade("p", 63) ? 2 : 1) + .times(hasUpgrade("p", 64) ? 2 : 1); + } + }, + 43: { + title: "Increase again", + description() { + return ( + "Tetrate the previous upgrade by 1.01. Currently: ^^" + + format(this.effect as Decimal) + ); + }, + cost() { + return new Decimal(1); + }, + unlocked() { + return hasUpgrade(this.layer, 42); + }, + effect() { + return new Decimal(1.01) + .pentate(hasUpgrade("p", 44) ? (layers.p.upgrades!.data[44].effect as Decimal).toNumber() : 1) + .times(hasUpgrade("p", 63) ? 2 : 1) + .times(hasUpgrade("p", 64) ? 2 : 1); + } + }, + 44: { + title: "Increase again", + description() { + return ( + "Pentate the previous upgrade by 1.01. Currently: ^^^" + + format(this.effect as Decimal) + ); + }, + cost() { + return new Decimal(1); + }, + unlocked() { + return hasUpgrade(this.layer, 43); + }, + effect() { + return new Decimal(1.01) + .times(hasUpgrade("p", 63) ? 2 : 1) + .times(hasUpgrade("p", 64) ? 2 : 1); + } + }, + 51: { + title: "Challenging", + description: "This upgrade doesn't unlock a challenge", + cost() { + return new Decimal(1); + }, + unlocked() { + return hasUpgrade(this.layer, 44); + } + }, + 52: { + title: "Not challenging", + description: "This upgrade doesn't add 1 to the completion limit", + cost() { + return new Decimal(1); + }, + unlocked() { + return hasUpgrade(this.layer, 51); + } + }, + 53: { + title: "Not not challenging", + description: "This upgrade doesn't add 1 to the completion limit", + cost() { + return new Decimal(1); + }, + unlocked() { + return hasUpgrade(this.layer, 52); + } + }, + 54: { + title: "(not^3) challenging", + description: + "Fix the bug where you can't buy upgrades when you have 1 prestige point", + cost() { + return new Decimal(0.99999); + }, + unlocked() { + return hasUpgrade(this.layer, 53); + }, + onPurchase() { + player.layers.p.points = player.layers.p.points.round(); + } + }, + 61: { + title: "(not^4) challenging", + description: "Doesn't unlock a second challenge", + cost() { + return new Decimal(1); + }, + unlocked() { + return hasUpgrade(this.layer, 54) && hasUpgrade(this.layer, 53); + } + }, + 62: { + title: "Infinity points", + description: "You can now complete Time Dilation 4 more times", + cost() { + return new Decimal(1); + }, + unlocked() { + return hasUpgrade(this.layer, 61); + } + }, + 63: { + title: "Eternity points", + description: "Double all fourth row upgrade effects", + cost() { + return new Decimal(1); + }, + unlocked() { + return hasUpgrade(this.layer, 62); + } + }, + 64: { + title: "Reality points", + description: "Previous upgrade, but only to the last 3 upgrades", + cost() { + return new Decimal(1); + }, + unlocked() { + return hasUpgrade(this.layer, 63); + } + }, + 71: { + title: "1", + description: "Add 1.1 to point gain, but reset all above upgrades", + cost() { + return new Decimal(1); + }, + unlocked() { + return hasUpgrade(this.layer, 64); + }, + onPurchase() { + if (!hasMilestone(this.layer, 0)) + player.layers[this.layer].upgrades = [71]; + } + }, + 72: { + title: "2", + description: "Multiply point gain by 1.1, but reset all above upgrades", + cost() { + return new Decimal(2); + }, + unlocked() { + return ( + hasUpgrade(this.layer, 64) && + hasUpgrade(this.layer, Number(this.id) - 1) + ); + }, + onPurchase() { + if (!hasMilestone(this.layer, 1)) + player.layers[this.layer].upgrades = [71, 72]; + } + }, + 73: { + title: "3", + description: "Raise point gain by ^1.1, but reset all above upgrades", + cost() { + return new Decimal(4); + }, + unlocked() { + return ( + hasUpgrade(this.layer, 64) && + hasUpgrade(this.layer, Number(this.id) - 1) + ); + }, + onPurchase() { + if (!hasMilestone(this.layer, 1)) + player.layers[this.layer].upgrades = [71, 72, 73]; + } + }, + 74: { + title: "4", + description: "Tetrate point gain by 1.1, but reset all above upgrades", + cost() { + return new Decimal(8); + }, + unlocked() { + return ( + hasUpgrade(this.layer, 64) && + hasUpgrade(this.layer, Number(this.id) - 1) + ); + }, + onPurchase() { + if (!hasMilestone(this.layer, 2)) + player.layers[this.layer].upgrades = [71, 72, 73, 74]; + if (hasMilestone(this.layer, 1) && !hasMilestone(this.layer, 2)) { + player.layers[this.layer].upgrades = [ + 11, + 12, + 13, + 14, + 21, + 22, + 23, + 24, + 71, + 72, + 73, + 74 + ]; + } + } + }, + 81: { + title: "5", + description: "Generator efficiency is increased by 2", + cost() { + return new Decimal(1); + }, + unlocked() { + return ( + hasUpgrade(this.layer, 74) && + (player.layers[this.layer].buyables![12].gt(0) || + player.layers[this.layer].buyables![21].gt(0)) + ); + } + }, + 82: { + title: "6", + description: "Unlock another way to buy generators", + cost() { + return new Decimal(1); + }, + unlocked() { + return ( + hasUpgrade(this.layer, 81) && + (player.layers[this.layer].buyables![12].gt(0) || + player.layers[this.layer].buyables![21].gt(0)) + ); + } + }, + 83: { + title: "7", + description: "Generator efficiency is boosted by prestige points", + cost() { + return new Decimal(3); + }, + unlocked() { + return hasUpgrade(this.layer, 82); + } + }, + 84: { + title: "8", + description: "You can complete Point one more time", + cost() { + return new Decimal(3); + }, + unlocked() { + return hasUpgrade(this.layer, 83); + } + }, + 91: { + title: "9", + description: "New Challenge Time", + cost() { + return new Decimal(20); + }, + unlocked() { + return ( + hasUpgrade(this.layer, 84) && + new Decimal(player.layers[this.layer].challenges![12]).gte(3) + ); + } + }, + 92: { + title: "10", + description: + "Each of the first 50 generators adds 0.001 to Increase", + cost() { + return new Decimal(5); + }, + unlocked() { + return hasUpgrade(this.layer, 91) && hasChallenge(this.layer, 21); + } + }, + 93: { + title: "11", + description: + "Change the tree trunk in generator effect to a hypertessaract root", + cost() { + return new Decimal(7); + }, + unlocked() { + return hasUpgrade(this.layer, 92); + } + }, + 94: { + title: "12", + description: "Unlock a clickable in generators", + cost() { + return new Decimal(50); + }, + unlocked() { + return hasUpgrade(this.layer, 93); + } + }, + 101: { + title: "10th row????", + description: "Decrease the dimensions of 11 by 2", + cost() { + return new Decimal(10); + }, + unlocked() { + return hasUpgrade(this.layer, 94); + } + }, + 102: { + title: "2 Tree Trunks", + description: + "Double log of generator points adds to generator efficiency", + cost() { + return new Decimal(25); + }, + unlocked() { + return hasUpgrade(this.layer, 101); + } + }, + 103: { + title: "(not^5) challenging", + description: "Unlock the last challenge", + cost() { + return new Decimal(103); + }, + unlocked() { + return hasUpgrade(this.layer, 102); + } + }, + 104: { + title: "2 layers tree", + description: "Prestige points boost points, and unlock another tab", + cost() { + return new Decimal(100); + }, + unlocked() { + return hasUpgrade(this.layer, 103) && hasChallenge(this.layer, 22); + } + }, + 111: { + title: "not (hardcapped)", + description: + "Remove the generator clickable hardcap, and you can only pick one upgrade on each row below this", + cost() { + return new Decimal(110); + }, + unlocked() { + return hasUpgrade(this.layer, 104) && hasMilestone(this.layer, 6); + } + }, + 112: { + title: "Respec button", + description: "Respec all lower upgrades, but you don't get points back", + cost() { + return new Decimal(100); + }, + unlocked() { + return ( + hasUpgrade(this.layer, 111) && + (hasUpgrade(this.layer, 121) || hasUpgrade(this.layer, 122)) && + !hasMilestone("i", 4) + ); + }, + onPurchase() { + player.layers.p.upgrades = player.layers.p.upgrades!.filter((i: string | number) => { + return Number(i) < 112; + }); + } + }, + 121: { + title: "Timers", + description: "Raise the Time Dilation reward effect to the 1.2", + cost() { + return new Decimal(500); + }, + unlocked() { + return ( + hasUpgrade(this.layer, 111) && + (!hasUpgrade(this.layer, 122) || hasMilestone(this.layer, 7)) + ); + } + }, + 122: { + title: "Generators", + description: + "Decrease the first generator buyable cost scaling base by 2", + cost() { + return new Decimal(500); + }, + unlocked() { + return ( + hasUpgrade(this.layer, 111) && + (!hasUpgrade(this.layer, 121) || hasMilestone(this.layer, 7)) + ); + } + }, + 131: { + title: "Prestige", + description: "Gain 10x more prestige points", + cost() { + return new Decimal(5000); + }, + unlocked() { + return ( + (hasUpgrade(this.layer, 121) || hasUpgrade(this.layer, 122)) && + (!hasUpgrade(this.layer, 132) || hasMilestone(this.layer, 7)) + ); + } + }, + 132: { + title: "One and a half", + description: "Raise generator effect to the 1.5", + cost() { + return new Decimal(5000); + }, + unlocked() { + return ( + (hasUpgrade(this.layer, 121) || hasUpgrade(this.layer, 122)) && + (!hasUpgrade(this.layer, 131) || hasMilestone(this.layer, 7)) + ); + } + }, + + 141: { + title: "Active", + description: + "Multiply generator efficiency now increases by 1, but it doesn't automatically click.", + cost() { + return new Decimal(50000); + }, + unlocked() { + return ( + (hasUpgrade(this.layer, 131) || hasUpgrade(this.layer, 132)) && + ((!hasUpgrade(this.layer, 142) && !hasUpgrade(this.layer, 143)) || + hasMilestone("i", 4)) + ); + } + }, + 142: { + title: "Passive", + description: "Gain 5x more points", + cost() { + return new Decimal(50000); + }, + unlocked() { + return ( + (hasUpgrade(this.layer, 131) || hasUpgrade(this.layer, 132)) && + ((!hasUpgrade(this.layer, 141) && !hasUpgrade(this.layer, 143)) || + hasMilestone("i", 4)) + ); + } + }, + 143: { + title: "Idle", + description: "Hours played multiply generator power", + cost() { + return new Decimal(50000); + }, + unlocked() { + return ( + (hasUpgrade(this.layer, 131) || hasUpgrade(this.layer, 132)) && + ((!hasUpgrade(this.layer, 142) && !hasUpgrade(this.layer, 141)) || + hasMilestone("i", 4)) + ); + } + }, + 211: { + title: "Prestige", + description: "Pointy points multiply points", + cost() { + return new Decimal(1); + }, + canAfford() { + return getBuyableAmount(this.layer, 22)!.gte(this.cost); + }, + pay() { + setBuyableAmount( + this.layer, + 22, + getBuyableAmount(this.layer, 22)!.sub(this.cost) + ); + }, + unlocked() { + return ( + hasMilestone("i", 5) && player.subtabs.p.mainTabs != "Upgrades" + ); + } + }, + 212: { + title: "Pointy", + description: + "Pointy prestige points reduce the cost scaling of pointy points", + cost() { + return new Decimal(2); + }, + canAfford() { + return getBuyableAmount(this.layer, 22)!.gte(this.cost); + }, + pay() { + setBuyableAmount( + this.layer, + 22, + getBuyableAmount(this.layer, 22)!.sub(this.cost) + ); + }, + unlocked() { + return ( + hasMilestone("i", 5) && + player.subtabs.p.mainTabs != "Upgrades" && + hasUpgrade(this.layer, 211) + ); + } + }, + 213: { + title: "Time", + description: "Generator power also multiplies point gain", + cost() { + return new Decimal(6); + }, + canAfford() { + return getBuyableAmount(this.layer, 22)!.gte(this.cost); + }, + pay() { + setBuyableAmount( + this.layer, + 22, + getBuyableAmount(this.layer, 22)!.sub(this.cost) + ); + }, + unlocked() { + return ( + hasMilestone("i", 5) && + player.subtabs.p.mainTabs != "Upgrades" && + hasUpgrade(this.layer, 212) + ); + } + }, + 214: { + title: "^0", + description: "Further reduce the pointy point scaling", + cost() { + return new Decimal(11); + }, + canAfford() { + return getBuyableAmount(this.layer, 22)!.gte(this.cost); + }, + pay() { + setBuyableAmount( + this.layer, + 22, + getBuyableAmount(this.layer, 22)!.sub(this.cost) + ); + }, + unlocked() { + return ( + hasMilestone("i", 5) && + player.subtabs.p.mainTabs != "Upgrades" && + hasUpgrade(this.layer, 213) + ); + } + }, + 215: { + title: "bulk", + description: "Auto-pointy points now buys 10 per tick", + cost() { + return new Decimal(27); + }, + canAfford() { + return getBuyableAmount(this.layer, 22)!.gte(this.cost); + }, + pay() { + setBuyableAmount( + this.layer, + 22, + getBuyableAmount(this.layer, 22)!.sub(this.cost) + ); + }, + unlocked() { + return ( + hasMilestone("i", 5) && + player.subtabs.p.mainTabs != "Upgrades" && + hasUpgrade(this.layer, 214) + ); + } + }, + 221: { + title: "^-1", + description: "^0 is even more powerful", + cost() { + return new Decimal(28); + }, + canAfford() { + return getBuyableAmount(this.layer, 22)!.gte(this.cost); + }, + pay() { + setBuyableAmount( + this.layer, + 22, + getBuyableAmount(this.layer, 22)!.sub(this.cost) + ); + }, + unlocked() { + return ( + hasMilestone("i", 5) && + player.subtabs.p.mainTabs != "Upgrades" && + hasUpgrade(this.layer, 215) + ); + } + }, + 222: { + title: "???", + description: + "square bulk and pointy prestige points multiply prestige points", + cost() { + return new Decimal(90); + }, + canAfford() { + return getBuyableAmount(this.layer, 22)!.gte(this.cost); + }, + pay() { + setBuyableAmount( + this.layer, + 22, + getBuyableAmount(this.layer, 22)!.sub(this.cost) + ); + }, + unlocked() { + return ( + hasMilestone("i", 5) && + player.subtabs.p.mainTabs != "Upgrades" && + hasUpgrade(this.layer, 221) + ); + } + }, + 223: { + title: "more automation", + description: "Automatically gain pointy prestige points", + cost() { + return new Decimal(96); + }, + canAfford() { + return getBuyableAmount(this.layer, 22)!.gte(this.cost); + }, + pay() { + setBuyableAmount( + this.layer, + 22, + getBuyableAmount(this.layer, 22)!.sub(this.cost) + ); + }, + unlocked() { + return ( + hasMilestone("i", 5) && + player.subtabs.p.mainTabs != "Upgrades" && + hasUpgrade(this.layer, 222) + ); + } + }, + 224: { + title: "Generation", + description: "Generator costs are divided by generator effect", + cost() { + return new Decimal(100); + }, + canAfford() { + return getBuyableAmount(this.layer, 22)!.gte(this.cost); + }, + pay() { + setBuyableAmount( + this.layer, + 22, + getBuyableAmount(this.layer, 22)!.sub(this.cost) + ); + }, + unlocked() { + return ( + hasMilestone("i", 5) && + player.subtabs.p.mainTabs != "Upgrades" && + hasUpgrade(this.layer, 223) + ); + } + }, + 225: { + title: "Boosters", + description: "Unlock boosters (next update)", + cost() { + return new Decimal(135); + }, + canAfford() { + return getBuyableAmount(this.layer, 22)!.gte(this.cost); + }, + pay() { + setBuyableAmount( + this.layer, + 22, + getBuyableAmount(this.layer, 22)!.sub(this.cost) + ); + }, + unlocked() { + return ( + hasMilestone("i", 5) && + player.subtabs.p.mainTabs != "Upgrades" && + hasUpgrade(this.layer, 224) + ); + } + }, + 231: { + title: "Blue", + description: "The generator effect also affects prestige points", + cost() { + return new Decimal(4); + }, + canAfford() { + return getBuyableAmount(this.layer, 23)!.gte(this.cost); + }, + pay() { + setBuyableAmount( + this.layer, + 23, + getBuyableAmount(this.layer, 23)!.sub(this.cost) + ); + }, + unlocked() { + return ( + player.subtabs.p.mainTabs != "Upgrades" && + hasMilestone(this.layer, 11) + ); + }, + currencyDisplayName: "pointy boosters" + }, + 232: { + title: "Red", + description: "Unlock a third way to buy generators", + cost() { + return new Decimal(5); + }, + canAfford() { + return getBuyableAmount(this.layer, 23)!.gte(this.cost); + }, + pay() { + setBuyableAmount( + this.layer, + 23, + getBuyableAmount(this.layer, 23)!.sub(this.cost) + ); + }, + unlocked() { + return ( + player.subtabs.p.mainTabs != "Upgrades" && + hasMilestone(this.layer, 12) + ); + }, + currencyDisplayName: "pointy boosters" + }, + 233: { + title: "Green", + description: + "Prestige points do not reset your pointy points and boosters don't reset generators", + cost() { + return new Decimal(5); + }, + canAfford() { + return getBuyableAmount(this.layer, 23)!.gte(this.cost); + }, + pay() { + setBuyableAmount( + this.layer, + 23, + getBuyableAmount(this.layer, 23)!.sub(this.cost) + ); + }, + unlocked() { + return ( + player.subtabs.p.mainTabs != "Upgrades" && + hasMilestone(this.layer, 12) + ); + }, + currencyDisplayName: "pointy boosters" + }, + 234: { + title: "Yellow", + description: + "Divide the cost of the third generator buyable based on boosters", + cost() { + return new Decimal(6); + }, + canAfford() { + return getBuyableAmount(this.layer, 23)!.gte(this.cost); + }, + pay() { + setBuyableAmount( + this.layer, + 23, + getBuyableAmount(this.layer, 23)!.sub(this.cost) + ); + }, + unlocked() { + return ( + player.subtabs.p.mainTabs != "Upgrades" && + hasMilestone(this.layer, 12) + ); + }, + currencyDisplayName: "pointy boosters" + }, + 235: { + title: "Orange", + description: "Raise the Infinity effect to the 6.9420th power", + cost() { + return new Decimal(8); + }, + canAfford() { + return getBuyableAmount(this.layer, 23)!.gte(this.cost); + }, + pay() { + setBuyableAmount( + this.layer, + 23, + getBuyableAmount(this.layer, 23)!.sub(this.cost) + ); + }, + unlocked() { + return ( + player.subtabs.p.mainTabs != "Upgrades" && + hasMilestone(this.layer, 12) + ); + }, + currencyDisplayName: "pointy boosters" + } + } + }, + + clickables: { + rows: 1, + cols: 1, + data: { + 11: { + display() { + return ( + "Multiply generator efficiency by " + + format(player.layers.p.cmult as Decimal) + + ((player.layers.p.cmult as Decimal).min(100).eq(100) && !hasUpgrade(this.layer, 111) + ? " (hardcapped)" + : "") + ); + }, + unlocked() { + return hasUpgrade("p", 94); + }, + click() { + player.layers.p.cmult = (player.layers.p.cmult as Decimal).plus(hasUpgrade("p", 141) ? 1 : 0.01); + if (!hasUpgrade(this.layer, 111)) + player.layers.p.cmult = (player.layers.p.cmult as Decimal).min(100); + }, + canClick() { + return (player.layers.p.cmult as Decimal).lt(100) || hasUpgrade(this.layer, 111); + } + } + } + }, + + challenges: { + rows: 99, + cols: 2, + data: { + 11: { + name: "Time dilation", + challengeDescription() { + return "Point gain exponent is raised to the ^0.75"; + }, + goal() { + return new Decimal(100).times( + new Decimal(10).pow( + new Decimal(player.layers[this.layer].challenges![this.id]) + .times( + new Decimal(1).sub( + new Decimal( + layers[this.layer].challenges!.data[12].effect as number + ).div(100) + ) + ) + .pow(2) + ) + ); + }, + rewardDescription() { + return ( + "You have completed this challenge " + + player.layers[this.layer].challenges![this.id] + + "/" + + this.completionLimit + + " times. Multiply Increase's effect by challenge completions+1. Currently: x" + + format( + new Decimal(player.layers[this.layer].challenges![this.id]) + .add(1) + .pow(hasUpgrade(this.layer, 121) ? 1.2 : 1) + ) + ); + }, + unlocked() { + return hasUpgrade("p", 51) || hasChallenge(this.layer, this.id); + }, + completionLimit() { + if (hasUpgrade("p", 62)) return 7; + if (hasUpgrade("p", 53)) return 3; + if (hasUpgrade("p", 52)) return 2; + return 1; + } + }, + 12: { + name: "Point", + challengeDescription: "Points are pointed", + goal() { + return new Decimal(100); + }, + rewardDescription() { + return ( + "You have completed this challenge " + + player.layers[this.layer].challenges![this.id] + + "/" + + this.completionLimit + + " times, making previous challenge goal scale " + + layers[this.layer].challenges!.data[this.id].effect + + "% slower." + ); + }, + unlocked() { + return hasUpgrade("p", 61) || hasChallenge(this.layer, this.id); + }, + effect() { + if (!hasChallenge(this.layer, this.id)) return 0; + if (Decimal.eq(player.layers[this.layer].challenges![this.id], 1)) + return 50; + if (Decimal.eq(player.layers[this.layer].challenges![this.id], 2)) + return 60; + if (Decimal.eq(player.layers[this.layer].challenges![this.id], 3)) + return 70; + }, + completionLimit() { + let l = new Decimal(1); + if (hasUpgrade("p", 84)) l = l.plus(1); + if (hasMilestone("p", 3)) l = l.plus(1); + return l; + } + }, + 21: { + name: "Time Points", + challengeDescription: "You are stuck in all above challenges", + goal() { + return new Decimal(308.25); + }, + rewardDescription() { + return "Lower the first generator buyable cost base by 6"; + }, + unlocked() { + return hasUpgrade("p", 91) || hasChallenge(this.layer, this.id); + } + }, + 22: { + name: "Last Challenge", + challengeDescription: "Generator points do nothing", + goal() { + return new Decimal(9999); + }, + rewardDescription() { + return "Autoclick the clickable and reduce 2 Tree Trunks by 1"; + }, + unlocked() { + return hasUpgrade("p", 103) || hasChallenge(this.layer, this.id); + } + } + } + }, + buyables: { + rows: 99, + cols: 4, + data: { + 11: { + cost() { + return new Decimal(0); + }, + display() { + return ( + "Reset all upgrades and challenges, but get a boost. You have reset " + + getBuyableAmount(this.layer, this.id) + + " times.
" + + (getBuyableAmount(this.layer, this.id)!.eq(6) + ? "You can't buy more than 6 boosts!" + : "You need all upgrades to reset.") + ); + }, + canAfford() { + return ( + player.layers[this.layer].points.gte(this.cost!) && + hasUpgrade(this.layer, 74) && + hasUpgrade(this.layer, 64) && + getBuyableAmount(this.layer, this.id)!.lt(6) + ); + }, + buy() { + player.layers[this.layer].points = player.layers[ + this.layer + ].points.sub(this.cost!); + setBuyableAmount( + this.layer, + this.id, + getBuyableAmount(this.layer, this.id)!.add(1) + ); + player.layers[this.layer].points = new Decimal(0); + player.layers[this.layer].upgrades = []; + if (hasMilestone(this.layer, 1)) + player.layers[this.layer].upgrades = [ + 11, + 12, + 13, + 14, + 21, + 22, + 23, + 24 + ]; + if (hasMilestone(this.layer, 3)) + player.layers[this.layer].upgrades = [ + 11, + 12, + 13, + 14, + 21, + 22, + 23, + 24, + 31, + 32, + 33, + 34, + 41, + 42, + 43, + 44, + 51, + 52, + 53, + 54, + 61, + 62, + 63, + 64 + ]; + if (!hasMilestone(this.layer, 2)) { + for (const c in layers[this.layer].challenges) { + player.layers[this.layer].challenges![c] = new Decimal(0); + } + } + }, + unlocked() { + return ( + (hasUpgrade(this.layer, 74) && hasUpgrade(this.layer, 64)) || + hasMilestone(this.layer, 0) + ); + } + }, + 12: { + cost() { + return new Decimal(1) + .times( + new Decimal(hasChallenge(this.layer, 21) ? 4 : 10) + .sub(hasUpgrade(this.layer, 122) ? 2 : 0) + .pow(player.layers.p.buyables![this.id]) + ) + .div( + hasUpgrade(this.layer, 224) + ? hasUpgrade("p", 132) + ? (player.layers.p.gp as Decimal).plus(1).pow(new Decimal(1).div(2)) + : hasUpgrade("p", 101) + ? (player.layers.p.gp as Decimal).plus(1).pow(new Decimal(1).div(3)) + : hasUpgrade("p", 93) + ? (player.layers.p.gp as Decimal).plus(1).pow(0.2) + : (player.layers.p.gp as Decimal).plus(1).log10() + : 1 + ); + }, + display() { + return "Buy a generator for " + format(this.cost!) + " points"; + }, + canAfford() { + return player.points.gte(this.cost!) && hasMilestone(this.layer, 5); + }, + buy() { + if (!hasMilestone("p", 13)) + player.points = player.points.sub(this.cost!); + setBuyableAmount( + this.layer, + this.id, + getBuyableAmount(this.layer, this.id)!.add(1) + ); + player.layers[this.layer].g = (player.layers[this.layer].g as Decimal).plus(1); + }, + unlocked() { + return hasMilestone(this.layer, 5); + } + }, + 13: { + cost() { + return new Decimal(1) + .times(new Decimal(2).pow(player.layers.p.buyables![this.id])) + .div( + hasUpgrade(this.layer, 224) + ? hasUpgrade("p", 132) + ? (player.layers.p.gp as Decimal).plus(1).pow(new Decimal(1).div(2)) + : hasUpgrade("p", 101) + ? (player.layers.p.gp as Decimal).plus(1).pow(new Decimal(1).div(3)) + : hasUpgrade("p", 93) + ? (player.layers.p.gp as Decimal).plus(1).pow(0.2) + : (player.layers.p.gp as Decimal).plus(1).log10() + : 1 + ); + }, + display() { + return ( + "Buy a generator for " + format(this.cost!) + " prestige points" + ); + }, + canAfford() { + return player.layers.p.points.gte(this.cost!) && hasUpgrade("p", 82); + }, + buy() { + if (!hasMilestone("p", 13)) + player.layers.p.points = player.layers.p.points.sub(this.cost!); + setBuyableAmount( + this.layer, + this.id, + getBuyableAmount(this.layer, this.id)!.add(1) + ); + player.layers[this.layer].g = (player.layers[this.layer].g as Decimal).plus(1); + }, + unlocked() { + return hasUpgrade(this.layer, 82); + } + }, + 14: { + cost() { + return new Decimal(900) + .mul(new Decimal(1.01).pow(getBuyableAmount(this.layer, this.id)!)) + .round() + .div( + hasUpgrade(this.layer, 234) + ? getBuyableAmount(this.layer, 23)! + .pow(0.3) + .plus(1) + : 1 + ); + }, + display() { + return ( + "Buy a generator for " + format(this.cost!) + " Infinity points" + ); + }, + canAfford() { + return player.layers.i.points.gte(this.cost!) && hasUpgrade("p", 232); + }, + buy() { + if (!hasMilestone("p", 13)) + player.layers.i.points = player.layers.i.points.sub(this.cost!).round(); + setBuyableAmount( + this.layer, + this.id, + getBuyableAmount(this.layer, this.id)!.add(1) + ); + player.layers[this.layer].g = (player.layers[this.layer].g as Decimal).plus(1); + }, + unlocked() { + return hasUpgrade(this.layer, 232); + } + }, + 21: { + cost() { + return new Decimal(20).plus( + getBuyableAmount(this.layer, this.id)!.pow( + new Decimal(2).sub( + new Decimal( + hasUpgrade(this.layer, 221) + ? 0.9 + : hasUpgrade(this.layer, 214) + ? 0.6 + : 0.3 + ).times( + hasUpgrade(this.layer, 212) + ? new Decimal(1).sub( + new Decimal(0.75).pow(getBuyableAmount(this.layer, 22)!) + ) + : 0 + ) + ) + ) + ); + }, + display() { + return ( + "Reset your generators for +1 pointy point! Cost: " + + format(this.cost!) + + " Generators" + ); + }, + canAfford() { + return (player.layers.p.g as Decimal).gte(this.cost!) && hasUpgrade("p", 104); + }, + buy() { + if (!hasMilestone("i", 1)) player.layers.p.g = new Decimal(0); + setBuyableAmount( + this.layer, + this.id, + getBuyableAmount(this.layer, this.id)!.add(1) + ); + if (!hasMilestone("i", 1)) + setBuyableAmount(this.layer, 12, new Decimal(0)); + if (!hasMilestone("i", 1)) + setBuyableAmount(this.layer, 13, new Decimal(0)); + if (!hasMilestone("i", 1)) player.layers.p.gp = new Decimal(0); + }, + unlocked() { + return hasUpgrade(this.layer, 104); + } + }, + 22: { + cost() { + return new Decimal(8).plus(getBuyableAmount(this.layer, this.id)!); + }, + display() { + return ( + "Gain a pointy prestige point. Cost: " + + format(this.cost!) + + " Pointy Points" + ); + }, + canAfford() { + return ( + getBuyableAmount(this.layer, 21)!.gte(this.cost!) && + hasMilestone("i", 5) + ); + }, + buy() { + if (!hasUpgrade(this.layer, 233)) + setBuyableAmount( + this.layer, + 21, + getBuyableAmount(this.layer, 21)!.sub(this.cost!) + ); + setBuyableAmount( + this.layer, + this.id, + getBuyableAmount(this.layer, this.id)!.add(1) + ); + }, + unlocked() { + return hasMilestone("i", 5); + } + }, + 23: { + cost() { + return new Decimal(124).plus( + getBuyableAmount(this.layer, this.id)! + .times(2) + .pow(2) + ); + }, + display() { + return ( + "Gain a booster. Cost: " + format(this.cost!) + " Pointy Points" + ); + }, + canAfford() { + return ( + getBuyableAmount(this.layer, 21)!.gte(this.cost!) && + hasMilestone("i", 5) + ); + }, + buy() { + if (!hasMilestone(this.layer, 15)) + setBuyableAmount( + this.layer, + 21, + getBuyableAmount(this.layer, 21)!.sub(this.cost!) + ); + setBuyableAmount( + this.layer, + this.id, + getBuyableAmount(this.layer, this.id)!.add(1) + ); + if (!hasMilestone(this.layer, 15)) { + if (!hasMilestone(this.layer, 12)) { + player.layers.p.upgrades = player.layers.p.upgrades!.filter((x: string | Number) => { + return Number(x) < 200 || Number(x) > 230; + }); + if (hasMilestone(this.layer, 11)) { + player.layers.p.upgrades.push(215); + player.layers.p.upgrades.push(225); + player.layers.p.upgrades.push(223); + player.layers.p.upgrades.push(222); + } + } + setBuyableAmount("p", 21, new Decimal(0)); + setBuyableAmount("p", 22, new Decimal(0)); + if (!hasUpgrade("p", 233)) { + setBuyableAmount("p", 12, new Decimal(0)); + setBuyableAmount("p", 13, new Decimal(0)); + setBuyableAmount("p", 14, new Decimal(0)); + + player.layers.p.g = new Decimal(0); + } + player.layers.p.gp = new Decimal(0); + } + }, + unlocked() { + return hasUpgrade("p", 225) || getBuyableAmount("p", 23)!.gt(0); + } + }, + 31: { + cost() { + return new Decimal(1e93) + .times(new Decimal(1.5).pow(getBuyableAmount(this.layer, this.id)!)) + .times( + new Decimal(1.1).pow( + getBuyableAmount(this.layer, this.id)!.pow(2) + ) + ); + }, + effect() { + return new Decimal(2) + .plus(layers.p.buyables!.data[33].effect as Decimal) + .pow( + getBuyableAmount(this.layer, this.id)!.plus( + layers.p.buyables!.data[51].effect as Decimal + ) + ); + }, + display() { + return ( + "Double point gain. \nCurrently: x" + + format(this.effect as Decimal) + + "\nCost: " + + format(this.cost!) + + " Prestige points" + ); + }, + canAfford() { + return player.layers.p.points.gte(this.cost!) && hasMilestone("p", 13); + }, + buy() { + player.layers.p.points = player.layers.p.points.sub(this.cost!); + setBuyableAmount( + this.layer, + this.id, + getBuyableAmount(this.layer, this.id)!.add(1) + ); + }, + unlocked() { + return hasMilestone("p", 13); + } + }, + 32: { + cost() { + return new Decimal(1e95) + .times(new Decimal(2).pow(getBuyableAmount(this.layer, this.id)!)) + .times( + new Decimal(1.01).pow( + getBuyableAmount(this.layer, this.id)!.pow(2) + ) + ); + }, + display() { + return ( + "Double prestige point gain. \nCurrently: x" + + format( + new Decimal(2) + .plus(layers.p.buyables!.data[33].effect as Decimal) + .pow(getBuyableAmount(this.layer, this.id)!) + ) + + "\nCost: " + + format(this.cost!) + + " Prestige points" + ); + }, + canAfford() { + return player.layers.p.points.gte(this.cost!) && hasMilestone("p", 13); + }, + buy() { + player.layers.p.points = player.layers.p.points.sub(this.cost!); + setBuyableAmount( + this.layer, + this.id, + getBuyableAmount(this.layer, this.id)!.add(1) + ); + }, + unlocked() { + return ( + hasMilestone("p", 13) && getBuyableAmount(this.layer, 31)!.gte(5) + ); + } + }, + 33: { + cost() { + return new Decimal(1e100) + .times(new Decimal(10).pow(getBuyableAmount(this.layer, this.id)!)) + .times( + new Decimal(1.01).pow( + getBuyableAmount(this.layer, this.id)!.pow(2) + ) + ); + }, + effect() { + return new Decimal(0.01) + .mul(getBuyableAmount(this.layer, this.id)!) + .times(layers.p.buyables!.data[43].effect as Decimal); + }, + display() { + return ( + "Add 0.01 to the previous 2 buyable bases. \nCurrently: +" + + format(this.effect as Decimal) + + "\nCost: " + + format(this.cost!) + + " Prestige points" + ); + }, + canAfford() { + return player.layers.p.points.gte(this.cost!) && hasMilestone("p", 13); + }, + buy() { + player.layers.p.points = player.layers.p.points.sub(this.cost!); + setBuyableAmount( + this.layer, + this.id, + getBuyableAmount(this.layer, this.id)!.add(1) + ); + }, + unlocked() { + return ( + hasMilestone("p", 13) && + (getBuyableAmount(this.layer, this.id)!.gt(0) || + player.layers.p.points.gte(1e100)) + ); + } + }, + 41: { + cost() { + return new Decimal(1e110) + .times(new Decimal(10).pow(getBuyableAmount(this.layer, this.id)!)) + .times( + new Decimal(10).pow(getBuyableAmount(this.layer, this.id)!.pow(2)) + ); + }, + effect() { + return new Decimal(0.01).mul( + getBuyableAmount(this.layer, this.id)!.plus( + layers.p.buyables!.data[51].effect as Decimal + ) + ); + }, + display() { + return ( + "Add 0.01 to the booster effect base. \nCurrently: +" + + format(this.effect as Decimal) + + "\nCost: " + + format(this.cost!) + + " Prestige points" + ); + }, + canAfford() { + return player.layers.p.points.gte(this.cost!) && hasMilestone("p", 13); + }, + buy() { + player.layers.p.points = player.layers.p.points.sub(this.cost!); + setBuyableAmount( + this.layer, + this.id, + getBuyableAmount(this.layer, this.id)!.add(1) + ); + }, + unlocked() { + return ( + hasMilestone("p", 13) && + (getBuyableAmount(this.layer, this.id)!.gt(0) || + player.layers.p.points.gte(1e110)) + ); + } + }, + 42: { + cost() { + const c = new Decimal(1e270) + .times(new Decimal(2).pow(getBuyableAmount(this.layer, this.id)!)) + .times( + new Decimal(1.01).pow( + getBuyableAmount(this.layer, this.id)!.pow(2) + ) + ); + + return c; + }, + effect() { + let f = new Decimal(1.001).pow( + getBuyableAmount(this.layer, this.id)! + ); + if (f.gte(1.1)) f = f.pow(0.8).times(new Decimal(1.1).pow(0.2)); + if (f.gte(1.35)) f = f.pow(0.5).times(new Decimal(1.35).pow(0.5)); + if (f.gte(3)) f = new Decimal(3); + return f; + }, + display() { + return ( + "Raise point gain to the 1.001 \nCurrently: ^" + + format(this.effect as Decimal) + + ((this.effect as Decimal).eq(3) ? "(hardcapped)" : "") + + "\nCost: " + + format(this.cost!) + + " Prestige points" + ); + }, + canAfford() { + return ( + player.layers.p.points.gte(this.cost!) && + hasMilestone("p", 13) && + (this.effect as Decimal).lt(3) + ); + }, + buy() { + player.layers.p.points = player.layers.p.points.sub(this.cost!); + setBuyableAmount( + this.layer, + this.id, + getBuyableAmount(this.layer, this.id)!.add(1) + ); + }, + unlocked() { + return ( + hasMilestone("p", 13) && + (getBuyableAmount(this.layer, this.id)!.gt(0) || + player.layers.p.points.gte(1e270)) + ); + } + }, + 43: { + cost() { + return new Decimal("1e375") + .times(new Decimal(10).pow(getBuyableAmount(this.layer, this.id)!)) + .times( + new Decimal(10).pow(getBuyableAmount(this.layer, this.id)!.pow(2)) + ); + }, + effect() { + return new Decimal(0.01) + .mul(getBuyableAmount(this.layer, this.id)!) + .plus(1); + }, + display() { + return ( + "Multiply the above buyable effect. \nCurrently: *" + + format(this.effect as Decimal) + + "\nCost: " + + format(this.cost!) + + " Prestige points" + ); + }, + canAfford() { + return player.layers.p.points.gte(this.cost!) && hasMilestone("p", 13); + }, + buy() { + player.layers.p.points = player.layers.p.points.sub(this.cost!); + setBuyableAmount( + this.layer, + this.id, + getBuyableAmount(this.layer, this.id)!.add(1) + ); + }, + unlocked() { + return ( + hasMilestone("p", 13) && + (getBuyableAmount(this.layer, this.id)!.gt(0) || + player.layers.p.points.gte("1e375")) + ); + } + }, + 51: { + cost() { + return new Decimal("1e1740") + .times(new Decimal(10).pow(getBuyableAmount(this.layer, this.id)!)) + .times( + new Decimal(1e10).pow( + getBuyableAmount(this.layer, this.id)!.pow(2) + ) + ); + }, + effect() { + return getBuyableAmount(this.layer, this.id)!.pow(0.55); + }, + display() { + return ( + "Add free levels to the above 2 buyables \nCurrently: " + + format(this.effect as Decimal) + + "\nCost: " + + format(this.cost!) + + " Prestige points" + ); + }, + canAfford() { + return player.layers.p.points.gte(this.cost!) && hasMilestone("p", 13); + }, + buy() { + player.layers.p.points = player.layers.p.points.sub(this.cost!); + setBuyableAmount( + this.layer, + this.id, + getBuyableAmount(this.layer, this.id)!.add(1) + ); + }, + unlocked() { + return ( + hasMilestone("p", 15) && + (getBuyableAmount(this.layer, this.id)!.gt(0) || + player.layers.p.points.gte("1e1700")) + ); + } + } + } + }, + milestones: { + data: { + 0: { + requirementDisplay: "1 reset", + effectDisplay: + "Add 0.01 to base point gain and prestige requirement, and 1 doesn't reset upgrades", + done() { + return getBuyableAmount("p", 11)!.gte(1); + }, + unlocked() { + return layers.p.activeSubtab?.id != "Pointy points"; + } + }, + 1: { + requirementDisplay: "2 resets", + effectDisplay: + "
2 and 3 don't reset upgrades, and start with the first 8 upgrades on reset
", + done() { + return getBuyableAmount("p", 11)!.gte(2); + }, + unlocked() { + return ( + hasMilestone(this.layer, Number(this.id) - 1) && + layers.p.activeSubtab?.id != "Pointy points" + ); + } + }, + 2: { + requirementDisplay: "3 resets", + effectDisplay: + "
4 doesn't reset upgrades, and permanently fix the bug where you can't buy upgrades when you have 1 prestige point
", + done() { + return getBuyableAmount("p", 11)!.gte(3); + }, + unlocked() { + return ( + hasMilestone(this.layer, Number(this.id) - 1) && + layers.p.activeSubtab?.id != "Pointy points" + ); + } + }, + 3: { + requirementDisplay: "4 resets", + effectDisplay: + "Don't reset challenges, add 1 to Point maximum completions, and start with 24 upgrades", + done() { + return getBuyableAmount("p", 11)!.gte(4); + }, + unlocked() { + return ( + hasMilestone(this.layer, Number(this.id) - 1) && + layers.p.activeSubtab?.id != "Pointy points" + ); + } + }, + 4: { + requirementDisplay: "5 resets", + effectDisplay: "Each useless upgrade adds 0.1 to base point gain", + done() { + return getBuyableAmount("p", 11)!.gte(5); + }, + unlocked() { + return ( + hasMilestone(this.layer, Number(this.id) - 1) && + layers.p.activeSubtab?.id != "Pointy points" + ); + } + }, + 5: { + requirementDisplay: "6 resets", + effectDisplay: "Unlock something", + done() { + return getBuyableAmount("p", 11)!.gte(6); + }, + unlocked() { + return ( + hasMilestone(this.layer, Number(this.id) - 1) && + layers.p.activeSubtab?.id != "Pointy points" + ); + } + }, + 6: { + requirementDisplay: "1 pointy point", + effectDisplay: "Unlock the upgrade tree", + done() { + return getBuyableAmount("p", 21)!.gte(1); + }, + unlocked() { + return ( + hasMilestone(this.layer, Number(this.id) - 1) && + (hasUpgrade(this.layer, 104) || player.layers.i.unlocked) && + layers.p.activeSubtab?.id != "Pointy points" + ); + } + }, + 7: { + requirementDisplay: "7 pointy points", + effectDisplay: + "You can now buy both first and second row upgrade tree upgrades", + done() { + return getBuyableAmount("p", 21)!.gte(7); + }, + unlocked() { + return ( + hasMilestone(this.layer, Number(this.id) - 1) && + (hasUpgrade(this.layer, 111) || player.layers.i.unlocked) && + layers.p.activeSubtab?.id != "Pointy points" + ); + } + }, + 8: { + requirementDisplay: "8 pointy points", + effectDisplay: "Unlock another layer", + done() { + return getBuyableAmount("p", 21)!.gte(8); + }, + unlocked() { + return ( + hasMilestone(this.layer, Number(this.id) - 1) && + (hasUpgrade(this.layer, 141) || + hasUpgrade(this.layer, 143) || + hasUpgrade(this.layer, 142) || + player.layers.i.unlocked) && + layers.p.activeSubtab?.id != "Pointy points" + ); + } + }, + 11: { + requirementDisplay: "3 boosters", + effectDisplay: "Keep automation on booster reset", + done() { + return getBuyableAmount("p", 23)!.gte(3); + }, + unlocked() { + return ( + getBuyableAmount("p", 23)!.gt(0) || + hasMilestone(this.layer, this.id) + ); + } + }, + 12: { + requirementDisplay: "5 boosters", + effectDisplay: + "Keep all prestige upgrades on booster reset and buy max infinity points", + done() { + return getBuyableAmount("p", 23)!.gte(5); + }, + unlocked() { + return ( + getBuyableAmount("p", 23)!.gt(0) || + hasMilestone(this.layer, this.id) + ); + } + }, + 13: { + requirementDisplay: "10 boosters", + effectDisplay: "Generators cost nothing", + done() { + return getBuyableAmount("p", 23)!.gte(10); + }, + unlocked() { + return ( + getBuyableAmount("p", 23)!.gt(0) || + hasMilestone(this.layer, this.id) + ); + } + }, + 14: { + requirementDisplay: "15 boosters", + effectDisplay: + "Auto buy the first 3 buyables and buy max pointy prestige points", + done() { + return getBuyableAmount("p", 23)!.gte(15); + }, + unlocked() { + return ( + getBuyableAmount("p", 41)!.gt(0) || + hasMilestone(this.layer, this.id) + ); + } + }, + 15: { + requirementDisplay: "20 boosters", + effectDisplay: "Boosters reset nothing and auto booster", + done() { + return getBuyableAmount("p", 23)!.gte(16); + }, + unlocked() { + return ( + getBuyableAmount("p", 41)!.gt(0) || + hasMilestone(this.layer, this.id) + ); + } + } + } + }, + passiveGeneration() { + return hasUpgrade("i", 11) ? 1 : 0; + }, + update(diff) { + if (hasMilestone(this.layer, 2) && !hasUpgrade(this.layer, 54)) { + player.layers[this.layer].upgrades!.push(54); + } + if ( + hasMilestone(this.layer, 1) && + !hasUpgrade(this.layer, 11) && + !hasMilestone(this.layer, 3) + ) { + player.layers[this.layer].upgrades = [11, 12, 13, 14, 21, 22, 23, 24]; + } + if (hasMilestone(this.layer, 3) && !hasUpgrade(this.layer, 31)) { + player.layers[this.layer].upgrades = [ + 11, + 12, + 13, + 14, + 21, + 22, + 23, + 24, + 31, + 32, + 33, + 34, + 41, + 42, + 43, + 44, + 51, + 52, + 53, + 54, + 61, + 62, + 63, + 64 + ]; + } + if (hasMilestone(this.layer, 5)) { + player.layers[this.layer].gp = (player.layers[this.layer].gp as Decimal).plus( + (player.layers.p.g as Decimal).times(diff).times(player.layers.p.geff as Decimal) + ); + } + let geff = new Decimal(1); + if (hasUpgrade("p", 81)) geff = geff.plus(2); + if (hasUpgrade("p", 102)) + geff = geff.plus( + hasChallenge("p", 22) + ? (player.layers.p.gp as Decimal).plus(1).log(10) + : (player.layers.p.gp as Decimal) + .plus(1) + .log(10) + .plus(1) + .log(10) + ); + if (hasUpgrade("p", 83)) + geff = geff.times( + player.layers.p.points + .plus(1) + .log(10) + .plus(1) + ); + if (hasUpgrade("p", 94)) geff = geff.times(player.layers.p.cmult as Decimal); + if (hasUpgrade("p", 104)) + geff = geff.times(new Decimal(player.layers.p.buyables![21]).plus(1)); + if (hasUpgrade("p", 143)) + geff = geff.times(new Decimal(player.timePlayed).div(3600).max(1)); + if (hasUpgrade("p", 225)) + geff = geff.pow( + new Decimal(player.layers.p.buyables![23]) + .div(10) + .mul( + new Decimal(0.1) + .plus(layers.p.buyables!.data[41].effect as Decimal) + .times(10) + ) + .plus(1) + ); + player.layers.p.geff = geff; + if (hasChallenge("p", 22) && (!hasUpgrade("p", 141) || hasUpgrade("i", 12))) + player.layers.p.cmult = (player.layers.p.cmult as Decimal).plus(hasUpgrade("p", 141) ? 1 : 0.01); + if (!hasUpgrade("p", 111)) player.layers.p.cmult = (player.layers.p.cmult as Decimal).min(100); + if (hasMilestone(this.layer, 14)) { + if (layers.p.buyables!.data[31].canAfford) + layers.p.buyables!.data[31].buy(); + if (layers.p.buyables!.data[32].canAfford) + layers.p.buyables!.data[32].buy(); + if (layers.p.buyables!.data[33].canAfford) + layers.p.buyables!.data[33].buy(); + } + if (hasMilestone(this.layer, 15)) { + if (layers.p.buyables!.data[23].canAfford) + layers.p.buyables!.data[23].buy(); + } + }, + subtabs: { + Upgrades: { + display: ` + + + + + + ` + }, + Challenges: { + unlocked() { + return hasUpgrade("p", 51) || hasMilestone("p", 0); + }, + display: ` + + + ` + }, + "Buyables and Milestones": { + unlocked() { + return hasUpgrade("p", 74) || hasMilestone("p", 0); + }, + display: ` + + + + +
Your boosts are making the point challenge {{ getBuyableAmount('p', 11).plus(1) }}x less pointy
+ + ` + }, + Generators: { + unlocked() { + return hasMilestone("p", 5) || player.layers.i.points.gte(1); + }, + display: ` + +
You have {{ format(player.layers.p.gp) }} generator points, adding {{ format(hasUpgrade("p",132)?player.layers.p.gp.plus(1).pow(new Decimal(1).div(2)):hasUpgrade("p",101)?player.layers.p.gp.plus(1).pow(new Decimal(1).div(3)):hasUpgrade("p",93)?player.layers.p.gp.plus(1).pow(0.2):player.layers.p.gp.plus(1).log10()) }} to point gain
+
You have {{ format(player.layers.p.g) }} generators, generating {{ format(player.layers.p.g.times(player.layers.p.geff)) }} generator points per second
+
Generator efficiency is {{ format(player.layers.p.geff) }}
+ + + + ` + }, + "Pointy Points": { + unlocked() { + return hasUpgrade("p", 104) || player.layers.i.points.gte(1); + }, + display: ` +
{{ format(player.layers.p.buyables[21]) }} pointy points
+
My pointy points are multiplying generator efficiency by {{ format(new Decimal(player.layers.p.buyables[21]).plus(1)) }}
+ + + +
I have {{ format(player.layers.p.buyables[22]) }} pointy prestige points
+ + + + +
I have {{ format(player.layers.p.buyables[23]) }} pointy boosters!
+ +
My pointy boosters are raising generator efficiency to the ^{{ format(new Decimal(player.layers.p.buyables[23]).div(10).mul(new Decimal(0.1).plus(layers.p.buyables[41].effect).times(10)).plus(1)) }}
+ + +
Booster upgrades
+ ` + }, + Buyables: { + unlocked() { + return hasMilestone("p", 13); + }, + display: ` + + ` + } + } +} as RawLayer; diff --git a/src/data/mod.tsx b/src/data/mod.tsx new file mode 100644 index 0000000..ad0600d --- /dev/null +++ b/src/data/mod.tsx @@ -0,0 +1,112 @@ +import Profectus from "@/components/Profectus.vue"; +import Spacer from "@/components/layout/Spacer.vue"; +import { jsx } from "@/features/feature"; +import { createResource, trackBest, trackOOMPS, trackTotal } from "@/features/resources/resource"; +import { branchedResetPropagation, createTree, GenericTree } from "@/features/trees/tree"; +import { globalBus } from "@/game/events"; +import { createLayer, GenericLayer, setupLayerModal } from "@/game/layers"; +import player, { PlayerData } from "@/game/player"; +import { DecimalSource } from "@/lib/break_eternity"; +import Decimal, { format, formatTime } from "@/util/bignum"; +import { render } from "@/util/vue"; +import { computed, toRaw } from "vue"; +import a from "./layers/aca/a"; +import c from "./layers/aca/c"; +import f from "./layers/aca/f"; + +export const main = createLayer(() => { + const points = createResource(10); + const best = trackBest(points); + const total = trackTotal(points); + + const pointGain = computed(() => { + if (!c.generatorUpgrade.bought.value) return new Decimal(0); + let gain = new Decimal(3.19); + if (c.lollipopMultiplierUpgrade.bought.value) + gain = gain.times(c.lollipopMultiplierEffect.value); + return gain; + }); + globalBus.on("update", diff => { + points.value = Decimal.add(points.value, Decimal.times(pointGain.value, diff)); + }); + const oomps = trackOOMPS(points, pointGain); + + const { openModal, modal } = setupLayerModal(a); + + // Note: Casting as generic tree to avoid recursive type definitions + const tree = createTree(() => ({ + nodes: [[c.treeNode], [f.treeNode, c.spook]], + leftSideNodes: [a.treeNode, c.h], + branches: [ + { + startNode: f.treeNode, + endNode: c.treeNode, + stroke: "blue", + "stroke-width": "25px", + style: { + filter: "blur(5px)" + } + } + ], + onReset() { + points.value = toRaw(this.resettingNode.value) === toRaw(c.treeNode) ? 0 : 10; + best.value = points.value; + total.value = points.value; + }, + resetPropagation: branchedResetPropagation + })) as GenericTree; + + // Note: layers don't _need_ a reference to everything, + // but I'd recommend it over trying to remember what does and doesn't need to be included. + // Officially all you need are anything with persistency or that you want to access elsewhere + return { + id: "main", + name: "Tree", + links: tree.links, + display: jsx(() => ( + <> +
Game Paused
+
+ Dev Speed: {format(player.devSpeed || 0)}x +
+
+ Offline Time: {formatTime(player.offlineTime || 0)} +
+
+ You have +

{format(points.value)}

+ points +
+
({oomps.value})
+ + + {render(modal)} + {render(tree)} + + + )), + points, + best, + total, + oomps, + tree, + showAchievements: openModal + }; +}); + +export const getInitialLayers = ( + /* eslint-disable-next-line @typescript-eslint/no-unused-vars */ + player: Partial +): Array => [main, f, c, a]; + +export const hasWon = computed(() => { + return Decimal.gt(main.points.value, 25); +}); + +/* eslint-disable @typescript-eslint/no-unused-vars */ +export function fixOldSave( + oldVersion: string | undefined, + player: Partial + // eslint-disable-next-line @typescript-eslint/no-empty-function +): void {} +/* eslint-enable @typescript-eslint/no-unused-vars */ diff --git a/src/data/modInfo.json b/src/data/modInfo.json new file mode 100644 index 0000000..7d67019 --- /dev/null +++ b/src/data/modInfo.json @@ -0,0 +1,21 @@ +{ + "title": "Profectus", + "id": "profectus-demo", + "author": "thepaperpilot", + "discordName": "The Paper Pilot Community", + "discordLink": "https://discord.gg/WzejVAx", + + "versionNumber": "0.0", + "versionTitle": "Initial Commit", + + "allowGoBack": true, + "allowSmall": false, + "defaultDecimalsShown": 2, + "useHeader": true, + "banner": null, + "logo": "Logo.png", + "initialTabs": [ "main", "c" ], + + "maxTickLength": 3600, + "offlineLimit": 1 +} diff --git a/src/data/themes.ts b/src/data/themes.ts new file mode 100644 index 0000000..28cb8a6 --- /dev/null +++ b/src/data/themes.ts @@ -0,0 +1,128 @@ +interface ThemeVars { + "--foreground": string; + "--background": string; + "--feature-foreground": string; + "--tooltip-background": string; + "--raised-background": string; + "--points": string; + "--locked": string; + "--highlighted": string; + "--bought": string; + "--danger": string; + "--link": string; + "--outline": string; + "--accent1": string; + "--accent2": string; + "--accent3": string; + "--border-radius": string; + "--modal-border": string; + "--feature-margin": string; +} + +export interface Theme { + variables: ThemeVars; + stackedInfoboxes: boolean; + floatingTabs: boolean; + showSingleTab: boolean; + mergeAdjacent: boolean; +} + +declare module "@vue/runtime-dom" { + // eslint-disable-next-line @typescript-eslint/no-empty-interface + interface CSSProperties extends Partial {} +} + +const defaultTheme: Theme = { + variables: { + "--foreground": "#dfdfdf", + "--background": "#0f0f0f", + "--feature-foreground": "#eee", + "--tooltip-background": "rgba(0, 0, 0, 0.75)", + "--raised-background": "#0f0f0f", + "--points": "#ffffff", + "--locked": "#bf8f8f", + "--highlighted": "#333", + "--bought": "#77bf5f", + "--danger": "rgb(220, 53, 69)", + "--link": "#02f2f2", + "--outline": "#dfdfdf", + "--accent1": "#627a82", + "--accent2": "#658262", + "--accent3": "#7c6282", + + "--border-radius": "15px", + "--modal-border": "solid 2px var(--color)", + "--feature-margin": "0px" + }, + stackedInfoboxes: false, + floatingTabs: true, + showSingleTab: false, + mergeAdjacent: true +}; + +export enum Themes { + Classic = "classic", + Paper = "paper", + Nordic = "nordic", + Aqua = "aqua" +} + +export default { + classic: defaultTheme, + paper: { + ...defaultTheme, + variables: { + ...defaultTheme.variables, + "--background": "#2a323d", + "--feature-foreground": "#000", + "--raised-background": "#333c4a", + "--locked": "#3a3e45", + "--bought": "#5C8A58", + "--outline": "#333c4a", + "--border-radius": "4px", + "--modal-border": "", + "--feature-margin": "5px" + }, + stackedInfoboxes: true, + floatingTabs: false + } as Theme, + // Based on https://www.nordtheme.com + nordic: { + ...defaultTheme, + variables: { + ...defaultTheme.variables, + "--foreground": "#D8DEE9", + "--background": "#2E3440", + "--feature-foreground": "#000", + "--raised-background": "#3B4252", + "--points": "#E5E9F0", + "--locked": "#4c566a", + "--highlighted": "#434c5e", + "--bought": "#8FBCBB", + "--danger": "#D08770", + "--link": "#88C0D0", + "--outline": "#3B4252", + "--accent1": "#B48EAD", + "--accent2": "#A3BE8C", + "--accent3": "#EBCB8B", + "--border-radius": "4px", + "--modal-border": "solid 2px #3B4252", + "--feature-margin": "5px" + }, + stackedInfoboxes: true, + floatingTabs: false + } as Theme, + aqua: { + ...defaultTheme, + variables: { + ...defaultTheme.variables, + "--foreground": "#bfdfff", + "--background": "#001f3f", + "--tooltip-background": "rgba(0, 15, 31, 0.75)", + "--raised-background": "#001f3f", + "--points": "#dfefff", + "--locked": "#c4a7b3", + "--outline": "#bfdfff" + } + } as Theme +} as Record; diff --git a/src/features/achievements/Achievement.vue b/src/features/achievements/Achievement.vue new file mode 100644 index 0000000..cae4c7b --- /dev/null +++ b/src/features/achievements/Achievement.vue @@ -0,0 +1,79 @@ + + + + + diff --git a/src/features/achievements/achievement.tsx b/src/features/achievements/achievement.tsx new file mode 100644 index 0000000..cd9e403 --- /dev/null +++ b/src/features/achievements/achievement.tsx @@ -0,0 +1,143 @@ +import AchievementComponent from "@/features/achievements/Achievement.vue"; +import { + CoercableComponent, + Component, + findFeatures, + GatherProps, + getUniqueID, + Replace, + setDefault, + StyleValue, + Visibility +} from "@/features/feature"; +import { globalBus } from "@/game/events"; +import "@/game/notifications"; +import { Persistent, makePersistent, PersistentState } from "@/game/persistence"; +import { + Computable, + GetComputableType, + GetComputableTypeWithDefault, + processComputable, + ProcessedComputable +} from "@/util/computed"; +import { createLazyProxy } from "@/util/proxies"; +import { coerceComponent } from "@/util/vue"; +import { Unsubscribe } from "nanoevents"; +import { Ref, unref } from "vue"; +import { useToast } from "vue-toastification"; + +export const AchievementType = Symbol("Achievement"); + +export interface AchievementOptions { + visibility?: Computable; + shouldEarn?: Computable; + display?: Computable; + mark?: Computable; + image?: Computable; + style?: Computable; + classes?: Computable>; + onComplete?: VoidFunction; +} + +interface BaseAchievement extends Persistent { + id: string; + earned: Ref; + complete: VoidFunction; + type: typeof AchievementType; + [Component]: typeof AchievementComponent; + [GatherProps]: () => Record; +} + +export type Achievement = Replace< + T & BaseAchievement, + { + visibility: GetComputableTypeWithDefault; + shouldEarn: GetComputableType; + display: GetComputableType; + mark: GetComputableType; + image: GetComputableType; + style: GetComputableType; + classes: GetComputableType; + } +>; + +export type GenericAchievement = Replace< + Achievement, + { + visibility: ProcessedComputable; + } +>; + +export function createAchievement( + optionsFunc: () => T & ThisType> +): Achievement { + return createLazyProxy(() => { + const achievement: T & Partial = optionsFunc(); + makePersistent(achievement, false); + achievement.id = getUniqueID("achievement-"); + achievement.type = AchievementType; + achievement[Component] = AchievementComponent; + + achievement.earned = achievement[PersistentState]; + achievement.complete = function () { + achievement[PersistentState].value = true; + }; + + processComputable(achievement as T, "visibility"); + setDefault(achievement, "visibility", Visibility.Visible); + processComputable(achievement as T, "shouldEarn"); + processComputable(achievement as T, "display"); + processComputable(achievement as T, "mark"); + processComputable(achievement as T, "image"); + processComputable(achievement as T, "style"); + processComputable(achievement as T, "classes"); + + achievement[GatherProps] = function (this: GenericAchievement) { + const { visibility, display, earned, image, style, classes, mark, id } = this; + return { visibility, display, earned, image, style, classes, mark, id }; + }; + + return achievement as unknown as Achievement; + }); +} + +const toast = useToast(); + +const listeners: Record = {}; +globalBus.on("addLayer", layer => { + const achievements: GenericAchievement[] = ( + findFeatures(layer, AchievementType) as GenericAchievement[] + ).filter(ach => ach.shouldEarn != null); + if (achievements.length) { + listeners[layer.id] = layer.on("postUpdate", () => { + achievements.forEach(achievement => { + if ( + unref(achievement.visibility) === Visibility.Visible && + !unref(achievement.earned) && + unref(achievement.shouldEarn) + ) { + achievement[PersistentState].value = true; + achievement.onComplete?.(); + if (achievement.display) { + const Display = coerceComponent(unref(achievement.display)); + toast.info( +
+

Achievement earned!

+
+ {/* eslint-disable-next-line @typescript-eslint/ban-ts-comment */} + {/* @ts-ignore */} + +
+
+ ); + } + } + }); + }); + } +}); +globalBus.on("removeLayer", layer => { + // unsubscribe from postUpdate + listeners[layer.id]?.(); + listeners[layer.id] = undefined; +}); diff --git a/src/features/bars/Bar.vue b/src/features/bars/Bar.vue new file mode 100644 index 0000000..8d6129d --- /dev/null +++ b/src/features/bars/Bar.vue @@ -0,0 +1,182 @@ + + + + + diff --git a/src/features/bars/bar.ts b/src/features/bars/bar.ts new file mode 100644 index 0000000..a166e51 --- /dev/null +++ b/src/features/bars/bar.ts @@ -0,0 +1,140 @@ +import BarComponent from "@/features/bars/Bar.vue"; +import { + CoercableComponent, + Component, + GatherProps, + getUniqueID, + Replace, + setDefault, + StyleValue, + Visibility +} from "@/features/feature"; +import { DecimalSource } from "@/lib/break_eternity"; +import { + Computable, + GetComputableType, + GetComputableTypeWithDefault, + processComputable, + ProcessedComputable +} from "@/util/computed"; +import { createLazyProxy } from "@/util/proxies"; + +export const BarType = Symbol("Bar"); + +export enum Direction { + Up = "Up", + Down = "Down", + Left = "Left", + Right = "Right", + Default = "Up" +} + +export interface BarOptions { + visibility?: Computable; + width: Computable; + height: Computable; + direction: Computable; + style?: Computable; + classes?: Computable>; + borderStyle?: Computable; + baseStyle?: Computable; + textStyle?: Computable; + fillStyle?: Computable; + progress: Computable; + display?: Computable; + mark?: Computable; +} + +interface BaseBar { + id: string; + type: typeof BarType; + [Component]: typeof BarComponent; + [GatherProps]: () => Record; +} + +export type Bar = Replace< + T & BaseBar, + { + visibility: GetComputableTypeWithDefault; + width: GetComputableType; + height: GetComputableType; + direction: GetComputableType; + style: GetComputableType; + classes: GetComputableType; + borderStyle: GetComputableType; + baseStyle: GetComputableType; + textStyle: GetComputableType; + fillStyle: GetComputableType; + progress: GetComputableType; + display: GetComputableType; + mark: GetComputableType; + } +>; + +export type GenericBar = Replace< + Bar, + { + visibility: ProcessedComputable; + } +>; + +export function createBar(optionsFunc: () => T & ThisType>): Bar { + return createLazyProxy(() => { + const bar: T & Partial = optionsFunc(); + bar.id = getUniqueID("bar-"); + bar.type = BarType; + bar[Component] = BarComponent; + + processComputable(bar as T, "visibility"); + setDefault(bar, "visibility", Visibility.Visible); + processComputable(bar as T, "width"); + processComputable(bar as T, "height"); + processComputable(bar as T, "direction"); + processComputable(bar as T, "style"); + processComputable(bar as T, "classes"); + processComputable(bar as T, "borderStyle"); + processComputable(bar as T, "baseStyle"); + processComputable(bar as T, "textStyle"); + processComputable(bar as T, "fillStyle"); + processComputable(bar as T, "progress"); + processComputable(bar as T, "display"); + processComputable(bar as T, "mark"); + + bar[GatherProps] = function (this: GenericBar) { + const { + progress, + width, + height, + direction, + display, + visibility, + style, + classes, + borderStyle, + textStyle, + baseStyle, + fillStyle, + mark, + id + } = this; + return { + progress, + width, + height, + direction, + display, + visibility, + style, + classes, + borderStyle, + textStyle, + baseStyle, + fillStyle, + mark, + id + }; + }; + + return bar as unknown as Bar; + }); +} diff --git a/src/features/boards/Board.vue b/src/features/boards/Board.vue new file mode 100644 index 0000000..55f2b37 --- /dev/null +++ b/src/features/boards/Board.vue @@ -0,0 +1,231 @@ + + + + + diff --git a/src/features/boards/BoardLink.vue b/src/features/boards/BoardLink.vue new file mode 100644 index 0000000..387b7b6 --- /dev/null +++ b/src/features/boards/BoardLink.vue @@ -0,0 +1,59 @@ + + + + + diff --git a/src/features/boards/BoardNode.vue b/src/features/boards/BoardNode.vue new file mode 100644 index 0000000..efd3d5d --- /dev/null +++ b/src/features/boards/BoardNode.vue @@ -0,0 +1,371 @@ + + + + + + + diff --git a/src/features/boards/board.ts b/src/features/boards/board.ts new file mode 100644 index 0000000..6a23888 --- /dev/null +++ b/src/features/boards/board.ts @@ -0,0 +1,363 @@ +import BoardComponent from "@/features/boards/Board.vue"; +import { + Component, + findFeatures, + GatherProps, + getUniqueID, + Replace, + setDefault, + StyleValue, + Visibility +} from "@/features/feature"; +import { globalBus } from "@/game/events"; +import { State, Persistent, makePersistent, PersistentState } from "@/game/persistence"; +import Decimal, { DecimalSource } from "@/lib/break_eternity"; +import { isFunction } from "@/util/common"; +import { + Computable, + GetComputableType, + GetComputableTypeWithDefault, + processComputable, + ProcessedComputable +} from "@/util/computed"; +import { createLazyProxy } from "@/util/proxies"; +import { Unsubscribe } from "nanoevents"; +import { computed, Ref, unref } from "vue"; +import { Link } from "../links"; + +export const BoardType = Symbol("Board"); + +export type NodeComputable = Computable | ((node: BoardNode) => T); + +export enum ProgressDisplay { + Outline = "Outline", + Fill = "Fill" +} + +export enum Shape { + Circle = "Circle", + Diamond = "Triangle" +} + +export interface BoardNode { + id: number; + position: { + x: number; + y: number; + }; + type: string; + state?: State; + pinned?: boolean; +} + +export interface BoardNodeLink extends Omit { + startNode: BoardNode; + endNode: BoardNode; + pulsing?: boolean; +} + +export interface NodeLabel { + text: string; + color?: string; + pulsing?: boolean; +} + +export type BoardData = { + nodes: BoardNode[]; + selectedNode: number | null; + selectedAction: string | null; +}; + +export interface NodeTypeOptions { + title: NodeComputable; + label?: NodeComputable; + size: NodeComputable; + draggable?: NodeComputable; + shape: NodeComputable; + canAccept?: boolean | Ref | ((node: BoardNode, otherNode: BoardNode) => boolean); + progress?: NodeComputable; + progressDisplay?: NodeComputable; + progressColor?: NodeComputable; + fillColor?: NodeComputable; + outlineColor?: NodeComputable; + titleColor?: NodeComputable; + actions?: BoardNodeActionOptions[]; + actionDistance?: NodeComputable; + onClick?: (node: BoardNode) => void; + onDrop?: (node: BoardNode, otherNode: BoardNode) => void; + update?: (node: BoardNode, diff: DecimalSource) => void; +} + +export interface BaseNodeType { + nodes: Ref; +} + +export type NodeType = Replace< + T & BaseNodeType, + { + title: GetComputableType; + label: GetComputableType; + size: GetComputableTypeWithDefault; + draggable: GetComputableTypeWithDefault; + shape: GetComputableTypeWithDefault; + canAccept: GetComputableTypeWithDefault; + progress: GetComputableType; + progressDisplay: GetComputableTypeWithDefault; + progressColor: GetComputableTypeWithDefault; + fillColor: GetComputableType; + outlineColor: GetComputableType; + titleColor: GetComputableType; + actions?: GenericBoardNodeAction[]; + actionDistance: GetComputableTypeWithDefault; + } +>; + +export type GenericNodeType = Replace< + NodeType, + { + size: NodeComputable; + draggable: NodeComputable; + shape: NodeComputable; + canAccept: NodeComputable; + progressDisplay: NodeComputable; + progressColor: NodeComputable; + actionDistance: NodeComputable; + } +>; + +export interface BoardNodeActionOptions { + id: string; + visibility?: NodeComputable; + icon: NodeComputable; + fillColor?: NodeComputable; + tooltip: NodeComputable; + links?: NodeComputable; + onClick: (node: BoardNode) => boolean | undefined; +} + +export interface BaseBoardNodeAction { + links?: Ref; +} + +export type BoardNodeAction = Replace< + T & BaseBoardNodeAction, + { + visibility: GetComputableTypeWithDefault; + icon: GetComputableType; + fillColor: GetComputableType; + tooltip: GetComputableType; + links: GetComputableType; + } +>; + +export type GenericBoardNodeAction = Replace< + BoardNodeAction, + { + visibility: NodeComputable; + } +>; + +export interface BoardOptions { + visibility?: Computable; + height?: Computable; + width?: Computable; + classes?: Computable>; + style?: Computable; + startNodes: () => Omit[]; + types: Record; +} + +interface BaseBoard extends Persistent { + id: string; + links: Ref; + nodes: Ref; + selectedNode: Ref; + selectedAction: Ref; + type: typeof BoardType; + [Component]: typeof BoardComponent; + [GatherProps]: () => Record; +} + +export type Board = Replace< + T & BaseBoard, + { + visibility: GetComputableTypeWithDefault; + types: Record; + height: GetComputableType; + width: GetComputableType; + classes: GetComputableType; + style: GetComputableType; + } +>; + +export type GenericBoard = Replace< + Board, + { + visibility: ProcessedComputable; + } +>; + +export function createBoard( + optionsFunc: () => T & ThisType> +): Board { + return createLazyProxy(() => { + const board: T & Partial = optionsFunc(); + makePersistent(board, { + nodes: [], + selectedNode: null, + selectedAction: null + }); + board.id = getUniqueID("board-"); + board.type = BoardType; + board[Component] = BoardComponent; + + board.nodes = computed(() => processedBoard[PersistentState].value.nodes); + board.selectedNode = computed( + () => + processedBoard.nodes.value.find( + node => node.id === board[PersistentState].value.selectedNode + ) || null + ); + board.selectedAction = computed(() => { + const selectedNode = processedBoard.selectedNode.value; + if (selectedNode == null) { + return null; + } + const type = processedBoard.types[selectedNode.type]; + if (type.actions == null) { + return null; + } + return ( + type.actions.find( + action => action.id === processedBoard[PersistentState].value.selectedAction + ) || null + ); + }); + board.links = computed(() => { + if (processedBoard.selectedAction.value == null) { + return null; + } + if (processedBoard.selectedAction.value.links && processedBoard.selectedNode.value) { + return getNodeProperty( + processedBoard.selectedAction.value.links, + processedBoard.selectedNode.value + ); + } + return null; + }); + processComputable(board as T, "visibility"); + setDefault(board, "visibility", Visibility.Visible); + processComputable(board as T, "width"); + setDefault(board, "width", "100%"); + processComputable(board as T, "height"); + setDefault(board, "height", "400px"); + processComputable(board as T, "classes"); + processComputable(board as T, "style"); + + for (const type in board.types) { + const nodeType: NodeTypeOptions & Partial = board.types[type]; + + processComputable(nodeType as NodeTypeOptions, "title"); + processComputable(nodeType as NodeTypeOptions, "label"); + processComputable(nodeType as NodeTypeOptions, "size"); + setDefault(nodeType, "size", 50); + processComputable(nodeType as NodeTypeOptions, "draggable"); + setDefault(nodeType, "draggable", false); + processComputable(nodeType as NodeTypeOptions, "shape"); + setDefault(nodeType, "shape", Shape.Circle); + processComputable(nodeType as NodeTypeOptions, "canAccept"); + setDefault(nodeType, "canAccept", false); + processComputable(nodeType as NodeTypeOptions, "progress"); + processComputable(nodeType as NodeTypeOptions, "progressDisplay"); + setDefault(nodeType, "progressDisplay", ProgressDisplay.Fill); + processComputable(nodeType as NodeTypeOptions, "progressColor"); + setDefault(nodeType, "progressColor", "none"); + processComputable(nodeType as NodeTypeOptions, "fillColor"); + processComputable(nodeType as NodeTypeOptions, "outlineColor"); + processComputable(nodeType as NodeTypeOptions, "titleColor"); + processComputable(nodeType as NodeTypeOptions, "actionDistance"); + setDefault(nodeType, "actionDistance", Math.PI / 6); + nodeType.nodes = computed(() => + board[PersistentState].value.nodes.filter(node => node.type === type) + ); + setDefault(nodeType, "onClick", function (node: BoardNode) { + board[PersistentState].value.selectedNode = node.id; + }); + + if (nodeType.actions) { + for (const action of nodeType.actions) { + processComputable(action, "visibility"); + setDefault(action, "visibility", Visibility.Visible); + processComputable(action, "icon"); + processComputable(action, "fillColor"); + processComputable(action, "tooltip"); + processComputable(action, "links"); + } + } + } + + board[GatherProps] = function (this: GenericBoard) { + const { + nodes, + types, + [PersistentState]: state, + visibility, + width, + height, + style, + classes, + links, + selectedAction, + selectedNode + } = this; + return { + nodes, + types, + [PersistentState]: state, + visibility, + width, + height, + style, + classes, + links, + selectedAction, + selectedNode + }; + }; + + // This is necessary because board.types is different from T and Board + const processedBoard = board as unknown as Board; + return processedBoard; + }); +} + +export function getNodeProperty(property: NodeComputable, node: BoardNode): T { + return isFunction(property) ? property(node) : unref(property); +} + +export function getUniqueNodeID(board: GenericBoard): number { + let id = 0; + board.nodes.value.forEach(node => { + if (node.id >= id) { + id = node.id + 1; + } + }); + return id; +} + +const listeners: Record = {}; +globalBus.on("addLayer", layer => { + const boards: GenericBoard[] = findFeatures(layer, BoardType) as GenericBoard[]; + listeners[layer.id] = layer.on("postUpdate", (diff: Decimal) => { + boards.forEach(board => { + Object.values(board.types).forEach(type => + type.nodes.value.forEach(node => type.update?.(node, diff)) + ); + }); + }); +}); +globalBus.on("removeLayer", layer => { + // unsubscribe from postUpdate + listeners[layer.id]?.(); + listeners[layer.id] = undefined; +}); diff --git a/src/features/buyable.tsx b/src/features/buyable.tsx new file mode 100644 index 0000000..33ab2f9 --- /dev/null +++ b/src/features/buyable.tsx @@ -0,0 +1,225 @@ +import ClickableComponent from "@/features/clickables/Clickable.vue"; +import { Resource } from "@/features/resources/resource"; +import { Persistent, makePersistent, PersistentState } from "@/game/persistence"; +import Decimal, { DecimalSource, format, formatWhole } from "@/util/bignum"; +import { + Computable, + GetComputableType, + GetComputableTypeWithDefault, + processComputable, + ProcessedComputable +} from "@/util/computed"; +import { createLazyProxy } from "@/util/proxies"; +import { coerceComponent, isCoercableComponent } from "@/util/vue"; +import { computed, Ref, unref } from "vue"; +import { + CoercableComponent, + Component, + GatherProps, + getUniqueID, + jsx, + Replace, + setDefault, + StyleValue, + Visibility +} from "./feature"; + +export const BuyableType = Symbol("Buyable"); + +type BuyableDisplay = + | CoercableComponent + | { + title?: CoercableComponent; + description: CoercableComponent; + effectDisplay?: CoercableComponent; + }; + +export interface BuyableOptions { + visibility?: Computable; + cost?: Computable; + resource?: Resource; + canPurchase?: Computable; + purchaseLimit?: Computable; + classes?: Computable>; + style?: Computable; + mark?: Computable; + small?: Computable; + display?: Computable; + onPurchase?: (cost: DecimalSource) => void; +} + +interface BaseBuyable extends Persistent { + id: string; + amount: Ref; + maxed: Ref; + canAfford: Ref; + canClick: ProcessedComputable; + onClick: VoidFunction; + purchase: VoidFunction; + type: typeof BuyableType; + [Component]: typeof ClickableComponent; + [GatherProps]: () => Record; +} + +export type Buyable = Replace< + T & BaseBuyable, + { + visibility: GetComputableTypeWithDefault; + cost: GetComputableType; + resource: GetComputableType; + canPurchase: GetComputableTypeWithDefault>; + purchaseLimit: GetComputableTypeWithDefault; + classes: GetComputableType; + style: GetComputableType; + mark: GetComputableType; + small: GetComputableType; + display: Ref; + } +>; + +export type GenericBuyable = Replace< + Buyable, + { + visibility: ProcessedComputable; + canPurchase: ProcessedComputable; + purchaseLimit: ProcessedComputable; + } +>; + +export function createBuyable( + optionsFunc: () => T & ThisType> +): Buyable { + return createLazyProxy(() => { + const buyable: T & Partial = optionsFunc(); + + if (buyable.canPurchase == null && (buyable.resource == null || buyable.cost == null)) { + console.warn( + "Cannot create buyable without a canPurchase property or a resource and cost property", + buyable + ); + throw "Cannot create buyable without a canPurchase property or a resource and cost property"; + } + + makePersistent(buyable, 0); + buyable.id = getUniqueID("buyable-"); + buyable.type = BuyableType; + buyable[Component] = ClickableComponent; + + buyable.amount = buyable[PersistentState]; + buyable.canAfford = computed(() => { + const genericBuyable = buyable as GenericBuyable; + const cost = unref(genericBuyable.cost); + return ( + genericBuyable.resource != null && + cost != null && + Decimal.gte(genericBuyable.resource.value, cost) + ); + }); + if (buyable.canPurchase == null) { + buyable.canPurchase = computed( + () => + unref((buyable as GenericBuyable).visibility) === Visibility.Visible && + unref((buyable as GenericBuyable).canAfford) && + Decimal.lt( + (buyable as GenericBuyable).amount.value, + unref((buyable as GenericBuyable).purchaseLimit) + ) + ); + } + buyable.maxed = computed(() => + Decimal.gte( + (buyable as GenericBuyable).amount.value, + unref((buyable as GenericBuyable).purchaseLimit) + ) + ); + processComputable(buyable as T, "classes"); + const classes = buyable.classes as ProcessedComputable> | undefined; + buyable.classes = computed(() => { + const currClasses = unref(classes) || {}; + if ((buyable as GenericBuyable).maxed.value) { + currClasses.bought = true; + } + return currClasses; + }); + processComputable(buyable as T, "canPurchase"); + buyable.canClick = buyable.canPurchase as ProcessedComputable; + buyable.onClick = buyable.purchase = function () { + const genericBuyable = buyable as GenericBuyable; + if ( + !unref(genericBuyable.canPurchase) || + genericBuyable.cost == null || + genericBuyable.resource == null + ) { + return; + } + const cost = unref(genericBuyable.cost); + genericBuyable.resource.value = Decimal.sub(genericBuyable.resource.value, cost); + genericBuyable.amount.value = Decimal.add(genericBuyable.amount.value, 1); + this.onPurchase?.(cost); + }; + processComputable(buyable as T, "display"); + const display = buyable.display; + buyable.display = jsx(() => { + // TODO once processComputable types correctly, remove this "as X" + const currDisplay = unref(display) as BuyableDisplay; + if ( + currDisplay != null && + !isCoercableComponent(currDisplay) && + buyable.cost != null && + buyable.resource != null + ) { + const genericBuyable = buyable as GenericBuyable; + const Title = coerceComponent(currDisplay.title || "", "h3"); + const Description = coerceComponent(currDisplay.description); + const EffectDisplay = coerceComponent(currDisplay.effectDisplay || ""); + return ( + + {currDisplay.title ? ( +
+ + </div> + ) : null} + <Description /> + <div> + <br /> + Amount: {formatWhole(genericBuyable.amount.value)} /{" "} + {formatWhole(unref(genericBuyable.purchaseLimit))} + </div> + {currDisplay.effectDisplay ? ( + <div> + <br /> + Currently: <EffectDisplay /> + </div> + ) : null} + {genericBuyable.cost && !genericBuyable.maxed.value ? ( + <div> + <br /> + Cost: {format(unref(genericBuyable.cost) || 0)}{" "} + {buyable.resource.displayName} + </div> + ) : null} + </span> + ); + } + return ""; + }); + + processComputable(buyable as T, "visibility"); + setDefault(buyable, "visibility", Visibility.Visible); + processComputable(buyable as T, "cost"); + processComputable(buyable as T, "resource"); + processComputable(buyable as T, "purchaseLimit"); + setDefault(buyable, "purchaseLimit", 1); + processComputable(buyable as T, "style"); + processComputable(buyable as T, "mark"); + processComputable(buyable as T, "small"); + + buyable[GatherProps] = function (this: GenericBuyable) { + const { display, visibility, style, classes, onClick, canClick, small, mark, id } = + this; + return { display, visibility, style, classes, onClick, canClick, small, mark, id }; + }; + + return buyable as unknown as Buyable<T>; + }); +} diff --git a/src/features/challenges/Challenge.vue b/src/features/challenges/Challenge.vue new file mode 100644 index 0000000..6af08fb --- /dev/null +++ b/src/features/challenges/Challenge.vue @@ -0,0 +1,208 @@ +<template> + <div + v-if="unref(visibility) !== Visibility.None" + :style="[ + { + visibility: unref(visibility) === Visibility.Hidden ? 'hidden' : undefined + }, + notifyStyle, + unref(style) ?? {} + ]" + :class="{ + feature: true, + challenge: true, + done: unref(completed), + canStart: unref(canStart), + maxed: unref(maxed), + ...unref(classes) + }" + > + <button class="toggleChallenge" @click="toggle"> + {{ buttonText }} + </button> + <component v-if="unref(comp)" :is="unref(comp)" /> + <MarkNode :mark="unref(mark)" /> + <LinkNode :id="id" /> + </div> +</template> + +<script lang="tsx"> +import "@/components/common/features.css"; +import { GenericChallenge } from "@/features/challenges/challenge"; +import { jsx, StyleValue, Visibility } from "@/features/feature"; +import { getHighNotifyStyle, getNotifyStyle } from "@/game/notifications"; +import { coerceComponent, isCoercableComponent, processedPropType, unwrapRef } from "@/util/vue"; +import { + Component, + computed, + defineComponent, + PropType, + shallowRef, + toRefs, + unref, + UnwrapRef, + watchEffect +} from "vue"; +import LinkNode from "@/components/links/LinkNode.vue"; +import MarkNode from "@/components/MarkNode.vue"; + +export default defineComponent({ + props: { + active: { + type: processedPropType<boolean>(Boolean), + required: true + }, + maxed: { + type: processedPropType<boolean>(Boolean), + required: true + }, + canComplete: { + type: processedPropType<boolean>(Boolean), + required: true + }, + display: processedPropType<UnwrapRef<GenericChallenge["display"]>>( + String, + Object, + Function + ), + visibility: { + type: processedPropType<Visibility>(Number), + required: true + }, + style: processedPropType<StyleValue>(String, Object, Array), + classes: processedPropType<Record<string, boolean>>(Object), + completed: { + type: processedPropType<boolean>(Boolean), + required: true + }, + canStart: { + type: processedPropType<boolean>(Boolean), + required: true + }, + mark: processedPropType<boolean | string>(Boolean, String), + id: { + type: String, + required: true + }, + toggle: { + type: Function as PropType<VoidFunction>, + required: true + } + }, + components: { + MarkNode, + LinkNode + }, + setup(props) { + const { active, maxed, canComplete, display } = toRefs(props); + + const buttonText = computed(() => { + if (active.value) { + return canComplete.value ? "Finish" : "Exit Early"; + } + if (maxed.value) { + return "Completed"; + } + return "Start"; + }); + + const comp = shallowRef<Component | string>(""); + + const notifyStyle = computed(() => { + const currActive = unwrapRef(active); + const currCanComplete = unwrapRef(canComplete); + if (currActive) { + if (currCanComplete) { + return getHighNotifyStyle(); + } + return getNotifyStyle(); + } + return {}; + }); + + watchEffect(() => { + const currDisplay = unwrapRef(display); + if (currDisplay == null) { + comp.value = ""; + return; + } + if (isCoercableComponent(currDisplay)) { + comp.value = coerceComponent(currDisplay); + return; + } + const Title = coerceComponent(currDisplay.title || "", "h3"); + const Description = coerceComponent(currDisplay.description, "div"); + const Goal = coerceComponent(currDisplay.goal || ""); + const Reward = coerceComponent(currDisplay.reward || ""); + const EffectDisplay = coerceComponent(currDisplay.effectDisplay || ""); + comp.value = coerceComponent( + jsx(() => ( + <span> + {currDisplay.title ? ( + <div> + <Title /> + </div> + ) : null} + <Description /> + {currDisplay.goal ? ( + <div> + <br /> + Goal: <Goal /> + </div> + ) : null} + {currDisplay.reward ? ( + <div> + <br /> + Reward: <Reward /> + </div> + ) : null} + {currDisplay.effectDisplay ? ( + <div> + Currently: <EffectDisplay /> + </div> + ) : null} + </span> + )) + ); + }); + + return { + buttonText, + notifyStyle, + comp, + Visibility, + unref + }; + } +}); +</script> + +<style scoped> +.challenge { + background-color: var(--locked); + width: 300px; + min-height: 300px; + color: black; + font-size: 15px; + display: flex; + flex-flow: column; + align-items: center; +} + +.challenge.done { + background-color: var(--bought); +} + +.challenge button { + min-height: 50px; + width: 120px; + border-radius: var(--border-radius); + box-shadow: none !important; + background: transparent; +} + +.challenge.canStart button { + cursor: pointer; + background-color: var(--layer-color); +} +</style> diff --git a/src/features/challenges/challenge.tsx b/src/features/challenges/challenge.tsx new file mode 100644 index 0000000..4052bfe --- /dev/null +++ b/src/features/challenges/challenge.tsx @@ -0,0 +1,272 @@ +import Toggle from "@/components/fields/Toggle.vue"; +import ChallengeComponent from "@/features/challenges/Challenge.vue"; +import { + CoercableComponent, + Component, + GatherProps, + getUniqueID, + jsx, + Replace, + setDefault, + StyleValue, + Visibility +} from "@/features/feature"; +import { GenericReset } from "@/features/reset"; +import { Resource } from "@/features/resources/resource"; +import { globalBus } from "@/game/events"; +import { persistent, PersistentRef } from "@/game/persistence"; +import settings, { registerSettingField } from "@/game/settings"; +import Decimal, { DecimalSource } from "@/util/bignum"; +import { + Computable, + GetComputableType, + GetComputableTypeWithDefault, + processComputable, + ProcessedComputable +} from "@/util/computed"; +import { createLazyProxy } from "@/util/proxies"; +import { computed, Ref, unref } from "vue"; + +export const ChallengeType = Symbol("ChallengeType"); + +export interface ChallengeOptions { + visibility?: Computable<Visibility>; + canStart?: Computable<boolean>; + reset?: GenericReset; + canComplete?: Computable<boolean | DecimalSource>; + completionLimit?: Computable<DecimalSource>; + mark?: Computable<boolean | string>; + resource?: Resource; + goal?: Computable<DecimalSource>; + classes?: Computable<Record<string, boolean>>; + style?: Computable<StyleValue>; + display?: Computable< + | CoercableComponent + | { + title?: CoercableComponent; + description: CoercableComponent; + goal?: CoercableComponent; + reward?: CoercableComponent; + effectDisplay?: CoercableComponent; + } + >; + onComplete?: VoidFunction; + onExit?: VoidFunction; + onEnter?: VoidFunction; +} + +interface BaseChallenge { + id: string; + completions: PersistentRef<DecimalSource>; + completed: Ref<boolean>; + maxed: Ref<boolean>; + active: PersistentRef<boolean>; + toggle: VoidFunction; + type: typeof ChallengeType; + [Component]: typeof ChallengeComponent; + [GatherProps]: () => Record<string, unknown>; +} + +export type Challenge<T extends ChallengeOptions> = Replace< + T & BaseChallenge, + { + visibility: GetComputableTypeWithDefault<T["visibility"], Visibility.Visible>; + canStart: GetComputableTypeWithDefault<T["canStart"], Ref<boolean>>; + canComplete: GetComputableTypeWithDefault<T["canComplete"], Ref<boolean>>; + completionLimit: GetComputableTypeWithDefault<T["completionLimit"], 1>; + mark: GetComputableTypeWithDefault<T["mark"], Ref<boolean>>; + goal: GetComputableType<T["goal"]>; + classes: GetComputableType<T["classes"]>; + style: GetComputableType<T["style"]>; + display: GetComputableType<T["display"]>; + } +>; + +export type GenericChallenge = Replace< + Challenge<ChallengeOptions>, + { + visibility: ProcessedComputable<Visibility>; + canStart: ProcessedComputable<boolean>; + canComplete: ProcessedComputable<boolean>; + completionLimit: ProcessedComputable<DecimalSource>; + mark: ProcessedComputable<boolean>; + } +>; + +export function createActiveChallenge( + challenges: GenericChallenge[] +): Ref<GenericChallenge | undefined> { + return computed(() => challenges.find(challenge => challenge.active.value)); +} + +export function createChallenge<T extends ChallengeOptions>( + optionsFunc: () => T & ThisType<Challenge<T>> +): Challenge<T> { + return createLazyProxy(() => { + const challenge: T & Partial<BaseChallenge> = optionsFunc(); + + if ( + challenge.canComplete == null && + (challenge.resource == null || challenge.goal == null) + ) { + console.warn( + "Cannot create challenge without a canComplete property or a resource and goal property", + challenge + ); + throw "Cannot create challenge without a canComplete property or a resource and goal property"; + } + + challenge.id = getUniqueID("challenge-"); + challenge.type = ChallengeType; + challenge[Component] = ChallengeComponent; + + challenge.completions = persistent(0); + challenge.active = persistent(false); + challenge.completed = computed(() => + Decimal.gt((challenge as GenericChallenge).completions.value, 0) + ); + challenge.maxed = computed(() => + Decimal.gte( + (challenge as GenericChallenge).completions.value, + unref((challenge as GenericChallenge).completionLimit) + ) + ); + challenge.toggle = function () { + const genericChallenge = challenge as GenericChallenge; + if (genericChallenge.active.value) { + if ( + genericChallenge.canComplete && + unref(genericChallenge.canComplete) && + !genericChallenge.maxed.value + ) { + let completions: boolean | DecimalSource = unref(genericChallenge.canComplete); + if (typeof completions === "boolean") { + completions = 1; + } + genericChallenge.completions.value = Decimal.min( + Decimal.add(genericChallenge.completions.value, completions), + unref(genericChallenge.completionLimit) + ); + genericChallenge.onComplete?.(); + } + genericChallenge.active.value = false; + genericChallenge.onExit?.(); + genericChallenge.reset?.reset(); + } else if (unref(genericChallenge.canStart)) { + genericChallenge.reset?.reset(); + genericChallenge.active.value = true; + genericChallenge.onEnter?.(); + } + }; + processComputable(challenge as T, "visibility"); + setDefault(challenge, "visibility", Visibility.Visible); + const visibility = challenge.visibility as ProcessedComputable<Visibility>; + challenge.visibility = computed(() => { + if (settings.hideChallenges === true && unref(challenge.maxed)) { + return Visibility.None; + } + return unref(visibility); + }); + if (challenge.canStart == null) { + challenge.canStart = computed( + () => + unref((challenge as GenericChallenge).visibility) === Visibility.Visible && + Decimal.lt( + (challenge as GenericChallenge).completions.value, + unref((challenge as GenericChallenge).completionLimit) + ) + ); + } + if (challenge.canComplete == null) { + challenge.canComplete = computed(() => { + const genericChallenge = challenge as GenericChallenge; + if ( + !genericChallenge.active.value || + genericChallenge.resource == null || + genericChallenge.goal == null + ) { + return false; + } + return Decimal.gte(genericChallenge.resource.value, unref(genericChallenge.goal)); + }); + } + if (challenge.mark == null) { + challenge.mark = computed( + () => + Decimal.gt(unref((challenge as GenericChallenge).completionLimit), 1) && + !!unref(challenge.maxed) + ); + } + + processComputable(challenge as T, "canStart"); + processComputable(challenge as T, "canComplete"); + processComputable(challenge as T, "completionLimit"); + setDefault(challenge, "completionLimit", 1); + processComputable(challenge as T, "mark"); + processComputable(challenge as T, "goal"); + processComputable(challenge as T, "classes"); + processComputable(challenge as T, "style"); + processComputable(challenge as T, "display"); + + if (challenge.reset != null) { + globalBus.on("reset", currentReset => { + if (currentReset === challenge.reset && (challenge.active as Ref<boolean>).value) { + (challenge.toggle as VoidFunction)(); + } + }); + } + + challenge[GatherProps] = function (this: GenericChallenge) { + const { + active, + maxed, + canComplete, + display, + visibility, + style, + classes, + completed, + canStart, + mark, + id, + toggle + } = this; + return { + active, + maxed, + canComplete, + display, + visibility, + style, + classes, + completed, + canStart, + mark, + id, + toggle + }; + }; + + return challenge as unknown as Challenge<T>; + }); +} + +declare module "@/game/settings" { + interface Settings { + hideChallenges: boolean; + } +} + +globalBus.on("loadSettings", settings => { + setDefault(settings, "hideChallenges", false); +}); + +registerSettingField( + jsx(() => ( + <Toggle + title="Hide Maxed Challenges" + onUpdate:modelValue={value => (settings.hideChallenges = value)} + modelValue={settings.hideChallenges} + /> + )) +); diff --git a/src/features/clickables/Clickable.vue b/src/features/clickables/Clickable.vue new file mode 100644 index 0000000..d8b5b4a --- /dev/null +++ b/src/features/clickables/Clickable.vue @@ -0,0 +1,143 @@ +<template> + <div + v-if="unref(visibility) !== Visibility.None" + :style="{ visibility: unref(visibility) === Visibility.Hidden ? 'hidden' : undefined }" + > + <button + :style="unref(style)" + @click="onClick" + @mousedown="start" + @mouseleave="stop" + @mouseup="stop" + @touchstart="start" + @touchend="stop" + @touchcancel="stop" + :disabled="!unref(canClick)" + :class="{ + feature: true, + clickable: true, + can: unref(canClick), + locked: !unref(canClick), + small, + ...unref(classes) + }" + > + <component v-if="unref(comp)" :is="unref(comp)" /> + <MarkNode :mark="unref(mark)" /> + <LinkNode :id="id" /> + </button> + </div> +</template> + +<script lang="tsx"> +import "@/components/common/features.css"; +import LinkNode from "@/components/links/LinkNode.vue"; +import MarkNode from "@/components/MarkNode.vue"; +import { GenericClickable } from "@/features/clickables/clickable"; +import { jsx, StyleValue, Visibility } from "@/features/feature"; +import { + coerceComponent, + isCoercableComponent, + processedPropType, + setupHoldToClick, + unwrapRef +} from "@/util/vue"; +import { + Component, + defineComponent, + PropType, + shallowRef, + toRefs, + unref, + UnwrapRef, + watchEffect +} from "vue"; + +export default defineComponent({ + props: { + display: { + type: processedPropType<UnwrapRef<GenericClickable["display"]>>( + Object, + String, + Function + ), + required: true + }, + visibility: { + type: processedPropType<Visibility>(Number), + required: true + }, + style: processedPropType<StyleValue>(Object, String, Array), + classes: processedPropType<Record<string, boolean>>(Object), + onClick: Function as PropType<VoidFunction>, + onHold: Function as PropType<VoidFunction>, + canClick: { + type: processedPropType<boolean>(Boolean), + required: true + }, + small: Boolean, + mark: processedPropType<boolean | string>(Boolean, String), + id: { + type: String, + required: true + } + }, + components: { + LinkNode, + MarkNode + }, + setup(props) { + const { display, onClick, onHold } = toRefs(props); + + const comp = shallowRef<Component | string>(""); + + watchEffect(() => { + const currDisplay = unwrapRef(display); + if (currDisplay == null) { + comp.value = ""; + return; + } + if (isCoercableComponent(currDisplay)) { + comp.value = coerceComponent(currDisplay); + return; + } + const Title = coerceComponent(currDisplay.title || "", "h3"); + const Description = coerceComponent(currDisplay.description, "div"); + comp.value = coerceComponent( + jsx(() => ( + <span> + {currDisplay.title ? ( + <div> + <Title /> + </div> + ) : null} + <Description /> + </span> + )) + ); + }); + + const { start, stop } = setupHoldToClick(onClick, onHold); + + return { + start, + stop, + comp, + Visibility, + unref + }; + } +}); +</script> + +<style scoped> +.clickable { + min-height: 120px; + width: 120px; + font-size: 10px; +} + +.clickable.small { + min-height: unset; +} +</style> diff --git a/src/features/clickables/clickable.ts b/src/features/clickables/clickable.ts new file mode 100644 index 0000000..df991ca --- /dev/null +++ b/src/features/clickables/clickable.ts @@ -0,0 +1,115 @@ +import ClickableComponent from "@/features/clickables/Clickable.vue"; +import { + CoercableComponent, + Component, + GatherProps, + getUniqueID, + Replace, + setDefault, + StyleValue, + Visibility +} from "@/features/feature"; +import { + Computable, + GetComputableType, + GetComputableTypeWithDefault, + processComputable, + ProcessedComputable +} from "@/util/computed"; +import { createLazyProxy } from "@/util/proxies"; + +export const ClickableType = Symbol("Clickable"); + +export interface ClickableOptions { + visibility?: Computable<Visibility>; + canClick?: Computable<boolean>; + classes?: Computable<Record<string, boolean>>; + style?: Computable<StyleValue>; + mark?: Computable<boolean | string>; + display?: Computable< + | CoercableComponent + | { + title?: CoercableComponent; + description: CoercableComponent; + } + >; + small?: boolean; + onClick?: VoidFunction; + onHold?: VoidFunction; +} + +interface BaseClickable { + id: string; + type: typeof ClickableType; + [Component]: typeof ClickableComponent; + [GatherProps]: () => Record<string, unknown>; +} + +export type Clickable<T extends ClickableOptions> = Replace< + T & BaseClickable, + { + visibility: GetComputableTypeWithDefault<T["visibility"], Visibility.Visible>; + canClick: GetComputableTypeWithDefault<T["canClick"], true>; + classes: GetComputableType<T["classes"]>; + style: GetComputableType<T["style"]>; + mark: GetComputableType<T["mark"]>; + display: GetComputableType<T["display"]>; + } +>; + +export type GenericClickable = Replace< + Clickable<ClickableOptions>, + { + visibility: ProcessedComputable<Visibility>; + canClick: ProcessedComputable<boolean>; + } +>; + +export function createClickable<T extends ClickableOptions>( + optionsFunc: () => T & ThisType<Clickable<T>> +): Clickable<T> { + return createLazyProxy(() => { + const clickable: T & Partial<BaseClickable> = optionsFunc(); + clickable.id = getUniqueID("clickable-"); + clickable.type = ClickableType; + clickable[Component] = ClickableComponent; + + processComputable(clickable as T, "visibility"); + setDefault(clickable, "visibility", Visibility.Visible); + processComputable(clickable as T, "canClick"); + setDefault(clickable, "canClick", true); + processComputable(clickable as T, "classes"); + processComputable(clickable as T, "style"); + processComputable(clickable as T, "mark"); + processComputable(clickable as T, "display"); + + clickable[GatherProps] = function (this: GenericClickable) { + const { + display, + visibility, + style, + classes, + onClick, + onHold, + canClick, + small, + mark, + id + } = this; + return { + display, + visibility, + style, + classes, + onClick, + onHold, + canClick, + small, + mark, + id + }; + }; + + return clickable as unknown as Clickable<T>; + }); +} diff --git a/src/features/conversion.ts b/src/features/conversion.ts new file mode 100644 index 0000000..bd46b2f --- /dev/null +++ b/src/features/conversion.ts @@ -0,0 +1,253 @@ +import { GenericLayer } from "@/game/layers"; +import Decimal, { DecimalSource } from "@/util/bignum"; +import { + Computable, + GetComputableTypeWithDefault, + processComputable, + ProcessedComputable +} from "@/util/computed"; +import { createLazyProxy } from "@/util/proxies"; +import { computed, isRef, Ref, unref } from "vue"; +import { Replace, setDefault } from "./feature"; +import { Resource } from "./resources/resource"; + +export interface ConversionOptions { + scaling: ScalingFunction; + currentGain?: Computable<DecimalSource>; + nextAt?: Computable<DecimalSource>; + baseResource: Resource; + gainResource: Resource; + buyMax?: Computable<boolean>; + roundUpCost?: Computable<boolean>; + convert?: VoidFunction; + modifyGainAmount?: (gain: DecimalSource) => DecimalSource; +} + +interface BaseConversion { + convert: VoidFunction; +} + +export type Conversion<T extends ConversionOptions> = Replace< + T & BaseConversion, + { + currentGain: GetComputableTypeWithDefault<T["currentGain"], Ref<DecimalSource>>; + nextAt: GetComputableTypeWithDefault<T["nextAt"], Ref<DecimalSource>>; + buyMax: GetComputableTypeWithDefault<T["buyMax"], true>; + roundUpCost: GetComputableTypeWithDefault<T["roundUpCost"], true>; + } +>; + +export type GenericConversion = Replace< + Conversion<ConversionOptions>, + { + currentGain: ProcessedComputable<DecimalSource>; + nextAt: ProcessedComputable<DecimalSource>; + buyMax: ProcessedComputable<boolean>; + roundUpCost: ProcessedComputable<boolean>; + } +>; + +export function createConversion<T extends ConversionOptions>( + optionsFunc: () => T & ThisType<Conversion<T>> +): Conversion<T> { + return createLazyProxy(() => { + const conversion: T = optionsFunc(); + + if (conversion.currentGain == null) { + conversion.currentGain = computed(() => + conversion.scaling.currentGain(conversion as GenericConversion) + ); + } + if (conversion.nextAt == null) { + conversion.nextAt = computed(() => + conversion.scaling.nextAt(conversion as GenericConversion) + ); + } + + if (conversion.convert == null) { + conversion.convert = function () { + conversion.gainResource.value = Decimal.add( + conversion.gainResource.value, + conversion.modifyGainAmount + ? conversion.modifyGainAmount( + unref((conversion as GenericConversion).currentGain) + ) + : unref((conversion as GenericConversion).currentGain) + ); + // TODO just subtract cost? + conversion.baseResource.value = 0; + }; + } + + processComputable(conversion as T, "currentGain"); + processComputable(conversion as T, "nextAt"); + processComputable(conversion as T, "buyMax"); + setDefault(conversion, "buyMax", true); + processComputable(conversion as T, "roundUpCost"); + setDefault(conversion, "roundUpCost", true); + + return conversion as unknown as Conversion<T>; + }); +} + +export type ScalingFunction = { + currentGain: (conversion: GenericConversion) => DecimalSource; + nextAt: (conversion: GenericConversion) => DecimalSource; +}; + +// Gain formula is (baseResource - base) * coefficient +// e.g. if base is 10 and coefficient is 0.5, 10 points makes 1 gain, 12 points is 2 +export function createLinearScaling( + base: DecimalSource | Ref<DecimalSource>, + coefficient: DecimalSource | Ref<DecimalSource> +): ScalingFunction { + return { + currentGain(conversion) { + if (Decimal.lt(conversion.baseResource.value, unref(base))) { + return 0; + } + + let gain = Decimal.sub(conversion.baseResource.value, unref(base)) + .sub(1) + .times(unref(coefficient)) + .add(1) + .floor() + .max(0); + + if (!conversion.buyMax) { + gain = gain.min(1); + } + return gain; + }, + nextAt(conversion) { + let next = Decimal.add(unref(conversion.currentGain), 1) + .times(unref(coefficient)) + .add(unref(base)) + .max(unref(base)); + if (conversion.roundUpCost) next = next.ceil(); + return next; + } + }; +} + +// Gain formula is (baseResource / base) ^ exponent +// e.g. if exponent is 0.5 and base is 10, then having 10 points makes gain 1, and 40 points is 2 +export function createExponentialScaling( + base: DecimalSource | Ref<DecimalSource>, + coefficient: DecimalSource | Ref<DecimalSource>, + exponent: DecimalSource | Ref<DecimalSource> +): ScalingFunction { + return { + currentGain(conversion) { + let gain = Decimal.div(conversion.baseResource.value, unref(base)) + .pow(unref(exponent)) + .floor() + .max(0); + + if (gain.isNan()) { + return new Decimal(0); + } + + if (!conversion.buyMax) { + gain = gain.min(1); + } + return gain; + }, + nextAt(conversion) { + let next = Decimal.add(unref(conversion.currentGain), 1) + .root(unref(exponent)) + .times(unref(base)) + .max(unref(base)); + if (conversion.roundUpCost) next = next.ceil(); + return next; + } + }; +} + +export function createCumulativeConversion<S extends ConversionOptions>( + optionsFunc: () => S & ThisType<Conversion<S>> +): Conversion<S> { + return createConversion(optionsFunc); +} + +export function createIndependentConversion<S extends ConversionOptions>( + optionsFunc: () => S & ThisType<Conversion<S>> +): Conversion<S> { + return createConversion(() => { + const conversion: S = optionsFunc(); + + setDefault(conversion, "buyMax", false); + + if (conversion.currentGain == null) { + conversion.currentGain = computed(() => + Decimal.sub( + conversion.scaling.currentGain(conversion as GenericConversion), + conversion.gainResource.value + ) + .add(1) + .max(1) + ); + } + setDefault(conversion, "convert", function () { + conversion.gainResource.value = conversion.modifyGainAmount + ? conversion.modifyGainAmount(unref((conversion as GenericConversion).currentGain)) + : unref((conversion as GenericConversion).currentGain); + // TODO just subtract cost? + // Maybe by adding a cost function to scaling and nextAt just calls the cost function + // with 1 + currentGain + conversion.baseResource.value = 0; + }); + + return conversion; + }); +} + +export function setupPassiveGeneration( + layer: GenericLayer, + conversion: GenericConversion, + rate: ProcessedComputable<DecimalSource> = 1 +): void { + layer.on("preUpdate", (diff: Decimal) => { + const currRate = isRef(rate) ? rate.value : rate; + if (Decimal.neq(currRate, 0)) { + conversion.gainResource.value = Decimal.add( + conversion.gainResource.value, + Decimal.times(currRate, diff).times(unref(conversion.currentGain)) + ); + } + }); +} + +function softcap( + value: DecimalSource, + cap: DecimalSource, + power: DecimalSource = 0.5 +): DecimalSource { + if (Decimal.lte(value, cap)) { + return value; + } else { + return Decimal.pow(value, power).times(Decimal.pow(cap, Decimal.sub(1, power))); + } +} + +export function addSoftcap( + scaling: ScalingFunction, + cap: ProcessedComputable<DecimalSource>, + power: ProcessedComputable<DecimalSource> = 0.5 +): ScalingFunction { + return { + ...scaling, + currentGain: conversion => + softcap(scaling.currentGain(conversion), unref(cap), unref(power)) + }; +} + +export function addHardcap( + scaling: ScalingFunction, + cap: ProcessedComputable<DecimalSource> +): ScalingFunction { + return { + ...scaling, + currentGain: conversion => Decimal.min(scaling.currentGain(conversion), unref(cap)) + }; +} diff --git a/src/features/feature.ts b/src/features/feature.ts new file mode 100644 index 0000000..2310dbe --- /dev/null +++ b/src/features/feature.ts @@ -0,0 +1,77 @@ +import { DefaultValue } from "@/game/persistence"; +import Decimal from "@/util/bignum"; +import { DoNotCache, ProcessedComputable } from "@/util/computed"; +import { CSSProperties, DefineComponent, isRef } from "vue"; + +export const Component = Symbol("Component"); +export const GatherProps = Symbol("GatherProps"); + +export type JSXFunction = (() => JSX.Element) & { [DoNotCache]: true }; +export type CoercableComponent = string | DefineComponent | JSXFunction; +export type StyleValue = string | CSSProperties | Array<string | CSSProperties>; + +// TODO if importing .vue components in .tsx can become type safe, +// this type can probably be safely removed +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export type GenericComponent = DefineComponent<any, any, any>; + +export type FeatureComponent<T> = Omit< + { + [K in keyof T]: T[K] extends ProcessedComputable<infer S> ? S : T[K]; + }, + typeof Component | typeof DefaultValue +>; + +export type Replace<T, S> = S & Omit<T, keyof S>; + +let id = 0; +// Get a unique ID to allow a feature to be found for creating branches +// and any other uses requiring unique identifiers for each feature +// IDs are gauranteed unique, but should not be saved as they are not +// guaranteed to be persistent through updates and such +export function getUniqueID(prefix = "feature-"): string { + return prefix + id++; +} + +export enum Visibility { + Visible, + Hidden, + None +} + +export function jsx(func: () => JSX.Element | ""): JSXFunction { + (func as Partial<JSXFunction>)[DoNotCache] = true; + return func as JSXFunction; +} + +export function showIf(condition: boolean, otherwise = Visibility.None): Visibility { + return condition ? Visibility.Visible : otherwise; +} + +export function setDefault<T, K extends keyof T>( + object: T, + key: K, + value: T[K] +): asserts object is Exclude<T, K> & Required<Pick<T, K>> { + if (object[key] === undefined && value != undefined) { + object[key] = value; + } +} + +export function findFeatures(obj: Record<string, unknown>, type: symbol): unknown[] { + const objects: unknown[] = []; + const handleObject = (obj: Record<string, unknown>) => { + Object.keys(obj).forEach(key => { + const value = obj[key]; + if (value && typeof value === "object") { + if ((value as Record<string, unknown>).type === type) { + objects.push(value); + } else if (!(value instanceof Decimal) && !isRef(value)) { + handleObject(value as Record<string, unknown>); + } + } + }); + }; + handleObject(obj); + return objects; +} diff --git a/src/features/grids/Grid.vue b/src/features/grids/Grid.vue new file mode 100644 index 0000000..d8f7f91 --- /dev/null +++ b/src/features/grids/Grid.vue @@ -0,0 +1,60 @@ +<template> + <div + v-if="unref(visibility) !== Visibility.None" + :style="{ + visibility: unref(visibility) === Visibility.Hidden ? 'hidden' : undefined + }" + class="table" + > + <div v-for="row in unref(rows)" class="row" :class="{ mergeAdjacent }" :key="row"> + <GridCell + v-for="col in unref(cols)" + :key="col" + v-bind="gatherCellProps(unref(cells)[row * 100 + col])" + /> + </div> + </div> +</template> + +<script lang="ts"> +import "@/components/common/table.css"; +import themes from "@/data/themes"; +import { Visibility } from "@/features/feature"; +import { GridCell } from "@/features/grids/grid"; +import settings from "@/game/settings"; +import { processedPropType } from "@/util/vue"; +import { computed, defineComponent, unref } from "vue"; +import GridCellVue from "./GridCell.vue"; + +export default defineComponent({ + props: { + visibility: { + type: processedPropType<Visibility>(Number), + required: true + }, + rows: { + type: processedPropType<number>(Number), + required: true + }, + cols: { + type: processedPropType<number>(Number), + required: true + }, + cells: { + type: processedPropType<Record<string, GridCell>>(Object), + required: true + } + }, + components: { GridCell: GridCellVue }, + setup() { + const mergeAdjacent = computed(() => themes[settings.theme].mergeAdjacent); + + function gatherCellProps(cell: GridCell) { + const { visibility, onClick, onHold, display, title, style, canClick, id } = cell; + return { visibility, onClick, onHold, display, title, style, canClick, id }; + } + + return { unref, gatherCellProps, Visibility, mergeAdjacent }; + } +}); +</script> diff --git a/src/features/grids/GridCell.vue b/src/features/grids/GridCell.vue new file mode 100644 index 0000000..fb88b67 --- /dev/null +++ b/src/features/grids/GridCell.vue @@ -0,0 +1,91 @@ +<template> + <button + v-if="unref(visibility) !== Visibility.None" + :class="{ feature: true, tile: true, can: unref(canClick), locked: !unref(canClick) }" + :style="[ + { + visibility: unref(visibility) === Visibility.Hidden ? 'hidden' : undefined + }, + unref(style) ?? {} + ]" + @click="onClick" + @mousedown="start" + @mouseleave="stop" + @mouseup="stop" + @touchstart="start" + @touchend="stop" + @touchcancel="stop" + :disabled="!unref(canClick)" + > + <div v-if="title"><component :is="titleComponent" /></div> + <component :is="component" style="white-space: pre-line" /> + <LinkNode :id="id" /> + </button> +</template> + +<script lang="ts"> +import "@/components/common/features.css"; +import LinkNode from "@/components/links/LinkNode.vue"; +import { CoercableComponent, StyleValue, Visibility } from "@/features/feature"; +import { + computeComponent, + computeOptionalComponent, + processedPropType, + setupHoldToClick +} from "@/util/vue"; +import { defineComponent, PropType, toRefs, unref } from "vue"; + +export default defineComponent({ + props: { + visibility: { + type: processedPropType<Visibility>(Number), + required: true + }, + onClick: Function as PropType<VoidFunction>, + onHold: Function as PropType<VoidFunction>, + display: { + type: processedPropType<CoercableComponent>(Object, String, Function), + required: true + }, + title: processedPropType<CoercableComponent>(Object, String, Function), + style: processedPropType<StyleValue>(String, Object, Array), + canClick: { + type: processedPropType<boolean>(Boolean), + required: true + }, + id: { + type: String, + required: true + } + }, + components: { + LinkNode + }, + setup(props) { + const { onClick, onHold, title, display } = toRefs(props); + + const { start, stop } = setupHoldToClick(onClick, onHold); + + const titleComponent = computeOptionalComponent(title); + const component = computeComponent(display); + + return { + start, + stop, + titleComponent, + component, + Visibility, + unref + }; + } +}); +</script> + +<style scoped> +.tile { + min-height: 80px; + width: 80px; + font-size: 10px; + background-color: var(--layer-color); +} +</style> diff --git a/src/features/grids/grid.ts b/src/features/grids/grid.ts new file mode 100644 index 0000000..3c6ab97 --- /dev/null +++ b/src/features/grids/grid.ts @@ -0,0 +1,288 @@ +import GridComponent from "@/features/grids/Grid.vue"; +import { + CoercableComponent, + Component, + GatherProps, + getUniqueID, + Replace, + setDefault, + StyleValue, + Visibility +} from "@/features/feature"; +import { isFunction } from "@/util/common"; +import { + Computable, + GetComputableType, + GetComputableTypeWithDefault, + processComputable, + ProcessedComputable +} from "@/util/computed"; +import { createLazyProxy } from "@/util/proxies"; +import { computed, Ref, unref } from "vue"; +import { State, Persistent, makePersistent, PersistentState } from "@/game/persistence"; + +export const GridType = Symbol("Grid"); + +export type CellComputable<T> = Computable<T> | ((id: string | number, state: State) => T); + +function createGridProxy(grid: GenericGrid): Record<string | number, GridCell> { + return new Proxy({}, getGridHandler(grid)) as Record<string | number, GridCell>; +} + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function getGridHandler(grid: GenericGrid): ProxyHandler<Record<string | number, GridCell>> { + const keys = computed(() => { + const keys = []; + for (let row = 1; row <= unref(grid.rows); row++) { + for (let col = 1; col <= unref(grid.cols); col++) { + keys.push((row * 100 + col).toString()); + } + } + return keys; + }); + return { + get(target: Record<string | number, GridCell>, key: PropertyKey) { + if (key === "isProxy") { + return true; + } + + if (typeof key === "symbol") { + return (grid as never)[key]; + } + + if (!keys.value.includes(key.toString())) { + return undefined; + } + + if (target[key] == null) { + target[key] = new Proxy( + grid, + getCellHandler(key.toString()) + ) as unknown as GridCell; + } + + return target[key]; + }, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + set(target: Record<string | number, GridCell>, key: PropertyKey, value: any) { + console.warn("Cannot set grid cells", target, key, value); + return false; + }, + ownKeys() { + return keys.value; + }, + has(target: Record<string | number, GridCell>, key: PropertyKey) { + return keys.value.includes(key.toString()); + }, + getOwnPropertyDescriptor(target: Record<string | number, GridCell>, key: PropertyKey) { + if (keys.value.includes(key.toString())) { + return { + configurable: true, + enumerable: true, + writable: false + }; + } + } + }; +} + +function getCellHandler(id: string): ProxyHandler<GenericGrid> { + const keys = [ + "id", + "visibility", + "canClick", + "startState", + "state", + "style", + "classes", + "title", + "display", + "onClick", + "onHold" + ]; + const cache: Record<string, Ref<unknown>> = {}; + return { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + get(target, key, receiver): any { + if (key === "isProxy") { + return true; + } + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + let prop = (target as any)[key]; + + if (isFunction(prop)) { + return () => prop.call(receiver, id, target.getState(id)); + } + if (prop != undefined || typeof key === "symbol") { + return prop; + } + + key = key.slice(0, 1).toUpperCase() + key.slice(1); + + if (key === "startState") { + return prop.call(receiver, id); + } + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + prop = (target as any)[`get${key}`]; + if (isFunction(prop)) { + if (!(key in cache)) { + cache[key] = computed(() => prop.call(receiver, id, target.getState(id))); + } + return cache[key].value; + } else if (prop != undefined) { + return unref(prop); + } + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + prop = (target as any)[`on${key}`]; + if (isFunction(prop)) { + return () => prop.call(receiver, id, target.getState(id)); + } else if (prop != undefined) { + return prop; + } + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + return (target as any)[key]; + }, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + set(target: Record<string, any>, key: string, value: any, receiver: typeof Proxy): boolean { + key = `set${key.slice(0, 1).toUpperCase() + key.slice(1)}`; + if (key in target && isFunction(target[key]) && target[key].length < 3) { + target[key].call(receiver, id, value); + return true; + } else { + console.warn(`No setter for "${key}".`, target); + return false; + } + }, + ownKeys() { + return keys; + }, + has(target, key) { + return keys.includes(key.toString()); + }, + getOwnPropertyDescriptor(target, key) { + if (keys.includes(key.toString())) { + return { + configurable: true, + enumerable: true, + writable: false + }; + } + } + }; +} + +export interface GridCell { + id: string; + visibility: Visibility; + canClick: boolean; + startState: State; + state: State; + style?: StyleValue; + classes?: Record<string, boolean>; + title?: CoercableComponent; + display: CoercableComponent; + onClick?: VoidFunction; + onHold?: VoidFunction; +} + +export interface GridOptions { + visibility?: Computable<Visibility>; + rows: Computable<number>; + cols: Computable<number>; + getVisibility?: CellComputable<Visibility>; + getCanClick?: CellComputable<boolean>; + getStartState: Computable<State> | ((id: string | number) => State); + getStyle?: CellComputable<StyleValue>; + getClasses?: CellComputable<Record<string, boolean>>; + getTitle?: CellComputable<CoercableComponent>; + getDisplay: CellComputable<CoercableComponent>; + onClick?: (id: string | number, state: State) => void; + onHold?: (id: string | number, state: State) => void; +} + +export interface BaseGrid extends Persistent<Record<string | number, State>> { + id: string; + getID: (id: string | number, state: State) => string; + getState: (id: string | number) => State; + setState: (id: string | number, state: State) => void; + cells: Record<string | number, GridCell>; + type: typeof GridType; + [Component]: typeof GridComponent; + [GatherProps]: () => Record<string, unknown>; +} + +export type Grid<T extends GridOptions> = Replace< + T & BaseGrid, + { + visibility: GetComputableTypeWithDefault<T["visibility"], Visibility.Visible>; + rows: GetComputableType<T["rows"]>; + cols: GetComputableType<T["cols"]>; + getVisibility: GetComputableTypeWithDefault<T["getVisibility"], Visibility.Visible>; + getCanClick: GetComputableTypeWithDefault<T["getCanClick"], true>; + getStartState: GetComputableType<T["getStartState"]>; + getStyle: GetComputableType<T["getStyle"]>; + getClasses: GetComputableType<T["getClasses"]>; + getTitle: GetComputableType<T["getTitle"]>; + getDisplay: GetComputableType<T["getDisplay"]>; + } +>; + +export type GenericGrid = Replace< + Grid<GridOptions>, + { + visibility: ProcessedComputable<Visibility>; + getVisibility: ProcessedComputable<Visibility>; + getCanClick: ProcessedComputable<boolean>; + } +>; + +export function createGrid<T extends GridOptions>( + optionsFunc: () => T & ThisType<Grid<T>> +): Grid<T> { + return createLazyProxy(() => { + const grid: T & Partial<BaseGrid> = optionsFunc(); + makePersistent(grid, {}); + grid.id = getUniqueID("grid-"); + grid[Component] = GridComponent; + + grid.getID = function (this: GenericGrid, cell: string | number) { + return grid.id + "-" + cell; + }; + grid.getState = function (this: GenericGrid, cell: string | number) { + if (this[PersistentState].value[cell] != undefined) { + return this[PersistentState].value[cell]; + } + return this.cells[cell].startState; + }; + grid.setState = function (this: GenericGrid, cell: string | number, state: State) { + this[PersistentState].value[cell] = state; + }; + + grid.cells = createGridProxy(grid as GenericGrid); + + processComputable(grid as T, "visibility"); + setDefault(grid, "visibility", Visibility.Visible); + processComputable(grid as T, "rows"); + processComputable(grid as T, "cols"); + processComputable(grid as T, "getVisibility"); + setDefault(grid, "getVisibility", Visibility.Visible); + processComputable(grid as T, "getCanClick"); + setDefault(grid, "getCanClick", true); + processComputable(grid as T, "getStartState"); + processComputable(grid as T, "getStyle"); + processComputable(grid as T, "getClasses"); + processComputable(grid as T, "getTitle"); + processComputable(grid as T, "getDisplay"); + + grid[GatherProps] = function (this: GenericGrid) { + const { visibility, rows, cols, cells, id } = this; + return { visibility, rows, cols, cells, id }; + }; + + return grid as unknown as Grid<T>; + }); +} diff --git a/src/features/hotkey.ts b/src/features/hotkey.ts new file mode 100644 index 0000000..f013999 --- /dev/null +++ b/src/features/hotkey.ts @@ -0,0 +1,90 @@ +import { hasWon } from "@/data/mod"; +import { globalBus } from "@/game/events"; +import player from "@/game/player"; +import { + Computable, + GetComputableTypeWithDefault, + GetComputableType, + ProcessedComputable, + processComputable +} from "@/util/computed"; +import { createLazyProxy } from "@/util/proxies"; +import { unref } from "vue"; +import { findFeatures, Replace, setDefault } from "./feature"; + +export const hotkeys: Record<string, GenericHotkey | undefined> = {}; +export const HotkeyType = Symbol("Hotkey"); + +export interface HotkeyOptions { + enabled?: Computable<boolean>; + key: string; + description: Computable<string>; + onPress: VoidFunction; +} + +interface BaseHotkey { + type: typeof HotkeyType; +} + +export type Hotkey<T extends HotkeyOptions> = Replace< + T & BaseHotkey, + { + enabled: GetComputableTypeWithDefault<T["enabled"], true>; + description: GetComputableType<T["description"]>; + } +>; + +export type GenericHotkey = Replace< + Hotkey<HotkeyOptions>, + { + enabled: ProcessedComputable<boolean>; + } +>; + +export function createHotkey<T extends HotkeyOptions>( + optionsFunc: () => T & ThisType<Hotkey<T>> +): Hotkey<T> { + return createLazyProxy(() => { + const hotkey: T & Partial<BaseHotkey> = optionsFunc(); + hotkey.type = HotkeyType; + + processComputable(hotkey as T, "enabled"); + setDefault(hotkey, "enabled", true); + processComputable(hotkey as T, "description"); + + return hotkey as unknown as Hotkey<T>; + }); +} + +globalBus.on("addLayer", layer => { + (findFeatures(layer, HotkeyType) as GenericHotkey[]).forEach(hotkey => { + hotkeys[hotkey.key] = hotkey; + }); +}); + +globalBus.on("removeLayer", layer => { + (findFeatures(layer, HotkeyType) as GenericHotkey[]).forEach(hotkey => { + hotkeys[hotkey.key] = undefined; + }); +}); + +document.onkeydown = function (e) { + if ((e.target as HTMLElement | null)?.tagName === "INPUT") { + return; + } + if (hasWon.value && !player.keepGoing) { + return; + } + let key = e.key; + if (e.shiftKey) { + key = "shift+" + key; + } + if (e.ctrlKey) { + key = "ctrl+" + key; + } + const hotkey = hotkeys[key]; + if (hotkey && unref(hotkey.enabled)) { + e.preventDefault(); + hotkey.onPress(); + } +}; diff --git a/src/features/infoboxes/Infobox.vue b/src/features/infoboxes/Infobox.vue new file mode 100644 index 0000000..3b5f4b8 --- /dev/null +++ b/src/features/infoboxes/Infobox.vue @@ -0,0 +1,179 @@ +<template> + <div + class="infobox" + v-if="unref(visibility) !== Visibility.None" + :style="[ + { + borderColor: unref(color), + visibility: unref(visibility) === Visibility.Hidden ? 'hidden' : undefined + }, + unref(style) ?? {} + ]" + :class="{ collapsed: unref(collapsed), stacked, ...unref(classes) }" + > + <button + class="title" + :style="[{ backgroundColor: unref(color) }, unref(titleStyle) || []]" + @click="collapsed.value = !unref(collapsed)" + > + <span class="toggle">▼</span> + <component :is="titleComponent" /> + </button> + <CollapseTransition> + <div v-if="!unref(collapsed)" class="body" :style="{ backgroundColor: unref(color) }"> + <component :is="bodyComponent" :style="unref(bodyStyle)" /> + </div> + </CollapseTransition> + <LinkNode :id="id" /> + </div> +</template> + +<script lang="ts"> +import LinkNode from "@/components/links/LinkNode.vue"; +import themes from "@/data/themes"; +import { CoercableComponent, Visibility } from "@/features/feature"; +import settings from "@/game/settings"; +import { computeComponent, processedPropType } from "@/util/vue"; +import CollapseTransition from "@ivanv/vue-collapse-transition/src/CollapseTransition.vue"; +import { computed, defineComponent, PropType, Ref, StyleValue, toRefs, unref } from "vue"; + +export default defineComponent({ + props: { + visibility: { + type: processedPropType<Visibility>(Number), + required: true + }, + display: { + type: processedPropType<CoercableComponent>(Object, String, Function), + required: true + }, + title: { + type: processedPropType<CoercableComponent>(Object, String, Function), + required: true + }, + color: processedPropType<string>(String), + collapsed: { + type: Object as PropType<Ref<boolean>>, + required: true + }, + style: processedPropType<StyleValue>(Object, String, Array), + titleStyle: processedPropType<StyleValue>(Object, String, Array), + bodyStyle: processedPropType<StyleValue>(Object, String, Array), + classes: processedPropType<Record<string, boolean>>(Object), + id: { + type: String, + required: true + } + }, + components: { + LinkNode, + CollapseTransition + }, + setup(props) { + const { title, display } = toRefs(props); + + const titleComponent = computeComponent(title); + const bodyComponent = computeComponent(display); + const stacked = computed(() => themes[settings.theme].stackedInfoboxes); + + return { + titleComponent, + bodyComponent, + stacked, + unref, + Visibility + }; + } +}); +</script> + +<style scoped> +.infobox { + position: relative; + width: 600px; + max-width: 95%; + margin-top: 0; + text-align: left; + border-style: solid; + border-width: 0px; + box-sizing: border-box; + border-radius: 5px; +} + +.infobox.stacked { + border-width: 4px; +} + +.infobox:not(.stacked) + .infobox:not(.stacked) { + margin-top: 20px; +} + +.infobox + :not(.infobox) { + margin-top: 10px; +} + +.title { + font-size: 24px; + color: black; + cursor: pointer; + border: none; + padding: 4px; + width: auto; + text-align: left; + padding-left: 30px; +} + +.infobox:not(.stacked) .title { + border-top-left-radius: 5px; + border-top-right-radius: 5px; +} + +.infobox.stacked + .infobox.stacked { + border-top-left-radius: 0; + border-top-right-radius: 0; + margin-top: -5px; +} + +.stacked .title { + width: 100%; +} + +.collapsed:not(.stacked) .title::after { + content: ""; + position: absolute; + left: 0; + right: 0; + bottom: 0; + height: 4px; + background-color: inherit; +} + +.toggle { + position: absolute; + left: 10px; +} + +.collapsed .toggle { + transform: rotate(-90deg); +} + +.body { + transition-duration: 0.5s; + border-radius: 5px; + border-top-left-radius: 0; +} + +.infobox:not(.stacked) .body { + padding: 4px; +} + +.body > * { + padding: 8px; + width: 100%; + display: block; + box-sizing: border-box; + border-radius: 5px; + border-top-left-radius: 0; + background-color: var(--background); +} +</style> diff --git a/src/features/infoboxes/infobox.ts b/src/features/infoboxes/infobox.ts new file mode 100644 index 0000000..226b40e --- /dev/null +++ b/src/features/infoboxes/infobox.ts @@ -0,0 +1,116 @@ +import InfoboxComponent from "@/features/infoboxes/Infobox.vue"; +import { + CoercableComponent, + Component, + GatherProps, + getUniqueID, + Replace, + setDefault, + StyleValue, + Visibility +} from "@/features/feature"; +import { + Computable, + GetComputableType, + GetComputableTypeWithDefault, + processComputable, + ProcessedComputable +} from "@/util/computed"; +import { createLazyProxy } from "@/util/proxies"; +import { Ref } from "vue"; +import { Persistent, makePersistent, PersistentState } from "@/game/persistence"; + +export const InfoboxType = Symbol("Infobox"); + +export interface InfoboxOptions { + visibility?: Computable<Visibility>; + color?: Computable<string>; + style?: Computable<StyleValue>; + titleStyle?: Computable<StyleValue>; + bodyStyle?: Computable<StyleValue>; + classes?: Computable<Record<string, boolean>>; + title: Computable<CoercableComponent>; + display: Computable<CoercableComponent>; +} + +interface BaseInfobox extends Persistent<boolean> { + id: string; + collapsed: Ref<boolean>; + type: typeof InfoboxType; + [Component]: typeof InfoboxComponent; + [GatherProps]: () => Record<string, unknown>; +} + +export type Infobox<T extends InfoboxOptions> = Replace< + T & BaseInfobox, + { + visibility: GetComputableTypeWithDefault<T["visibility"], Visibility.Visible>; + color: GetComputableType<T["color"]>; + style: GetComputableType<T["style"]>; + titleStyle: GetComputableType<T["titleStyle"]>; + bodyStyle: GetComputableType<T["bodyStyle"]>; + classes: GetComputableType<T["classes"]>; + title: GetComputableType<T["title"]>; + display: GetComputableType<T["display"]>; + } +>; + +export type GenericInfobox = Replace< + Infobox<InfoboxOptions>, + { + visibility: ProcessedComputable<Visibility>; + } +>; + +export function createInfobox<T extends InfoboxOptions>( + optionsFunc: () => T & ThisType<Infobox<T>> +): Infobox<T> { + return createLazyProxy(() => { + const infobox: T & Partial<BaseInfobox> = optionsFunc(); + makePersistent<boolean>(infobox, false); + infobox.id = getUniqueID("infobox-"); + infobox.type = InfoboxType; + infobox[Component] = InfoboxComponent; + + infobox.collapsed = infobox[PersistentState]; + + processComputable(infobox as T, "visibility"); + setDefault(infobox, "visibility", Visibility.Visible); + processComputable(infobox as T, "color"); + processComputable(infobox as T, "style"); + processComputable(infobox as T, "titleStyle"); + processComputable(infobox as T, "bodyStyle"); + processComputable(infobox as T, "classes"); + processComputable(infobox as T, "title"); + processComputable(infobox as T, "display"); + + infobox[GatherProps] = function (this: GenericInfobox) { + const { + visibility, + display, + title, + color, + collapsed, + style, + titleStyle, + bodyStyle, + classes, + id + } = this; + return { + visibility, + display, + title, + color, + collapsed, + style, + titleStyle, + bodyStyle, + classes, + id + }; + }; + + return infobox as unknown as Infobox<T>; + }); +} diff --git a/src/features/links.ts b/src/features/links.ts new file mode 100644 index 0000000..f1db9e2 --- /dev/null +++ b/src/features/links.ts @@ -0,0 +1,21 @@ +import { Position } from "@/game/layers"; +import { InjectionKey, SVGAttributes } from "vue"; + +export interface LinkNode { + x?: number; + y?: number; + element: HTMLElement; +} + +export interface Link extends SVGAttributes { + startNode: { id: string }; + endNode: { id: string }; + offsetStart?: Position; + offsetEnd?: Position; +} + +export const RegisterLinkNodeInjectionKey: InjectionKey< + (id: string, element: HTMLElement) => void +> = Symbol("RegisterLinkNode"); +export const UnregisterLinkNodeInjectionKey: InjectionKey<(id: string) => void> = + Symbol("UnregisterLinkNode"); diff --git a/src/features/milestones/Milestone.vue b/src/features/milestones/Milestone.vue new file mode 100644 index 0000000..8771f01 --- /dev/null +++ b/src/features/milestones/Milestone.vue @@ -0,0 +1,127 @@ +<template> + <div + v-if="unref(visibility) !== Visibility.None" + :style="[ + { + visibility: unref(visibility) === Visibility.Hidden ? 'hidden' : undefined + }, + unref(style) ?? {} + ]" + :class="{ feature: true, milestone: true, done: unref(earned), ...unref(classes) }" + > + <component :is="unref(comp)" /> + <LinkNode :id="id" /> + </div> +</template> + +<script lang="tsx"> +import "@/components/common/features.css"; +import { jsx, StyleValue, Visibility } from "@/features/feature"; +import { GenericMilestone } from "@/features/milestones/milestone"; +import { coerceComponent, isCoercableComponent, processedPropType, unwrapRef } from "@/util/vue"; +import { Component, defineComponent, shallowRef, toRefs, unref, UnwrapRef, watchEffect } from "vue"; +import LinkNode from "../../components/links/LinkNode.vue"; + +export default defineComponent({ + props: { + visibility: { + type: processedPropType<Visibility>(Number), + required: true + }, + display: { + type: processedPropType<UnwrapRef<GenericMilestone["display"]>>( + String, + Object, + Function + ), + required: true + }, + style: processedPropType<StyleValue>(String, Object, Array), + classes: processedPropType<Record<string, boolean>>(Object), + earned: { + type: processedPropType<boolean>(Boolean), + required: true + }, + id: { + type: String, + required: true + } + }, + components: { + LinkNode + }, + setup(props) { + const { display } = toRefs(props); + + const comp = shallowRef<Component | string>(""); + + watchEffect(() => { + const currDisplay = unwrapRef(display); + if (currDisplay == null) { + comp.value = ""; + return; + } + if (isCoercableComponent(currDisplay)) { + comp.value = coerceComponent(currDisplay); + return; + } + const Requirement = coerceComponent(currDisplay.requirement, "h3"); + const EffectDisplay = coerceComponent(currDisplay.effectDisplay || "", "b"); + const OptionsDisplay = coerceComponent(currDisplay.optionsDisplay || "", "span"); + comp.value = coerceComponent( + jsx(() => ( + <span> + <Requirement /> + {currDisplay.effectDisplay ? ( + <div> + <EffectDisplay /> + </div> + ) : null} + {currDisplay.optionsDisplay ? ( + <div class="equal-spaced"> + <OptionsDisplay /> + </div> + ) : null} + </span> + )) + ); + }); + + return { + comp, + unref, + Visibility + }; + } +}); +</script> + +<style scoped> +.milestone { + width: calc(100% - 10px); + min-width: 120px; + padding-left: 5px; + padding-right: 5px; + min-height: 75px; + background-color: var(--locked); + border-width: 4px; + border-radius: 5px; + color: rgba(0, 0, 0, 0.5); + margin-top: 0; + margin-bottom: 0; +} + +.milestone.done { + background-color: var(--bought); + cursor: default; +} + +.milestone >>> .equal-spaced { + display: flex; + justify-content: center; +} + +.milestone >>> .equal-spaced > * { + margin: auto; +} +</style> diff --git a/src/features/milestones/milestone.tsx b/src/features/milestones/milestone.tsx new file mode 100644 index 0000000..a0cf393 --- /dev/null +++ b/src/features/milestones/milestone.tsx @@ -0,0 +1,207 @@ +import Select from "@/components/fields/Select.vue"; +import { + CoercableComponent, + Component, + findFeatures, + GatherProps, + getUniqueID, + jsx, + Replace, + setDefault, + StyleValue, + Visibility +} from "@/features/feature"; +import MilestoneComponent from "@/features/milestones/Milestone.vue"; +import { globalBus } from "@/game/events"; +import "@/game/notifications"; +import { makePersistent, Persistent, PersistentState } from "@/game/persistence"; +import settings, { registerSettingField } from "@/game/settings"; +import { camelToTitle } from "@/util/common"; +import { + Computable, + GetComputableType, + GetComputableTypeWithDefault, + processComputable, + ProcessedComputable +} from "@/util/computed"; +import { createLazyProxy } from "@/util/proxies"; +import { coerceComponent, isCoercableComponent } from "@/util/vue"; +import { Unsubscribe } from "nanoevents"; +import { computed, Ref, unref } from "vue"; +import { useToast } from "vue-toastification"; + +export const MilestoneType = Symbol("Milestone"); + +export enum MilestoneDisplay { + All = "all", + //Last = "last", + Configurable = "configurable", + Incomplete = "incomplete", + None = "none" +} + +export interface MilestoneOptions { + visibility?: Computable<Visibility>; + shouldEarn: Computable<boolean>; + style?: Computable<StyleValue>; + classes?: Computable<Record<string, boolean>>; + display?: Computable< + | CoercableComponent + | { + requirement: CoercableComponent; + effectDisplay?: CoercableComponent; + optionsDisplay?: CoercableComponent; + } + >; + onComplete?: VoidFunction; +} + +interface BaseMilestone extends Persistent<boolean> { + id: string; + earned: Ref<boolean>; + type: typeof MilestoneType; + [Component]: typeof MilestoneComponent; + [GatherProps]: () => Record<string, unknown>; +} + +export type Milestone<T extends MilestoneOptions> = Replace< + T & BaseMilestone, + { + visibility: GetComputableTypeWithDefault<T["visibility"], Visibility.Visible>; + shouldEarn: GetComputableType<T["shouldEarn"]>; + style: GetComputableType<T["style"]>; + classes: GetComputableType<T["classes"]>; + display: GetComputableType<T["display"]>; + } +>; + +export type GenericMilestone = Replace< + Milestone<MilestoneOptions>, + { + visibility: ProcessedComputable<Visibility>; + } +>; + +export function createMilestone<T extends MilestoneOptions>( + optionsFunc: () => T & ThisType<Milestone<T>> +): Milestone<T> { + return createLazyProxy(() => { + const milestone: T & Partial<BaseMilestone> = optionsFunc(); + makePersistent<boolean>(milestone, false); + milestone.id = getUniqueID("milestone-"); + milestone.type = MilestoneType; + milestone[Component] = MilestoneComponent; + + milestone.earned = milestone[PersistentState]; + processComputable(milestone as T, "visibility"); + setDefault(milestone, "visibility", Visibility.Visible); + const visibility = milestone.visibility as ProcessedComputable<Visibility>; + milestone.visibility = computed(() => { + const display = unref((milestone as GenericMilestone).display); + switch (settings.msDisplay) { + default: + case MilestoneDisplay.All: + return unref(visibility); + case MilestoneDisplay.Configurable: + if ( + unref(milestone.earned) && + !( + display != null && + typeof display == "object" && + "optionsDisplay" in (display as Record<string, unknown>) + ) + ) { + return Visibility.None; + } + return unref(visibility); + case MilestoneDisplay.Incomplete: + if (unref(milestone.earned)) { + return Visibility.None; + } + return unref(visibility); + case MilestoneDisplay.None: + return Visibility.None; + } + }); + + processComputable(milestone as T, "shouldEarn"); + processComputable(milestone as T, "style"); + processComputable(milestone as T, "classes"); + processComputable(milestone as T, "display"); + + milestone[GatherProps] = function (this: GenericMilestone) { + const { visibility, display, style, classes, earned, id } = this; + return { visibility, display, style, classes, earned, id }; + }; + + return milestone as unknown as Milestone<T>; + }); +} + +const toast = useToast(); + +const listeners: Record<string, Unsubscribe | undefined> = {}; +globalBus.on("addLayer", layer => { + const milestones: GenericMilestone[] = ( + findFeatures(layer, MilestoneType) as GenericMilestone[] + ).filter(milestone => milestone.shouldEarn != null); + listeners[layer.id] = layer.on("postUpdate", () => { + milestones.forEach(milestone => { + if ( + unref(milestone.visibility) === Visibility.Visible && + !milestone.earned.value && + unref(milestone.shouldEarn) + ) { + milestone[PersistentState].value = true; + milestone.onComplete?.(); + if (milestone.display) { + const display = unref(milestone.display); + const Display = coerceComponent( + isCoercableComponent(display) ? display : display.requirement + ); + toast( + <> + <h3>Milestone earned!</h3> + <div> + {/* eslint-disable-next-line @typescript-eslint/ban-ts-comment */} + {/* @ts-ignore */} + <Display /> + </div> + </> + ); + } + } + }); + }); +}); +globalBus.on("removeLayer", layer => { + // unsubscribe from postUpdate + listeners[layer.id]?.(); + listeners[layer.id] = undefined; +}); + +declare module "@/game/settings" { + interface Settings { + msDisplay: MilestoneDisplay; + } +} + +globalBus.on("loadSettings", settings => { + setDefault(settings, "msDisplay", MilestoneDisplay.All); +}); + +const msDisplayOptions = Object.values(MilestoneDisplay).map(option => ({ + label: camelToTitle(option), + value: option +})); + +registerSettingField( + jsx(() => ( + <Select + title="Show Milestones" + options={msDisplayOptions} + onUpdate:modelValue={value => (settings.msDisplay = value as MilestoneDisplay)} + modelValue={settings.msDisplay} + /> + )) +); diff --git a/src/features/reset.ts b/src/features/reset.ts new file mode 100644 index 0000000..7221904 --- /dev/null +++ b/src/features/reset.ts @@ -0,0 +1,109 @@ +import { + DefaultValue, + getUniqueID, + Persistent, + persistent, + PersistentRef, + PersistentState, + Replace +} from "@/features/feature"; +import { globalBus } from "@/game/events"; +import { GenericLayer } from "@/game/layers"; +import Decimal from "@/lib/break_eternity"; +import { Computable, GetComputableType, processComputable } from "@/util/computed"; +import { createLazyProxy } from "@/util/proxies"; +import { Unsubscribe } from "nanoevents"; +import { computed, isRef, unref } from "vue"; + +export const ResetType = Symbol("Reset"); + +export interface ResetOptions { + thingsToReset: Computable<Record<string, unknown>[]>; + onReset?: VoidFunction; +} + +interface BaseReset { + id: string; + reset: VoidFunction; + type: typeof ResetType; +} + +export type Reset<T extends ResetOptions> = Replace< + T & BaseReset, + { + thingsToReset: GetComputableType<T["thingsToReset"]>; + } +>; + +export type GenericReset = Reset<ResetOptions>; + +export function createReset<T extends ResetOptions>( + optionsFunc: () => T & ThisType<Reset<T>> +): Reset<T> { + return createLazyProxy(() => { + const reset: T & Partial<BaseReset> = optionsFunc(); + reset.id = getUniqueID("reset-"); + reset.type = ResetType; + + reset.reset = function () { + const handleObject = (obj: unknown) => { + if (obj && typeof obj === "object") { + if (PersistentState in obj) { + (obj as Persistent)[PersistentState].value = (obj as Persistent)[ + DefaultValue + ]; + } else if (!(obj instanceof Decimal) && !isRef(obj)) { + Object.values(obj).forEach(obj => + handleObject(obj as Record<string, unknown>) + ); + } + } + }; + unref((reset as GenericReset).thingsToReset).forEach(handleObject); + globalBus.emit("reset", reset as GenericReset); + reset.onReset?.(); + }; + + processComputable(reset as T, "thingsToReset"); + + return reset as unknown as Reset<T>; + }); +} + +export function setupAutoReset( + layer: GenericLayer, + reset: GenericReset, + autoActive: Computable<boolean> = true +): Unsubscribe { + const isActive = typeof autoActive === "function" ? computed(autoActive) : autoActive; + return layer.on("update", () => { + if (unref(isActive)) { + reset.reset(); + } + }); +} + +const listeners: Record<string, Unsubscribe | undefined> = {}; +export function trackResetTime(layer: GenericLayer, reset: GenericReset): PersistentRef<Decimal> { + const resetTime = persistent<Decimal>(new Decimal(0)); + listeners[layer.id] = layer.on("preUpdate", (diff: Decimal) => { + resetTime.value = Decimal.add(resetTime.value, diff); + }); + globalBus.on("reset", currentReset => { + if (currentReset === reset) { + resetTime.value = new Decimal(0); + } + }); + return resetTime; +} +globalBus.on("removeLayer", layer => { + // unsubscribe from preUpdate + listeners[layer.id]?.(); + listeners[layer.id] = undefined; +}); + +declare module "@/game/events" { + interface GlobalEvents { + reset: (reset: GenericReset) => void; + } +} diff --git a/src/features/resources/MainDisplay.vue b/src/features/resources/MainDisplay.vue new file mode 100644 index 0000000..6fc28fe --- /dev/null +++ b/src/features/resources/MainDisplay.vue @@ -0,0 +1,38 @@ +<template> + <div> + <span v-if="showPrefix">You have </span> + <ResourceVue :resource="resource" :color="color || 'white'" /> + {{ resource.displayName + }}<!-- remove whitespace --> + <span v-if="effectComponent">, <component :is="effectComponent" /></span> + <br /><br /> + </div> +</template> + +<script setup lang="ts"> +import { CoercableComponent } from "@/features/feature"; +import { Resource } from "@/features/resources/resource"; +import Decimal from "@/util/bignum"; +import { computeOptionalComponent } from "@/util/vue"; +import { computed, Ref, StyleValue, toRefs } from "vue"; +import ResourceVue from "@/features/resources/Resource.vue"; + +const _props = defineProps<{ + resource: Resource; + color?: string; + classes?: Record<string, boolean>; + style?: StyleValue; + effectDisplay?: CoercableComponent; +}>(); +const props = toRefs(_props); + +const effectComponent = computeOptionalComponent( + props.effectDisplay as Ref<CoercableComponent | undefined> +); + +const showPrefix = computed(() => { + return Decimal.lt(props.resource.value, "1e1000"); +}); +</script> + +<style scoped></style> diff --git a/src/features/resources/Resource.vue b/src/features/resources/Resource.vue new file mode 100644 index 0000000..8485869 --- /dev/null +++ b/src/features/resources/Resource.vue @@ -0,0 +1,17 @@ +<template> + <h2 :style="{ color, 'text-shadow': '0px 0px 10px ' + color }"> + {{ amount }} + </h2> +</template> + +<script setup lang="ts"> +import { displayResource, Resource } from "@/features/resources/resource"; +import { computed } from "vue"; + +const props = defineProps<{ + resource: Resource; + color: string; +}>(); + +const amount = computed(() => displayResource(props.resource)); +</script> diff --git a/src/features/resources/resource.ts b/src/features/resources/resource.ts new file mode 100644 index 0000000..c1f956a --- /dev/null +++ b/src/features/resources/resource.ts @@ -0,0 +1,109 @@ +import Decimal, { DecimalSource, format, formatWhole } from "@/util/bignum"; +import { computed, ComputedRef, ref, Ref, watch } from "vue"; +import { globalBus } from "@/game/events"; +import { State, persistent } from "@/game/persistence"; + +export interface Resource<T = DecimalSource> extends Ref<T> { + displayName: string; + precision: number; + small: boolean; +} + +export function createResource<T extends State>( + defaultValue: T | Ref<T>, + displayName = "points", + precision = 0, + small = false +): Resource<T> { + const resource: Partial<Resource<T>> = persistent(defaultValue); + resource.displayName = displayName; + resource.precision = precision; + resource.small = small; + return resource as Resource<T>; +} + +export function trackBest(resource: Resource): Ref<DecimalSource> { + const best = persistent(resource.value); + watch(resource, amount => { + if (Decimal.gt(amount, best.value)) { + best.value = amount; + } + }); + return best; +} + +export function trackTotal(resource: Resource): Ref<DecimalSource> { + const total = persistent(resource.value); + watch(resource, (amount, prevAmount) => { + if (Decimal.gt(amount, prevAmount)) { + total.value = Decimal.add(total.value, Decimal.sub(amount, prevAmount)); + } + }); + return total; +} + +export function trackOOMPS( + resource: Resource, + pointGain?: ComputedRef<DecimalSource> +): Ref<string> { + const oomps = ref<DecimalSource>(0); + const oompsMag = ref(0); + const lastPoints = ref<DecimalSource>(0); + + globalBus.on("update", diff => { + oompsMag.value = 0; + if (Decimal.lte(resource.value, 1e100)) { + lastPoints.value = resource.value; + return; + } + + let curr = resource.value; + let prev = lastPoints.value; + lastPoints.value = curr; + if (Decimal.gt(curr, prev)) { + if (Decimal.gte(curr, "10^^8")) { + curr = Decimal.slog(curr, 1e10); + prev = Decimal.slog(prev, 1e10); + oomps.value = curr.sub(prev).div(diff); + oompsMag.value = -1; + } else { + while ( + Decimal.div(curr, prev).log(10).div(diff).gte("100") && + oompsMag.value <= 5 && + Decimal.gt(prev, 0) + ) { + curr = Decimal.log10(curr); + prev = Decimal.log10(prev); + oomps.value = curr.sub(prev).div(diff); + oompsMag.value++; + } + } + } + }); + + const oompsString = computed(() => { + if (oompsMag.value === 0) { + return pointGain + ? format(pointGain.value, resource.precision, resource.small) + + " " + + resource.displayName + + "/s" + : ""; + } + return ( + format(oomps.value) + + " OOM" + + (oompsMag.value < 0 ? "^OOM" : "^" + oompsMag.value) + + "s/sec" + ); + }); + return oompsString; +} + +export function displayResource(resource: Resource, overrideAmount?: DecimalSource): string { + const amount = overrideAmount ?? resource.value; + if (Decimal.eq(resource.precision, 0)) { + return formatWhole(amount); + } + return format(amount, resource.precision, resource.small); +} diff --git a/src/features/tabs/Tab.vue b/src/features/tabs/Tab.vue new file mode 100644 index 0000000..c686bb7 --- /dev/null +++ b/src/features/tabs/Tab.vue @@ -0,0 +1,13 @@ +<template> + <component :is="component" /> +</template> + +<script setup lang="ts"> +import { CoercableComponent } from "@/features/feature"; +import { computeComponent } from "@/util/vue"; +import { toRefs } from "vue"; + +const _props = defineProps<{ display: CoercableComponent }>(); +const { display } = toRefs(_props); +const component = computeComponent(display); +</script> diff --git a/src/features/tabs/TabButton.vue b/src/features/tabs/TabButton.vue new file mode 100644 index 0000000..9c93182 --- /dev/null +++ b/src/features/tabs/TabButton.vue @@ -0,0 +1,109 @@ +<template> + <button + v-if="unref(visibility) !== Visibility.None" + @click="selectTab" + class="tabButton" + :style="[ + { + visibility: unref(visibility) === Visibility.Hidden ? 'hidden' : undefined + }, + glowColorStyle, + unref(style) ?? {} + ]" + :class="{ + active, + ...unref(classes) + }" + > + <component :is="component" /> + </button> +</template> + +<script lang="ts"> +import { CoercableComponent, StyleValue, Visibility } from "@/features/feature"; +import { getNotifyStyle } from "@/game/notifications"; +import { computeComponent, processedPropType, unwrapRef } from "@/util/vue"; +import { computed, defineComponent, toRefs, unref } from "vue"; + +export default defineComponent({ + props: { + visibility: { + type: processedPropType<Visibility>(Number), + required: true + }, + display: { + type: processedPropType<CoercableComponent>(Object, String, Function), + required: true + }, + style: processedPropType<StyleValue>(String, Object, Array), + classes: processedPropType<Record<string, boolean>>(Object), + glowColor: processedPropType<string>(String), + active: Boolean, + floating: Boolean + }, + emits: ["selectTab"], + setup(props, { emit }) { + const { display, glowColor, floating } = toRefs(props); + + const component = computeComponent(display); + + const glowColorStyle = computed(() => { + const color = unwrapRef(glowColor); + if (!color) { + return {}; + } + if (unref(floating)) { + return getNotifyStyle(color); + } + return { boxShadow: `0px 9px 5px -6px ${color}` }; + }); + + function selectTab() { + emit("selectTab"); + } + + return { + selectTab, + component, + glowColorStyle, + unref, + Visibility + }; + } +}); +</script> + +<style scoped> +.tabButton { + background-color: transparent; + color: var(--foreground); + font-size: 20px; + cursor: pointer; + padding: 5px 20px; + margin: 5px; + border-radius: 5px; + border: 2px solid; + flex-shrink: 0; + border-color: var(--layer-color); +} + +.tabButton:hover { + transform: scale(1.1, 1.1); + text-shadow: 0 0 7px var(--foreground); +} + +:not(.floating) > .tabButton { + height: 50px; + margin: 0; + border-left: none; + border-right: none; + border-top: none; + border-bottom-width: 4px; + border-radius: 0; + transform: unset; +} + +:not(.floating) .tabButton:not(.active) { + border-bottom-color: transparent; +} +</style> diff --git a/src/features/tabs/TabFamily.vue b/src/features/tabs/TabFamily.vue new file mode 100644 index 0000000..0592a2a --- /dev/null +++ b/src/features/tabs/TabFamily.vue @@ -0,0 +1,249 @@ +<template> + <div + v-if="unref(visibility) !== Visibility.None" + class="tab-family-container" + :class="{ ...unref(classes), ...tabClasses }" + :style="[ + { + visibility: unref(visibility) === Visibility.Hidden ? 'hidden' : undefined + }, + unref(style) ?? [], + tabStyle ?? [] + ]" + > + <Sticky class="tab-buttons-container"> + <div class="tab-buttons" :class="{ floating }"> + <TabButton + v-for="(button, id) in unref(tabs)" + @selectTab="selected.value = id" + :floating="floating" + :key="id" + :active="unref(button.tab) === unref(activeTab)" + v-bind="gatherButtonProps(button)" + /> + </div> + </Sticky> + <template v-if="unref(activeTab)"> + <component :is="unref(component)" /> + </template> + </div> +</template> + +<script lang="ts"> +import Sticky from "@/components/layout/Sticky.vue"; +import themes from "@/data/themes"; +import { CoercableComponent, StyleValue, Visibility } from "@/features/feature"; +import { GenericTab } from "@/features/tabs/tab"; +import TabButton from "@/features/tabs/TabButton.vue"; +import { GenericTabButton } from "@/features/tabs/tabFamily"; +import settings from "@/game/settings"; +import { coerceComponent, isCoercableComponent, processedPropType, unwrapRef } from "@/util/vue"; +import { + Component, + computed, + defineComponent, + PropType, + Ref, + shallowRef, + toRefs, + unref, + watchEffect +} from "vue"; + +export default defineComponent({ + props: { + visibility: { + type: processedPropType<Visibility>(Number), + required: true + }, + activeTab: { + type: processedPropType<GenericTab | CoercableComponent | null>(Object), + required: true + }, + selected: { + type: Object as PropType<Ref<string>>, + required: true + }, + tabs: { + type: processedPropType<Record<string, GenericTabButton>>(Object), + required: true + }, + style: processedPropType<StyleValue>(String, Object, Array), + classes: processedPropType<Record<string, boolean>>(Object) + }, + components: { + Sticky, + TabButton + }, + setup(props) { + const { activeTab } = toRefs(props); + + const floating = computed(() => { + return themes[settings.theme].floatingTabs; + }); + + const component = shallowRef<Component | string>(""); + + watchEffect(() => { + const currActiveTab = unwrapRef(activeTab); + if (currActiveTab == null) { + component.value = ""; + return; + } + if (isCoercableComponent(currActiveTab)) { + component.value = coerceComponent(currActiveTab); + return; + } + component.value = coerceComponent(unref(currActiveTab.display)); + }); + + const tabClasses = computed(() => { + const currActiveTab = unwrapRef(activeTab); + const tabClasses = + isCoercableComponent(currActiveTab) || !currActiveTab + ? undefined + : unref(currActiveTab.classes); + return tabClasses; + }); + + const tabStyle = computed(() => { + const currActiveTab = unwrapRef(activeTab); + return isCoercableComponent(currActiveTab) || !currActiveTab + ? undefined + : unref(currActiveTab.style); + }); + + function gatherButtonProps(button: GenericTabButton) { + const { display, style, classes, glowColor, visibility } = button; + return { display, style, classes, glowColor, visibility }; + } + + return { + floating, + tabClasses, + tabStyle, + Visibility, + component, + gatherButtonProps, + unref + }; + } +}); +</script> + +<style scoped> +.tab-family-container { + margin: calc(50px + var(--feature-margin)) 20px var(--feature-margin) 20px; + position: relative; + border: solid 4px; + border-color: var(--outline); +} + +.layer-tab > .tab-family-container:first-child { + margin: -4px -11px var(--feature-margin) -11px; +} + +.layer-tab > .tab-family-container:first-child:nth-last-child(3) { + border-bottom-style: none; + border-left-style: none; + border-right-style: none; + height: calc(100% + 50px); +} + +.tab-family-container > :nth-child(2) { + margin-top: 20px; +} + +.tab-family-container[data-v-f18896fc] > :last-child { + margin-bottom: 20px; +} + +.tab-family-container .sticky { + margin-left: -3px !important; + margin-right: -3px !important; +} + +.tab-buttons-container { + width: calc(100% - 14px); +} + +.tab-buttons-container:not(.floating) { + border-top: solid 4px; + border-bottom: solid 4px; + border-color: inherit; +} + +.tab-buttons-container:not(.floating) .tab-buttons { + width: calc(100% + 14px); + margin-left: -7px; + margin-right: -7px; + box-sizing: border-box; + text-align: left; + padding-left: 14px; + margin-bottom: -4px; +} + +.tab-buttons-container.floating .tab-buttons { + justify-content: center; + margin-top: -25px; +} + +.tab-buttons { + margin-bottom: 24px; + display: flex; + flex-flow: wrap; + z-index: 4; +} + +.layer-tab + > .tab-family-container:first-child:nth-last-child(3) + > .tab-buttons-container + > .tab-buttons { + padding-right: 60px; +} + +.tab-buttons:not(.floating) { + text-align: left; + border-bottom: inherit; + border-width: 4px; + box-sizing: border-box; + height: 50px; +} + +.modal-body .tab-buttons { + width: 100%; + margin-left: 0; + margin-right: 0; + padding-left: 0; +} + +.showGoBack + > .tab-family-container + > .tab-buttons-container:not(.floating):first-child + .tab-buttons { + padding-left: 70px; +} + +:not(.showGoBack) + > .tab-family-container + > .tab-buttons-container:not(.floating):first-child + .tab-buttons { + padding-left: 2px; +} + +.tab-buttons-container:not(.floating):first-child { + border-top: 0; +} + +.minimizable > .tab-buttons-container:not(.floating):first-child { + padding-right: 50px; +} + +.tab-buttons-container:not(.floating):first-child .tab-buttons { + margin-top: -50px; +} + +.tab-buttons-container + * { + margin-top: 20px; +} +</style> diff --git a/src/features/tabs/tab.ts b/src/features/tabs/tab.ts new file mode 100644 index 0000000..49a1e8a --- /dev/null +++ b/src/features/tabs/tab.ts @@ -0,0 +1,53 @@ +import { + CoercableComponent, + Component, + GatherProps, + getUniqueID, + Replace, + StyleValue +} from "@/features/feature"; +import TabComponent from "@/features/tabs/Tab.vue"; +import { Computable, GetComputableType } from "@/util/computed"; +import { createLazyProxy } from "@/util/proxies"; + +export const TabType = Symbol("Tab"); + +export interface TabOptions { + classes?: Computable<Record<string, boolean>>; + style?: Computable<StyleValue>; + display: Computable<CoercableComponent>; +} + +interface BaseTab { + id: string; + type: typeof TabType; + [Component]: typeof TabComponent; + [GatherProps]: () => Record<string, unknown>; +} + +export type Tab<T extends TabOptions> = Replace< + T & BaseTab, + { + classes: GetComputableType<T["classes"]>; + style: GetComputableType<T["style"]>; + display: GetComputableType<T["display"]>; + } +>; + +export type GenericTab = Tab<TabOptions>; + +export function createTab<T extends TabOptions>(optionsFunc: () => T & ThisType<Tab<T>>): Tab<T> { + return createLazyProxy(() => { + const tab: T & Partial<BaseTab> = optionsFunc(); + tab.id = getUniqueID("tab-"); + tab.type = TabType; + tab[Component] = TabComponent; + + tab[GatherProps] = function (this: GenericTab) { + const { display } = this; + return { display }; + }; + + return tab as unknown as Tab<T>; + }); +} diff --git a/src/features/tabs/tabFamily.ts b/src/features/tabs/tabFamily.ts new file mode 100644 index 0000000..5134db0 --- /dev/null +++ b/src/features/tabs/tabFamily.ts @@ -0,0 +1,155 @@ +import { + CoercableComponent, + Component, + GatherProps, + getUniqueID, + Replace, + setDefault, + StyleValue, + Visibility +} from "@/features/feature"; +import TabButtonComponent from "@/features/tabs/TabButton.vue"; +import TabFamilyComponent from "@/features/tabs/TabFamily.vue"; +import { Persistent, makePersistent, PersistentState } from "@/game/persistence"; +import { + Computable, + GetComputableType, + GetComputableTypeWithDefault, + processComputable, + ProcessedComputable +} from "@/util/computed"; +import { createLazyProxy } from "@/util/proxies"; +import { computed, Ref, unref } from "vue"; +import { GenericTab } from "./tab"; + +export const TabButtonType = Symbol("TabButton"); +export const TabFamilyType = Symbol("TabFamily"); + +export interface TabButtonOptions { + visibility?: Computable<Visibility>; + tab: Computable<GenericTab | CoercableComponent>; + display: Computable<CoercableComponent>; + classes?: Computable<Record<string, boolean>>; + style?: Computable<StyleValue>; + glowColor?: Computable<string>; +} + +interface BaseTabButton { + type: typeof TabButtonType; + [Component]: typeof TabButtonComponent; +} + +export type TabButton<T extends TabButtonOptions> = Replace< + T & BaseTabButton, + { + visibility: GetComputableTypeWithDefault<T["visibility"], Visibility.Visible>; + tab: GetComputableType<T["tab"]>; + display: GetComputableType<T["display"]>; + classes: GetComputableType<T["classes"]>; + style: GetComputableType<T["style"]>; + glowColor: GetComputableType<T["glowColor"]>; + } +>; + +export type GenericTabButton = Replace< + TabButton<TabButtonOptions>, + { + visibility: ProcessedComputable<Visibility>; + } +>; + +export interface TabFamilyOptions { + visibility?: Computable<Visibility>; + tabs: Record<string, TabButtonOptions>; + classes?: Computable<Record<string, boolean>>; + style?: Computable<StyleValue>; +} + +interface BaseTabFamily extends Persistent<string> { + id: string; + activeTab: Ref<GenericTab | CoercableComponent | null>; + selected: Ref<string>; + type: typeof TabFamilyType; + [Component]: typeof TabFamilyComponent; + [GatherProps]: () => Record<string, unknown>; +} + +export type TabFamily<T extends TabFamilyOptions> = Replace< + T & BaseTabFamily, + { + visibility: GetComputableTypeWithDefault<T["visibility"], Visibility.Visible>; + tabs: Record<string, GenericTabButton>; + } +>; + +export type GenericTabFamily = Replace< + TabFamily<TabFamilyOptions>, + { + visibility: ProcessedComputable<Visibility>; + } +>; + +export function createTabFamily<T extends TabFamilyOptions>( + optionsFunc: () => T & ThisType<TabFamily<T>> +): TabFamily<T> { + return createLazyProxy(() => { + const tabFamily: T & Partial<BaseTabFamily> = optionsFunc(); + + if (Object.keys(tabFamily.tabs).length === 0) { + console.warn("Cannot create tab family with 0 tabs", tabFamily); + throw "Cannot create tab family with 0 tabs"; + } + + tabFamily.id = getUniqueID("tabFamily-"); + tabFamily.type = TabFamilyType; + tabFamily[Component] = TabFamilyComponent; + + makePersistent<string>(tabFamily, Object.keys(tabFamily.tabs)[0]); + tabFamily.selected = tabFamily[PersistentState]; + tabFamily.activeTab = computed(() => { + const tabs = unref(processedTabFamily.tabs); + if ( + tabFamily[PersistentState].value in tabs && + unref(tabs[processedTabFamily[PersistentState].value].visibility) === + Visibility.Visible + ) { + return unref(tabs[processedTabFamily[PersistentState].value].tab); + } + const firstTab = Object.values(tabs).find( + tab => unref(tab.visibility) === Visibility.Visible + ); + if (firstTab) { + return unref(firstTab.tab); + } + return null; + }); + + processComputable(tabFamily as T, "visibility"); + setDefault(tabFamily, "visibility", Visibility.Visible); + processComputable(tabFamily as T, "classes"); + processComputable(tabFamily as T, "style"); + + for (const tab in tabFamily.tabs) { + const tabButton: TabButtonOptions & Partial<BaseTabButton> = tabFamily.tabs[tab]; + tabButton.type = TabButtonType; + tabButton[Component] = TabButtonComponent; + + processComputable(tabButton as TabButtonOptions, "visibility"); + setDefault(tabButton, "visibility", Visibility.Visible); + processComputable(tabButton as TabButtonOptions, "tab"); + processComputable(tabButton as TabButtonOptions, "display"); + processComputable(tabButton as TabButtonOptions, "classes"); + processComputable(tabButton as TabButtonOptions, "style"); + processComputable(tabButton as TabButtonOptions, "glowColor"); + } + + tabFamily[GatherProps] = function (this: GenericTabFamily) { + const { visibility, activeTab, selected, tabs, style, classes } = this; + return { visibility, activeTab, selected, tabs, style, classes }; + }; + + // This is necessary because board.types is different from T and TabFamily + const processedTabFamily = tabFamily as unknown as TabFamily<T>; + return processedTabFamily; + }); +} diff --git a/src/features/tooltip.ts b/src/features/tooltip.ts new file mode 100644 index 0000000..076c8e3 --- /dev/null +++ b/src/features/tooltip.ts @@ -0,0 +1,25 @@ +import { CoercableComponent } from "@/features/feature"; +import { ProcessedComputable } from "@/util/computed"; + +declare module "@vue/runtime-dom" { + interface CSSProperties { + "--xoffset"?: string; + "--yoffset"?: string; + } +} + +export interface Tooltip { + display: ProcessedComputable<CoercableComponent>; + top?: ProcessedComputable<boolean>; + left?: ProcessedComputable<boolean>; + right?: ProcessedComputable<boolean>; + bottom?: ProcessedComputable<boolean>; + xoffset?: ProcessedComputable<string>; + yoffset?: ProcessedComputable<string>; + force?: ProcessedComputable<boolean>; +} + +export function gatherTooltipProps(tooltip: Tooltip) { + const { display, top, left, right, bottom, xoffset, yoffset, force } = tooltip; + return { display, top, left, right, bottom, xoffset, yoffset, force }; +} diff --git a/src/features/trees/Tree.vue b/src/features/trees/Tree.vue new file mode 100644 index 0000000..1362909 --- /dev/null +++ b/src/features/trees/Tree.vue @@ -0,0 +1,105 @@ +<template> + <span class="row" v-for="(row, index) in unref(nodes)" :key="index" v-bind="$attrs"> + <TreeNode + v-for="(node, nodeIndex) in row" + :key="nodeIndex" + v-bind="gatherNodeProps(node)" + :force-tooltip="node.forceTooltip" + /> + </span> + <span class="left-side-nodes" v-if="unref(leftSideNodes)"> + <TreeNode + v-for="(node, nodeIndex) in unref(leftSideNodes)" + :key="nodeIndex" + v-bind="gatherNodeProps(node)" + :force-tooltip="node.forceTooltip" + small + /> + </span> + <span class="side-nodes" v-if="unref(rightSideNodes)"> + <TreeNode + v-for="(node, nodeIndex) in unref(rightSideNodes)" + :key="nodeIndex" + v-bind="gatherNodeProps(node)" + :force-tooltip="node.forceTooltip" + small + /> + </span> +</template> + +<script lang="ts"> +import "@/components/common/table.css"; +import { GenericTreeNode } from "@/features/trees/tree"; +import { processedPropType } from "@/util/vue"; +import { defineComponent, unref } from "vue"; +import TreeNode from "./TreeNode.vue"; + +export default defineComponent({ + props: { + nodes: { + type: processedPropType<GenericTreeNode[][]>(Array), + required: true + }, + leftSideNodes: processedPropType<GenericTreeNode[]>(Array), + rightSideNodes: processedPropType<GenericTreeNode[]>(Array) + }, + components: { TreeNode }, + setup() { + function gatherNodeProps(node: GenericTreeNode) { + const { + display, + visibility, + style, + classes, + tooltip, + onClick, + onHold, + color, + glowColor, + forceTooltip, + canClick, + mark, + id + } = node; + return { + display, + visibility, + style, + classes, + tooltip, + onClick, + onHold, + color, + glowColor, + forceTooltip, + canClick, + mark, + id + }; + } + + return { + gatherNodeProps, + unref + }; + } +}); +</script> + +<style scoped> +.row { + margin: 50px auto; +} + +.left-side-nodes { + position: absolute; + left: 15px; + top: 65px; +} + +.side-nodes { + position: absolute; + right: 15px; + top: 65px; +} +</style> diff --git a/src/features/trees/TreeNode.vue b/src/features/trees/TreeNode.vue new file mode 100644 index 0000000..97f639e --- /dev/null +++ b/src/features/trees/TreeNode.vue @@ -0,0 +1,185 @@ +<template> + <Tooltip + v-if="unref(visibility) !== Visibility.None" + v-bind="tooltipToBind && gatherTooltipProps(tooltipToBind)" + :display="tooltipDisplay" + :force="forceTooltip" + :style="{ visibility: unref(visibility) === Visibility.Hidden ? 'hidden' : undefined }" + :class="{ + treeNode: true, + can: unref(canClick), + small: unref(small), + ...unref(classes) + }" + > + <button + @click="click" + @mousedown="start" + @mouseleave="stop" + @mouseup="stop" + @touchstart="start" + @touchend="stop" + @touchcancel="stop" + :style="[ + { + backgroundColor: unref(color), + boxShadow: `-4px -4px 4px rgba(0, 0, 0, 0.25) inset, 0 0 20px ${unref( + glowColor + )}` + }, + unref(style) ?? [] + ]" + :disabled="!unref(canClick)" + > + <component :is="unref(comp)" /> + </button> + <MarkNode :mark="unref(mark)" /> + <LinkNode :id="id" /> + </Tooltip> +</template> + +<script lang="ts"> +import LinkNode from "@/components/links/LinkNode.vue"; +import MarkNode from "@/components/MarkNode.vue"; +import TooltipVue from "@/components/Tooltip.vue"; +import { CoercableComponent, StyleValue, Visibility } from "@/features/feature"; +import { gatherTooltipProps, Tooltip } from "@/features/tooltip"; +import { ProcessedComputable } from "@/util/computed"; +import { + computeOptionalComponent, + isCoercableComponent, + processedPropType, + setupHoldToClick, + unwrapRef +} from "@/util/vue"; +import { + computed, + defineComponent, + PropType, + Ref, + shallowRef, + toRefs, + unref, + watchEffect +} from "vue"; + +export default defineComponent({ + props: { + display: processedPropType<CoercableComponent>(Object, String, Function), + visibility: { + type: processedPropType<Visibility>(Number), + required: true + }, + style: processedPropType<StyleValue>(String, Object, Array), + classes: processedPropType<Record<string, boolean>>(Object), + tooltip: processedPropType<CoercableComponent | Tooltip>(Object, String, Function), + onClick: Function as PropType<VoidFunction>, + onHold: Function as PropType<VoidFunction>, + color: processedPropType<string>(String), + glowColor: processedPropType<string>(String), + forceTooltip: { + type: Object as PropType<Ref<boolean>>, + required: true + }, + canClick: { + type: processedPropType<boolean>(Boolean), + required: true + }, + mark: processedPropType<boolean | string>(Boolean, String), + id: { + type: String, + required: true + }, + small: processedPropType<boolean>(Boolean) + }, + components: { + Tooltip: TooltipVue, + MarkNode, + LinkNode + }, + setup(props) { + const { tooltip, forceTooltip, onClick, onHold, display } = toRefs(props); + + function click(e: MouseEvent) { + if (e.shiftKey && tooltip) { + forceTooltip.value = !forceTooltip.value; + } else { + unref(onClick)?.(); + } + } + + const comp = computeOptionalComponent(display); + const tooltipDisplay = shallowRef<ProcessedComputable<CoercableComponent> | undefined>( + undefined + ); + watchEffect(() => { + const currTooltip = unwrapRef(tooltip); + + if (typeof currTooltip === "object" && !isCoercableComponent(currTooltip)) { + tooltipDisplay.value = currTooltip.display; + return; + } + tooltipDisplay.value = currTooltip; + }); + const tooltipToBind = computed(() => { + const currTooltip = unwrapRef(tooltip); + + if (typeof currTooltip === "object" && !isCoercableComponent(currTooltip)) { + return currTooltip; + } + return null; + }); + + const { start, stop } = setupHoldToClick(onClick, onHold); + + return { + click, + start, + stop, + comp, + tooltipDisplay, + tooltipToBind, + unref, + Visibility, + gatherTooltipProps, + isCoercableComponent + }; + } +}); +</script> + +<style scoped> +.treeNode { + height: 100px; + width: 100px; + border-radius: 50%; + padding: 0; + margin: 0 10px 0 10px; +} + +.treeNode button { + width: 100%; + height: 100%; + border: 2px solid rgba(0, 0, 0, 0.125); + border-radius: inherit; + font-size: 40px; + color: rgba(0, 0, 0, 0.5); + text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.25); + box-shadow: -4px -4px 4px rgba(0, 0, 0, 0.25) inset, 0px 0px 20px var(--background); + text-transform: capitalize; +} + +.treeNode.small { + height: 60px; + width: 60px; +} + +.treeNode.small button { + font-size: 30px; +} + +.ghost { + visibility: hidden; + pointer-events: none; +} +</style> diff --git a/src/features/trees/tree.ts b/src/features/trees/tree.ts new file mode 100644 index 0000000..e9be03b --- /dev/null +++ b/src/features/trees/tree.ts @@ -0,0 +1,275 @@ +import { + CoercableComponent, + Component, + GatherProps, + getUniqueID, + Replace, + setDefault, + StyleValue, + Visibility +} from "@/features/feature"; +import { Link } from "@/features/links"; +import { GenericReset } from "@/features/reset"; +import { displayResource, Resource } from "@/features/resources/resource"; +import { Tooltip } from "@/features/tooltip"; +import TreeComponent from "@/features/trees/Tree.vue"; +import { persistent } from "@/game/persistence"; +import { DecimalSource, format } from "@/util/bignum"; +import Decimal, { formatWhole } from "@/util/break_eternity"; +import { + Computable, + convertComputable, + GetComputableType, + GetComputableTypeWithDefault, + processComputable, + ProcessedComputable +} from "@/util/computed"; +import { createLazyProxy } from "@/util/proxies"; +import { computed, ref, Ref, unref } from "vue"; + +export const TreeNodeType = Symbol("TreeNode"); +export const TreeType = Symbol("Tree"); + +export interface TreeNodeOptions { + visibility?: Computable<Visibility>; + canClick?: Computable<boolean>; + color?: Computable<string>; + display?: Computable<CoercableComponent>; + tooltip?: Computable<string | Tooltip>; + glowColor?: Computable<string>; + classes?: Computable<Record<string, boolean>>; + style?: Computable<StyleValue>; + mark?: Computable<boolean | string>; + reset?: GenericReset; + onClick?: VoidFunction; + onHold?: VoidFunction; +} + +export interface BaseTreeNode { + id: string; + forceTooltip: Ref<boolean>; + type: typeof TreeNodeType; +} + +export type TreeNode<T extends TreeNodeOptions> = Replace< + T & BaseTreeNode, + { + visibility: GetComputableTypeWithDefault<T["visibility"], Visibility.Visible>; + canClick: GetComputableTypeWithDefault<T["canClick"], true>; + color: GetComputableType<T["color"]>; + display: GetComputableType<T["display"]>; + glowColor: GetComputableType<T["glowColor"]>; + classes: GetComputableType<T["classes"]>; + style: GetComputableType<T["style"]>; + mark: GetComputableType<T["mark"]>; + tooltip: GetComputableType<T["tooltip"]>; + } +>; + +export type GenericTreeNode = Replace< + TreeNode<TreeNodeOptions>, + { + visibility: ProcessedComputable<Visibility>; + canClick: ProcessedComputable<boolean>; + } +>; + +export function createTreeNode<T extends TreeNodeOptions>( + optionsFunc: () => T & ThisType<TreeNode<T>> +): TreeNode<T> { + return createLazyProxy(() => { + const treeNode: T & Partial<BaseTreeNode> = optionsFunc(); + treeNode.id = getUniqueID("treeNode-"); + treeNode.type = TreeNodeType; + + if (treeNode.tooltip) { + treeNode.forceTooltip = persistent(false); + } else { + // If we don't have a tooltip, no point in making this persistent + treeNode.forceTooltip = ref(false); + } + + processComputable(treeNode as T, "visibility"); + setDefault(treeNode, "visibility", Visibility.Visible); + processComputable(treeNode as T, "canClick"); + setDefault(treeNode, "canClick", true); + processComputable(treeNode as T, "color"); + processComputable(treeNode as T, "display"); + processComputable(treeNode as T, "tooltip"); + processComputable(treeNode as T, "glowColor"); + processComputable(treeNode as T, "classes"); + processComputable(treeNode as T, "style"); + processComputable(treeNode as T, "mark"); + + return treeNode as unknown as TreeNode<T>; + }); +} + +export interface TreeBranch extends Omit<Link, "startNode" | "endNode"> { + startNode: GenericTreeNode; + endNode: GenericTreeNode; +} + +export interface TreeOptions { + visibility?: Computable<Visibility>; + nodes: Computable<GenericTreeNode[][]>; + leftSideNodes?: Computable<GenericTreeNode[]>; + rightSideNodes?: Computable<GenericTreeNode[]>; + branches?: Computable<TreeBranch[]>; + resetPropagation?: ResetPropagation; + onReset?: (node: GenericTreeNode) => void; +} + +interface BaseTree { + id: string; + links: Ref<Link[]>; + reset: (node: GenericTreeNode) => void; + isResetting: Ref<boolean>; + resettingNode: Ref<GenericTreeNode | null>; + type: typeof TreeType; + [Component]: typeof TreeComponent; + [GatherProps]: () => Record<string, unknown>; +} + +export type Tree<T extends TreeOptions> = Replace< + T & BaseTree, + { + visibility: GetComputableTypeWithDefault<T["visibility"], Visibility.Visible>; + nodes: GetComputableType<T["nodes"]>; + leftSideNodes: GetComputableType<T["leftSideNodes"]>; + rightSideNodes: GetComputableType<T["rightSideNodes"]>; + branches: GetComputableType<T["branches"]>; + } +>; + +export type GenericTree = Replace< + Tree<TreeOptions>, + { + visibility: ProcessedComputable<Visibility>; + } +>; + +export function createTree<T extends TreeOptions>( + optionsFunc: () => T & ThisType<Tree<T>> +): Tree<T> { + return createLazyProxy(() => { + const tree: T & Partial<BaseTree> = optionsFunc(); + tree.id = getUniqueID("tree-"); + tree.type = TreeType; + tree[Component] = TreeComponent; + + tree.isResetting = ref(false); + tree.resettingNode = ref(null); + + tree.reset = function (node) { + const genericTree = tree as GenericTree; + genericTree.isResetting.value = true; + genericTree.resettingNode.value = node; + genericTree.resetPropagation?.(genericTree, node); + genericTree.onReset?.(node); + genericTree.isResetting.value = false; + genericTree.resettingNode.value = null; + }; + tree.links = computed(() => { + const genericTree = tree as GenericTree; + return unref(genericTree.branches) ?? []; + }); + + processComputable(tree as T, "visibility"); + setDefault(tree, "visibility", Visibility.Visible); + processComputable(tree as T, "nodes"); + processComputable(tree as T, "leftSideNodes"); + processComputable(tree as T, "rightSideNodes"); + processComputable(tree as T, "branches"); + + tree[GatherProps] = function (this: GenericTree) { + const { nodes, leftSideNodes, rightSideNodes } = this; + return { nodes, leftSideNodes, rightSideNodes }; + }; + + return tree as unknown as Tree<T>; + }); +} + +export type ResetPropagation = { + (tree: GenericTree, resettingNode: GenericTreeNode): void; +}; + +export const defaultResetPropagation = function ( + tree: GenericTree, + resettingNode: GenericTreeNode +): void { + const nodes = unref(tree.nodes); + const row = nodes.findIndex(nodes => nodes.includes(resettingNode)) - 1; + for (let x = row; x >= 0; x--) { + nodes[x].forEach(node => node.reset?.reset()); + } +}; + +export const invertedResetPropagation = function ( + tree: GenericTree, + resettingNode: GenericTreeNode +): void { + const nodes = unref(tree.nodes); + const row = nodes.findIndex(nodes => nodes.includes(resettingNode)) + 1; + for (let x = row; x < nodes.length; x++) { + nodes[x].forEach(node => node.reset?.reset()); + } +}; + +export const branchedResetPropagation = function ( + tree: GenericTree, + resettingNode: GenericTreeNode +): void { + const visitedNodes = [resettingNode]; + let currentNodes = [resettingNode]; + if (tree.branches != null) { + const branches = unref(tree.branches); + while (currentNodes.length > 0) { + const nextNodes: GenericTreeNode[] = []; + currentNodes.forEach(node => { + branches + .filter(branch => branch.startNode === node || branch.endNode === node) + .map(branch => { + if (branch.startNode === node) { + return branch.endNode; + } + return branch.startNode; + }) + .filter(node => !visitedNodes.includes(node)) + .forEach(node => { + // Check here instead of in the filter because this check's results may + // change as we go through each node + if (!nextNodes.includes(node)) { + nextNodes.push(node); + node.reset?.reset(); + } + }); + }); + currentNodes = nextNodes; + visitedNodes.push(...currentNodes); + } + } +}; + +export function createResourceTooltip( + resource: Resource, + requiredResource: Resource | null = null, + requirement: Computable<DecimalSource> = 0 +): Ref<string> { + const req = convertComputable(requirement); + return computed(() => { + if (requiredResource == null || Decimal.gte(resource.value, unref(req))) { + return displayResource(resource); + } + return `Reach ${ + Decimal.eq(requiredResource.precision, 0) + ? formatWhole(unref(req)) + : format(unref(req), requiredResource.precision) + } ${requiredResource.displayName} to unlock (You have ${ + Decimal.eq(requiredResource.precision, 0) + ? formatWhole(requiredResource.value) + : format(requiredResource.value, requiredResource.precision) + })`; + }); +} diff --git a/src/features/upgrades/Upgrade.vue b/src/features/upgrades/Upgrade.vue new file mode 100644 index 0000000..2d34548 --- /dev/null +++ b/src/features/upgrades/Upgrade.vue @@ -0,0 +1,144 @@ +<template> + <button + v-if="unref(visibility) !== Visibility.None" + :style="[ + { + visibility: unref(visibility) === Visibility.Hidden ? 'hidden' : undefined + }, + unref(style) ?? {} + ]" + @click="purchase" + :class="{ + feature: true, + upgrade: true, + can: unref(canPurchase), + locked: !unref(canPurchase), + bought: unref(bought), + ...unref(classes) + }" + :disabled="!unref(canPurchase)" + > + <component v-if="unref(component)" :is="unref(component)" /> + <MarkNode :mark="unref(mark)" /> + <LinkNode :id="id" /> + </button> +</template> + +<script lang="tsx"> +import "@/components/common/features.css"; +import LinkNode from "@/components/links/LinkNode.vue"; +import MarkNode from "@/components/MarkNode.vue"; +import { jsx, StyleValue, Visibility } from "@/features/feature"; +import { displayResource, Resource } from "@/features/resources/resource"; +import { GenericUpgrade } from "@/features/upgrades/upgrade"; +import { DecimalSource } from "@/lib/break_eternity"; +import { coerceComponent, isCoercableComponent, processedPropType, unwrapRef } from "@/util/vue"; +import { + Component, + defineComponent, + PropType, + shallowRef, + toRefs, + unref, + UnwrapRef, + watchEffect +} from "vue"; + +export default defineComponent({ + props: { + display: { + type: processedPropType<UnwrapRef<GenericUpgrade["display"]>>(String, Object, Function), + required: true + }, + visibility: { + type: processedPropType<Visibility>(Number), + required: true + }, + style: processedPropType<StyleValue>(String, Object, Array), + classes: processedPropType<Record<string, boolean>>(Object), + resource: Object as PropType<Resource>, + cost: processedPropType<DecimalSource>(String, Object, Number), + canPurchase: { + type: processedPropType<boolean>(Boolean), + required: true + }, + bought: { + type: processedPropType<boolean>(Boolean), + required: true + }, + mark: processedPropType<boolean | string>(Boolean, String), + id: { + type: String, + required: true + }, + purchase: { + type: Function as PropType<VoidFunction>, + required: true + } + }, + components: { + LinkNode, + MarkNode + }, + setup(props) { + const { display, cost } = toRefs(props); + + const component = shallowRef<Component | string>(""); + + watchEffect(() => { + const currDisplay = unwrapRef(display); + if (currDisplay == null) { + component.value = ""; + return; + } + if (isCoercableComponent(currDisplay)) { + component.value = coerceComponent(currDisplay); + return; + } + const currCost = unwrapRef(cost); + const Title = coerceComponent(currDisplay.title || "", "h3"); + const Description = coerceComponent(currDisplay.description, "div"); + const EffectDisplay = coerceComponent(currDisplay.effectDisplay || ""); + component.value = coerceComponent( + jsx(() => ( + <span> + {currDisplay.title ? ( + <div> + <Title /> + </div> + ) : null} + <Description /> + {currDisplay.effectDisplay ? ( + <div> + Currently: <EffectDisplay /> + </div> + ) : null} + {props.resource != null ? ( + <> + <br /> + Cost: {props.resource && + displayResource(props.resource, currCost)}{" "} + {props.resource?.displayName} + </> + ) : null} + </span> + )) + ); + }); + + return { + component, + unref, + Visibility + }; + } +}); +</script> + +<style scoped> +.upgrade { + min-height: 120px; + width: 120px; + font-size: 10px; +} +</style> diff --git a/src/features/upgrades/upgrade.ts b/src/features/upgrades/upgrade.ts new file mode 100644 index 0000000..a9f96c2 --- /dev/null +++ b/src/features/upgrades/upgrade.ts @@ -0,0 +1,185 @@ +import UpgradeComponent from "@/features/upgrades/Upgrade.vue"; +import { + CoercableComponent, + Component, + findFeatures, + GatherProps, + getUniqueID, + Replace, + setDefault, + StyleValue, + Visibility +} from "@/features/feature"; +import { Resource } from "@/features/resources/resource"; +import { GenericLayer } from "@/game/layers"; +import Decimal, { DecimalSource } from "@/util/bignum"; +import { isFunction } from "@/util/common"; +import { + Computable, + GetComputableType, + GetComputableTypeWithDefault, + processComputable, + ProcessedComputable +} from "@/util/computed"; +import { createLazyProxy } from "@/util/proxies"; +import { computed, Ref, unref } from "vue"; +import { Persistent, makePersistent, PersistentState } from "@/game/persistence"; + +export const UpgradeType = Symbol("Upgrade"); + +export interface UpgradeOptions { + visibility?: Computable<Visibility>; + classes?: Computable<Record<string, boolean>>; + style?: Computable<StyleValue>; + display?: Computable< + | CoercableComponent + | { + title?: CoercableComponent; + description: CoercableComponent; + effectDisplay?: CoercableComponent; + } + >; + mark?: Computable<boolean | string>; + cost?: Computable<DecimalSource>; + resource?: Resource; + canAfford?: Computable<boolean>; + onPurchase?: VoidFunction; +} + +interface BaseUpgrade extends Persistent<boolean> { + id: string; + bought: Ref<boolean>; + canPurchase: Ref<boolean>; + purchase: VoidFunction; + type: typeof UpgradeType; + [Component]: typeof UpgradeComponent; + [GatherProps]: () => Record<string, unknown>; +} + +export type Upgrade<T extends UpgradeOptions> = Replace< + T & BaseUpgrade, + { + visibility: GetComputableTypeWithDefault<T["visibility"], Visibility.Visible>; + classes: GetComputableType<T["classes"]>; + style: GetComputableType<T["style"]>; + display: GetComputableType<T["display"]>; + mark: GetComputableType<T["mark"]>; + cost: GetComputableType<T["cost"]>; + canAfford: GetComputableTypeWithDefault<T["canAfford"], Ref<boolean>>; + } +>; + +export type GenericUpgrade = Replace< + Upgrade<UpgradeOptions>, + { + visibility: ProcessedComputable<Visibility>; + canPurchase: ProcessedComputable<boolean>; + } +>; + +export function createUpgrade<T extends UpgradeOptions>( + optionsFunc: () => T & ThisType<Upgrade<T>> +): Upgrade<T> { + return createLazyProxy(() => { + const upgrade: T & Partial<BaseUpgrade> = optionsFunc(); + makePersistent<boolean>(upgrade, false); + upgrade.id = getUniqueID("upgrade-"); + upgrade.type = UpgradeType; + upgrade[Component] = UpgradeComponent; + + if (upgrade.canAfford == null && (upgrade.resource == null || upgrade.cost == null)) { + console.warn( + "Error: can't create upgrade without a canAfford property or a resource and cost property", + upgrade + ); + } + + upgrade.bought = upgrade[PersistentState]; + if (upgrade.canAfford == null) { + upgrade.canAfford = computed(() => { + const genericUpgrade = upgrade as GenericUpgrade; + return ( + genericUpgrade.resource != null && + genericUpgrade.cost != null && + Decimal.gte(genericUpgrade.resource.value, unref(genericUpgrade.cost)) + ); + }); + } else { + processComputable(upgrade as T, "canAfford"); + } + upgrade.canPurchase = computed( + () => + unref((upgrade as GenericUpgrade).visibility) === Visibility.Visible && + unref((upgrade as GenericUpgrade).canAfford) && + !unref(upgrade.bought) + ); + upgrade.purchase = function () { + const genericUpgrade = upgrade as GenericUpgrade; + if (!unref(genericUpgrade.canPurchase)) { + return; + } + if (genericUpgrade.resource != null && genericUpgrade.cost != null) { + genericUpgrade.resource.value = Decimal.sub( + genericUpgrade.resource.value, + unref(genericUpgrade.cost) + ); + } + genericUpgrade[PersistentState].value = true; + genericUpgrade.onPurchase?.(); + }; + + processComputable(upgrade as T, "visibility"); + setDefault(upgrade, "visibility", Visibility.Visible); + processComputable(upgrade as T, "classes"); + processComputable(upgrade as T, "style"); + processComputable(upgrade as T, "display"); + processComputable(upgrade as T, "mark"); + processComputable(upgrade as T, "cost"); + processComputable(upgrade as T, "resource"); + + upgrade[GatherProps] = function (this: GenericUpgrade) { + const { + display, + visibility, + style, + classes, + resource, + cost, + canPurchase, + bought, + mark, + id, + purchase + } = this; + return { + display, + visibility, + style, + classes, + resource, + cost, + canPurchase, + bought, + mark, + id, + purchase + }; + }; + + return upgrade as unknown as Upgrade<T>; + }); +} + +export function setupAutoPurchase( + layer: GenericLayer, + autoActive: Computable<boolean>, + upgrades: GenericUpgrade[] = [] +): void { + upgrades = upgrades || findFeatures(layer, UpgradeType); + const isAutoActive = isFunction(autoActive) ? computed(autoActive) : autoActive; + layer.on("update", () => { + if (unref(isAutoActive)) { + upgrades.forEach(upgrade => upgrade.purchase()); + } + }); +} diff --git a/src/game/events.ts b/src/game/events.ts new file mode 100644 index 0000000..a5a689e --- /dev/null +++ b/src/game/events.ts @@ -0,0 +1,102 @@ +import modInfo from "@/data/modInfo.json"; +import Decimal, { DecimalSource } from "@/util/bignum"; +import { createNanoEvents } from "nanoevents"; +import { App, Ref } from "vue"; +import { GenericLayer } from "./layers"; +import player from "./player"; +import settings, { Settings } from "./settings"; +import state from "./state"; + +export interface GlobalEvents { + addLayer: (layer: GenericLayer, saveData: Record<string, unknown>) => void; + removeLayer: (layer: GenericLayer) => void; + update: (diff: Decimal, trueDiff: number) => void; + loadSettings: (settings: Partial<Settings>) => void; + setupVue: (vue: App) => void; +} + +export const globalBus = createNanoEvents<GlobalEvents>(); + +let intervalID: number | null = null; + +// Not imported immediately due to dependency cycles +// This gets set during startGameLoop(), and will only be used in the update function +let hasWon: null | Ref<boolean> = null; + +function update() { + const now = Date.now(); + let diff: DecimalSource = (now - player.time) / 1e3; + player.time = now; + const trueDiff = diff; + + state.lastTenTicks.push(trueDiff); + if (state.lastTenTicks.length > 10) { + state.lastTenTicks = state.lastTenTicks.slice(1); + } + + // Stop here if the game is paused on the win screen + if (hasWon?.value && !player.keepGoing) { + return; + } + // Stop here if the player had a NaN value + if (state.hasNaN) { + return; + } + + diff = new Decimal(diff).max(0); + + if (player.devSpeed === 0) { + return; + } + + // Add offline time if any + if (player.offlineTime != undefined) { + if (Decimal.gt(player.offlineTime, modInfo.offlineLimit * 3600)) { + player.offlineTime = new Decimal(modInfo.offlineLimit * 3600); + } + if (Decimal.gt(player.offlineTime, 0) && player.devSpeed !== 0) { + const offlineDiff = Decimal.div(player.offlineTime, 10).max(diff); + player.offlineTime = Decimal.sub(player.offlineTime, offlineDiff); + diff = diff.add(offlineDiff); + } else if (player.devSpeed === 0) { + player.offlineTime = Decimal.add(player.offlineTime, diff); + } + if (!player.offlineProd || Decimal.lt(player.offlineTime, 0)) { + player.offlineTime = null; + } + } + + // Cap at max tick length + diff = Decimal.min(diff, modInfo.maxTickLength); + + // Apply dev speed + if (player.devSpeed != undefined) { + diff = diff.times(player.devSpeed); + } + + // Update + if (diff.eq(0)) { + return; + } + player.timePlayed = Decimal.add(player.timePlayed, diff); + globalBus.emit("update", diff, trueDiff); + + if (settings.unthrottled) { + requestAnimationFrame(update); + if (intervalID != null) { + clearInterval(intervalID); + intervalID = null; + } + } else if (intervalID == null) { + intervalID = setInterval(update, 50); + } +} + +export async function startGameLoop() { + hasWon = (await import("@/data/mod")).hasWon; + if (settings.unthrottled) { + requestAnimationFrame(update); + } else { + intervalID = setInterval(update, 50); + } +} diff --git a/src/game/layers.tsx b/src/game/layers.tsx new file mode 100644 index 0000000..d02c735 --- /dev/null +++ b/src/game/layers.tsx @@ -0,0 +1,187 @@ +import Modal from "@/components/Modal.vue"; +import { + CoercableComponent, + jsx, + JSXFunction, + Replace, + setDefault, + StyleValue +} from "@/features/feature"; +import { Link } from "@/features/links"; +import Decimal from "@/util/bignum"; +import { + Computable, + GetComputableType, + GetComputableTypeWithDefault, + processComputable, + ProcessedComputable +} from "@/util/computed"; +import { createLazyProxy } from "@/util/proxies"; +import { createNanoEvents, Emitter } from "nanoevents"; +import { ref, unref } from "vue"; +import { globalBus } from "./events"; +import { persistent, PersistentRef } from "./persistence"; +import player from "./player"; + +export interface LayerEvents { + // Generation + preUpdate: (diff: Decimal) => void; + // Actions (e.g. automation) + update: (diff: Decimal) => void; + // Effects (e.g. milestones) + postUpdate: (diff: Decimal) => void; +} + +export const layers: Record<string, Readonly<GenericLayer> | undefined> = {}; +window.layers = layers; + +declare module "@vue/runtime-dom" { + interface CSSProperties { + "--layer-color"?: string; + } +} + +export interface Position { + x: number; + y: number; +} + +export interface LayerOptions { + id: string; + color?: Computable<string>; + display: Computable<CoercableComponent>; + classes?: Computable<Record<string, boolean>>; + style?: Computable<StyleValue>; + name?: Computable<string>; + minimizable?: Computable<boolean>; + forceHideGoBack?: Computable<boolean>; + minWidth?: Computable<number>; + links?: Computable<Link[]>; +} + +export interface BaseLayer { + minimized: PersistentRef<boolean>; + emitter: Emitter<LayerEvents>; + on: OmitThisParameter<Emitter<LayerEvents>["on"]>; + emit: <K extends keyof LayerEvents>(event: K, ...args: Parameters<LayerEvents[K]>) => void; +} + +export type Layer<T extends LayerOptions> = Replace< + T & BaseLayer, + { + color: GetComputableType<T["color"]>; + display: GetComputableType<T["display"]>; + classes: GetComputableType<T["classes"]>; + style: GetComputableType<T["style"]>; + name: GetComputableTypeWithDefault<T["name"], T["id"]>; + minWidth: GetComputableTypeWithDefault<T["minWidth"], 600>; + minimizable: GetComputableTypeWithDefault<T["minimizable"], true>; + forceHideGoBack: GetComputableType<T["forceHideGoBack"]>; + links: GetComputableType<T["links"]>; + } +>; + +export type GenericLayer = Replace< + Layer<LayerOptions>, + { + name: ProcessedComputable<string>; + minWidth: ProcessedComputable<number>; + minimizable: ProcessedComputable<boolean>; + } +>; + +export function createLayer<T extends LayerOptions>(optionsFunc: () => T): Layer<T> { + return createLazyProxy(() => { + const layer = optionsFunc() as T & Partial<BaseLayer>; + const emitter = (layer.emitter = createNanoEvents<LayerEvents>()); + layer.on = emitter.on.bind(emitter); + layer.emit = emitter.emit.bind(emitter); + + layer.minimized = persistent(false); + + processComputable(layer as T, "color"); + processComputable(layer as T, "display"); + processComputable(layer as T, "name"); + setDefault(layer, "name", layer.id); + processComputable(layer as T, "minWidth"); + setDefault(layer, "minWidth", 600); + processComputable(layer as T, "minimizable"); + setDefault(layer, "minimizable", true); + processComputable(layer as T, "links"); + + return layer as unknown as Layer<T>; + }); +} + +export function addLayer( + layer: GenericLayer, + player: { layers?: Record<string, Record<string, unknown>> } +): void { + console.info("Adding layer", layer.id); + if (layers[layer.id]) { + console.error( + "Attempted to add layer with same ID as existing layer", + layer.id, + layers[layer.id] + ); + return; + } + + setDefault(player, "layers", {}); + if (player.layers[layer.id] == null) { + player.layers[layer.id] = {}; + } + layers[layer.id] = layer; + + globalBus.emit("addLayer", layer, player.layers[layer.id]); +} + +export function getLayer<T extends GenericLayer>(layerID: string): T { + return layers[layerID] as T; +} + +export function removeLayer(layer: GenericLayer): void { + console.info("Removing layer", layer.id); + globalBus.emit("removeLayer", layer); + + layers[layer.id] = undefined; +} + +export function reloadLayer(layer: GenericLayer): void { + removeLayer(layer); + + // Re-create layer + addLayer(layer, player); +} + +export function setupLayerModal(layer: GenericLayer): { + openModal: VoidFunction; + modal: JSXFunction; +} { + const showModal = ref(false); + return { + openModal: () => (showModal.value = true), + modal: jsx(() => ( + <Modal + modelValue={showModal.value} + onUpdate:modelValue={value => (showModal.value = value)} + v-slots={{ + header: () => <h2>{unref(layer.name)}</h2>, + body: unref(layer.display) + }} + /> + )) + }; +} + +globalBus.on("update", function updateLayers(diff) { + Object.values(layers).forEach(layer => { + layer?.emit("preUpdate", diff); + }); + Object.values(layers).forEach(layer => { + layer?.emit("update", diff); + }); + Object.values(layers).forEach(layer => { + layer?.emit("postUpdate", diff); + }); +}); diff --git a/src/game/notifications.ts b/src/game/notifications.ts new file mode 100644 index 0000000..f13a7ee --- /dev/null +++ b/src/game/notifications.ts @@ -0,0 +1,18 @@ +import { globalBus } from "@/game/events"; +import Toast from "vue-toastification"; +import "vue-toastification/dist/index.css"; + +globalBus.on("setupVue", vue => vue.use(Toast)); + +export function getNotifyStyle(color = "white", strength = "8px") { + return { + transform: "scale(1.05, 1.05)", + borderColor: "rgba(0, 0, 0, 0.125)", + boxShadow: `-4px -4px 4px rgba(0, 0, 0, 0.25) inset, 0 0 ${strength} ${color}`, + zIndex: 1 + }; +} + +export function getHighNotifyStyle() { + return getNotifyStyle("red", "20px"); +} diff --git a/src/game/persistence.ts b/src/game/persistence.ts new file mode 100644 index 0000000..110e238 --- /dev/null +++ b/src/game/persistence.ts @@ -0,0 +1,117 @@ +import { globalBus } from "@/game/events"; +import Decimal, { DecimalSource } from "@/util/bignum"; +import { ProxyState } from "@/util/proxies"; +import { isArray } from "@vue/shared"; +import { isRef, Ref, ref } from "vue"; +import { GenericLayer } from "./layers"; + +export const PersistentState = Symbol("PersistentState"); +export const DefaultValue = Symbol("DefaultValue"); + +// Note: This is a union of things that should be safely stringifiable without needing +// special processes for knowing what to load them in as +// - Decimals aren't allowed because we'd need to know to parse them back. +// - DecimalSources are allowed because the string is a valid value for them +export type State = + | string + | number + | boolean + | DecimalSource + | { [key: string]: State } + | { [key: number]: State }; + +export type Persistent<T extends State = State> = { + [PersistentState]: Ref<T>; + [DefaultValue]: T; +}; +export type PersistentRef<T extends State = State> = Ref<T> & Persistent<T>; + +export function persistent<T extends State>(defaultValue: T | Ref<T>): PersistentRef<T> { + const persistent = ( + isRef(defaultValue) ? defaultValue : (ref<T>(defaultValue) as unknown) + ) as PersistentRef<T>; + + persistent[PersistentState] = persistent; + persistent[DefaultValue] = isRef(defaultValue) ? defaultValue.value : defaultValue; + return persistent as PersistentRef<T>; +} + +export function makePersistent<T extends State>( + obj: unknown, + defaultValue: T +): asserts obj is Persistent<T> { + const persistent = obj as Partial<Persistent<T>>; + const state = ref(defaultValue) as Ref<T>; + + persistent[PersistentState] = state; + persistent[DefaultValue] = isRef(defaultValue) ? (defaultValue.value as T) : defaultValue; +} + +globalBus.on("addLayer", (layer: GenericLayer, saveData: Record<string, unknown>) => { + const features: { type: typeof Symbol }[] = []; + const handleObject = (obj: Record<string, unknown>, path: string[] = []): boolean => { + let foundPersistent = false; + Object.keys(obj).forEach(key => { + const value = obj[key]; + if (value && typeof value === "object") { + if (PersistentState in value) { + foundPersistent = true; + + // Construct save path if it doesn't exist + const persistentState = path.reduce<Record<string, unknown>>((acc, curr) => { + if (!(curr in acc)) { + acc[curr] = {}; + } + return acc[curr] as Record<string, unknown>; + }, saveData); + + // Cache currently saved value + const savedValue = persistentState[key]; + // Add ref to save data + persistentState[key] = (value as Persistent)[PersistentState]; + // Load previously saved value + if (savedValue != null) { + (persistentState[key] as Ref<unknown>).value = savedValue; + } else { + (persistentState[key] as Ref<unknown>).value = (value as Persistent)[ + DefaultValue + ]; + } + } else if ( + !(value instanceof Decimal) && + !isRef(value) && + // eslint-disable-next-line @typescript-eslint/no-explicit-any + !features.includes(value as { type: typeof Symbol }) + ) { + if (typeof (value as { type: typeof Symbol }).type === "symbol") { + features.push(value as { type: typeof Symbol }); + } + + // Continue traversing + const foundPersistentInChild = handleObject(value as Record<string, unknown>, [ + ...path, + key + ]); + + // Show warning for persistent values inside arrays + // TODO handle arrays better + if (foundPersistentInChild) { + if (isArray(value) && !isArray(obj)) { + console.warn( + "Found array that contains persistent values when adding layer. Keep in mind changing the order of elements in the array will mess with existing player saves.", + ProxyState in obj + ? (obj as Record<PropertyKey, unknown>)[ProxyState] + : obj, + key + ); + } else { + foundPersistent = true; + } + } + } + } + }); + return foundPersistent; + }; + handleObject(layer); +}); diff --git a/src/game/player.ts b/src/game/player.ts new file mode 100644 index 0000000..58cd5ee --- /dev/null +++ b/src/game/player.ts @@ -0,0 +1,118 @@ +import Decimal, { DecimalSource } from "@/util/bignum"; +import { isPlainObject } from "@/util/common"; +import { ProxiedWithState, ProxyPath, ProxyState } from "@/util/proxies"; +import { reactive, unref } from "vue"; +import transientState from "./state"; + +export interface PlayerData { + id: string; + devSpeed: DecimalSource | null; + name: string; + tabs: Array<string>; + time: number; + autosave: boolean; + offlineProd: boolean; + offlineTime: DecimalSource | null; + timePlayed: DecimalSource; + keepGoing: boolean; + modID: string; + modVersion: string; + layers: Record<string, Record<string, unknown>>; +} + +export type Player = ProxiedWithState<PlayerData>; + +const state = reactive<PlayerData>({ + id: "", + devSpeed: null, + name: "", + tabs: [], + time: -1, + autosave: true, + offlineProd: true, + offlineTime: null, + timePlayed: new Decimal(0), + keepGoing: false, + modID: "", + modVersion: "", + layers: {} +}); + +export function stringifySave(player: PlayerData): string { + return JSON.stringify(player, (key, value) => unref(value)); +} + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +const playerHandler: ProxyHandler<Record<PropertyKey, any>> = { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + get(target: Record<PropertyKey, any>, key: PropertyKey): any { + if (key === ProxyState || key === ProxyPath) { + return target[key]; + } + + const value = target[ProxyState][key]; + if (key !== "value" && isPlainObject(value) && !(value instanceof Decimal)) { + if (value !== target[key]?.[ProxyState]) { + const path = [...target[ProxyPath], key]; + target[key] = new Proxy({ [ProxyState]: value, [ProxyPath]: path }, playerHandler); + } + return target[key]; + } + + return value; + }, + set( + // eslint-disable-next-line @typescript-eslint/no-explicit-any + target: Record<PropertyKey, any>, + property: PropertyKey, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + value: any, + receiver: ProxyConstructor + ): boolean { + if ( + !transientState.hasNaN && + ((typeof value === "number" && isNaN(value)) || + (value instanceof Decimal && + (isNaN(value.sign) || isNaN(value.layer) || isNaN(value.mag)))) + ) { + const currentValue = target[ProxyState][property]; + if ( + !( + (typeof currentValue === "number" && isNaN(currentValue)) || + (currentValue instanceof Decimal && + (isNaN(currentValue.sign) || + isNaN(currentValue.layer) || + isNaN(currentValue.mag))) + ) + ) { + state.autosave = false; + transientState.hasNaN = true; + transientState.NaNPath = [...target[ProxyPath], property]; + transientState.NaNReceiver = receiver as unknown as Record<string, unknown>; + console.error( + `Attempted to set NaN value`, + [...target[ProxyPath], property], + target[ProxyState] + ); + throw "Attempted to set NaN value. See above for details"; + } + } + target[ProxyState][property] = value; + return true; + }, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + ownKeys(target: Record<PropertyKey, any>) { + return Reflect.ownKeys(target[ProxyState]); + }, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + has(target: Record<PropertyKey, any>, key: string) { + return Reflect.has(target[ProxyState], key); + }, + getOwnPropertyDescriptor(target, key) { + return Object.getOwnPropertyDescriptor(target[ProxyState], key); + } +}; +export default window.player = new Proxy( + { [ProxyState]: state, [ProxyPath]: ["player"] }, + playerHandler +) as Player; diff --git a/src/game/settings.ts b/src/game/settings.ts new file mode 100644 index 0000000..c42d439 --- /dev/null +++ b/src/game/settings.ts @@ -0,0 +1,62 @@ +import modInfo from "@/data/modInfo.json"; +import { Themes } from "@/data/themes"; +import { CoercableComponent } from "@/features/feature"; +import { globalBus } from "@/game/events"; +import { hardReset } from "@/util/save"; +import { reactive, watch } from "vue"; + +export interface Settings { + active: string; + saves: string[]; + showTPS: boolean; + theme: Themes; + unthrottled: boolean; +} + +const state = reactive<Partial<Settings>>({ + active: "", + saves: [], + showTPS: true, + theme: Themes.Nordic, + unthrottled: false +}); + +watch( + state, + state => + localStorage.setItem(modInfo.id, btoa(unescape(encodeURIComponent(JSON.stringify(state))))), + { deep: true } +); +export default window.settings = state as Settings; + +export function loadSettings(): void { + try { + const item: string | null = localStorage.getItem(modInfo.id); + if (item != null && item !== "") { + const settings = JSON.parse(decodeURIComponent(escape(atob(item)))); + if (typeof settings === "object") { + Object.assign(state, settings); + } + } + globalBus.emit("loadSettings", state); + // eslint-disable-next-line no-empty + } catch {} +} + +export const hardResetSettings = (window.hardResetSettings = () => { + const settings = { + active: "", + saves: [], + showTPS: true, + theme: Themes.Nordic + }; + globalBus.emit("loadSettings", settings); + Object.assign(state, settings); + hardReset(); +}); + +export const settingFields: CoercableComponent[] = reactive([]); + +export function registerSettingField(component: CoercableComponent) { + settingFields.push(component); +} diff --git a/src/game/state.ts b/src/game/state.ts new file mode 100644 index 0000000..e8d9da0 --- /dev/null +++ b/src/game/state.ts @@ -0,0 +1,14 @@ +import { shallowReactive } from "vue"; + +export interface Transient { + lastTenTicks: number[]; + hasNaN: boolean; + NaNPath?: string[]; + NaNReceiver?: Record<string, unknown>; +} + +export default window.state = shallowReactive<Transient>({ + lastTenTicks: [], + hasNaN: false, + NaNPath: [] +}); diff --git a/src/lib/break_eternity.ts b/src/lib/break_eternity.ts new file mode 100644 index 0000000..55c0a9c --- /dev/null +++ b/src/lib/break_eternity.ts @@ -0,0 +1,3195 @@ +/* eslint-disable @typescript-eslint/no-this-alias */ +export type CompareResult = -1 | 0 | 1; + +const MAX_SIGNIFICANT_DIGITS = 17; //Maximum number of digits of precision to assume in Number + +const EXP_LIMIT = 9e15; //If we're ABOVE this value, increase a layer. (9e15 is close to the largest integer that can fit in a Number.) + +const LAYER_DOWN: number = Math.log10(9e15); + +const FIRST_NEG_LAYER = 1 / 9e15; //At layer 0, smaller non-zero numbers than this become layer 1 numbers with negative mag. After that the pattern continues as normal. + +const NUMBER_EXP_MAX = 308; //The largest exponent that can appear in a Number, though not all mantissas are valid here. + +const NUMBER_EXP_MIN = -324; //The smallest exponent that can appear in a Number, though not all mantissas are valid here. + +const MAX_ES_IN_A_ROW = 5; //For default toString behaviour, when to swap from eee... to (e^n) syntax. + +const IGNORE_COMMAS = true; +const COMMAS_ARE_DECIMAL_POINTS = false; + +const powerOf10 = (function() { + // We need this lookup table because Math.pow(10, exponent) + // when exponent's absolute value is large is slightly inaccurate. + // You can fix it with the power of math... or just make a lookup table. + // Faster AND simpler + const powersOf10: number[] = []; + + for (let i = NUMBER_EXP_MIN + 1; i <= NUMBER_EXP_MAX; i++) { + powersOf10.push(Number("1e" + i)); + } + + const indexOf0InPowersOf10 = 323; + return function(power: number) { + return powersOf10[power + indexOf0InPowersOf10]; + }; +})(); + +//tetration/slog to real height stuff +//background info and tables of values for critical functions taken here: https://github.com/Patashu/break_eternity.js/issues/22 +const critical_headers = [2, Math.E, 3, 4, 5, 6, 7, 8, 9, 10]; +const critical_tetr_values = [ + [ + // Base 2 + 1, + 1.0891168053867777, + 1.1789745164521264, + 1.2701428397304229, + 1.3632066654400328, + 1.4587804913784246, + 1.557523817412741, + 1.660158301473385, + 1.767487542936873, + 1.8804205225512542, + 2 + ], + [ + // Base E + 1, //0.0 + 1.1121114330934, //0.1 + 1.23103892493161, //0.2 + 1.35838369631113, //0.3 + 1.49605193039935, //0.4 + 1.64635423375119, //0.5 + 1.81213853570186, //0.6 + 1.99697132461829, //0.7 + 2.20538955455724, //0.8 + 2.44325744833852, //0.9 + Math.E //1.0 + ], + [ + // Base 3 + 1, + 1.1187738849693603, + 1.2464963939368214, + 1.38527004705667, + 1.5376664685821402, + 1.7068895236551784, + 1.897001227148399, + 2.1132403089001035, + 2.362480153784171, + 2.6539010333870774, + 3 + ], + [ + // Base 4 + 1, + 1.1367350847096405, + 1.2889510672956703, + 1.4606478703324786, + 1.6570295196661111, + 1.8850062585672889, + 2.1539465047453485, + 2.476829779693097, + 2.872061932789197, + 3.3664204535587183, + 4 + ], + [ + // Base 5 + 1, + 1.1494592900767588, + 1.319708228183931, + 1.5166291280087583, + 1.748171114438024, + 2.0253263297298045, + 2.3636668498288547, + 2.7858359149579424, + 3.3257226212448145, + 4.035730287722532, + 5 + ], + [ + // Base 6 + 1, + 1.159225940787673, + 1.343712473580932, + 1.5611293155111927, + 1.8221199554561318, + 2.14183924486326, + 2.542468319282638, + 3.0574682501653316, + 3.7390572020926873, + 4.6719550537360774, + 6 + ], + [ + // Base 7 + 1, + 1.1670905356972596, + 1.3632807444991446, + 1.5979222279405536, + 1.8842640123816674, + 2.2416069644878687, + 2.69893426559423, + 3.3012632110403577, + 4.121250340630164, + 5.281493033448316, + 7 + ], + [ + // Base 8 + 1, + 1.1736630594087796, + 1.379783782386201, + 1.6292821855668218, + 1.9378971836180754, + 2.3289975651071977, + 2.8384347394720835, + 3.5232708454565906, + 4.478242031114584, + 5.868592169644505, + 8 + ], + [ + // Base 9 + 1, + 1.1793017514670474, + 1.394054150657457, + 1.65664127441059, + 1.985170999970283, + 2.4069682290577457, + 2.9647310119960752, + 3.7278665320924946, + 4.814462547283592, + 6.436522247411611, + 9 + ], + [ + // Base 10 + 1, + 1.18422737399915, + 1.4066113788546144, + 1.680911177655277, + 2.027492094355525, + 2.4775152854601967, + 3.080455730250329, + 3.918234505962507, + 5.1332705696484595, + 6.9878696918072905, + 10 + ] +]; +const critical_slog_values = [ + [ + // Base 2 + -1, + -0.9194161097107025, + -0.8335625019330468, + -0.7425599821143978, + -0.6466611521029437, + -0.5462617907227869, + -0.4419033816638769, + -0.3342645487554494, + -0.224140440909962, + -0.11241087890006762, + 0 + ], + [ + // Base E + -1, //0.0 + -0.90603157029014, //0.1 + -0.80786507256596, //0.2 + -0.7064666939634, //0.3 + -0.60294836853664, //0.4 + -0.49849837513117, //0.5 + -0.39430303318768, //0.6 + -0.29147201034755, //0.7 + -0.19097820800866, //0.8 + -0.09361896280296, //0.9 + 0 //1.0 + ], + [ + // Base 3 + -1, + -0.9021579584316141, + -0.8005762598234203, + -0.6964780623319391, + -0.5911906810998454, + -0.486050182576545, + -0.3823089430815083, + -0.28106046722897615, + -0.1831906535795894, + -0.08935809204418144, + 0 + ], + [ + // Base 4 + -1, + -0.8917227442365535, + -0.781258746326964, + -0.6705130326902455, + -0.5612813129406509, + -0.4551067709033134, + -0.35319256652135966, + -0.2563741554088552, + -0.1651412821106526, + -0.0796919581982668, + 0 + ], + [ + // Base 5 + -1, + -0.8843387974366064, + -0.7678744063886243, + -0.6529563724510552, + -0.5415870994657841, + -0.4352842206588936, + -0.33504449124791424, + -0.24138853420685147, + -0.15445285440944467, + -0.07409659641336663, + 0 + ], + [ + // Base 6 + -1, + -0.8786709358426346, + -0.7577735191184886, + -0.6399546189952064, + -0.527284921869926, + -0.4211627631006314, + -0.3223479611761232, + -0.23107655627789858, + -0.1472057700818259, + -0.07035171210706326, + 0 + ], + [ + // Base 7 + -1, + -0.8740862815291583, + -0.7497032990976209, + -0.6297119746181752, + -0.5161838335958787, + -0.41036238255751956, + -0.31277212146489963, + -0.2233976621705518, + -0.1418697367979619, + -0.06762117662323441, + 0 + ], + [ + // Base 8 + -1, + -0.8702632331800649, + -0.7430366914122081, + -0.6213373075161548, + -0.5072025698095242, + -0.40171437727184167, + -0.30517930701410456, + -0.21736343968190863, + -0.137710238299109, + -0.06550774483471955, + 0 + ], + [ + // Base 9 + -1, + -0.8670016295947213, + -0.7373984232432306, + -0.6143173985094293, + -0.49973884395492807, + -0.394584953527678, + -0.2989649949848695, + -0.21245647317021688, + -0.13434688362382652, + -0.0638072667348083, + 0 + ], + [ + // Base 10 + -1, + -0.8641642839543857, + -0.732534623168535, + -0.6083127477059322, + -0.4934049257184696, + -0.3885773075899922, + -0.29376029055315767, + -0.2083678561173622, + -0.13155653399373268, + -0.062401588652553186, + 0 + ] +]; + +const D = function D(value: DecimalSource): Decimal { + return Decimal.fromValue_noAlloc(value); +}; + +const FC = function(sign: number, layer: number, mag: number) { + return Decimal.fromComponents(sign, layer, mag); +}; + +const FC_NN = function FC_NN(sign: number, layer: number, mag: number) { + return Decimal.fromComponents_noNormalize(sign, layer, mag); +}; + +const ME = function ME(mantissa: number, exponent: number) { + return Decimal.fromMantissaExponent(mantissa, exponent); +}; + +const ME_NN = function ME_NN(mantissa: number, exponent: number) { + return Decimal.fromMantissaExponent_noNormalize(mantissa, exponent); +}; + +const decimalPlaces = function decimalPlaces(value: number, places: number): number { + const len = places + 1; + const numDigits = Math.ceil(Math.log10(Math.abs(value))); + const rounded = + Math.round(value * Math.pow(10, len - numDigits)) * Math.pow(10, numDigits - len); + return parseFloat(rounded.toFixed(Math.max(len - numDigits, 0))); +}; + +const f_maglog10 = function(n: number) { + return Math.sign(n) * Math.log10(Math.abs(n)); +}; + +//from HyperCalc source code +const f_gamma = function(n: number) { + if (!isFinite(n)) { + return n; + } + if (n < -50) { + if (n === Math.trunc(n)) { + return Number.NEGATIVE_INFINITY; + } + return 0; + } + + let scal1 = 1; + while (n < 10) { + scal1 = scal1 * n; + ++n; + } + + n -= 1; + let l = 0.9189385332046727; //0.5*Math.log(2*Math.PI) + l = l + (n + 0.5) * Math.log(n); + l = l - n; + const n2 = n * n; + let np = n; + l = l + 1 / (12 * np); + np = np * n2; + l = l + 1 / (360 * np); + np = np * n2; + l = l + 1 / (1260 * np); + np = np * n2; + l = l + 1 / (1680 * np); + np = np * n2; + l = l + 1 / (1188 * np); + np = np * n2; + l = l + 691 / (360360 * np); + np = np * n2; + l = l + 7 / (1092 * np); + np = np * n2; + l = l + 3617 / (122400 * np); + + return Math.exp(l) / scal1; +}; + +const _twopi = 6.2831853071795864769252842; // 2*pi +const _EXPN1 = 0.36787944117144232159553; // exp(-1) +const OMEGA = 0.56714329040978387299997; // W(1, 0) +//from https://math.stackexchange.com/a/465183 +// The evaluation can become inaccurate very close to the branch point +const f_lambertw = function(z: number, tol = 1e-10): number { + let w; + let wn; + + if (!Number.isFinite(z)) { + return z; + } + if (z === 0) { + return z; + } + if (z === 1) { + return OMEGA; + } + + if (z < 10) { + w = 0; + } else { + w = Math.log(z) - Math.log(Math.log(z)); + } + + for (let i = 0; i < 100; ++i) { + wn = (z * Math.exp(-w) + w * w) / (w + 1); + if (Math.abs(wn - w) < tol * Math.abs(wn)) { + return wn; + } else { + w = wn; + } + } + + throw Error(`Iteration failed to converge: ${z.toString()}`); + //return Number.NaN; +}; + +//from https://github.com/scipy/scipy/blob/8dba340293fe20e62e173bdf2c10ae208286692f/scipy/special/lambertw.pxd +// The evaluation can become inaccurate very close to the branch point +// at ``-1/e``. In some corner cases, `lambertw` might currently +// fail to converge, or can end up on the wrong branch. +function d_lambertw(z: Decimal, tol = 1e-10): Decimal { + let w; + let ew, wew, wewz, wn; + + if (!Number.isFinite(z.mag)) { + return z; + } + if (z === Decimal.dZero) { + return z; + } + if (z === Decimal.dOne) { + //Split out this case because the asymptotic series blows up + return D(OMEGA); + } + + const absz = Decimal.abs(z); + //Get an initial guess for Halley's method + w = Decimal.ln(z); + + //Halley's method; see 5.9 in [1] + + for (let i = 0; i < 100; ++i) { + ew = Decimal.exp(-w); + wewz = w.sub(z.mul(ew)); + wn = w.sub( + wewz.div( + w.add(1).sub( + w + .add(2) + .mul(wewz) + .div(Decimal.mul(2, w).add(2)) + ) + ) + ); + if (Decimal.abs(wn.sub(w)).lt(Decimal.abs(wn).mul(tol))) { + return wn; + } else { + w = wn; + } + } + + throw Error(`Iteration failed to converge: ${z.toString()}`); + //return Decimal.dNaN; +} + +export type DecimalSource = Decimal | number | string; + +/** + * The Decimal's value is simply mantissa * 10^exponent. + */ +export default class Decimal { + public static readonly dZero = FC_NN(0, 0, 0); + public static readonly dOne = FC_NN(1, 0, 1); + public static readonly dNegOne = FC_NN(-1, 0, 1); + public static readonly dTwo = FC_NN(1, 0, 2); + public static readonly dTen = FC_NN(1, 0, 10); + public static readonly dNaN = FC_NN(Number.NaN, Number.NaN, Number.NaN); + public static readonly dInf = FC_NN(1, Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY); + public static readonly dNegInf = FC_NN(-1, Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY); + public static readonly dNumberMax = FC(1, 0, Number.MAX_VALUE); + public static readonly dNumberMin = FC(1, 0, Number.MIN_VALUE); + + public sign: number = Number.NaN; + public mag: number = Number.NaN; + public layer: number = Number.NaN; + + constructor(value?: DecimalSource) { + if (value instanceof Decimal || (value != null && typeof value === "object" && "sign" in value && "mag" in value && "layer" in value)) { + this.fromDecimal(value); + } else if (typeof value === "number") { + this.fromNumber(value); + } else if (typeof value === "string") { + this.fromString(value); + } else { + this.sign = 0; + this.layer = 0; + this.mag = 0; + } + } + + get m(): number { + if (this.sign === 0) { + return 0; + } else if (this.layer === 0) { + const exp = Math.floor(Math.log10(this.mag)); + //handle special case 5e-324 + let man; + if (this.mag === 5e-324) { + man = 5; + } else { + man = this.mag / powerOf10(exp); + } + return this.sign * man; + } else if (this.layer === 1) { + const residue = this.mag - Math.floor(this.mag); + return this.sign * Math.pow(10, residue); + } else { + //mantissa stops being relevant past 1e9e15 / ee15.954 + return this.sign; + } + } + + set m(value: number) { + if (this.layer <= 2) { + this.fromMantissaExponent(value, this.e); + } else { + //don't even pretend mantissa is meaningful + this.sign = Math.sign(value); + if (this.sign === 0) { + this.layer === 0; + this.exponent === 0; + } + } + } + + get e(): number { + if (this.sign === 0) { + return 0; + } else if (this.layer === 0) { + return Math.floor(Math.log10(this.mag)); + } else if (this.layer === 1) { + return Math.floor(this.mag); + } else if (this.layer === 2) { + return Math.floor(Math.sign(this.mag) * Math.pow(10, Math.abs(this.mag))); + } else { + return this.mag * Number.POSITIVE_INFINITY; + } + } + set e(value: number) { + this.fromMantissaExponent(this.m, value); + } + + get s(): number { + return this.sign; + } + set s(value: number) { + if (value === 0) { + this.sign = 0; + this.layer = 0; + this.mag = 0; + } else { + this.sign = value; + } + } + + // Object.defineProperty(Decimal.prototype, "mantissa", { + get mantissa(): number { + return this.m; + } + + set mantissa(value: number) { + this.m = value; + } + + get exponent(): number { + return this.e; + } + set exponent(value: number) { + this.e = value; + } + + public static fromComponents(sign: number, layer: number, mag: number): Decimal { + return new Decimal().fromComponents(sign, layer, mag); + } + + public static fromComponents_noNormalize(sign: number, layer: number, mag: number): Decimal { + return new Decimal().fromComponents_noNormalize(sign, layer, mag); + } + + public static fromMantissaExponent(mantissa: number, exponent: number): Decimal { + return new Decimal().fromMantissaExponent(mantissa, exponent); + } + + public static fromMantissaExponent_noNormalize(mantissa: number, exponent: number): Decimal { + return new Decimal().fromMantissaExponent_noNormalize(mantissa, exponent); + } + + public static fromDecimal(value: Decimal): Decimal { + return new Decimal().fromDecimal(value); + } + + public static fromNumber(value: number): Decimal { + return new Decimal().fromNumber(value); + } + + public static fromString(value: string): Decimal { + return new Decimal().fromString(value); + } + + public static fromValue(value: DecimalSource): Decimal { + return new Decimal().fromValue(value); + } + + public static fromValue_noAlloc(value: DecimalSource): Decimal { + return value instanceof Decimal ? value : new Decimal(value); + } + + public static abs(value: DecimalSource): Decimal { + return D(value).abs(); + } + + public static neg(value: DecimalSource): Decimal { + return D(value).neg(); + } + + public static negate(value: DecimalSource): Decimal { + return D(value).neg(); + } + + public static negated(value: DecimalSource): Decimal { + return D(value).neg(); + } + + public static sign(value: DecimalSource): number { + return D(value).sign; + } + + public static sgn(value: DecimalSource): number { + return D(value).sign; + } + + public static round(value: DecimalSource): Decimal { + return D(value).round(); + } + + public static floor(value: DecimalSource): Decimal { + return D(value).floor(); + } + + public static ceil(value: DecimalSource): Decimal { + return D(value).ceil(); + } + + public static trunc(value: DecimalSource): Decimal { + return D(value).trunc(); + } + + public static add(value: DecimalSource, other: DecimalSource): Decimal { + return D(value).add(other); + } + + public static plus(value: DecimalSource, other: DecimalSource): Decimal { + return D(value).add(other); + } + + public static sub(value: DecimalSource, other: DecimalSource): Decimal { + return D(value).sub(other); + } + + public static subtract(value: DecimalSource, other: DecimalSource): Decimal { + return D(value).sub(other); + } + + public static minus(value: DecimalSource, other: DecimalSource): Decimal { + return D(value).sub(other); + } + + public static mul(value: DecimalSource, other: DecimalSource): Decimal { + return D(value).mul(other); + } + + public static multiply(value: DecimalSource, other: DecimalSource): Decimal { + return D(value).mul(other); + } + + public static times(value: DecimalSource, other: DecimalSource): Decimal { + return D(value).mul(other); + } + + public static div(value: DecimalSource, other: DecimalSource): Decimal { + return D(value).div(other); + } + + public static divide(value: DecimalSource, other: DecimalSource): Decimal { + return D(value).div(other); + } + + public static recip(value: DecimalSource): Decimal { + return D(value).recip(); + } + + public static reciprocal(value: DecimalSource): Decimal { + return D(value).recip(); + } + + public static reciprocate(value: DecimalSource): Decimal { + return D(value).reciprocate(); + } + + public static cmp(value: DecimalSource, other: DecimalSource): CompareResult { + return D(value).cmp(other); + } + + public static cmpabs(value: DecimalSource, other: DecimalSource): CompareResult { + return D(value).cmpabs(other); + } + + public static compare(value: DecimalSource, other: DecimalSource): CompareResult { + return D(value).cmp(other); + } + + public static isNaN(value: DecimalSource): boolean { + value = D(value); + return isNaN(value.sign) || isNaN(value.layer) || isNaN(value.mag); + } + + public static isFinite(value: DecimalSource): boolean { + value = D(value); + return isFinite(value.sign) && isFinite(value.layer) && isFinite(value.mag); + } + + public static eq(value: DecimalSource, other: DecimalSource): boolean { + return D(value).eq(other); + } + + public static equals(value: DecimalSource, other: DecimalSource): boolean { + return D(value).eq(other); + } + + public static neq(value: DecimalSource, other: DecimalSource): boolean { + return D(value).neq(other); + } + + public static notEquals(value: DecimalSource, other: DecimalSource): boolean { + return D(value).notEquals(other); + } + + public static lt(value: DecimalSource, other: DecimalSource): boolean { + return D(value).lt(other); + } + + public static lte(value: DecimalSource, other: DecimalSource): boolean { + return D(value).lte(other); + } + + public static gt(value: DecimalSource, other: DecimalSource): boolean { + return D(value).gt(other); + } + + public static gte(value: DecimalSource, other: DecimalSource): boolean { + return D(value).gte(other); + } + + public static max(value: DecimalSource, other: DecimalSource): Decimal { + return D(value).max(other); + } + + public static min(value: DecimalSource, other: DecimalSource): Decimal { + return D(value).min(other); + } + + public static minabs(value: DecimalSource, other: DecimalSource): Decimal { + return D(value).minabs(other); + } + + public static maxabs(value: DecimalSource, other: DecimalSource): Decimal { + return D(value).maxabs(other); + } + + public static clamp(value: DecimalSource, min: DecimalSource, max: DecimalSource): Decimal { + return D(value).clamp(min, max); + } + + public static clampMin(value: DecimalSource, min: DecimalSource): Decimal { + return D(value).clampMin(min); + } + + public static clampMax(value: DecimalSource, max: DecimalSource): Decimal { + return D(value).clampMax(max); + } + + public static cmp_tolerance( + value: DecimalSource, + other: DecimalSource, + tolerance: number + ): CompareResult { + return D(value).cmp_tolerance(other, tolerance); + } + + public static compare_tolerance( + value: DecimalSource, + other: DecimalSource, + tolerance: number + ): CompareResult { + return D(value).cmp_tolerance(other, tolerance); + } + + public static eq_tolerance( + value: DecimalSource, + other: DecimalSource, + tolerance: number + ): boolean { + return D(value).eq_tolerance(other, tolerance); + } + + public static equals_tolerance( + value: DecimalSource, + other: DecimalSource, + tolerance: number + ): boolean { + return D(value).eq_tolerance(other, tolerance); + } + + public static neq_tolerance( + value: DecimalSource, + other: DecimalSource, + tolerance: number + ): boolean { + return D(value).neq_tolerance(other, tolerance); + } + + public static notEquals_tolerance( + value: DecimalSource, + other: DecimalSource, + tolerance: number + ): boolean { + return D(value).notEquals_tolerance(other, tolerance); + } + + public static lt_tolerance( + value: DecimalSource, + other: DecimalSource, + tolerance: number + ): boolean { + return D(value).lt_tolerance(other, tolerance); + } + + public static lte_tolerance( + value: DecimalSource, + other: DecimalSource, + tolerance: number + ): boolean { + return D(value).lte_tolerance(other, tolerance); + } + + public static gt_tolerance( + value: DecimalSource, + other: DecimalSource, + tolerance: number + ): boolean { + return D(value).gt_tolerance(other, tolerance); + } + + public static gte_tolerance( + value: DecimalSource, + other: DecimalSource, + tolerance: number + ): boolean { + return D(value).gte_tolerance(other, tolerance); + } + + public static pLog10(value: DecimalSource): Decimal { + return D(value).pLog10(); + } + + public static absLog10(value: DecimalSource): Decimal { + return D(value).absLog10(); + } + + public static log10(value: DecimalSource): Decimal { + return D(value).log10(); + } + + public static log(value: DecimalSource, base: DecimalSource): Decimal { + return D(value).log(base); + } + + public static log2(value: DecimalSource): Decimal { + return D(value).log2(); + } + + public static ln(value: DecimalSource): Decimal { + return D(value).ln(); + } + + public static logarithm(value: DecimalSource, base: DecimalSource): Decimal { + return D(value).logarithm(base); + } + + public static pow(value: DecimalSource, other: DecimalSource): Decimal { + return D(value).pow(other); + } + + public static pow10(value: DecimalSource): Decimal { + return D(value).pow10(); + } + + public static root(value: DecimalSource, other: DecimalSource): Decimal { + return D(value).root(other); + } + + public static factorial(value: DecimalSource, _other?: never): Decimal { + return D(value).factorial(); + } + + public static gamma(value: DecimalSource, _other?: never): Decimal { + return D(value).gamma(); + } + + public static lngamma(value: DecimalSource, _other?: never): Decimal { + return D(value).lngamma(); + } + + public static exp(value: DecimalSource): Decimal { + return D(value).exp(); + } + + public static sqr(value: DecimalSource): Decimal { + return D(value).sqr(); + } + + public static sqrt(value: DecimalSource): Decimal { + return D(value).sqrt(); + } + + public static cube(value: DecimalSource): Decimal { + return D(value).cube(); + } + + public static cbrt(value: DecimalSource): Decimal { + return D(value).cbrt(); + } + + public static tetrate( + value: DecimalSource, + height = 2, + payload: DecimalSource = FC_NN(1, 0, 1) + ): Decimal { + return D(value).tetrate(height, payload); + } + + public static iteratedexp(value: DecimalSource, height = 2, payload = FC_NN(1, 0, 1)): Decimal { + return D(value).iteratedexp(height, payload); + } + + public static iteratedlog(value: DecimalSource, base: DecimalSource = 10, times = 1): Decimal { + return D(value).iteratedlog(base, times); + } + + public static layeradd10(value: DecimalSource, diff: DecimalSource): Decimal { + return D(value).layeradd10(diff); + } + + public static layeradd(value: DecimalSource, diff: number, base = 10): Decimal { + return D(value).layeradd(diff, base); + } + + public static slog(value: DecimalSource, base = 10): Decimal { + return D(value).slog(base); + } + + public static lambertw(value: DecimalSource): Decimal { + return D(value).lambertw(); + } + + public static ssqrt(value: DecimalSource): Decimal { + return D(value).ssqrt(); + } + + public static pentate( + value: DecimalSource, + height = 2, + payload: DecimalSource = FC_NN(1, 0, 1) + ): Decimal { + return D(value).pentate(height, payload); + } + + /** + * If you're willing to spend 'resourcesAvailable' and want to buy something + * with exponentially increasing cost each purchase (start at priceStart, + * multiply by priceRatio, already own currentOwned), how much of it can you buy? + * Adapted from Trimps source code. + */ + + public static affordGeometricSeries( + resourcesAvailable: DecimalSource, + priceStart: DecimalSource, + priceRatio: DecimalSource, + currentOwned: DecimalSource + ): Decimal { + return this.affordGeometricSeries_core( + D(resourcesAvailable), + D(priceStart), + D(priceRatio), + currentOwned + ); + } + /** + * How much resource would it cost to buy (numItems) items if you already have currentOwned, + * the initial price is priceStart and it multiplies by priceRatio each purchase? + */ + + public static sumGeometricSeries( + numItems: DecimalSource, + priceStart: DecimalSource, + priceRatio: DecimalSource, + currentOwned: DecimalSource + ): Decimal { + return this.sumGeometricSeries_core(numItems, D(priceStart), D(priceRatio), currentOwned); + } + /** + * If you're willing to spend 'resourcesAvailable' and want to buy something with additively + * increasing cost each purchase (start at priceStart, add by priceAdd, already own currentOwned), + * how much of it can you buy? + */ + + public static affordArithmeticSeries( + resourcesAvailable: DecimalSource, + priceStart: DecimalSource, + priceAdd: DecimalSource, + currentOwned: DecimalSource + ): Decimal { + return this.affordArithmeticSeries_core( + D(resourcesAvailable), + D(priceStart), + D(priceAdd), + D(currentOwned) + ); + } + /** + * How much resource would it cost to buy (numItems) items if you already have currentOwned, + * the initial price is priceStart and it adds priceAdd each purchase? + * Adapted from http://www.mathwords.com/a/arithmetic_series.htm + */ + + public static sumArithmeticSeries( + numItems: DecimalSource, + priceStart: DecimalSource, + priceAdd: DecimalSource, + currentOwned: DecimalSource + ): Decimal { + return this.sumArithmeticSeries_core( + D(numItems), + D(priceStart), + D(priceAdd), + D(currentOwned) + ); + } + /** + * When comparing two purchases that cost (resource) and increase your resource/sec by (deltaRpS), + * the lowest efficiency score is the better one to purchase. + * From Frozen Cookies: + * http://cookieclicker.wikia.com/wiki/Frozen_Cookies_(JavaScript_Add-on)#Efficiency.3F_What.27s_that.3F + */ + + public static efficiencyOfPurchase( + cost: DecimalSource, + currentRpS: DecimalSource, + deltaRpS: DecimalSource + ): Decimal { + return this.efficiencyOfPurchase_core(D(cost), D(currentRpS), D(deltaRpS)); + } + + public static randomDecimalForTesting(maxLayers: number): Decimal { + // NOTE: This doesn't follow any kind of sane random distribution, so use this for testing purposes only. + //5% of the time, return 0 + if (Math.random() * 20 < 1) { + return FC_NN(0, 0, 0); + } + + const randomsign = Math.random() > 0.5 ? 1 : -1; + + //5% of the time, return 1 or -1 + if (Math.random() * 20 < 1) { + return FC_NN(randomsign, 0, 1); + } + + //pick a random layer + const layer = Math.floor(Math.random() * (maxLayers + 1)); + + let randomexp = layer === 0 ? Math.random() * 616 - 308 : Math.random() * 16; + //10% of the time, make it a simple power of 10 + if (Math.random() > 0.9) { + randomexp = Math.trunc(randomexp); + } + let randommag = Math.pow(10, randomexp); + //10% of the time, trunc mag + if (Math.random() > 0.9) { + randommag = Math.trunc(randommag); + } + return FC(randomsign, layer, randommag); + } + + public static affordGeometricSeries_core( + resourcesAvailable: Decimal, + priceStart: Decimal, + priceRatio: Decimal, + currentOwned: DecimalSource + ): Decimal { + const actualStart = priceStart.mul(priceRatio.pow(currentOwned)); + return Decimal.floor( + resourcesAvailable + .div(actualStart) + .mul(priceRatio.sub(1)) + .add(1) + .log10() + .div(priceRatio.log10()) + ); + } + + public static sumGeometricSeries_core( + numItems: DecimalSource, + priceStart: Decimal, + priceRatio: Decimal, + currentOwned: DecimalSource + ): Decimal { + return priceStart + .mul(priceRatio.pow(currentOwned)) + .mul(Decimal.sub(1, priceRatio.pow(numItems))) + .div(Decimal.sub(1, priceRatio)); + } + + public static affordArithmeticSeries_core( + resourcesAvailable: Decimal, + priceStart: Decimal, + priceAdd: Decimal, + currentOwned: Decimal + ): Decimal { + // n = (-(a-d/2) + sqrt((a-d/2)^2+2dS))/d + // where a is actualStart, d is priceAdd and S is resourcesAvailable + // then floor it and you're done! + const actualStart = priceStart.add(currentOwned.mul(priceAdd)); + const b = actualStart.sub(priceAdd.div(2)); + const b2 = b.pow(2); + return b + .neg() + .add(b2.add(priceAdd.mul(resourcesAvailable).mul(2)).sqrt()) + .div(priceAdd) + .floor(); + } + + public static sumArithmeticSeries_core( + numItems: Decimal, + priceStart: Decimal, + priceAdd: Decimal, + currentOwned: Decimal + ): Decimal { + const actualStart = priceStart.add(currentOwned.mul(priceAdd)); // (n/2)*(2*a+(n-1)*d) + + return numItems.div(2).mul(actualStart.mul(2).plus(numItems.sub(1).mul(priceAdd))); + } + + public static efficiencyOfPurchase_core( + cost: Decimal, + currentRpS: Decimal, + deltaRpS: Decimal + ): Decimal { + return cost.div(currentRpS).add(cost.div(deltaRpS)); + } + + public [Symbol.for("+")](other: DecimalSource): DecimalSource { + return this.add(other); + } + + public [Symbol.for("-")](other: DecimalSource): DecimalSource { + return this.sub(other); + } + + public [Symbol.for("*")](other: DecimalSource): DecimalSource { + return this.times(other); + } + + public [Symbol.for("/")](other: DecimalSource): DecimalSource { + return this.div(other); + } + + public [Symbol.for("minus")](): DecimalSource { + return this.neg(); + } + + public [Symbol.for("==")](other: DecimalSource): boolean { + return this.eq(other); + } + + public [Symbol.for(">")](other: DecimalSource): boolean { + return this.gt(other); + } + + public [Symbol.for("<")](other: DecimalSource): boolean { + return this.lt(other); + } + + public [Symbol.for(">=")](other: DecimalSource): boolean { + return this.gte(other); + } + + public [Symbol.for("<=")](other: DecimalSource): boolean { + return this.lte(other); + } + + public [Symbol.for("!=")](other: DecimalSource): boolean { + return this.neq(other); + } + + public normalize(): this { + /* + PSEUDOCODE: + Whenever we are partially 0 (sign is 0 or mag and layer is 0), make it fully 0. + Whenever we are at or hit layer 0, extract sign from negative mag. + If layer === 0 and mag < FIRST_NEG_LAYER (1/9e15), shift to 'first negative layer' (add layer, log10 mag). + While abs(mag) > EXP_LIMIT (9e15), layer += 1, mag = maglog10(mag). + While abs(mag) < LAYER_DOWN (15.954) and layer > 0, layer -= 1, mag = pow(10, mag). + + When we're done, all of the following should be true OR one of the numbers is not IsFinite OR layer is not IsInteger (error state): + Any 0 is totally zero (0, 0, 0). + Anything layer 0 has mag 0 OR mag > 1/9e15 and < 9e15. + Anything layer 1 or higher has abs(mag) >= 15.954 and < 9e15. + We will assume in calculations that all Decimals are either erroneous or satisfy these criteria. (Otherwise: Garbage in, garbage out.) + */ + if (this.sign === 0 || (this.mag === 0 && this.layer === 0)) { + this.sign = 0; + this.mag = 0; + this.layer = 0; + return this; + } + + if (this.layer === 0 && this.mag < 0) { + //extract sign from negative mag at layer 0 + this.mag = -this.mag; + this.sign = -this.sign; + } + + //Handle shifting from layer 0 to negative layers. + if (this.layer === 0 && this.mag < FIRST_NEG_LAYER) { + this.layer += 1; + this.mag = Math.log10(this.mag); + return this; + } + + let absmag = Math.abs(this.mag); + let signmag = Math.sign(this.mag); + + if (absmag >= EXP_LIMIT) { + this.layer += 1; + this.mag = signmag * Math.log10(absmag); + return this; + } else { + while (absmag < LAYER_DOWN && this.layer > 0) { + this.layer -= 1; + if (this.layer === 0) { + this.mag = Math.pow(10, this.mag); + } else { + this.mag = signmag * Math.pow(10, absmag); + absmag = Math.abs(this.mag); + signmag = Math.sign(this.mag); + } + } + if (this.layer === 0) { + if (this.mag < 0) { + //extract sign from negative mag at layer 0 + this.mag = -this.mag; + this.sign = -this.sign; + } else if (this.mag === 0) { + //excessive rounding can give us all zeroes + this.sign = 0; + } + } + } + + return this; + } + + public fromComponents(sign: number, layer: number, mag: number): this { + this.sign = sign; + this.layer = layer; + this.mag = mag; + + this.normalize(); + return this; + } + + public fromComponents_noNormalize(sign: number, layer: number, mag: number): this { + this.sign = sign; + this.layer = layer; + this.mag = mag; + return this; + } + + public fromMantissaExponent(mantissa: number, exponent: number): this { + this.layer = 1; + this.sign = Math.sign(mantissa); + mantissa = Math.abs(mantissa); + this.mag = exponent + Math.log10(mantissa); + + this.normalize(); + return this; + } + + public fromMantissaExponent_noNormalize(mantissa: number, exponent: number): this { + //The idea of 'normalizing' a break_infinity.js style Decimal doesn't really apply. So just do the same thing. + this.fromMantissaExponent(mantissa, exponent); + return this; + } + + public fromDecimal(value: Decimal): this { + this.sign = value.sign; + this.layer = value.layer; + this.mag = value.mag; + return this; + } + + public fromNumber(value: number): this { + this.mag = Math.abs(value); + this.sign = Math.sign(value); + this.layer = 0; + this.normalize(); + return this; + } + + public fromString(value: string): Decimal { + if (IGNORE_COMMAS) { + value = value.replace(",", ""); + } else if (COMMAS_ARE_DECIMAL_POINTS) { + value = value.replace(",", "."); + } + + //Handle x^^^y format. + const pentationparts = value.split("^^^"); + if (pentationparts.length === 2) { + const base = parseFloat(pentationparts[0]); + const height = parseFloat(pentationparts[1]); + const heightparts = pentationparts[1].split(";"); + let payload = 1; + if (heightparts.length === 2) { + payload = parseFloat(heightparts[1]); + if (!isFinite(payload)) { + payload = 1; + } + } + if (isFinite(base) && isFinite(height)) { + const result = Decimal.pentate(base, height, payload); + this.sign = result.sign; + this.layer = result.layer; + this.mag = result.mag; + return this; + } + } + + //Handle x^^y format. + const tetrationparts = value.split("^^"); + if (tetrationparts.length === 2) { + const base = parseFloat(tetrationparts[0]); + const height = parseFloat(tetrationparts[1]); + const heightparts = tetrationparts[1].split(";"); + let payload = 1; + if (heightparts.length === 2) { + payload = parseFloat(heightparts[1]); + if (!isFinite(payload)) { + payload = 1; + } + } + if (isFinite(base) && isFinite(height)) { + const result = Decimal.tetrate(base, height, payload); + this.sign = result.sign; + this.layer = result.layer; + this.mag = result.mag; + return this; + } + } + + //Handle x^y format. + const powparts = value.split("^"); + if (powparts.length === 2) { + const base = parseFloat(powparts[0]); + const exponent = parseFloat(powparts[1]); + if (isFinite(base) && isFinite(exponent)) { + const result = Decimal.pow(base, exponent); + this.sign = result.sign; + this.layer = result.layer; + this.mag = result.mag; + return this; + } + } + + //Handle various cases involving it being a Big Number. + value = value.trim().toLowerCase(); + + //handle X PT Y format. + let base; + let height; + let ptparts = value.split("pt"); + if (ptparts.length === 2) { + base = 10; + height = parseFloat(ptparts[0]); + ptparts[1] = ptparts[1].replace("(", ""); + ptparts[1] = ptparts[1].replace(")", ""); + let payload = parseFloat(ptparts[1]); + if (!isFinite(payload)) { + payload = 1; + } + if (isFinite(base) && isFinite(height)) { + const result = Decimal.tetrate(base, height, payload); + this.sign = result.sign; + this.layer = result.layer; + this.mag = result.mag; + return this; + } + } + + //handle XpY format (it's the same thing just with p). + ptparts = value.split("p"); + if (ptparts.length === 2) { + base = 10; + height = parseFloat(ptparts[0]); + ptparts[1] = ptparts[1].replace("(", ""); + ptparts[1] = ptparts[1].replace(")", ""); + let payload = parseFloat(ptparts[1]); + if (!isFinite(payload)) { + payload = 1; + } + if (isFinite(base) && isFinite(height)) { + const result = Decimal.tetrate(base, height, payload); + this.sign = result.sign; + this.layer = result.layer; + this.mag = result.mag; + return this; + } + } + + const parts = value.split("e"); + const ecount = parts.length - 1; + + //Handle numbers that are exactly floats (0 or 1 es). + if (ecount === 0) { + const numberAttempt = parseFloat(value); + if (isFinite(numberAttempt)) { + return this.fromNumber(numberAttempt); + } + } else if (ecount === 1) { + //Very small numbers ("2e-3000" and so on) may look like valid floats but round to 0. + const numberAttempt = parseFloat(value); + if (isFinite(numberAttempt) && numberAttempt !== 0) { + return this.fromNumber(numberAttempt); + } + } + + //Handle new (e^N)X format. + const newparts = value.split("e^"); + if (newparts.length === 2) { + this.sign = 1; + if (newparts[0].charAt(0) == "-") { + this.sign = -1; + } + let layerstring = ""; + for (let i = 0; i < newparts[1].length; ++i) { + const chrcode = newparts[1].charCodeAt(i); + if ((chrcode >= 43 && chrcode <= 57) || chrcode === 101) { + //is "0" to "9" or "+" or "-" or "." or "e" (or "," or "/") + layerstring += newparts[1].charAt(i); + } //we found the end of the layer count + else { + this.layer = parseFloat(layerstring); + this.mag = parseFloat(newparts[1].substr(i + 1)); + this.normalize(); + return this; + } + } + } + + if (ecount < 1) { + this.sign = 0; + this.layer = 0; + this.mag = 0; + return this; + } + const mantissa = parseFloat(parts[0]); + if (mantissa === 0) { + this.sign = 0; + this.layer = 0; + this.mag = 0; + return this; + } + let exponent = parseFloat(parts[parts.length - 1]); + //handle numbers like AeBeC and AeeeeBeC + if (ecount >= 2) { + const me = parseFloat(parts[parts.length - 2]); + if (isFinite(me)) { + exponent *= Math.sign(me); + exponent += f_maglog10(me); + } + } + + //Handle numbers written like eee... (N es) X + if (!isFinite(mantissa)) { + this.sign = parts[0] === "-" ? -1 : 1; + this.layer = ecount; + this.mag = exponent; + } + //Handle numbers written like XeY + else if (ecount === 1) { + this.sign = Math.sign(mantissa); + this.layer = 1; + //Example: 2e10 is equal to 10^log10(2e10) which is equal to 10^(10+log10(2)) + this.mag = exponent + Math.log10(Math.abs(mantissa)); + } + //Handle numbers written like Xeee... (N es) Y + else { + this.sign = Math.sign(mantissa); + this.layer = ecount; + if (ecount === 2) { + const result = Decimal.mul(FC(1, 2, exponent), D(mantissa)); + this.sign = result.sign; + this.layer = result.layer; + this.mag = result.mag; + return this; + } else { + //at eee and above, mantissa is too small to be recognizable! + this.mag = exponent; + } + } + + this.normalize(); + return this; + } + + public fromValue(value: DecimalSource): Decimal { + if (value instanceof Decimal || (value != null && typeof value === "object" && "sign" in value && "mag" in value && "layer" in value)) { + return this.fromDecimal(value); + } + + if (typeof value === "number") { + return this.fromNumber(value); + } + + if (typeof value === "string") { + return this.fromString(value); + } + + this.sign = 0; + this.layer = 0; + this.mag = 0; + return this; + } + + public toNumber(): number { + if (!Number.isFinite(this.layer)) { + return Number.NaN; + } + if (this.layer === 0) { + return this.sign * this.mag; + } else if (this.layer === 1) { + return this.sign * Math.pow(10, this.mag); + } //overflow for any normalized Decimal + else { + return this.mag > 0 + ? this.sign > 0 + ? Number.POSITIVE_INFINITY + : Number.NEGATIVE_INFINITY + : 0; + } + } + + public mantissaWithDecimalPlaces(places: number): number { + // https://stackoverflow.com/a/37425022 + if (isNaN(this.m)) { + return Number.NaN; + } + + if (this.m === 0) { + return 0; + } + + return decimalPlaces(this.m, places); + } + + public magnitudeWithDecimalPlaces(places: number): number { + // https://stackoverflow.com/a/37425022 + if (isNaN(this.mag)) { + return Number.NaN; + } + + if (this.mag === 0) { + return 0; + } + + return decimalPlaces(this.mag, places); + } + + public toString(): string { + if (isNaN(this.layer) || isNaN(this.sign) || isNaN(this.mag)) { + return "NaN"; + } + if (this.mag === Number.POSITIVE_INFINITY || this.layer === Number.POSITIVE_INFINITY) { + return this.sign === 1 ? "Infinity" : "-Infinity"; + } + + if (this.layer === 0) { + if ((this.mag < 1e21 && this.mag > 1e-7) || this.mag === 0) { + return (this.sign * this.mag).toString(); + } + return this.m + "e" + this.e; + } else if (this.layer === 1) { + return this.m + "e" + this.e; + } else { + //layer 2+ + if (this.layer <= MAX_ES_IN_A_ROW) { + return (this.sign === -1 ? "-" : "") + "e".repeat(this.layer) + this.mag; + } else { + return (this.sign === -1 ? "-" : "") + "(e^" + this.layer + ")" + this.mag; + } + } + } + + public toExponential(places: number): string { + if (this.layer === 0) { + return (this.sign * this.mag).toExponential(places); + } + return this.toStringWithDecimalPlaces(places); + } + + public toFixed(places: number): string { + if (this.layer === 0) { + return (this.sign * this.mag).toFixed(places); + } + return this.toStringWithDecimalPlaces(places); + } + + public toPrecision(places: number): string { + if (this.e <= -7) { + return this.toExponential(places - 1); + } + + if (places > this.e) { + return this.toFixed(places - this.exponent - 1); + } + + return this.toExponential(places - 1); + } + + public valueOf(): string { + return this.toString(); + } + + public toJSON(): string { + return this.toString(); + } + + public toStringWithDecimalPlaces(places: number): string { + if (this.layer === 0) { + if ((this.mag < 1e21 && this.mag > 1e-7) || this.mag === 0) { + return (this.sign * this.mag).toFixed(places); + } + return decimalPlaces(this.m, places) + "e" + decimalPlaces(this.e, places); + } else if (this.layer === 1) { + return decimalPlaces(this.m, places) + "e" + decimalPlaces(this.e, places); + } else { + //layer 2+ + if (this.layer <= MAX_ES_IN_A_ROW) { + return ( + (this.sign === -1 ? "-" : "") + + "e".repeat(this.layer) + + decimalPlaces(this.mag, places) + ); + } else { + return ( + (this.sign === -1 ? "-" : "") + + "(e^" + + this.layer + + ")" + + decimalPlaces(this.mag, places) + ); + } + } + } + + public abs(): Decimal { + return FC_NN(this.sign === 0 ? 0 : 1, this.layer, this.mag); + } + + public neg(): Decimal { + return FC_NN(-this.sign, this.layer, this.mag); + } + + public negate(): Decimal { + return this.neg(); + } + + public negated(): Decimal { + return this.neg(); + } + + // public sign () { + // return this.sign; + // } + + public sgn(): number { + return this.sign; + } + + public round(): this | Decimal { + if (this.mag < 0) { + return Decimal.dZero; + } + if (this.layer === 0) { + return FC(this.sign, 0, Math.round(this.mag)); + } + return this; + } + + public floor(): this | Decimal { + if (this.mag < 0) { + return Decimal.dZero; + } + if (this.layer === 0) { + return FC(this.sign, 0, Math.floor(this.mag)); + } + return this; + } + + public ceil(): this | Decimal { + if (this.mag < 0) { + return Decimal.dZero; + } + if (this.layer === 0) { + return FC(this.sign, 0, Math.ceil(this.mag)); + } + return this; + } + + public trunc(): this | Decimal { + if (this.mag < 0) { + return Decimal.dZero; + } + if (this.layer === 0) { + return FC(this.sign, 0, Math.trunc(this.mag)); + } + return this; + } + + public add(value: DecimalSource): this | Decimal { + const decimal = D(value); + + //inf/nan check + if (!Number.isFinite(this.layer)) { + return this; + } + if (!Number.isFinite(decimal.layer)) { + return decimal; + } + + //Special case - if one of the numbers is 0, return the other number. + if (this.sign === 0) { + return decimal; + } + if (decimal.sign === 0) { + return this; + } + + //Special case - Adding a number to its negation produces 0, no matter how large. + if ( + this.sign === -decimal.sign && + this.layer === decimal.layer && + this.mag === decimal.mag + ) { + return FC_NN(0, 0, 0); + } + + let a; + let b; + + //Special case: If one of the numbers is layer 2 or higher, just take the bigger number. + if (this.layer >= 2 || decimal.layer >= 2) { + return this.maxabs(decimal); + } + + if (Decimal.cmpabs(this, decimal) > 0) { + a = this; + b = decimal; + } else { + a = decimal; + b = this; + } + + if (a.layer === 0 && b.layer === 0) { + return D(a.sign * a.mag + b.sign * b.mag); + } + + const layera = a.layer * Math.sign(a.mag); + const layerb = b.layer * Math.sign(b.mag); + + //If one of the numbers is 2+ layers higher than the other, just take the bigger number. + if (layera - layerb >= 2) { + return a; + } + + if (layera === 0 && layerb === -1) { + if (Math.abs(b.mag - Math.log10(a.mag)) > MAX_SIGNIFICANT_DIGITS) { + return a; + } else { + const magdiff = Math.pow(10, Math.log10(a.mag) - b.mag); + const mantissa = b.sign + a.sign * magdiff; + return FC(Math.sign(mantissa), 1, b.mag + Math.log10(Math.abs(mantissa))); + } + } + + if (layera === 1 && layerb === 0) { + if (Math.abs(a.mag - Math.log10(b.mag)) > MAX_SIGNIFICANT_DIGITS) { + return a; + } else { + const magdiff = Math.pow(10, a.mag - Math.log10(b.mag)); + const mantissa = b.sign + a.sign * magdiff; + return FC( + Math.sign(mantissa), + 1, + Math.log10(b.mag) + Math.log10(Math.abs(mantissa)) + ); + } + } + + if (Math.abs(a.mag - b.mag) > MAX_SIGNIFICANT_DIGITS) { + return a; + } else { + const magdiff = Math.pow(10, a.mag - b.mag); + const mantissa = b.sign + a.sign * magdiff; + return FC(Math.sign(mantissa), 1, b.mag + Math.log10(Math.abs(mantissa))); + } + + throw Error("Bad arguments to add: " + this + ", " + value); + } + + public plus(value: DecimalSource): Decimal { + return this.add(value); + } + + public sub(value: DecimalSource): Decimal { + return this.add(D(value).neg()); + } + + public subtract(value: DecimalSource): Decimal { + return this.sub(value); + } + + public minus(value: DecimalSource): Decimal { + return this.sub(value); + } + + public mul(value: DecimalSource): Decimal { + const decimal = D(value); + + //inf/nan check + if (!Number.isFinite(this.layer)) { + return this; + } + if (!Number.isFinite(decimal.layer)) { + return decimal; + } + + //Special case - if one of the numbers is 0, return 0. + if (this.sign === 0 || decimal.sign === 0) { + return FC_NN(0, 0, 0); + } + + //Special case - Multiplying a number by its own reciprocal yields +/- 1, no matter how large. + if (this.layer === decimal.layer && this.mag === -decimal.mag) { + return FC_NN(this.sign * decimal.sign, 0, 1); + } + + let a; + let b; + + //Which number is bigger in terms of its multiplicative distance from 1? + if ( + this.layer > decimal.layer || + (this.layer == decimal.layer && Math.abs(this.mag) > Math.abs(decimal.mag)) + ) { + a = this; + b = decimal; + } else { + a = decimal; + b = this; + } + + if (a.layer === 0 && b.layer === 0) { + return D(a.sign * b.sign * a.mag * b.mag); + } + + //Special case: If one of the numbers is layer 3 or higher or one of the numbers is 2+ layers bigger than the other, just take the bigger number. + if (a.layer >= 3 || a.layer - b.layer >= 2) { + return FC(a.sign * b.sign, a.layer, a.mag); + } + + if (a.layer === 1 && b.layer === 0) { + return FC(a.sign * b.sign, 1, a.mag + Math.log10(b.mag)); + } + + if (a.layer === 1 && b.layer === 1) { + return FC(a.sign * b.sign, 1, a.mag + b.mag); + } + + if (a.layer === 2 && b.layer === 1) { + const newmag = FC(Math.sign(a.mag), a.layer - 1, Math.abs(a.mag)).add( + FC(Math.sign(b.mag), b.layer - 1, Math.abs(b.mag)) + ); + return FC(a.sign * b.sign, newmag.layer + 1, newmag.sign * newmag.mag); + } + + if (a.layer === 2 && b.layer === 2) { + const newmag = FC(Math.sign(a.mag), a.layer - 1, Math.abs(a.mag)).add( + FC(Math.sign(b.mag), b.layer - 1, Math.abs(b.mag)) + ); + return FC(a.sign * b.sign, newmag.layer + 1, newmag.sign * newmag.mag); + } + + throw Error("Bad arguments to mul: " + this + ", " + value); + } + + public multiply(value: DecimalSource): Decimal { + return this.mul(value); + } + + public times(value: DecimalSource): Decimal { + return this.mul(value); + } + + public div(value: DecimalSource): Decimal { + const decimal = D(value); + return this.mul(decimal.recip()); + } + + public divide(value: DecimalSource): Decimal { + return this.div(value); + } + + public divideBy(value: DecimalSource): Decimal { + return this.div(value); + } + + public dividedBy(value: DecimalSource): Decimal { + return this.div(value); + } + + public recip(): Decimal { + if (this.mag === 0) { + return Decimal.dNaN; + } else if (this.layer === 0) { + return FC(this.sign, 0, 1 / this.mag); + } else { + return FC(this.sign, this.layer, -this.mag); + } + } + + public reciprocal(): Decimal { + return this.recip(); + } + + public reciprocate(): Decimal { + return this.recip(); + } + + /** + * -1 for less than value, 0 for equals value, 1 for greater than value + */ + public cmp(value: DecimalSource): CompareResult { + const decimal = D(value); + if (this.sign > decimal.sign) { + return 1; + } + if (this.sign < decimal.sign) { + return -1; + } + return (this.sign * this.cmpabs(value)) as CompareResult; + } + + public cmpabs(value: DecimalSource): CompareResult { + const decimal = D(value); + const layera = this.mag > 0 ? this.layer : -this.layer; + const layerb = decimal.mag > 0 ? decimal.layer : -decimal.layer; + if (layera > layerb) { + return 1; + } + if (layera < layerb) { + return -1; + } + if (this.mag > decimal.mag) { + return 1; + } + if (this.mag < decimal.mag) { + return -1; + } + return 0; + } + + public compare(value: DecimalSource): CompareResult { + return this.cmp(value); + } + + public isNan(): boolean { + return isNaN(this.sign) || isNaN(this.layer) || isNaN(this.mag); + } + + public isFinite(): boolean { + return isFinite(this.sign) && isFinite(this.layer) && isFinite(this.mag); + } + + public eq(value: DecimalSource): boolean { + const decimal = D(value); + return ( + this.sign === decimal.sign && this.layer === decimal.layer && this.mag === decimal.mag + ); + } + + public equals(value: DecimalSource): boolean { + return this.eq(value); + } + + public neq(value: DecimalSource): boolean { + return !this.eq(value); + } + + public notEquals(value: DecimalSource): boolean { + return this.neq(value); + } + + public lt(value: DecimalSource): boolean { + return this.cmp(value) === -1; + } + + public lte(value: DecimalSource): boolean { + return !this.gt(value); + } + + public gt(value: DecimalSource): boolean { + return this.cmp(value) === 1; + } + + public gte(value: DecimalSource): boolean { + return !this.lt(value); + } + + public max(value: DecimalSource): Decimal { + const decimal = D(value); + return this.lt(decimal) ? decimal : this; + } + + public min(value: DecimalSource): Decimal { + const decimal = D(value); + return this.gt(decimal) ? decimal : this; + } + + public maxabs(value: DecimalSource): Decimal { + const decimal = D(value); + return this.cmpabs(decimal) < 0 ? decimal : this; + } + + public minabs(value: DecimalSource): Decimal { + const decimal = D(value); + return this.cmpabs(decimal) > 0 ? decimal : this; + } + + public clamp(min: DecimalSource, max: DecimalSource): Decimal { + return this.max(min).min(max); + } + + public clampMin(min: DecimalSource): Decimal { + return this.max(min); + } + + public clampMax(max: DecimalSource): Decimal { + return this.min(max); + } + + public cmp_tolerance(value: DecimalSource, tolerance: number): CompareResult { + const decimal = D(value); + return this.eq_tolerance(decimal, tolerance) ? 0 : this.cmp(decimal); + } + + public compare_tolerance(value: DecimalSource, tolerance: number): CompareResult { + return this.cmp_tolerance(value, tolerance); + } + + /** + * Tolerance is a relative tolerance, multiplied by the greater of the magnitudes of the two arguments. + * For example, if you put in 1e-9, then any number closer to the + * larger number than (larger number)*1e-9 will be considered equal. + */ + public eq_tolerance(value: DecimalSource, tolerance: number): boolean { + const decimal = D(value); // https://stackoverflow.com/a/33024979 + if (tolerance == null) { + tolerance = 1e-7; + } + //Numbers that are too far away are never close. + if (this.sign !== decimal.sign) { + return false; + } + if (Math.abs(this.layer - decimal.layer) > 1) { + return false; + } + // return abs(a-b) <= tolerance * max(abs(a), abs(b)) + let magA = this.mag; + let magB = decimal.mag; + if (this.layer > decimal.layer) { + magB = f_maglog10(magB); + } + if (this.layer < decimal.layer) { + magA = f_maglog10(magA); + } + return Math.abs(magA - magB) <= tolerance * Math.max(Math.abs(magA), Math.abs(magB)); + } + + public equals_tolerance(value: DecimalSource, tolerance: number): boolean { + return this.eq_tolerance(value, tolerance); + } + + public neq_tolerance(value: DecimalSource, tolerance: number): boolean { + return !this.eq_tolerance(value, tolerance); + } + + public notEquals_tolerance(value: DecimalSource, tolerance: number): boolean { + return this.neq_tolerance(value, tolerance); + } + + public lt_tolerance(value: DecimalSource, tolerance: number): boolean { + const decimal = D(value); + return !this.eq_tolerance(decimal, tolerance) && this.lt(decimal); + } + + public lte_tolerance(value: DecimalSource, tolerance: number): boolean { + const decimal = D(value); + return this.eq_tolerance(decimal, tolerance) || this.lt(decimal); + } + + public gt_tolerance(value: DecimalSource, tolerance: number): boolean { + const decimal = D(value); + return !this.eq_tolerance(decimal, tolerance) && this.gt(decimal); + } + + public gte_tolerance(value: DecimalSource, tolerance: number): boolean { + const decimal = D(value); + return this.eq_tolerance(decimal, tolerance) || this.gt(decimal); + } + + public pLog10(): Decimal { + if (this.lt(Decimal.dZero)) { + return Decimal.dZero; + } + return this.log10(); + } + + public absLog10(): Decimal { + if (this.sign === 0) { + return Decimal.dNaN; + } else if (this.layer > 0) { + return FC(Math.sign(this.mag), this.layer - 1, Math.abs(this.mag)); + } else { + return FC(1, 0, Math.log10(this.mag)); + } + } + + public log10(): Decimal { + if (this.sign <= 0) { + return Decimal.dNaN; + } else if (this.layer > 0) { + return FC(Math.sign(this.mag), this.layer - 1, Math.abs(this.mag)); + } else { + return FC(this.sign, 0, Math.log10(this.mag)); + } + } + + public log(base: DecimalSource): Decimal { + base = D(base); + if (this.sign <= 0) { + return Decimal.dNaN; + } + if (base.sign <= 0) { + return Decimal.dNaN; + } + if (base.sign === 1 && base.layer === 0 && base.mag === 1) { + return Decimal.dNaN; + } else if (this.layer === 0 && base.layer === 0) { + return FC(this.sign, 0, Math.log(this.mag) / Math.log(base.mag)); + } + + return Decimal.div(this.log10(), base.log10()); + } + + public log2(): Decimal { + if (this.sign <= 0) { + return Decimal.dNaN; + } else if (this.layer === 0) { + return FC(this.sign, 0, Math.log2(this.mag)); + } else if (this.layer === 1) { + return FC(Math.sign(this.mag), 0, Math.abs(this.mag) * 3.321928094887362); //log2(10) + } else if (this.layer === 2) { + return FC(Math.sign(this.mag), 1, Math.abs(this.mag) + 0.5213902276543247); //-log10(log10(2)) + } else { + return FC(Math.sign(this.mag), this.layer - 1, Math.abs(this.mag)); + } + } + + public ln(): Decimal { + if (this.sign <= 0) { + return Decimal.dNaN; + } else if (this.layer === 0) { + return FC(this.sign, 0, Math.log(this.mag)); + } else if (this.layer === 1) { + return FC(Math.sign(this.mag), 0, Math.abs(this.mag) * 2.302585092994046); //ln(10) + } else if (this.layer === 2) { + return FC(Math.sign(this.mag), 1, Math.abs(this.mag) + 0.36221568869946325); //log10(log10(e)) + } else { + return FC(Math.sign(this.mag), this.layer - 1, Math.abs(this.mag)); + } + } + + public logarithm(base: DecimalSource): Decimal { + return this.log(base); + } + + public pow(value: DecimalSource): Decimal { + const decimal = D(value); + const a = this; + const b = decimal; + + //special case: if a is 0, then return 0 (UNLESS b is 0, then return 1) + if (a.sign === 0) { + return b.eq(0) ? FC_NN(1, 0, 1) : a; + } + //special case: if a is 1, then return 1 + if (a.sign === 1 && a.layer === 0 && a.mag === 1) { + return a; + } + //special case: if b is 0, then return 1 + if (b.sign === 0) { + return FC_NN(1, 0, 1); + } + //special case: if b is 1, then return a + if (b.sign === 1 && b.layer === 0 && b.mag === 1) { + return a; + } + + const result = a + .absLog10() + .mul(b) + .pow10(); + + if (this.sign === -1) { + if (Math.abs(b.toNumber() % 2) % 2 === 1) { + return result.neg(); + } else if (Math.abs(b.toNumber() % 2) % 2 === 0) { + return result; + } + return Decimal.dNaN; + } + + return result; + } + + public pow10(): Decimal { + /* + There are four cases we need to consider: + 1) positive sign, positive mag (e15, ee15): +1 layer (e.g. 10^15 becomes e15, 10^e15 becomes ee15) + 2) negative sign, positive mag (-e15, -ee15): +1 layer but sign and mag sign are flipped (e.g. 10^-15 becomes e-15, 10^-e15 becomes ee-15) + 3) positive sign, negative mag (e-15, ee-15): layer 0 case would have been handled in the Math.pow check, so just return 1 + 4) negative sign, negative mag (-e-15, -ee-15): layer 0 case would have been handled in the Math.pow check, so just return 1 + */ + + if (!Number.isFinite(this.layer) || !Number.isFinite(this.mag)) { + return Decimal.dNaN; + } + + let a = this; + + //handle layer 0 case - if no precision is lost just use Math.pow, else promote one layer + if (a.layer === 0) { + const newmag = Math.pow(10, a.sign * a.mag); + if (Number.isFinite(newmag) && Math.abs(newmag) >= 0.1) { + return FC(1, 0, newmag); + } else { + if (a.sign === 0) { + return Decimal.dOne; + } else { + a = FC_NN(a.sign, a.layer + 1, Math.log10(a.mag)) as this; + } + } + } + + //handle all 4 layer 1+ cases individually + if (a.sign > 0 && a.mag >= 0) { + return FC(a.sign, a.layer + 1, a.mag); + } + if (a.sign < 0 && a.mag >= 0) { + return FC(-a.sign, a.layer + 1, -a.mag); + } + //both the negative mag cases are identical: one +/- rounding error + return Decimal.dOne; + } + + public pow_base(value: DecimalSource): Decimal { + return D(value).pow(this); + } + + public root(value: DecimalSource): Decimal { + const decimal = D(value); + return this.pow(decimal.recip()); + } + + public factorial(): Decimal { + if (this.mag < 0) { + return this.add(1).gamma(); + } else if (this.layer === 0) { + return this.add(1).gamma(); + } else if (this.layer === 1) { + return Decimal.exp(Decimal.mul(this, Decimal.ln(this).sub(1))); + } else { + return Decimal.exp(this); + } + } + + //from HyperCalc source code + public gamma(): Decimal { + if (this.mag < 0) { + return this.recip(); + } else if (this.layer === 0) { + if (this.lt(FC_NN(1, 0, 24))) { + return D(f_gamma(this.sign * this.mag)); + } + + const t = this.mag - 1; + let l = 0.9189385332046727; //0.5*Math.log(2*Math.PI) + l = l + (t + 0.5) * Math.log(t); + l = l - t; + const n2 = t * t; + let np = t; + let lm = 12 * np; + let adj = 1 / lm; + let l2 = l + adj; + if (l2 === l) { + return Decimal.exp(l); + } + + l = l2; + np = np * n2; + lm = 360 * np; + adj = 1 / lm; + l2 = l - adj; + if (l2 === l) { + return Decimal.exp(l); + } + + l = l2; + np = np * n2; + lm = 1260 * np; + let lt = 1 / lm; + l = l + lt; + np = np * n2; + lm = 1680 * np; + lt = 1 / lm; + l = l - lt; + return Decimal.exp(l); + } else if (this.layer === 1) { + return Decimal.exp(Decimal.mul(this, Decimal.ln(this).sub(1))); + } else { + return Decimal.exp(this); + } + } + + public lngamma(): Decimal { + return this.gamma().ln(); + } + + public exp(): Decimal { + if (this.mag < 0) { + return Decimal.dOne; + } + if (this.layer === 0 && this.mag <= 709.7) { + return D(Math.exp(this.sign * this.mag)); + } else if (this.layer === 0) { + return FC(1, 1, this.sign * Math.log10(Math.E) * this.mag); + } else if (this.layer === 1) { + return FC(1, 2, this.sign * (Math.log10(0.4342944819032518) + this.mag)); + } else { + return FC(1, this.layer + 1, this.sign * this.mag); + } + } + + public sqr(): Decimal { + return this.pow(2); + } + + public sqrt(): Decimal { + if (this.layer === 0) { + return D(Math.sqrt(this.sign * this.mag)); + } else if (this.layer === 1) { + return FC(1, 2, Math.log10(this.mag) - 0.3010299956639812); + } else { + const result = Decimal.div(FC_NN(this.sign, this.layer - 1, this.mag), FC_NN(1, 0, 2)); + result.layer += 1; + result.normalize(); + return result; + } + } + + public cube(): Decimal { + return this.pow(3); + } + + public cbrt(): Decimal { + return this.pow(1 / 3); + } + + //Tetration/tetrate: The result of exponentiating 'this' to 'this' 'height' times in a row. https://en.wikipedia.org/wiki/Tetration + //If payload != 1, then this is 'iterated exponentiation', the result of exping (payload) to base (this) (height) times. https://andydude.github.io/tetration/archives/tetration2/ident.html + //Works with negative and positive real heights. + public tetrate(height = 2, payload: DecimalSource = FC_NN(1, 0, 1)): Decimal { + //x^^1 == x + if (height === 1) { + return Decimal.pow(this, payload); + } + //x^^0 == 1 + if (height === 0) { + return new Decimal(payload); + } + //1^^x == 1 + if (this.eq(Decimal.dOne)) { + return Decimal.dOne; + } + //-1^^x == -1 + if (this.eq(-1)) { + return Decimal.pow(this, payload); + } + + if (height === Number.POSITIVE_INFINITY) { + const this_num = this.toNumber(); + //within the convergence range? + if (this_num <= 1.44466786100976613366 && this_num >= 0.06598803584531253708) { + //hotfix for the very edge of the number range not being handled properly + if (this_num > 1.444667861009099) { + return new Decimal(Math.E); + } + //Formula for infinite height power tower. + const negln = Decimal.ln(this).neg(); + return negln.lambertw().div(negln); + } else if (this_num > 1.44466786100976613366) { + //explodes to infinity + return new Decimal(Number.POSITIVE_INFINITY); + } else { + //0.06598803584531253708 > this_num >= 0: never converges + //this_num < 0: quickly becomes a complex number + return Decimal.dNaN; + } + } + + //0^^x oscillates if we define 0^0 == 1 (which in javascript land we do), since then 0^^1 is 0, 0^^2 is 1, 0^^3 is 0, etc. payload is ignored + //using the linear approximation for height (TODO: don't know a better way to calculate it ATM, but it wouldn't surprise me if it's just NaN) + if (this.eq(Decimal.dZero)) { + let result = Math.abs((height + 1) % 2); + if (result > 1) { + result = 2 - result; + } + return new Decimal(result); + } + + if (height < 0) { + return Decimal.iteratedlog(payload, this, -height); + } + + payload = D(payload); + const oldheight = height; + height = Math.trunc(height); + const fracheight = oldheight - height; + + if (this.gt(Decimal.dZero) && this.lte(1.44466786100976613366)) { + //similar to 0^^n, flip-flops between two values, converging slowly (or if it's below 0.06598803584531253708, never. so once again, the fractional part at the end will be a linear approximation (TODO: again pending knowledge of how to approximate better, although tbh I think it should in reality just be NaN) + height = Math.min(10000, height); + for (let i = 0; i < height; ++i) { + const old_payload: Decimal = payload; + payload = this.pow(payload); + //stop early if we converge + if (old_payload.eq(payload)) { + return payload; + } + } + if (fracheight != 0) { + const next_payload = this.pow(payload); + return payload.mul(1 - fracheight).add(next_payload.mul(fracheight)); + } + return payload; + } + //TODO: base < 0, but it's hard for me to reason about (probably all non-integer heights are NaN automatically?) + + if (fracheight !== 0) { + if (payload.eq(Decimal.dOne)) { + //TODO: for bases above 10, revert to old linear approximation until I can think of something better + if (this.gt(10)) { + payload = this.pow(fracheight); + } else { + payload = D(Decimal.tetrate_critical(this.toNumber(), fracheight)); + //TODO: until the critical section grid can handle numbers below 2, scale them to the base + //TODO: maybe once the critical section grid has very large bases, this math can be appropriate for them too? I'll think about it + if (this.lt(2)) { + payload = payload + .sub(1) + .mul(this.minus(1)) + .plus(1); + } + } + } else { + if (this.eq(10)) { + payload = payload.layeradd10(fracheight); + } else { + payload = payload.layeradd(fracheight, this); + } + } + } + + for (let i = 0; i < height; ++i) { + payload = this.pow(payload); + //bail if we're NaN + if (!isFinite(payload.layer) || !isFinite(payload.mag)) { + return payload.normalize(); + } + //shortcut + if (payload.layer - this.layer > 3) { + return FC_NN(payload.sign, payload.layer + (height - i - 1), payload.mag); + } + //give up after 10000 iterations if nothing is happening + if (i > 10000) { + return payload; + } + } + return payload; + } + + //iteratedexp/iterated exponentiation: - all cases handled in tetrate, so just call it + public iteratedexp(height = 2, payload = FC_NN(1, 0, 1)): Decimal { + return this.tetrate(height, payload); + } + + //iterated log/repeated log: The result of applying log(base) 'times' times in a row. Approximately equal to subtracting (times) from the number's slog representation. Equivalent to tetrating to a negative height. + //Works with negative and positive real heights. + public iteratedlog(base: DecimalSource = 10, times = 1): Decimal { + if (times < 0) { + return Decimal.tetrate(base, -times, this); + } + + base = D(base); + let result = D(this); + const fulltimes = times; + times = Math.trunc(times); + const fraction = fulltimes - times; + if (result.layer - base.layer > 3) { + const layerloss = Math.min(times, result.layer - base.layer - 3); + times -= layerloss; + result.layer -= layerloss; + } + + for (let i = 0; i < times; ++i) { + result = result.log(base); + //bail if we're NaN + if (!isFinite(result.layer) || !isFinite(result.mag)) { + return result.normalize(); + } + //give up after 10000 iterations if nothing is happening + if (i > 10000) { + return result; + } + } + + //handle fractional part + if (fraction > 0 && fraction < 1) { + if (base.eq(10)) { + result = result.layeradd10(-fraction); + } else { + result = result.layeradd(-fraction, base); + } + } + + return result; + } + + //Super-logarithm, one of tetration's inverses, tells you what size power tower you'd have to tetrate base to to get number. By definition, will never be higher than 1.8e308 in break_eternity.js, since a power tower 1.8e308 numbers tall is the largest representable number. + // https://en.wikipedia.org/wiki/Super-logarithm + public slog(base: DecimalSource = 10): Decimal { + base = D(base); + + //special cases: + //slog base 0 or lower is NaN + if (base.lte(Decimal.dZero)) { + return Decimal.dNaN; + } + //slog base 1 is NaN + if (base.eq(Decimal.dOne)) { + return Decimal.dNaN; + } + //need to handle these small, wobbling bases specially + if (base.lt(Decimal.dOne)) { + if (this.eq(Decimal.dOne)) { + return Decimal.dZero; + } + if (this.eq(Decimal.dZero)) { + return Decimal.dNegOne; + } + //0 < this < 1: ambiguous (happens multiple times) + //this < 0: impossible (as far as I can tell) + //this > 1: partially complex (http://myweb.astate.edu/wpaulsen/tetcalc/tetcalc.html base 0.25 for proof) + return Decimal.dNaN; + } + //slog_n(0) is -1 + if (this.mag < 0 || this.eq(Decimal.dZero)) { + return Decimal.dNegOne; + } + + let result = 0; + let copy = D(this); + if (copy.layer - base.layer > 3) { + const layerloss = copy.layer - base.layer - 3; + result += layerloss; + copy.layer -= layerloss; + } + + for (let i = 0; i < 100; ++i) { + if (copy.lt(Decimal.dZero)) { + copy = Decimal.pow(base, copy); + result -= 1; + } else if (copy.lte(Decimal.dOne)) { + return D(result + Decimal.slog_critical(base.toNumber(), copy.toNumber())); + } else { + result += 1; + copy = Decimal.log(copy, base); + } + } + return D(result); + } + + //background info and tables of values for critical functions taken here: https://github.com/Patashu/break_eternity.js/issues/22 + public static slog_critical(base: number, height: number): number { + //TODO: for bases above 10, revert to old linear approximation until I can think of something better + if (base > 10) { + return height - 1; + } + return Decimal.critical_section(base, height, critical_slog_values); + } + + public static tetrate_critical(base: number, height: number): number { + return Decimal.critical_section(base, height, critical_tetr_values); + } + + public static critical_section(base: number, height: number, grid: number[][]): number { + //this part is simple at least, since it's just 0.1 to 0.9 + height *= 10; + if (height < 0) { + height = 0; + } + if (height > 10) { + height = 10; + } + //have to do this complicated song and dance since one of the critical_headers is Math.E, and in the future I'd like 1.5 as well + if (base < 2) { + base = 2; + } + if (base > 10) { + base = 10; + } + let lower = 0; + let upper = 0; + //basically, if we're between bases, we interpolate each bases' relevant values together + //then we interpolate based on what the fractional height is. + //accuracy could be improved by doing a non-linear interpolation (maybe), by adding more bases and heights (definitely) but this is AFAIK the best you can get without running some pari.gp or mathematica program to calculate exact values + for (let i = 0; i < critical_headers.length; ++i) { + if (critical_headers[i] == base) { + // exact match + lower = grid[i][Math.floor(height)]; + upper = grid[i][Math.ceil(height)]; + break; + } else if (critical_headers[i] < base && critical_headers[i + 1] > base) { + // interpolate between this and the next + const basefrac = + (base - critical_headers[i]) / (critical_headers[i + 1] - critical_headers[i]); + lower = + grid[i][Math.floor(height)] * (1 - basefrac) + + grid[i + 1][Math.floor(height)] * basefrac; + upper = + grid[i][Math.ceil(height)] * (1 - basefrac) + + grid[i + 1][Math.ceil(height)] * basefrac; + break; + } + } + const frac = height - Math.floor(height); + const result = lower * (1 - frac) + upper * frac; + return result; + } + + //Function for adding/removing layers from a Decimal, even fractional layers (e.g. its slog10 representation). + //Moved this over to use the same critical section as tetrate/slog. + public layeradd10(diff: DecimalSource): Decimal { + diff = Decimal.fromValue_noAlloc(diff).toNumber(); + const result = D(this); + if (diff >= 1) { + //bug fix: if result is very smol (mag < 0, layer > 0) turn it into 0 first + if (result.mag < 0 && result.layer > 0) { + result.sign = 0; + result.mag = 0; + result.layer = 0; + } else if (result.sign === -1 && result.layer == 0) { + //bug fix - for stuff like -3.layeradd10(1) we need to move the sign to the mag + result.sign = 1; + result.mag = -result.mag; + } + const layeradd = Math.trunc(diff); + diff -= layeradd; + result.layer += layeradd; + } + if (diff <= -1) { + const layeradd = Math.trunc(diff); + diff -= layeradd; + result.layer += layeradd; + if (result.layer < 0) { + for (let i = 0; i < 100; ++i) { + result.layer++; + result.mag = Math.log10(result.mag); + if (!isFinite(result.mag)) { + //another bugfix: if we hit -Infinity mag, then we should return negative infinity, not 0. 0.layeradd10(-1) h its this + if (result.sign === 0) { + result.sign = 1; + } + //also this, for 0.layeradd10(-2) + if (result.layer < 0) { + result.layer = 0; + } + return result.normalize(); + } + if (result.layer >= 0) { + break; + } + } + } + } + + while (result.layer < 0) { + result.layer++; + result.mag = Math.log10(result.mag); + } + //bugfix: before we normalize: if we started with 0, we now need to manually fix a layer ourselves! + if (result.sign === 0) { + result.sign = 1; + if (result.mag === 0 && result.layer >= 1) { + result.layer -= 1; + result.mag = 1; + } + } + result.normalize(); + + //layeradd10: like adding 'diff' to the number's slog(base) representation. Very similar to tetrate base 10 and iterated log base 10. Also equivalent to adding a fractional amount to the number's layer in its break_eternity.js representation. + if (diff !== 0) { + return result.layeradd(diff, 10); //safe, only calls positive height 1 payload tetration, slog and log + } + + return result; + } + + //layeradd: like adding 'diff' to the number's slog(base) representation. Very similar to tetrate base 'base' and iterated log base 'base'. + public layeradd(diff: number, base: DecimalSource): Decimal { + const slogthis = this.slog(base).toNumber(); + const slogdest = slogthis + diff; + if (slogdest >= 0) { + return Decimal.tetrate(base, slogdest); + } else if (!Number.isFinite(slogdest)) { + return Decimal.dNaN; + } else if (slogdest >= -1) { + return Decimal.log(Decimal.tetrate(base, slogdest + 1), base); + } else { + return Decimal.log(Decimal.log(Decimal.tetrate(base, slogdest + 2), base), base); + } + } + + //The Lambert W function, also called the omega function or product logarithm, is the solution W(x) === x*e^x. + // https://en.wikipedia.org/wiki/Lambert_W_function + //Some special values, for testing: https://en.wikipedia.org/wiki/Lambert_W_function#Special_values + public lambertw(): Decimal { + if (this.lt(-0.3678794411710499)) { + throw Error("lambertw is unimplemented for results less than -1, sorry!"); + } else if (this.mag < 0) { + return D(f_lambertw(this.toNumber())); + } else if (this.layer === 0) { + return D(f_lambertw(this.sign * this.mag)); + } else if (this.layer === 1) { + return d_lambertw(this); + } else if (this.layer === 2) { + return d_lambertw(this); + } + if (this.layer >= 3) { + return FC_NN(this.sign, this.layer - 1, this.mag); + } + + throw "Unhandled behavior in lambertw()"; + } + + //The super square-root function - what number, tetrated to height 2, equals this? + //Other sroots are possible to calculate probably through guess and check methods, this one is easy though. + // https://en.wikipedia.org/wiki/Tetration#Super-root + public ssqrt(): Decimal { + if (this.sign == 1 && this.layer >= 3) { + return FC_NN(this.sign, this.layer - 1, this.mag); + } + const lnx = this.ln(); + return lnx.div(lnx.lambertw()); + } + /* + +Unit tests for tetrate/iteratedexp/iteratedlog/layeradd10/layeradd/slog: +(note: these won't be exactly precise with the new slog implementation, but that's okay) + +for (var i = 0; i < 1000; ++i) +{ + var first = Math.random()*100; + var both = Math.random()*100; + var expected = first+both+1; + var result = new Decimal(10).layeradd10(first).layeradd10(both).slog(); + if (Number.isFinite(result.mag) && !Decimal.eq_tolerance(expected, result)) + { + console.log(first + ", " + both); + } +} + +for (var i = 0; i < 1000; ++i) +{ + var first = Math.random()*100; + var both = Math.random()*100; + first += both; + var expected = first-both+1; + var result = new Decimal(10).layeradd10(first).layeradd10(-both).slog(); + if (Number.isFinite(result.mag) && !Decimal.eq_tolerance(expected, result)) + { + console.log(first + ", " + both); + } +} + +for (var i = 0; i < 1000; ++i) +{ + var first = Math.random()*100; + var both = Math.random()*100; + var base = Math.random()*8+2; + var expected = first+both+1; + var result = new Decimal(base).layeradd(first, base).layeradd(both, base).slog(base); + if (Number.isFinite(result.mag) && !Decimal.eq_tolerance(expected, result)) + { + console.log(first + ", " + both); + } +} + +for (var i = 0; i < 1000; ++i) +{ + var first = Math.random()*100; + var both = Math.random()*100; + var base = Math.random()*8+2; + first += both; + var expected = first-both+1; + var result = new Decimal(base).layeradd(first, base).layeradd(-both, base).slog(base); + if (Number.isFinite(result.mag) && !Decimal.eq_tolerance(expected, result)) + { + console.log(first + ", " + both); + } +} + +for (var i = 0; i < 1000; ++i) +{ +var first = Math.round((Math.random()*30))/10; +var both = Math.round((Math.random()*30))/10; +var tetrateonly = Decimal.tetrate(10, first); +var tetrateandlog = Decimal.tetrate(10, first+both).iteratedlog(10, both); +if (!Decimal.eq_tolerance(tetrateonly, tetrateandlog)) +{ + console.log(first + ", " + both); +} +} + +for (var i = 0; i < 1000; ++i) +{ +var first = Math.round((Math.random()*30))/10; +var both = Math.round((Math.random()*30))/10; +var base = Math.random()*8+2; +var tetrateonly = Decimal.tetrate(base, first); +var tetrateandlog = Decimal.tetrate(base, first+both).iteratedlog(base, both); +if (!Decimal.eq_tolerance(tetrateonly, tetrateandlog)) +{ + console.log(first + ", " + both); +} +} + +for (var i = 0; i < 1000; ++i) +{ +var first = Math.round((Math.random()*30))/10; +var both = Math.round((Math.random()*30))/10; +var base = Math.random()*8+2; +var tetrateonly = Decimal.tetrate(base, first, base); +var tetrateandlog = Decimal.tetrate(base, first+both, base).iteratedlog(base, both); +if (!Decimal.eq_tolerance(tetrateonly, tetrateandlog)) +{ + console.log(first + ", " + both); +} +} + +for (var i = 0; i < 1000; ++i) +{ + var xex = new Decimal(-0.3678794411710499+Math.random()*100); + var x = Decimal.lambertw(xex); + if (!Decimal.eq_tolerance(xex, x.mul(Decimal.exp(x)))) + { + console.log(xex); + } +} + +for (var i = 0; i < 1000; ++i) +{ + var xex = new Decimal(-0.3678794411710499+Math.exp(Math.random()*100)); + var x = Decimal.lambertw(xex); + if (!Decimal.eq_tolerance(xex, x.mul(Decimal.exp(x)))) + { + console.log(xex); + } +} + +for (var i = 0; i < 1000; ++i) +{ + var a = Decimal.randomDecimalForTesting(Math.random() > 0.5 ? 0 : 1); + var b = Decimal.randomDecimalForTesting(Math.random() > 0.5 ? 0 : 1); + if (Math.random() > 0.5) { a = a.recip(); } + if (Math.random() > 0.5) { b = b.recip(); } + var c = a.add(b).toNumber(); + if (Number.isFinite(c) && !Decimal.eq_tolerance(c, a.toNumber()+b.toNumber())) + { + console.log(a + ", " + b); + } +} + +for (var i = 0; i < 100; ++i) +{ + var a = Decimal.randomDecimalForTesting(Math.round(Math.random()*4)); + var b = Decimal.randomDecimalForTesting(Math.round(Math.random()*4)); + if (Math.random() > 0.5) { a = a.recip(); } + if (Math.random() > 0.5) { b = b.recip(); } + var c = a.mul(b).toNumber(); + if (Number.isFinite(c) && Number.isFinite(a.toNumber()) && Number.isFinite(b.toNumber()) && a.toNumber() != 0 && b.toNumber() != 0 && c != 0 && !Decimal.eq_tolerance(c, a.toNumber()*b.toNumber())) + { + console.log("Test 1: " + a + ", " + b); + } + else if (!Decimal.mul(a.recip(), b.recip()).eq_tolerance(Decimal.mul(a, b).recip())) + { + console.log("Test 3: " + a + ", " + b); + } +} + +for (var i = 0; i < 10; ++i) +{ + var a = Decimal.randomDecimalForTesting(Math.round(Math.random()*4)); + var b = Decimal.randomDecimalForTesting(Math.round(Math.random()*4)); + if (Math.random() > 0.5 && a.sign !== 0) { a = a.recip(); } + if (Math.random() > 0.5 && b.sign !== 0) { b = b.recip(); } + var c = a.pow(b); + var d = a.root(b.recip()); + var e = a.pow(b.recip()); + var f = a.root(b); + + if (!c.eq_tolerance(d) && a.sign !== 0 && b.sign !== 0) + { + console.log("Test 1: " + a + ", " + b); + } + if (!e.eq_tolerance(f) && a.sign !== 0 && b.sign !== 0) + { + console.log("Test 2: " + a + ", " + b); + } +} + +for (var i = 0; i < 10; ++i) +{ + var a = Math.round(Math.random()*18-9); + var b = Math.round(Math.random()*100-50); + var c = Math.round(Math.random()*18-9); + var d = Math.round(Math.random()*100-50); + console.log("Decimal.pow(Decimal.fromMantissaExponent(" + a + ", " + b + "), Decimal.fromMantissaExponent(" + c + ", " + d + ")).toString()"); +} + +*/ + + //Pentation/pentate: The result of tetrating 'height' times in a row. An absurdly strong operator - Decimal.pentate(2, 4.28) and Decimal.pentate(10, 2.37) are already too huge for break_eternity.js! + // https://en.wikipedia.org/wiki/Pentation + public pentate(height = 2, payload: DecimalSource = FC_NN(1, 0, 1)): Decimal { + payload = D(payload); + const oldheight = height; + height = Math.trunc(height); + const fracheight = oldheight - height; + + //I have no idea if this is a meaningful approximation for pentation to continuous heights, but it is monotonic and continuous. + if (fracheight !== 0) { + if (payload.eq(Decimal.dOne)) { + ++height; + payload = new Decimal(fracheight); + } else { + if (this.eq(10)) { + payload = payload.layeradd10(fracheight); + } else { + payload = payload.layeradd(fracheight, this); + } + } + } + + for (let i = 0; i < height; ++i) { + payload = this.tetrate(payload.toNumber()); + //bail if we're NaN + if (!isFinite(payload.layer) || !isFinite(payload.mag)) { + return payload.normalize(); + } + //give up after 10 iterations if nothing is happening + if (i > 10) { + return payload; + } + } + + return payload; + } + + // trig functions! + public sin(): this | Decimal { + if (this.mag < 0) { + return this; + } + if (this.layer === 0) { + return D(Math.sin(this.sign * this.mag)); + } + return FC_NN(0, 0, 0); + } + + public cos(): Decimal { + if (this.mag < 0) { + return Decimal.dOne; + } + if (this.layer === 0) { + return D(Math.cos(this.sign * this.mag)); + } + return FC_NN(0, 0, 0); + } + + public tan(): this | Decimal { + if (this.mag < 0) { + return this; + } + if (this.layer === 0) { + return D(Math.tan(this.sign * this.mag)); + } + return FC_NN(0, 0, 0); + } + + public asin(): this | Decimal { + if (this.mag < 0) { + return this; + } + if (this.layer === 0) { + return D(Math.asin(this.sign * this.mag)); + } + return FC_NN(Number.NaN, Number.NaN, Number.NaN); + } + + public acos(): Decimal { + if (this.mag < 0) { + return D(Math.acos(this.toNumber())); + } + if (this.layer === 0) { + return D(Math.acos(this.sign * this.mag)); + } + return FC_NN(Number.NaN, Number.NaN, Number.NaN); + } + + public atan(): this | Decimal { + if (this.mag < 0) { + return this; + } + if (this.layer === 0) { + return D(Math.atan(this.sign * this.mag)); + } + return D(Math.atan(this.sign * 1.8e308)); + } + + public sinh(): Decimal { + return this.exp() + .sub(this.negate().exp()) + .div(2); + } + + public cosh(): Decimal { + return this.exp() + .add(this.negate().exp()) + .div(2); + } + + public tanh(): Decimal { + return this.sinh().div(this.cosh()); + } + + public asinh(): Decimal { + return Decimal.ln( + this.add( + this.sqr() + .add(1) + .sqrt() + ) + ); + } + + public acosh(): Decimal { + return Decimal.ln( + this.add( + this.sqr() + .sub(1) + .sqrt() + ) + ); + } + + public atanh(): Decimal { + if (this.abs().gte(1)) { + return FC_NN(Number.NaN, Number.NaN, Number.NaN); + } + + return Decimal.ln(this.add(1).div(D(1).sub(this))).div(2); + } + + /** + * Joke function from Realm Grinder + */ + public ascensionPenalty(ascensions: DecimalSource): Decimal { + if (ascensions === 0) { + return this; + } + + return this.root(Decimal.pow(10, ascensions)); + } + + /** + * Joke function from Cookie Clicker. It's 'egg' + */ + public egg(): Decimal { + return this.add(9); + } + + public lessThanOrEqualTo(other: DecimalSource): boolean { + return this.cmp(other) < 1; + } + + public lessThan(other: DecimalSource): boolean { + return this.cmp(other) < 0; + } + + public greaterThanOrEqualTo(other: DecimalSource): boolean { + return this.cmp(other) > -1; + } + + public greaterThan(other: DecimalSource): boolean { + return this.cmp(other) > 0; + } + + // return Decimal; +} + +// return Decimal; diff --git a/src/main.css b/src/main.css new file mode 100644 index 0000000..60188bd --- /dev/null +++ b/src/main.css @@ -0,0 +1,68 @@ +:root { + color-scheme: dark; +} + +* { + transition-duration: 0.5s; + font-family: "Roboto Mono", monospace; + font-weight: bold; + margin: auto; + text-size-adjust: none; +} + +*:focus { + outline: none; +} + +body { + overflow: hidden; + transition: none; + text-align: center; +} + +html, body, #app { + min-height: 100%; + height: 100%; +} + +h1, h2, h3, b, input { + display: inline; +} + +button { + color: black; +} + +a, +.button, +.link { + display: block; + color: var(--link); + background: none; + border: none; + cursor: pointer; + text-decoration: none; +} + +a:hover, +.button:hover, +.link:hover { + text-shadow: 5px 0 10px var(--link), + -3px 0 12px var(--link); +} + +.button:disabled { + opacity: .5; + cursor: not-allowed; +} +.button:disabled:hover { + text-shadow: none; +} + +ul { + list-style-type: none; +} + +.Vue-Toastification__toast { + margin: unset; +} diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..4119aff --- /dev/null +++ b/src/main.ts @@ -0,0 +1,55 @@ +import { App as VueApp, createApp } from "vue"; +import App from "./App.vue"; +import modInfo from "./data/modInfo.json"; +import { GenericLayer } from "./game/layers"; +import { PlayerData } from "./game/player"; +import { Settings } from "./game/settings"; +import { Transient } from "./game/state"; +import Decimal, { DecimalSource } from "./lib/break_eternity"; +import { load } from "./util/save"; + +declare global { + interface Window { + vue: VueApp; + save: VoidFunction; + hardReset: VoidFunction; + hardResetSettings: VoidFunction; + layers: Record<string, Readonly<GenericLayer> | undefined>; + player: PlayerData; + state: Transient; + settings: Settings; + Decimal: typeof Decimal; + exponentialFormat: (num: DecimalSource, precision: number, mantissa: boolean) => string; + commaFormat: (num: DecimalSource, precision: number) => string; + regularFormat: (num: DecimalSource, precision: number) => string; + format: (num: DecimalSource, precision?: number, small?: boolean) => string; + formatWhole: (num: DecimalSource) => string; + formatTime: (s: number) => string; + toPlaces: (x: DecimalSource, precision: number, maxAccepted: DecimalSource) => string; + formatSmall: (x: DecimalSource, precision?: number) => string; + invertOOM: (x: DecimalSource) => Decimal; + modInfo: typeof modInfo; + } +} + +requestAnimationFrame(async () => { + console.log( + "%cMade in Profectus%c\nLearn more at www.moddingtree.com", + "font-weight: bold; font-size: 24px; color: #A3BE8C; background: #2E3440; padding: 4px 8px; border-radius: 8px;", + "padding: 4px;" + ); + await load(); + const { globalBus, startGameLoop } = await require("./game/events"); + + // Create Vue + const vue = (window.vue = createApp({ + ...App + })); + globalBus.emit("setupVue", vue); + vue.mount("#app"); + document.title = modInfo.title; + + startGameLoop(); +}); + +window.modInfo = modInfo; diff --git a/src/util/bignum.ts b/src/util/bignum.ts new file mode 100644 index 0000000..e4ab5ff --- /dev/null +++ b/src/util/bignum.ts @@ -0,0 +1,31 @@ +// Import Decimal and numberUtils from a different file to globally change which big num library gets used +// This way switching out big number libraries just needs to happen here, not every file that needs big numbers +import { DecimalSource as RawDecimalSource } from "@/lib/break_eternity"; +import Decimal, * as numberUtils from "@/util/break_eternity"; + +export const { + exponentialFormat, + commaFormat, + regularFormat, + format, + formatWhole, + formatTime, + toPlaces, + formatSmall, + invertOOM +} = numberUtils; + +export type DecimalSource = RawDecimalSource; + +window.Decimal = Decimal; +window.exponentialFormat = exponentialFormat; +window.commaFormat = commaFormat; +window.regularFormat = regularFormat; +window.format = format; +window.formatWhole = formatWhole; +window.formatTime = formatTime; +window.toPlaces = toPlaces; +window.formatSmall = formatSmall; +window.invertOOM = invertOOM; + +export default Decimal; diff --git a/src/util/break_eternity.ts b/src/util/break_eternity.ts new file mode 100644 index 0000000..57ef17a --- /dev/null +++ b/src/util/break_eternity.ts @@ -0,0 +1,183 @@ +import Decimal, { DecimalSource } from "@/lib/break_eternity"; +import modInfo from "@/data/modInfo.json"; + +export default Decimal; + +const decimalOne = new Decimal(1); + +export function exponentialFormat(num: DecimalSource, precision: number, mantissa = true): string { + let e = Decimal.log10(num).floor(); + let m = Decimal.div(num, Decimal.pow(10, e)); + if (m.toStringWithDecimalPlaces(precision) === "10") { + m = decimalOne; + e = e.add(1); + } + const eString = e.gte(1e9) + ? format(e, Math.max(Math.max(precision, 3), modInfo.defaultDecimalsShown)) + : e.gte(10000) + ? commaFormat(e, 0) + : e.toStringWithDecimalPlaces(0); + if (mantissa) { + return m.toStringWithDecimalPlaces(precision) + "e" + eString; + } else { + return "e" + eString; + } +} + +export function commaFormat(num: DecimalSource, precision: number): string { + if (num === null || num === undefined) { + return "NaN"; + } + num = new Decimal(num); + if (num.mag < 0.001) { + return (0).toFixed(precision); + } + const init = num.toStringWithDecimalPlaces(precision); + const portions = init.split("."); + portions[0] = portions[0].replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,"); + if (portions.length == 1) return portions[0]; + return portions[0] + "." + portions[1]; +} + +export function regularFormat(num: DecimalSource, precision: number): string { + if (num === null || num === undefined) { + return "NaN"; + } + num = new Decimal(num); + if (num.mag < 0.0001) { + return (0).toFixed(precision); + } + if (num.mag < 0.1 && precision !== 0) { + precision = Math.max(Math.max(precision, 4), modInfo.defaultDecimalsShown); + } + return num.toStringWithDecimalPlaces(precision); +} + +export function format(num: DecimalSource, precision?: number, small?: boolean): string { + if (precision == null) precision = modInfo.defaultDecimalsShown; + small = small || modInfo.allowSmall; + num = new Decimal(num); + if (isNaN(num.sign) || isNaN(num.layer) || isNaN(num.mag)) { + return "NaN"; + } + if (num.sign < 0) { + return "-" + format(num.neg(), precision); + } + if (num.mag === Number.POSITIVE_INFINITY) { + return "Infinity"; + } + if (num.gte("eeee1000")) { + const slog = num.slog(); + if (slog.gte(1e6)) { + return "F" + format(slog.floor()); + } else { + return ( + Decimal.pow(10, slog.sub(slog.floor())).toStringWithDecimalPlaces(3) + + "F" + + commaFormat(slog.floor(), 0) + ); + } + } else if (num.gte("1e100000")) { + return exponentialFormat(num, 0, false); + } else if (num.gte("1e1000")) { + return exponentialFormat(num, 0); + } else if (num.gte(1e9)) { + return exponentialFormat(num, precision); + } else if (num.gte(1e3)) { + return commaFormat(num, 0); + } else if (num.gte(0.001) || !small) { + return regularFormat(num, precision); + } else if (num.eq(0)) { + return (0).toFixed(precision); + } + + num = invertOOM(num); + if (num.lt("1e1000")) { + const val = exponentialFormat(num, precision); + return val.replace(/([^(?:e|F)]*)$/, "-$1"); + } else { + return format(num, precision) + "⁻¹"; + } +} + +export function formatWhole(num: DecimalSource): string { + num = new Decimal(num); + if (num.sign < 0) { + return "-" + formatWhole(num.neg()); + } + if (num.gte(1e9)) { + return format(num); + } + if (num.lte(0.98) && !num.eq(0)) { + return format(num); + } + return format(num, 0); +} + +export function formatTime(seconds: DecimalSource): string { + if (Decimal.lt(seconds, 0)) { + return "-" + formatTime(Decimal.neg(seconds)); + } + if (Decimal.gt(seconds, 2 ** 51)) { + // integer precision limit + return format(Decimal.div(seconds, 31536000)) + "y"; + } + seconds = new Decimal(seconds).toNumber(); + if (seconds < 60) { + return format(seconds) + "s"; + } else if (seconds < 3600) { + return formatWhole(Math.floor(seconds / 60)) + "m " + format(seconds % 60) + "s"; + } else if (seconds < 86400) { + return ( + formatWhole(Math.floor(seconds / 3600)) + + "h " + + formatWhole(Math.floor(seconds / 60) % 60) + + "m " + + formatWhole(seconds % 60) + + "s" + ); + } else if (seconds < 31536000) { + return ( + formatWhole(Math.floor(seconds / 84600) % 365) + + "d " + + formatWhole(Math.floor(seconds / 3600) % 24) + + "h " + + formatWhole(Math.floor(seconds / 60) % 60) + + "m" + ); + } else { + return ( + formatWhole(Math.floor(seconds / 31536000)) + + "y " + + formatWhole(Math.floor(seconds / 84600) % 365) + + "d " + + formatWhole(Math.floor(seconds / 3600) % 24) + + "h" + ); + } +} + +export function toPlaces(x: DecimalSource, precision: number, maxAccepted: DecimalSource): string { + x = new Decimal(x); + let result = x.toStringWithDecimalPlaces(precision); + if (new Decimal(result).gte(maxAccepted)) { + result = Decimal.sub(maxAccepted, Math.pow(0.1, precision)).toStringWithDecimalPlaces( + precision + ); + } + return result; +} + +// Will also display very small numbers +export function formatSmall(x: DecimalSource, precision?: number): string { + return format(x, precision, true); +} + +export function invertOOM(x: DecimalSource): Decimal { + let e = Decimal.log10(x).ceil(); + const m = Decimal.div(x, Decimal.pow(10, e)); + e = e.neg(); + x = new Decimal(10).pow(e).times(m); + + return x; +} diff --git a/src/util/common.ts b/src/util/common.ts new file mode 100644 index 0000000..5122008 --- /dev/null +++ b/src/util/common.ts @@ -0,0 +1,16 @@ +// Reference: +// https://stackoverflow.com/questions/7225407/convert-camelcasetext-to-sentence-case-text +export function camelToTitle(camel: string): string { + let title = camel.replace(/([A-Z])/g, " $1"); + title = title.charAt(0).toUpperCase() + title.slice(1); + return title; +} + +export function isPlainObject(object: unknown): boolean { + return Object.prototype.toString.call(object) === "[object Object]"; +} + +// eslint-disable-next-line @typescript-eslint/ban-types +export function isFunction(func: unknown): func is Function { + return typeof func === "function"; +} diff --git a/src/util/computed.ts b/src/util/computed.ts new file mode 100644 index 0000000..3643d8f --- /dev/null +++ b/src/util/computed.ts @@ -0,0 +1,50 @@ +import { computed, Ref } from "vue"; +import { isFunction } from "./common"; + +export const DoNotCache = Symbol("DoNotCache"); + +export type Computable<T> = T | Ref<T> | (() => T); +export type ProcessedComputable<T> = T | Ref<T>; +export type GetComputableType<T> = T extends { [DoNotCache]: true } + ? T + : T extends () => infer S + ? Ref<S> + : undefined extends T + ? undefined + : T; +export type GetComputableTypeWithDefault<T, S> = undefined extends T + ? S + : GetComputableType<NonNullable<T>>; +type UnwrapComputableType<T> = T extends Ref<infer S> ? S : T extends () => infer S ? S : T; + +type ComputableKeysOf<T> = Pick< + T, + { + [K in keyof T]: T[K] extends Computable<unknown> ? K : never; + }[keyof T] +>; + +// TODO fix the typing of this function, such that casting isn't necessary and can be used to +// detect if a createX function is validly written +export function processComputable<T, S extends keyof ComputableKeysOf<T>>( + obj: T, + key: S +): asserts obj is T & { [K in S]: ProcessedComputable<UnwrapComputableType<T[S]>> } { + const computable = obj[key]; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + if (isFunction(computable) && computable.length === 0 && !(computable as any)[DoNotCache]) { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + obj[key] = computed(computable.bind(obj)); + } +} + +export function convertComputable<T>(obj: Computable<T>): ProcessedComputable<T> { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + if (isFunction(obj) && !(obj as any)[DoNotCache]) { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + obj = computed(obj); + } + return obj as ProcessedComputable<T>; +} diff --git a/src/util/proxies.ts b/src/util/proxies.ts new file mode 100644 index 0000000..ce1a312 --- /dev/null +++ b/src/util/proxies.ts @@ -0,0 +1,60 @@ +import Decimal from "./bignum"; + +export const ProxyState = Symbol("ProxyState"); +export const ProxyPath = Symbol("ProxyPath"); + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export type ProxiedWithState<T> = NonNullable<T> extends Record<PropertyKey, any> + ? NonNullable<T> extends Decimal + ? T + : { + [K in keyof T]: ProxiedWithState<T[K]>; + } & { + [ProxyState]: T; + [ProxyPath]: string[]; + } + : T; + +// Takes a function that returns an object and pretends to be that object +// Note that the object is lazily calculated +export function createLazyProxy<T extends object>(objectFunc: () => T): T { + const obj: T | Record<string, never> = {}; + let calculated = false; + function calculateObj(): T { + if (!calculated) { + Object.assign(obj, objectFunc()); + calculated = true; + } + return obj as T; + } + + return new Proxy(obj, { + get(target, key) { + if (key === ProxyState) { + return calculateObj(); + } + // eslint-disable-next-line @typescript-eslint/no-explicit-any + return (calculateObj() as any)[key]; + }, + set() { + console.error("Layers and features are shallow readonly"); + return false; + }, + has(target, key) { + if (key === ProxyState) { + return true; + } + return Reflect.has(calculateObj(), key); + }, + ownKeys() { + return Reflect.ownKeys(calculateObj()); + }, + getOwnPropertyDescriptor(target, key) { + if (!calculated) { + Object.assign(obj, objectFunc()); + calculated = true; + } + return Object.getOwnPropertyDescriptor(target, key); + } + }) as T; +} diff --git a/src/util/save.ts b/src/util/save.ts new file mode 100644 index 0000000..342ce89 --- /dev/null +++ b/src/util/save.ts @@ -0,0 +1,116 @@ +import modInfo from "@/data/modInfo.json"; +import player, { Player, PlayerData, stringifySave } from "@/game/player"; +import settings, { loadSettings } from "@/game/settings"; +import Decimal from "./bignum"; +import { ProxyState } from "./proxies"; + +export function setupInitialStore(player: Partial<PlayerData> = {}): Player { + return Object.assign( + { + id: `${modInfo.id}-0`, + name: "Default Save", + tabs: modInfo.initialTabs.slice(), + time: Date.now(), + autosave: true, + offlineProd: true, + offlineTime: new Decimal(0), + timePlayed: new Decimal(0), + keepGoing: false, + modID: modInfo.id, + modVersion: modInfo.versionNumber, + layers: {} + }, + player + ) as Player; +} + +export function save(): string { + const stringifiedSave = btoa(unescape(encodeURIComponent(stringifySave(player[ProxyState])))); + localStorage.setItem(player.id, stringifiedSave); + return stringifiedSave; +} + +export async function load(): Promise<void> { + // Load global settings + loadSettings(); + + try { + const save = localStorage.getItem(settings.active); + if (save == null) { + await loadSave(newSave()); + return; + } + const player = JSON.parse(decodeURIComponent(escape(atob(save)))); + if (player.modID !== modInfo.id) { + await loadSave(newSave()); + return; + } + player.id = settings.active; + await loadSave(player); + } catch (e) { + console.error("Failed to load save. Falling back to new save.\n", e); + await loadSave(newSave()); + } +} + +export function newSave(): PlayerData { + const id = getUniqueID(); + const player = setupInitialStore({ id }); + localStorage.setItem(id, btoa(unescape(encodeURIComponent(stringifySave(player))))); + + settings.saves.push(id); + + return player; +} + +export function getUniqueID(): string { + let id, + i = 0; + do { + id = `${modInfo.id}-${i++}`; + } while (localStorage.getItem(id)); + return id; +} + +export async function loadSave(playerObj: Partial<PlayerData>): Promise<void> { + console.info("Loading save", playerObj); + const { layers, removeLayer, addLayer } = await import("@/game/layers"); + const { fixOldSave, getInitialLayers } = await import("@/data/mod"); + + for (const layer in layers) { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + removeLayer(layers[layer]!); + } + getInitialLayers(playerObj).forEach(layer => addLayer(layer, playerObj)); + + playerObj = setupInitialStore(playerObj); + if (playerObj.offlineProd && playerObj.time) { + if (playerObj.offlineTime == undefined) playerObj.offlineTime = new Decimal(0); + playerObj.offlineTime = Decimal.add( + playerObj.offlineTime, + (Date.now() - playerObj.time) / 1000 + ); + } + playerObj.time = Date.now(); + if (playerObj.modVersion !== modInfo.versionNumber) { + fixOldSave(playerObj.modVersion, playerObj); + } + + Object.assign(player, playerObj); + settings.active = player.id; +} + +setInterval(() => { + if (player.autosave) { + save(); + } +}, 1000); +window.onbeforeunload = () => { + if (player.autosave) { + save(); + } +}; +window.save = save; +export const hardReset = (window.hardReset = async () => { + await loadSave(newSave()); +}); diff --git a/src/util/vue.tsx b/src/util/vue.tsx new file mode 100644 index 0000000..31a5873 --- /dev/null +++ b/src/util/vue.tsx @@ -0,0 +1,171 @@ +import Col from "@/components/layout/Column.vue"; +import Row from "@/components/layout/Row.vue"; +import { + CoercableComponent, + Component as ComponentKey, + GatherProps, + GenericComponent, + JSXFunction +} from "@/features/feature"; +import { + Component, + computed, + ComputedRef, + DefineComponent, + defineComponent, + isRef, + PropType, + ref, + Ref, + ShallowRef, + shallowRef, + unref, + watchEffect +} from "vue"; +import { DoNotCache, ProcessedComputable } from "./computed"; + +export function coerceComponent( + component: CoercableComponent, + defaultWrapper = "span" +): DefineComponent { + if (typeof component === "function") { + return defineComponent({ render: component }); + } + if (typeof component === "string") { + if (component.length > 0) { + component = component.trim(); + if (component.charAt(0) !== "<") { + component = `<${defaultWrapper}>${component}</${defaultWrapper}>`; + } + + return defineComponent({ template: component }); + } + return defineComponent({ render: () => ({}) }); + } + return component; +} + +export type VueFeature = { + [ComponentKey]: GenericComponent; + [GatherProps]: () => Record<string, unknown>; +}; + +export function render(object: VueFeature | CoercableComponent): JSX.Element | DefineComponent { + if (isCoercableComponent(object)) { + if (typeof object === "function") { + return (object as JSXFunction)(); + } + return coerceComponent(object); + } + const Component = object[ComponentKey]; + return <Component {...object[GatherProps]()} />; +} + +export function renderRow(...objects: (VueFeature | CoercableComponent)[]): JSX.Element { + return <Row>{objects.map(render)}</Row>; +} + +export function renderCol(...objects: (VueFeature | CoercableComponent)[]): JSX.Element { + return <Col>{objects.map(render)}</Col>; +} + +export function isCoercableComponent(component: unknown): component is CoercableComponent { + if (typeof component === "string") { + return true; + } else if (typeof component === "object") { + if (component == null) { + return false; + } + return "render" in component || "component" in component; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + } else if (typeof component === "function" && (component as any)[DoNotCache] === true) { + return true; + } + return false; +} + +export function setupHoldToClick( + onClick?: Ref<VoidFunction | undefined>, + onHold?: Ref<VoidFunction | undefined> +): { + start: VoidFunction; + stop: VoidFunction; + handleHolding: VoidFunction; +} { + const interval = ref<null | number>(null); + + function start() { + if (!interval.value) { + interval.value = setInterval(handleHolding, 250); + } + } + function stop() { + if (interval.value) { + clearInterval(interval.value); + interval.value = null; + } + } + function handleHolding() { + if (onHold && onHold.value) { + onHold.value(); + } else if (onClick && onClick.value) { + onClick.value(); + } + } + + return { start, stop, handleHolding }; +} + +export function computeComponent( + component: Ref<ProcessedComputable<CoercableComponent>>, + defaultWrapper = "div" +): ShallowRef<Component | JSXFunction | ""> { + const comp = shallowRef<Component | JSXFunction | "">(); + watchEffect(() => { + comp.value = coerceComponent(unwrapRef(component), defaultWrapper); + }); + return comp as ShallowRef<Component | JSXFunction | "">; +} +export function computeOptionalComponent( + component: Ref<ProcessedComputable<CoercableComponent | undefined> | undefined>, + defaultWrapper = "div" +): ShallowRef<Component | JSXFunction | "" | null> { + const comp = shallowRef<Component | JSXFunction | "" | null>(null); + watchEffect(() => { + const currComponent = unwrapRef(component); + comp.value = currComponent == null ? null : coerceComponent(currComponent, defaultWrapper); + }); + return comp; +} + +export function wrapRef<T>(ref: Ref<ProcessedComputable<T>>): ComputedRef<T> { + return computed(() => unwrapRef(ref)); +} + +export function unwrapRef<T>(ref: Ref<ProcessedComputable<T>>): T { + return unref<T>(unref(ref)); +} + +export function setRefValue<T>(ref: Ref<T | Ref<T>>, value: T) { + if (isRef(ref.value)) { + ref.value.value = value; + } else { + ref.value = value; + } +} + +type PropTypes = + | typeof Boolean + | typeof String + | typeof Number + | typeof Function + | typeof Object + | typeof Array; +// TODO Unfortunately, the typescript engine gives up on typing completely when you use this method, +// Even though it has the same typing as when doing it manually +export function processedPropType<T>(...types: PropTypes[]): PropType<ProcessedComputable<T>> { + if (!types.includes(Object)) { + types.push(Object); + } + return types as PropType<ProcessedComputable<T>>; +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..0814fa4 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,44 @@ +{ + "compilerOptions": { + "noErrorTruncation": true, + "target": "esnext", + "module": "esnext", + "strict": true, + "checkJs": false, + "jsx": "preserve", + "importHelpers": true, + "moduleResolution": "node", + "resolveJsonModule": true, + "experimentalDecorators": true, + "allowJs": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "sourceMap": true, + "baseUrl": ".", + "types": [ + "webpack-env" + ], + "paths": { + "@/*": [ + "src/*" + ] + }, + "lib": [ + "esnext", + "dom", + "dom.iterable", + "scripthost" + ] + }, + "include": [ + "src/**/*.ts", + "src/**/*.tsx", + "src/**/*.vue", + "tests/**/*.ts", + "tests/**/*.tsx" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/vue.config.js b/vue.config.js new file mode 100644 index 0000000..d5ebdfc --- /dev/null +++ b/vue.config.js @@ -0,0 +1,17 @@ +module.exports = { + publicPath: process.env.NODE_ENV === "production" ? "./" : "/", + runtimeCompiler: true, + chainWebpack(config) { + config.resolve.alias.delete("@"); + config.resolve + .plugin("tsconfig-paths") + // eslint-disable-next-line @typescript-eslint/no-var-requires + .use(require("tsconfig-paths-webpack-plugin")); + // Remove this if/when all "core" code has no non-ignored more type errors + // https://github.com/vuejs/vue-cli/issues/3157#issuecomment-657090338 + config.plugins.delete("fork-ts-checker"); + }, + devServer: { + allowedHosts: "all" + } +};