commit 9f945c4b8ff2a6915245ff4fd1847969caf00adf Author: Fabio Di Stasio Date: Sun Mar 19 18:40:03 2023 +0100 initial commit diff --git a/.all-contributorsrc b/.all-contributorsrc new file mode 100644 index 0000000..7c19102 --- /dev/null +++ b/.all-contributorsrc @@ -0,0 +1,27 @@ +{ + "projectName": "mizar", + "projectOwner": "Fabio286", + "repoType": "github", + "repoHost": "https://github.com", + "files": [ + "README.md" + ], + "imageSize": 100, + "commit": false, + "commitConvention": "angular", + "contributors": [ + { + "login": "Fabio286", + "name": "Fabio Di Stasio", + "avatar_url": "https://avatars.githubusercontent.com/u/31471771?v=4", + "profile": "https://fabiodistasio.it/", + "contributions": [ + "code", + "translation", + "doc" + ] + } + ], + "contributorsPerLine": 7, + "skipCi": true +} diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..b98792d --- /dev/null +++ b/.eslintignore @@ -0,0 +1,5 @@ +node_modules +assets +out +dist +build \ No newline at end of file diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..5e65d39 --- /dev/null +++ b/.eslintrc @@ -0,0 +1,96 @@ +{ + "env": { + "browser": true, + "es6": true, + "node": true + }, + "extends": [ + "standard", + "plugin:@typescript-eslint/recommended", + "plugin:vue/vue3-recommended" + ], + "parser": "vue-eslint-parser", + "parserOptions": { + "parser": "@typescript-eslint/parser", + "ecmaVersion": 9, + "sourceType": "module", + "requireConfigFile": false + }, + "plugins": [ + "vue", + "@typescript-eslint" + ], + "rules": { + "space-infix-ops": "off", + "object-curly-newline": "off", + "indent": [ + "error", + 3, + { + "SwitchCase": 1 + } + ], + "linebreak-style": [ + "error", + "unix" + ], + "brace-style": [ + "error", + "stroustrup" + ], + "quotes": [ + "error", + "single" + ], + "semi": [ + "error", + "always" + ], + "curly": [ + "error", + "multi-or-nest" + ], + "no-console": "off", + "no-undef": "off", + "vue/no-side-effects-in-computed-properties": "off", + "vue/multi-word-component-names": "off", + "vue/require-default-prop": "off", + "vue/comment-directive": "off", + "vue/no-v-html": "off", + "vue/html-indent": [ + "error", + 3, + { + "attribute": 1, + "baseIndent": 1, + "closeBracket": 0, + "ignores": [] + } + ], + "vue/max-attributes-per-line": [ + "error", + { + "singleline": { + "max": 2 + }, + "multiline": { + "max": 1 + } + } + ], + "@typescript-eslint/member-delimiter-style": [ + "warn", + { + "multiline": { + "delimiter": "semi", + "requireLast": true + }, + "singleline": { + "delimiter": "semi", + "requireLast": false + } + } + ], + "@typescript-eslint/no-var-requires": "off" + } +} \ No newline at end of file diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..f7ba7b2 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,6 @@ +* text eol=lf +*.jpg binary +*.png binary +*.gif binary +*.ico binary +*.icns binary \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3ebfb15 --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +.DS_Store +dist +build +misc/* +!misc/.gitkeep +node_modules +thumbs.db +NOTES.md +*.txt +*.heapsnapshot \ No newline at end of file diff --git a/.stylelintrc b/.stylelintrc new file mode 100644 index 0000000..6114a98 --- /dev/null +++ b/.stylelintrc @@ -0,0 +1,18 @@ +{ + "extends": [ + "stylelint-config-standard", + "stylelint-config-recommended-vue" + ], + "fix": true, + "formatter": "verbose", + "plugins": [ + "stylelint-scss" + ], + "rules": { + "at-rule-no-unknown": null, + "no-descending-specificity": null, + "font-family-no-missing-generic-family-keyword": null, + "declaration-colon-newline-after": "always-multi-line" + }, + "syntax": "scss" +} \ No newline at end of file diff --git a/.versionrc.json b/.versionrc.json new file mode 100644 index 0000000..e21157b --- /dev/null +++ b/.versionrc.json @@ -0,0 +1,7 @@ +{ + "types": [ + {"type":"feat","section":"Features"}, + {"type":"perf","section":"Improvements"}, + {"type":"fix","section":"Bug Fixes"} + ] +} \ No newline at end of file diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..c33c928 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,133 @@ + +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, caste, color, religion, or sexual +identity and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +* Focusing on what is best not just for us as individuals, but for the overall + community + +Examples of unacceptable behavior include: + +* The use of sexualized language or imagery, and sexual attention or advances of + any kind +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email address, + without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at +fabio286@gmail.com. +All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series of +actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or permanent +ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within the +community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.1, available at +[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. + +Community Impact Guidelines were inspired by +[Mozilla's code of conduct enforcement ladder][Mozilla CoC]. + +For answers to common questions about this code of conduct, see the FAQ at +[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at +[https://www.contributor-covenant.org/translations][translations]. + +[homepage]: https://www.contributor-covenant.org +[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html +[Mozilla CoC]: https://github.com/mozilla/diversity +[FAQ]: https://www.contributor-covenant.org/faq +[translations]: https://www.contributor-covenant.org/translations diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..1f79c54 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,100 @@ +# Contributors Guide + +Antares SQL is an application based on [Electron.js](https://www.electronjs.org/) that uses [Vue.js](https://vuejs.org/) and [Spectre.css](https://picturepan2.github.io/spectre/) as frontend frameworks. +For the build process it takes advantage of [electron-builder](https://www.electron.build/). +This application uses [Pinia🍍](https://pinia.vuejs.org/) as application state manager and [electron-store](https://github.com/sindresorhus/electron-store) to save the various settings on disc. +This guide aims to provide useful information and guidelines to everyone wants to contribute with this open-source project. +For every other question related to this project please [contact me](https://github.com/Fabio286). + +## Project Structure + +The main files of the application are located inside `src` folder and are groupped in three subfolders. + +### `common` + +This folder contains small libraries, classes and objects. The purpose of `common` folder is to group together utilities used by **renderer** and **main** processes. +Noteworthy is the `customizations` folder that contains clients related customizations. Those settings are merged with `default.js` that lists every option. +Client related customizations are stored on Pinia and can be accessed by `customizations` property of current workspace object, or importing `common/customizations`. + +An use case of customizations object can be the following: + +```js +computed: { + defaultEngine () { + if (this.workspace.customizations.engines) + return this.workspace.engines.find(engine => engine.isDefault).name; + return ''; + } +} +``` + +In this case the computed property `defaultEngine` returns the default engine for MySQL client, or an empty string with PostgreSQL that doesn't have engines. +Customization properties are also useful **if some features are ready for one client but not others**. + +### `main` + +Inside this folder are located all files required by main process. +`ipc-handlers` subfolder includes all IPC handlers for events sent from renderer process. +`libs` subfolder includes classes related to clients and **query and connection logics**. +**Everything above client's class level should be "client agnostic"** with a neutral and uniformed api interface + +### `renderer` + +In this folder is located the structure of Vue frontend application. + +## Build + +The command to build Antares SQL locally is `npm run build`. + +## Conventions + +### Electron + +- **kebab-case** for IPC event names. + +### Vue + +- **PascalCase** for file names (with .vue extension) and including components inside others (``). +- "**Base**" prefix for [base component names](https://vuejs.org/v2/style-guide/#Base-component-names-strongly-recommended). +- "**The**" prefix for [single-instance component names](https://vuejs.org/v2/style-guide/#Single-instance-component-names-strongly-recommended). +- [Tightly coupled component names](https://vuejs.org/v2/style-guide/#Tightly-coupled-component-names-strongly-recommended). +- [Order of words in component names](https://vuejs.org/v2/style-guide/#Order-of-words-in-component-names-strongly-recommended). +- **kebab-case** in templates for property and event names. + +### Code Style + +The project includes [ESlint](https://eslint.org/) and [StyleLint](https://stylelint.io/) config files with style rules. I recommend to set the lint on-save option in your code editor. +Alternatively you can launch following commands to lint the project. + +Check if all the style rules have been followed: + +```console +npm run lint +``` + +Apply style rules globally if possible: + +```console +npm run lint:fix +``` + +### Other recommendations + +Please, use if possible **template literals** to compose strings and **avoid unnecessary dependencies**. + +### Commits + +The commit style adopted for this project is [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/). +Basicly it's important to have **single scoped commits with a prefix** that follows this style because Antares SQL uses [standard-version](https://github.com/conventional-changelog/standard-version) to generate new releases and [CHANGELOG.md](https://github.com/Fabio286/antares/blob/master/CHANGELOG.md) file to track all notable changes. +For Visual Studio Code users may be useful [Conventional Commits](https://marketplace.visualstudio.com/items?itemName=vivaxy.vscode-conventional-commits) extension. + +## Debug + +**Debug mode**: + +```console +npm run debug +``` + +After running the debug mode Antares will listen on port 9222 (main process) for a debugger. +On **Visual Studio Code** just launch "*Electron: Main*" configurations after running Antares in debug mode. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..973e58f --- /dev/null +++ b/LICENSE @@ -0,0 +1,9 @@ +The MIT License (MIT) + +Copyright (c) 2020 Fabio Di Stasio + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..e631120 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,22390 @@ +{ + "name": "mizar", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "mizar", + "version": "1.0.0", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@electron/remote": "~2.0.1", + "@mdi/font": "~7.1.96", + "@vueuse/core": "~8.7.5", + "electron-log": "~4.4.1", + "electron-store": "~8.1.0", + "electron-updater": "~4.6.5", + "electron-window-state": "~5.0.3", + "encoding": "~0.1.13", + "floating-vue": "~2.0.0-beta.20", + "moment": "~2.29.4", + "pinia": "~2.0.28", + "source-map-support": "~0.5.20", + "vue": "~3.2.45", + "vue-i18n": "~9.2.2" + }, + "devDependencies": { + "@babel/eslint-parser": "~7.15.7", + "@babel/preset-env": "~7.15.8", + "@babel/preset-typescript": "~7.16.7", + "@playwright/test": "~1.28.1", + "@types/node": "~17.0.23", + "@typescript-eslint/eslint-plugin": "~5.18.0", + "@typescript-eslint/parser": "~5.18.0", + "@vue/compiler-sfc": "~3.2.33", + "all-contributors-cli": "~6.20.0", + "babel-loader": "~8.2.3", + "chalk": "~4.1.2", + "cross-env": "~7.0.2", + "css-loader": "~6.5.0", + "electron": "~22.0.3", + "electron-builder": "~22.10.3", + "eslint": "~7.32.0", + "eslint-config-standard": "~16.0.3", + "eslint-plugin-import": "~2.24.2", + "eslint-plugin-node": "~11.1.0", + "eslint-plugin-promise": "~5.2.0", + "eslint-plugin-vue": "~8.0.3", + "file-loader": "~6.2.0", + "html-webpack-plugin": "~5.5.0", + "mini-css-extract-plugin": "~2.4.5", + "node-loader": "~2.0.0", + "playwright": "~1.28.1", + "playwright-core": "~1.28.1", + "postcss-html": "~1.5.0", + "progress-webpack-plugin": "~1.0.12", + "rimraf": "~3.0.2", + "sass": "~1.42.1", + "sass-loader": "~12.3.0", + "standard-version": "~9.3.1", + "style-loader": "~3.3.1", + "stylelint": "~14.9.1", + "stylelint-config-recommended-vue": "~1.4.0", + "stylelint-config-standard": "~26.0.0", + "stylelint-scss": "~4.3.0", + "tree-kill": "~1.2.2", + "ts-loader": "~9.2.8", + "typescript": "~4.6.3", + "unzip-crx-3": "~0.2.0", + "vue-eslint-parser": "~8.3.0", + "vue-loader": "~16.8.3", + "webpack": "~5.72.0", + "webpack-cli": "~4.9.1", + "webpack-dev-server": "~4.11.1", + "xvfb-maybe": "~0.2.1" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.20.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.20.5", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-module-transforms": "^7.20.2", + "@babel/helpers": "^7.20.5", + "@babel/parser": "^7.20.5", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.5", + "@babel/types": "^7.20.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/eslint-parser": { + "version": "7.15.8", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-scope": "^5.1.1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.11.0", + "eslint": ">=7.5.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.20.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.5", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.20.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.20.0", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "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.20.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.19.1", + "@babel/helper-split-export-declaration": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.20.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.2.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.2.4", + "dev": true, + "license": "MIT", + "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.18.9", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.19.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.20.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.20.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.19.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.19.1", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.20.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.20.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.19.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.19.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.20.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-function-name": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.5", + "@babel/types": "^7.20.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.20.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.5", + "@babel/types": "^7.20.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.20.5", + "license": "MIT", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-proposal-optional-chaining": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@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.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@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-dynamic-import": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@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.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@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.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@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.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@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.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@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.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@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.20.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.20.1", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@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.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@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.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.20.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.20.5", + "@babel/helper-plugin-utils": "^7.20.2", + "@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.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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-dynamic-import": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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-typescript": { + "version": "7.20.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.20.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.20.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-replace-supers": "^7.19.1", + "@babel/helper-split-export-declaration": "^7.18.6", + "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.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.20.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.18.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.19.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.19.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-simple-access": "^7.19.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.19.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-validator-identifier": "^7.19.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.20.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.20.5", + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.20.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.20.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "regenerator-transform": "^0.15.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.19.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.20.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.20.2", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-typescript": "^7.20.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.18.10", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.15.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.15.0", + "@babel/helper-compilation-targets": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.15.4", + "@babel/plugin-proposal-async-generator-functions": "^7.15.8", + "@babel/plugin-proposal-class-properties": "^7.14.5", + "@babel/plugin-proposal-class-static-block": "^7.15.4", + "@babel/plugin-proposal-dynamic-import": "^7.14.5", + "@babel/plugin-proposal-export-namespace-from": "^7.14.5", + "@babel/plugin-proposal-json-strings": "^7.14.5", + "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", + "@babel/plugin-proposal-numeric-separator": "^7.14.5", + "@babel/plugin-proposal-object-rest-spread": "^7.15.6", + "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", + "@babel/plugin-proposal-optional-chaining": "^7.14.5", + "@babel/plugin-proposal-private-methods": "^7.14.5", + "@babel/plugin-proposal-private-property-in-object": "^7.15.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", + "@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.14.5", + "@babel/plugin-transform-async-to-generator": "^7.14.5", + "@babel/plugin-transform-block-scoped-functions": "^7.14.5", + "@babel/plugin-transform-block-scoping": "^7.15.3", + "@babel/plugin-transform-classes": "^7.15.4", + "@babel/plugin-transform-computed-properties": "^7.14.5", + "@babel/plugin-transform-destructuring": "^7.14.7", + "@babel/plugin-transform-dotall-regex": "^7.14.5", + "@babel/plugin-transform-duplicate-keys": "^7.14.5", + "@babel/plugin-transform-exponentiation-operator": "^7.14.5", + "@babel/plugin-transform-for-of": "^7.15.4", + "@babel/plugin-transform-function-name": "^7.14.5", + "@babel/plugin-transform-literals": "^7.14.5", + "@babel/plugin-transform-member-expression-literals": "^7.14.5", + "@babel/plugin-transform-modules-amd": "^7.14.5", + "@babel/plugin-transform-modules-commonjs": "^7.15.4", + "@babel/plugin-transform-modules-systemjs": "^7.15.4", + "@babel/plugin-transform-modules-umd": "^7.14.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.9", + "@babel/plugin-transform-new-target": "^7.14.5", + "@babel/plugin-transform-object-super": "^7.14.5", + "@babel/plugin-transform-parameters": "^7.15.4", + "@babel/plugin-transform-property-literals": "^7.14.5", + "@babel/plugin-transform-regenerator": "^7.14.5", + "@babel/plugin-transform-reserved-words": "^7.14.5", + "@babel/plugin-transform-shorthand-properties": "^7.14.5", + "@babel/plugin-transform-spread": "^7.15.8", + "@babel/plugin-transform-sticky-regex": "^7.14.5", + "@babel/plugin-transform-template-literals": "^7.14.5", + "@babel/plugin-transform-typeof-symbol": "^7.14.5", + "@babel/plugin-transform-unicode-escapes": "^7.14.5", + "@babel/plugin-transform-unicode-regex": "^7.14.5", + "@babel/preset-modules": "^0.1.4", + "@babel/types": "^7.15.6", + "babel-plugin-polyfill-corejs2": "^0.2.2", + "babel-plugin-polyfill-corejs3": "^0.2.5", + "babel-plugin-polyfill-regenerator": "^0.2.2", + "core-js-compat": "^3.16.0", + "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", + "dev": true, + "license": "MIT", + "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/preset-typescript": { + "version": "7.16.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-transform-typescript": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.20.6", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.18.10", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.20.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.5", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.20.5", + "@babel/types": "^7.20.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.20.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "2.0.2", + "dev": true, + "license": "CC0-1.0", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2", + "postcss-selector-parser": "^6.0.10" + } + }, + "node_modules/@develar/schema-utils": { + "version": "2.6.5", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.0", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@electron/get": { + "version": "2.0.2", + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "env-paths": "^2.2.0", + "fs-extra": "^8.1.0", + "got": "^11.8.5", + "progress": "^2.0.3", + "semver": "^6.2.0", + "sumchecker": "^3.0.1" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "global-agent": "^3.0.0" + } + }, + "node_modules/@electron/get/node_modules/@sindresorhus/is": { + "version": "4.6.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@electron/get/node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "license": "MIT", + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@electron/get/node_modules/cacheable-request": { + "version": "7.0.2", + "license": "MIT", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@electron/get/node_modules/decompress-response": { + "version": "6.0.0", + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@electron/get/node_modules/defer-to-connect": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/@electron/get/node_modules/get-stream": { + "version": "5.2.0", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@electron/get/node_modules/got": { + "version": "11.8.5", + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/@electron/get/node_modules/json-buffer": { + "version": "3.0.1", + "license": "MIT" + }, + "node_modules/@electron/get/node_modules/keyv": { + "version": "4.5.2", + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/@electron/get/node_modules/lowercase-keys": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@electron/get/node_modules/mimic-response": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@electron/get/node_modules/normalize-url": { + "version": "6.1.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@electron/get/node_modules/p-cancelable": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@electron/get/node_modules/responselike": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@electron/remote": { + "version": "2.0.8", + "license": "MIT", + "peerDependencies": { + "electron": ">= 13.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "0.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.18.0", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/sprintf-js": { + "version": "1.0.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@floating-ui/core": { + "version": "0.3.1", + "license": "MIT" + }, + "node_modules/@floating-ui/dom": { + "version": "0.1.10", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^0.3.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.5.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@hutson/parse-repository-url": { + "version": "3.0.2", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@intlify/core-base": { + "version": "9.2.2", + "license": "MIT", + "dependencies": { + "@intlify/devtools-if": "9.2.2", + "@intlify/message-compiler": "9.2.2", + "@intlify/shared": "9.2.2", + "@intlify/vue-devtools": "9.2.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@intlify/devtools-if": { + "version": "9.2.2", + "license": "MIT", + "dependencies": { + "@intlify/shared": "9.2.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@intlify/message-compiler": { + "version": "9.2.2", + "license": "MIT", + "dependencies": { + "@intlify/shared": "9.2.2", + "source-map": "0.6.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@intlify/shared": { + "version": "9.2.2", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/@intlify/vue-devtools": { + "version": "9.2.2", + "license": "MIT", + "dependencies": { + "@intlify/core-base": "9.2.2", + "@intlify/shared": "9.2.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.17", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@mdi/font": { + "version": "7.1.96", + "resolved": "https://registry.npmjs.org/@mdi/font/-/font-7.1.96.tgz", + "integrity": "sha512-Imag6npmfkBDi2Ze2jiZVAPTDIKLxhz2Sx82xJ2zctyAU5LYJejLI5ChnDwiD9bMkQfVuzEsI98Q8toHyC+HCg==" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@playwright/test": { + "version": "1.28.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/node": "*", + "playwright-core": "1.28.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@sindresorhus/is": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.10", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "license": "MIT", + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.3.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/debug": { + "version": "4.1.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.4.10", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "4.17.14", + "dev": true, + "license": "MIT", + "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.31", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "node_modules/@types/fs-extra": { + "version": "9.0.13", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.1", + "license": "MIT" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/mime": { + "version": "3.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/minimist": { + "version": "1.2.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/ms": { + "version": "0.7.31", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "17.0.45", + "license": "MIT" + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/responselike": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/semver": { + "version": "7.3.13", + "license": "MIT" + }, + "node_modules/@types/serve-index": { + "version": "1.9.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.33", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.14", + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "8.5.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "15.0.14", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/yauzl": { + "version": "2.10.0", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.18.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "5.18.0", + "@typescript-eslint/type-utils": "5.18.0", + "@typescript-eslint/utils": "5.18.0", + "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.8", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.18.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "5.18.0", + "@typescript-eslint/types": "5.18.0", + "@typescript-eslint/typescript-estree": "5.18.0", + "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.18.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.18.0", + "@typescript-eslint/visitor-keys": "5.18.0" + }, + "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.18.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "5.18.0", + "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.18.0", + "dev": true, + "license": "MIT", + "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.18.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "5.18.0", + "@typescript-eslint/visitor-keys": "5.18.0", + "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.8", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.18.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.18.0", + "@typescript-eslint/types": "5.18.0", + "@typescript-eslint/typescript-estree": "5.18.0", + "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/visitor-keys": { + "version": "5.18.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.18.0", + "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/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.2.45", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/shared": "3.2.45", + "estree-walker": "^2.0.2", + "source-map": "^0.6.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.2.45", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.2.45", + "@vue/shared": "3.2.45" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.2.45", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.45", + "@vue/compiler-dom": "3.2.45", + "@vue/compiler-ssr": "3.2.45", + "@vue/reactivity-transform": "3.2.45", + "@vue/shared": "3.2.45", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7", + "postcss": "^8.1.10", + "source-map": "^0.6.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.2.45", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.2.45", + "@vue/shared": "3.2.45" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.4.5", + "license": "MIT" + }, + "node_modules/@vue/reactivity": { + "version": "3.2.45", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.2.45" + } + }, + "node_modules/@vue/reactivity-transform": { + "version": "3.2.45", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.45", + "@vue/shared": "3.2.45", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.2.45", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.2.45", + "@vue/shared": "3.2.45" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.2.45", + "license": "MIT", + "dependencies": { + "@vue/runtime-core": "3.2.45", + "@vue/shared": "3.2.45", + "csstype": "^2.6.8" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.2.45", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.2.45", + "@vue/shared": "3.2.45" + }, + "peerDependencies": { + "vue": "3.2.45" + } + }, + "node_modules/@vue/shared": { + "version": "3.2.45", + "license": "MIT" + }, + "node_modules/@vueuse/core": { + "version": "8.7.5", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.14", + "@vueuse/metadata": "8.7.5", + "@vueuse/shared": "8.7.5", + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.1.0", + "vue": "^2.6.0 || ^3.2.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/@vueuse/core/node_modules/@vueuse/shared": { + "version": "8.7.5", + "license": "MIT", + "dependencies": { + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.1.0", + "vue": "^2.6.0 || ^3.2.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/@vueuse/core/node_modules/vue-demi": { + "version": "0.13.11", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@vueuse/metadata": { + "version": "8.7.5", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "peerDependencies": { + "webpack": "4.x.x || 5.x.x", + "webpack-cli": "4.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "envinfo": "^7.7.3" + }, + "peerDependencies": { + "webpack-cli": "4.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "1.7.0", + "dev": true, + "license": "MIT", + "peerDependencies": { + "webpack-cli": "4.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/7zip-bin": { + "version": "5.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/accepts": { + "version": "1.3.8", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "7.4.1", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/add-stream": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/ajv": { + "version": "6.12.6", + "dev": true, + "license": "MIT", + "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", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.11.2", + "license": "MIT", + "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", + "license": "MIT" + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/all-contributors-cli": { + "version": "6.20.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.6", + "async": "^3.1.0", + "chalk": "^4.0.0", + "didyoumean": "^1.2.1", + "inquirer": "^7.3.3", + "json-fixer": "^1.6.8", + "lodash": "^4.11.2", + "node-fetch": "^2.6.0", + "pify": "^5.0.0", + "yargs": "^15.0.1" + }, + "bin": { + "all-contributors": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/app-builder-bin": { + "version": "3.5.10", + "dev": true, + "license": "MIT" + }, + "node_modules/app-builder-lib": { + "version": "22.10.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@develar/schema-utils": "~2.6.5", + "7zip-bin": "~5.0.3", + "async-exit-hook": "^2.0.1", + "bluebird-lst": "^1.0.9", + "builder-util": "22.10.3", + "builder-util-runtime": "8.7.3", + "chromium-pickle-js": "^0.2.0", + "debug": "^4.3.2", + "ejs": "^3.1.5", + "electron-publish": "22.10.3", + "fs-extra": "^9.0.1", + "hosted-git-info": "^3.0.7", + "is-ci": "^2.0.0", + "isbinaryfile": "^4.0.6", + "js-yaml": "^3.14.1", + "lazy-val": "^1.0.4", + "minimatch": "^3.0.4", + "normalize-package-data": "^3.0.0", + "read-config-file": "6.0.0", + "sanitize-filename": "^1.6.3", + "semver": "^7.3.4", + "temp-file": "^3.3.7" + }, + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/app-builder-lib/node_modules/argparse": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/app-builder-lib/node_modules/fs-extra": { + "version": "9.1.0", + "dev": true, + "license": "MIT", + "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/app-builder-lib/node_modules/hosted-git-info": { + "version": "3.0.8", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/app-builder-lib/node_modules/js-yaml": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/app-builder-lib/node_modules/jsonfile": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/app-builder-lib/node_modules/normalize-package-data": { + "version": "3.0.3", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/app-builder-lib/node_modules/normalize-package-data/node_modules/hosted-git-info": { + "version": "4.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/app-builder-lib/node_modules/semver": { + "version": "7.3.8", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/app-builder-lib/node_modules/sprintf-js": { + "version": "1.0.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/app-builder-lib/node_modules/universalify": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "license": "Python-2.0" + }, + "node_modules/array-flatten": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/array-ify": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/array-includes": { + "version": "3.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arrify": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.4", + "dev": true, + "license": "MIT" + }, + "node_modules/async-exit-hook": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/atomically": { + "version": "1.7.0", + "license": "MIT", + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/babel-loader": { + "version": "8.2.5", + "dev": true, + "license": "MIT", + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.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-polyfill-corejs2": { + "version": "0.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.2.4", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.2.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.2.2", + "core-js-compat": "^3.16.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.2.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/batch": { + "version": "0.6.1", + "dev": true, + "license": "MIT" + }, + "node_modules/big.js": { + "version": "5.2.2", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "dev": true, + "license": "MIT" + }, + "node_modules/bluebird-lst": { + "version": "1.0.9", + "dev": true, + "license": "MIT", + "dependencies": { + "bluebird": "^3.5.5" + } + }, + "node_modules/body-parser": { + "version": "1.20.1", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/bonjour-service": { + "version": "1.0.14", + "dev": true, + "license": "MIT", + "dependencies": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/boolean": { + "version": "3.2.0", + "license": "MIT", + "optional": true + }, + "node_modules/boxen": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/type-fest": { + "version": "0.20.2", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/wrap-ansi": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "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/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.4", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "license": "MIT" + }, + "node_modules/builder-util": { + "version": "22.10.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/debug": "^4.1.5", + "@types/fs-extra": "^9.0.5", + "7zip-bin": "~5.0.3", + "app-builder-bin": "3.5.10", + "bluebird-lst": "^1.0.9", + "builder-util-runtime": "8.7.3", + "chalk": "^4.1.0", + "debug": "^4.3.2", + "fs-extra": "^9.0.1", + "is-ci": "^2.0.0", + "js-yaml": "^3.14.1", + "source-map-support": "^0.5.19", + "stat-mode": "^1.0.0", + "temp-file": "^3.3.7" + } + }, + "node_modules/builder-util-runtime": { + "version": "8.7.3", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.2", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=8.2.5" + } + }, + "node_modules/builder-util/node_modules/argparse": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/builder-util/node_modules/fs-extra": { + "version": "9.1.0", + "dev": true, + "license": "MIT", + "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/builder-util/node_modules/js-yaml": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/builder-util/node_modules/jsonfile": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/builder-util/node_modules/sprintf-js": { + "version": "1.0.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/builder-util/node_modules/universalify": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/bytes": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "license": "MIT", + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-keys": { + "version": "6.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-keys/node_modules/camelcase": { + "version": "5.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001436", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "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/chardet": { + "version": "0.7.0", + "dev": true, + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "3.5.3", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "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/chrome-trace-event": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/chromium-pickle-js": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/clean-css": { + "version": "5.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "6.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone-deep/node_modules/is-plain-object": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clone-regexp": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-regexp": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/colord": { + "version": "2.9.3", + "dev": true, + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.19", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "8.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/compare-func": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "node_modules/compare-func/node_modules/dot-prop": { + "version": "5.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/compressible": { + "version": "2.0.18", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/conf": { + "version": "10.2.0", + "license": "MIT", + "dependencies": { + "ajv": "^8.6.3", + "ajv-formats": "^2.1.1", + "atomically": "^1.7.0", + "debounce-fn": "^4.0.0", + "dot-prop": "^6.0.1", + "env-paths": "^2.2.1", + "json-schema-typed": "^7.0.3", + "onetime": "^5.1.2", + "pkg-up": "^3.1.0", + "semver": "^7.3.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/conf/node_modules/ajv": { + "version": "8.11.2", + "license": "MIT", + "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/conf/node_modules/json-schema-traverse": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/conf/node_modules/semver": { + "version": "7.3.8", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/configstore": { + "version": "5.0.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/configstore/node_modules/dot-prop": { + "version": "5.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/configstore/node_modules/write-file-atomic": { + "version": "3.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.2.1", + "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" + } + ], + "license": "MIT" + }, + "node_modules/content-type": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/conventional-changelog": { + "version": "3.1.24", + "dev": true, + "license": "MIT", + "dependencies": { + "conventional-changelog-angular": "^5.0.12", + "conventional-changelog-atom": "^2.0.8", + "conventional-changelog-codemirror": "^2.0.8", + "conventional-changelog-conventionalcommits": "^4.5.0", + "conventional-changelog-core": "^4.2.1", + "conventional-changelog-ember": "^2.0.9", + "conventional-changelog-eslint": "^3.0.9", + "conventional-changelog-express": "^2.0.6", + "conventional-changelog-jquery": "^3.0.11", + "conventional-changelog-jshint": "^2.0.9", + "conventional-changelog-preset-loader": "^2.3.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-angular": { + "version": "5.0.13", + "dev": true, + "license": "ISC", + "dependencies": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-atom": { + "version": "2.0.8", + "dev": true, + "license": "ISC", + "dependencies": { + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-codemirror": { + "version": "2.0.8", + "dev": true, + "license": "ISC", + "dependencies": { + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-config-spec": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/conventional-changelog-conventionalcommits": { + "version": "4.6.1", + "dev": true, + "license": "ISC", + "dependencies": { + "compare-func": "^2.0.0", + "lodash": "^4.17.15", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-core": { + "version": "4.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "add-stream": "^1.0.0", + "conventional-changelog-writer": "^5.0.0", + "conventional-commits-parser": "^3.2.0", + "dateformat": "^3.0.0", + "get-pkg-repo": "^4.0.0", + "git-raw-commits": "^2.0.8", + "git-remote-origin-url": "^2.0.0", + "git-semver-tags": "^4.1.1", + "lodash": "^4.17.15", + "normalize-package-data": "^3.0.0", + "q": "^1.5.1", + "read-pkg": "^3.0.0", + "read-pkg-up": "^3.0.0", + "through2": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-core/node_modules/normalize-package-data": { + "version": "3.0.3", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-core/node_modules/semver": { + "version": "7.3.8", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-ember": { + "version": "2.0.9", + "dev": true, + "license": "ISC", + "dependencies": { + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-eslint": { + "version": "3.0.9", + "dev": true, + "license": "ISC", + "dependencies": { + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-express": { + "version": "2.0.6", + "dev": true, + "license": "ISC", + "dependencies": { + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-jquery": { + "version": "3.0.11", + "dev": true, + "license": "ISC", + "dependencies": { + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-jshint": { + "version": "2.0.9", + "dev": true, + "license": "ISC", + "dependencies": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-preset-loader": { + "version": "2.3.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-writer": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "conventional-commits-filter": "^2.0.7", + "dateformat": "^3.0.0", + "handlebars": "^4.7.7", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "semver": "^6.0.0", + "split": "^1.0.0", + "through2": "^4.0.0" + }, + "bin": { + "conventional-changelog-writer": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-commits-filter": { + "version": "2.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-commits-parser": { + "version": "3.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "conventional-commits-parser": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-commits-parser/node_modules/readable-stream": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/conventional-commits-parser/node_modules/split2": { + "version": "3.2.2", + "dev": true, + "license": "ISC", + "dependencies": { + "readable-stream": "^3.0.0" + } + }, + "node_modules/conventional-recommended-bump": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "concat-stream": "^2.0.0", + "conventional-changelog-preset-loader": "^2.3.4", + "conventional-commits-filter": "^2.0.7", + "conventional-commits-parser": "^3.2.0", + "git-raw-commits": "^2.0.8", + "git-semver-tags": "^4.1.1", + "meow": "^8.0.0", + "q": "^1.5.1" + }, + "bin": { + "conventional-recommended-bump": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-recommended-bump/node_modules/concat-stream": { + "version": "2.0.0", + "dev": true, + "engines": [ + "node >= 6.0" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/conventional-recommended-bump/node_modules/readable-stream": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/cookie": { + "version": "0.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/core-js-compat": { + "version": "3.26.1", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "dev": true, + "license": "MIT", + "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/cosmiconfig/node_modules/parse-json": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "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/cross-env": { + "version": "7.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/css-functions-list": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.22" + } + }, + "node_modules/css-loader": { + "version": "6.5.1", + "dev": true, + "license": "MIT", + "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.8", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-select/node_modules/dom-serializer": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "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/css-select/node_modules/domhandler": { + "version": "4.3.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/css-select/node_modules/domutils": { + "version": "2.8.0", + "dev": true, + "license": "BSD-2-Clause", + "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/css-select/node_modules/entities": { + "version": "2.2.0", + "dev": true, + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "2.6.21", + "license": "MIT" + }, + "node_modules/dargs": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/dateformat": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/debounce-fn": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "mimic-fn": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/decamelize": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress-response": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/defer-to-connect": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.1.4", + "devOptional": true, + "license": "MIT", + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-indent": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "devOptional": true, + "license": "MIT" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dmg-builder": { + "version": "22.10.3", + "dev": true, + "license": "MIT", + "dependencies": { + "app-builder-lib": "22.10.3", + "builder-util": "22.10.3", + "fs-extra": "^9.0.1", + "iconv-lite": "^0.6.2", + "js-yaml": "^3.14.1", + "sanitize-filename": "^1.6.3" + }, + "optionalDependencies": { + "dmg-license": "^1.0.8" + } + }, + "node_modules/dmg-builder/node_modules/argparse": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/dmg-builder/node_modules/fs-extra": { + "version": "9.1.0", + "dev": true, + "license": "MIT", + "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/dmg-builder/node_modules/js-yaml": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/dmg-builder/node_modules/jsonfile": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/dmg-builder/node_modules/sprintf-js": { + "version": "1.0.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/dmg-builder/node_modules/universalify": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/dns-packet": { + "version": "5.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.0.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.1" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dot-prop": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/dotgitignore": { + "version": "2.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "find-up": "^3.0.0", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dotgitignore/node_modules/find-up": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dotgitignore/node_modules/locate-path": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dotgitignore/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dotgitignore/node_modules/p-locate": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dotgitignore/node_modules/p-try": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/duplexer3": { + "version": "0.1.5", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/ejs": { + "version": "3.1.8", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron": { + "version": "22.0.3", + "resolved": "https://registry.npmjs.org/electron/-/electron-22.0.3.tgz", + "integrity": "sha512-eETrJTINTzlXgQrnJSrKiF2Xdt5EHpxZ6Kk+WUjFCE0zUztdVm+hrngUecqhj8TPFlYScTANzPwRwUIjOChl+g==", + "hasInstallScript": true, + "dependencies": { + "@electron/get": "^2.0.0", + "@types/node": "^16.11.26", + "extract-zip": "^2.0.1" + }, + "bin": { + "electron": "cli.js" + }, + "engines": { + "node": ">= 12.20.55" + } + }, + "node_modules/electron-builder": { + "version": "22.10.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs": "^15.0.11", + "app-builder-lib": "22.10.3", + "bluebird-lst": "^1.0.9", + "builder-util": "22.10.3", + "builder-util-runtime": "8.7.3", + "chalk": "^4.1.0", + "dmg-builder": "22.10.3", + "fs-extra": "^9.0.1", + "is-ci": "^2.0.0", + "lazy-val": "^1.0.4", + "read-config-file": "6.0.0", + "sanitize-filename": "^1.6.3", + "update-notifier": "^5.0.1", + "yargs": "^16.2.0" + }, + "bin": { + "electron-builder": "out/cli/cli.js", + "install-app-deps": "out/cli/install-app-deps.js" + }, + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/electron-builder/node_modules/cliui": { + "version": "7.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/electron-builder/node_modules/fs-extra": { + "version": "9.1.0", + "dev": true, + "license": "MIT", + "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/electron-builder/node_modules/jsonfile": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/electron-builder/node_modules/universalify": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/electron-builder/node_modules/wrap-ansi": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "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/electron-builder/node_modules/y18n": { + "version": "5.0.8", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/electron-builder/node_modules/yargs": { + "version": "16.2.0", + "dev": true, + "license": "MIT", + "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/electron-log": { + "version": "4.4.8", + "license": "MIT" + }, + "node_modules/electron-publish": { + "version": "22.10.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/fs-extra": "^9.0.5", + "bluebird-lst": "^1.0.9", + "builder-util": "22.10.3", + "builder-util-runtime": "8.7.3", + "chalk": "^4.1.0", + "fs-extra": "^9.0.1", + "lazy-val": "^1.0.4", + "mime": "^2.4.6" + } + }, + "node_modules/electron-publish/node_modules/fs-extra": { + "version": "9.1.0", + "dev": true, + "license": "MIT", + "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/electron-publish/node_modules/jsonfile": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/electron-publish/node_modules/mime": { + "version": "2.6.0", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/electron-publish/node_modules/universalify": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/electron-store": { + "version": "8.1.0", + "license": "MIT", + "dependencies": { + "conf": "^10.2.0", + "type-fest": "^2.17.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.284", + "dev": true, + "license": "ISC" + }, + "node_modules/electron-updater": { + "version": "4.6.5", + "license": "MIT", + "dependencies": { + "@types/semver": "^7.3.6", + "builder-util-runtime": "8.9.2", + "fs-extra": "^10.0.0", + "js-yaml": "^4.1.0", + "lazy-val": "^1.0.5", + "lodash.escaperegexp": "^4.1.2", + "lodash.isequal": "^4.5.0", + "semver": "^7.3.5" + } + }, + "node_modules/electron-updater/node_modules/builder-util-runtime": { + "version": "8.9.2", + "license": "MIT", + "dependencies": { + "debug": "^4.3.2", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/electron-updater/node_modules/fs-extra": { + "version": "10.1.0", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/electron-updater/node_modules/jsonfile": { + "version": "6.1.0", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/electron-updater/node_modules/semver": { + "version": "7.3.8", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/electron-updater/node_modules/universalify": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/electron-window-state": { + "version": "5.0.3", + "license": "MIT", + "dependencies": { + "jsonfile": "^4.0.0", + "mkdirp": "^0.5.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/electron/node_modules/@types/node": { + "version": "16.18.4", + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "license": "MIT", + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.12.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/entities": { + "version": "4.4.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/envinfo": { + "version": "7.8.1", + "dev": true, + "license": "MIT", + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.20.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-module-lexer": { + "version": "0.9.3", + "dev": true, + "license": "MIT" + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es6-error": { + "version": "4.1.1", + "license": "MIT", + "optional": true + }, + "node_modules/escalade": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-goat": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "7.32.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-standard": { + "version": "16.0.3", + "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" + } + ], + "license": "MIT", + "peerDependencies": { + "eslint": "^7.12.1", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-promise": "^4.2.1 || ^5.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.6", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.7.4", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-es": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-es/node_modules/eslint-utils": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-plugin-es/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.24.2", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.3", + "array.prototype.flat": "^1.2.4", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.6.2", + "find-up": "^2.0.0", + "has": "^1.0.3", + "is-core-module": "^2.6.0", + "minimatch": "^3.0.4", + "object.values": "^1.1.4", + "pkg-up": "^2.0.0", + "read-pkg-up": "^3.0.0", + "resolve": "^1.20.0", + "tsconfig-paths": "^3.11.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-plugin-import/node_modules/pkg-up": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-plugin-node": { + "version": "11.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "peerDependencies": { + "eslint": ">=5.16.0" + } + }, + "node_modules/eslint-plugin-node/node_modules/eslint-utils": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-plugin-node/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-plugin-promise": { + "version": "5.2.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "peerDependencies": { + "eslint": "^7.0.0" + } + }, + "node_modules/eslint-plugin-vue": { + "version": "8.0.3", + "dev": true, + "license": "MIT", + "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.8", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "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-visitor-keys": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/@babel/code-frame": { + "version": "7.12.11", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/eslint/node_modules/argparse": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/eslint/node_modules/eslint-utils": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.18.0", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/ignore": { + "version": "4.0.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/node_modules/semver": { + "version": "7.3.8", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/sprintf-js": { + "version": "1.0.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "7.3.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "dev": true, + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "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/execa/node_modules/get-stream": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/execall": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-regexp": "^2.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/express": { + "version": "4.18.2", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "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", + "dev": true, + "license": "MIT" + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/express/node_modules/safe-buffer": { + "version": "5.2.1", + "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" + } + ], + "license": "MIT" + }, + "node_modules/external-editor": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/external-editor/node_modules/iconv-lite": { + "version": "0.4.24", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "license": "BSD-2-Clause", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extract-zip/node_modules/get-stream": { + "version": "5.2.0", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "dev": true, + "license": "MIT", + "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-json-stable-stringify": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fastq": { + "version": "1.14.0", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "dev": true, + "license": "MIT", + "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/file-loader/node_modules/schema-utils": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "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/filelist": { + "version": "1.0.4", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "dev": true, + "license": "MIT", + "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": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "dev": true, + "license": "ISC" + }, + "node_modules/floating-vue": { + "version": "2.0.0-beta.20", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^0.1.10", + "vue-resize": "^2.0.0-alpha.1" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-access": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "null-check": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.3", + "dev": true, + "license": "Unlicense" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/function-bind": { + "version": "1.1.1", + "devOptional": true, + "license": "MIT" + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.3", + "devOptional": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-pkg-repo": { + "version": "4.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@hutson/parse-repository-url": "^3.0.0", + "hosted-git-info": "^4.0.0", + "through2": "^2.0.0", + "yargs": "^16.2.0" + }, + "bin": { + "get-pkg-repo": "src/cli.js" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-pkg-repo/node_modules/cliui": { + "version": "7.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/get-pkg-repo/node_modules/through2": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/get-pkg-repo/node_modules/wrap-ansi": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "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/get-pkg-repo/node_modules/y18n": { + "version": "5.0.8", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/get-pkg-repo/node_modules/yargs": { + "version": "16.2.0", + "dev": true, + "license": "MIT", + "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/get-stdin": { + "version": "8.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/git-raw-commits": { + "version": "2.0.11", + "dev": true, + "license": "MIT", + "dependencies": { + "dargs": "^7.0.0", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "git-raw-commits": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/git-raw-commits/node_modules/readable-stream": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/git-raw-commits/node_modules/split2": { + "version": "3.2.2", + "dev": true, + "license": "ISC", + "dependencies": { + "readable-stream": "^3.0.0" + } + }, + "node_modules/git-remote-origin-url": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "gitconfiglocal": "^1.0.0", + "pify": "^2.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/git-remote-origin-url/node_modules/pify": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/git-semver-tags": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "meow": "^8.0.0", + "semver": "^6.0.0" + }, + "bin": { + "git-semver-tags": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gitconfiglocal": { + "version": "1.0.0", + "dev": true, + "license": "BSD", + "dependencies": { + "ini": "^1.3.2" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/global-agent": { + "version": "3.0.0", + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/global-agent/node_modules/semver": { + "version": "7.3.8", + "license": "ISC", + "optional": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/global-dirs": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/global-dirs/node_modules/ini": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/global-modules": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "license": "MIT", + "optional": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "dev": true, + "license": "MIT", + "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/globjoin": { + "version": "0.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/got": { + "version": "9.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "license": "ISC" + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/handlebars": { + "version": "4.7.7", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "devOptional": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "devOptional": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-yarn": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/hash-sum": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/he": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/html-entities": { + "version": "2.3.3", + "dev": true, + "license": "MIT" + }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "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.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "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/htmlparser2": { + "version": "8.0.1", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "entities": "^4.3.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "license": "BSD-2-Clause" + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "dev": true, + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "dev": true, + "license": "MIT" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "dev": true, + "license": "MIT", + "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.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "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" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/http2-wrapper/node_modules/quick-lru": { + "version": "5.1.1", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ignore": { + "version": "5.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-lazy": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "dev": true, + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "dev": true, + "license": "ISC" + }, + "node_modules/inquirer": { + "version": "7.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/interpret": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/ipaddr.js": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "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-callable": { + "version": "1.2.7", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ci": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-ci/node_modules/ci-info": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/is-core-module": { + "version": "2.11.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-installed-globally": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-npm": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "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-regexp": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-text-path": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "text-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-wsl/node_modules/is-docker": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-yarn-global": { + "version": "0.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/isarray": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/isbinaryfile": { + "version": "4.0.10", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jake": { + "version": "10.8.5", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/json-fixer": { + "version": "1.6.15", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.9", + "chalk": "^4.1.2", + "pegjs": "^0.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-typed": { + "version": "7.0.3", + "license": "BSD-2-Clause" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "devOptional": true, + "license": "ISC" + }, + "node_modules/json5": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "dev": true, + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" + }, + "node_modules/JSONStream": { + "version": "1.3.5", + "dev": true, + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jszip": { + "version": "3.10.1", + "dev": true, + "license": "(MIT OR GPL-3.0-or-later)", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/keyv": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klona": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/known-css-properties": { + "version": "0.25.0", + "dev": true, + "license": "MIT" + }, + "node_modules/latest-version": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "package-json": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lazy-val": { + "version": "1.0.5", + "license": "MIT" + }, + "node_modules/levn": { + "version": "0.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lie": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "dev": true, + "license": "MIT" + }, + "node_modules/load-json-file": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/pify": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/locate-path": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.escaperegexp": { + "version": "4.1.2", + "license": "MIT" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "license": "MIT" + }, + "node_modules/lodash.ismatch": { + "version": "4.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "dev": true, + "license": "MIT" + }, + "node_modules/log-update": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "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-escapes": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/cli-cursor": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/mimic-fn": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/onetime": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/restore-cursor": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/magic-string": { + "version": "0.25.9", + "license": "MIT", + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/map-obj": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/matcher": { + "version": "3.0.0", + "license": "MIT", + "optional": true, + "dependencies": { + "escape-string-regexp": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mathml-tag-names": { + "version": "2.1.3", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.4.12", + "dev": true, + "license": "Unlicense", + "dependencies": { + "fs-monkey": "^1.0.3" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/meow": { + "version": "8.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/normalize-package-data": { + "version": "3.0.3", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/meow/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/p-try": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/meow/node_modules/parse-json": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "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/meow/node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/read-pkg": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "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/meow/node_modules/read-pkg-up": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "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/meow/node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "dev": true, + "license": "ISC" + }, + "node_modules/meow/node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "dev": true, + "license": "BSD-2-Clause", + "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/meow/node_modules/read-pkg/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/meow/node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/semver": { + "version": "7.3.8", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/meow/node_modules/type-fest": { + "version": "0.18.1", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.4.7", + "dev": true, + "license": "MIT", + "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.11.2", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT" + }, + "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "ISC" + }, + "node_modules/minimatch": { + "version": "3.0.8", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.7", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minimist-options": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/modify-values": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/moment": { + "version": "2.29.4", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "dev": true, + "license": "MIT", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "dev": true, + "license": "ISC" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "dev": true, + "license": "MIT" + }, + "node_modules/no-case": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "dev": true, + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-loader": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "dev": true, + "license": "BSD-2-Clause", + "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/hosted-git-info": { + "version": "2.8.9", + "dev": true, + "license": "ISC" + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "4.5.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/null-check": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/onetime/node_modules/mimic-fn": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/open": { + "version": "8.4.0", + "dev": true, + "license": "MIT", + "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/open/node_modules/is-docker": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "dev": true, + "license": "MIT", + "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/os-tmpdir": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-cancelable": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/p-limit": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-locate": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry/node_modules/retry": { + "version": "0.13.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/p-try": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/package-json": { + "version": "6.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "dev": true, + "license": "(MIT AND Zlib)" + }, + "node_modules/param-case": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "dev": true, + "license": "MIT" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "dev": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pegjs": { + "version": "0.10.0", + "dev": true, + "license": "MIT", + "bin": { + "pegjs": "bin/pegjs" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.0.0", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pinia": { + "version": "2.0.28", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.4.5", + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "@vue/composition-api": "^1.4.0", + "typescript": ">=4.4.4", + "vue": "^2.6.14 || ^3.2.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/pinia/node_modules/vue-demi": { + "version": "0.13.11", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-try": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up/node_modules/find-up": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/locate-path": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-up/node_modules/p-locate": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/p-try": { + "version": "2.2.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/playwright": { + "version": "1.28.1", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.28.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/playwright-core": { + "version": "1.28.1", + "dev": true, + "license": "Apache-2.0", + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/postcss": { + "version": "8.4.19", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-html": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "htmlparser2": "^8.0.0", + "js-tokens": "^8.0.0", + "postcss": "^8.4.0", + "postcss-safe-parser": "^6.0.0" + }, + "engines": { + "node": "^12 || >=14" + } + }, + "node_modules/postcss-html/node_modules/js-tokens": { + "version": "8.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/postcss-media-query-parser": { + "version": "0.2.3", + "dev": true, + "license": "MIT" + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "ISC", + "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", + "dev": true, + "license": "ISC", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-resolve-nested-selector": { + "version": "0.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/postcss-safe-parser": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.11", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/postcss/node_modules/nanoid": { + "version": "3.3.4", + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prepend-http": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/pretty-error": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/progress": { + "version": "2.0.3", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/progress-webpack-plugin": { + "version": "1.0.16", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^2.1.0", + "figures": "^2.0.0", + "log-update": "^2.3.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "peerDependencies": { + "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0" + } + }, + "node_modules/progress-webpack-plugin/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/progress-webpack-plugin/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/progress-webpack-plugin/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/progress-webpack-plugin/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/progress-webpack-plugin/node_modules/escape-string-regexp": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/progress-webpack-plugin/node_modules/figures": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/progress-webpack-plugin/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/progress-webpack-plugin/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pump": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pupa": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-goat": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/q": { + "version": "1.5.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "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" + } + ], + "license": "MIT" + }, + "node_modules/quick-lru": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.4.24", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "dev": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-config-file": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "dotenv": "^8.2.0", + "dotenv-expand": "^5.1.0", + "js-yaml": "^3.13.1", + "json5": "^2.1.2", + "lazy-val": "^1.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/read-config-file/node_modules/argparse": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/read-config-file/node_modules/dotenv": { + "version": "8.6.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=10" + } + }, + "node_modules/read-config-file/node_modules/js-yaml": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/read-config-file/node_modules/sprintf-js": { + "version": "1.0.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/read-pkg": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/path-type": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/pify": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "dev": true, + "license": "MIT", + "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/readdirp": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.7.1", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve": "^1.9.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerator-transform": { + "version": "0.15.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/regexpu-core": { + "version": "5.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsgen": "^0.7.1", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/registry-auth-token": { + "version": "4.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "rc": "1.2.8" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/registry-url": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/regjsgen": { + "version": "0.7.1", + "dev": true, + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/renderkid": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "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/renderkid/node_modules/dom-serializer": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "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/renderkid/node_modules/domhandler": { + "version": "4.3.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/domutils": { + "version": "2.8.0", + "dev": true, + "license": "BSD-2-Clause", + "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/renderkid/node_modules/entities": { + "version": "2.2.0", + "dev": true, + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/htmlparser2": { + "version": "6.1.0", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/requires-port": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.9.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-alpn": { + "version": "1.2.1", + "license": "MIT" + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/responselike": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/roarr": { + "version": "2.15.4", + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "detect-node": "^2.0.4", + "globalthis": "^1.0.1", + "json-stringify-safe": "^5.0.1", + "semver-compare": "^1.0.0", + "sprintf-js": "^1.1.2" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "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" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "6.6.7", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "1.14.1", + "dev": true, + "license": "0BSD" + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/sanitize-filename": { + "version": "1.6.3", + "dev": true, + "license": "WTFPL OR ISC", + "dependencies": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "node_modules/sass": { + "version": "1.42.1", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/sass-loader": { + "version": "12.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 12.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": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/sax": { + "version": "1.2.4", + "license": "ISC" + }, + "node_modules/schema-utils": { + "version": "2.7.1", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT" + }, + "node_modules/selfsigned": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "6.3.0", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "license": "MIT", + "optional": true + }, + "node_modules/semver-diff": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/send": { + "version": "0.18.0", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/serialize-error": { + "version": "7.0.1", + "license": "MIT", + "optional": true, + "dependencies": { + "type-fest": "^0.13.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/serialize-error/node_modules/type-fest": { + "version": "0.13.1", + "license": "(MIT OR CC0-1.0)", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "ISC" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "dev": true, + "license": "ISC" + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "dev": true, + "license": "MIT", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "dev": true, + "license": "ISC" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "dev": true, + "license": "ISC" + }, + "node_modules/slash": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "dev": true, + "license": "MIT", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "license": "MIT" + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.12", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/spdy": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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/spdy-transport/node_modules/readable-stream": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/split": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/sprintf-js": { + "version": "1.1.2", + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/standard-version": { + "version": "9.3.2", + "dev": true, + "license": "ISC", + "dependencies": { + "chalk": "^2.4.2", + "conventional-changelog": "3.1.24", + "conventional-changelog-config-spec": "2.1.0", + "conventional-changelog-conventionalcommits": "4.6.1", + "conventional-recommended-bump": "6.1.0", + "detect-indent": "^6.0.0", + "detect-newline": "^3.1.0", + "dotgitignore": "^2.1.0", + "figures": "^3.1.0", + "find-up": "^5.0.0", + "fs-access": "^1.0.1", + "git-semver-tags": "^4.0.0", + "semver": "^7.1.1", + "stringify-package": "^1.0.1", + "yargs": "^16.0.0" + }, + "bin": { + "standard-version": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/standard-version/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/standard-version/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/standard-version/node_modules/cliui": { + "version": "7.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/standard-version/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/standard-version/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/standard-version/node_modules/escape-string-regexp": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/standard-version/node_modules/find-up": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/standard-version/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/standard-version/node_modules/locate-path": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/standard-version/node_modules/p-limit": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/standard-version/node_modules/p-locate": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/standard-version/node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/standard-version/node_modules/semver": { + "version": "7.3.8", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/standard-version/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/standard-version/node_modules/wrap-ansi": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "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/standard-version/node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/standard-version/node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/standard-version/node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/standard-version/node_modules/y18n": { + "version": "5.0.8", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/standard-version/node_modules/yargs": { + "version": "16.2.0", + "dev": true, + "license": "MIT", + "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/stat-mode": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringify-package": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-loader": { + "version": "3.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/style-search": { + "version": "0.1.0", + "dev": true, + "license": "ISC" + }, + "node_modules/stylelint": { + "version": "14.9.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@csstools/selector-specificity": "^2.0.1", + "balanced-match": "^2.0.0", + "colord": "^2.9.2", + "cosmiconfig": "^7.0.1", + "css-functions-list": "^3.1.0", + "debug": "^4.3.4", + "execall": "^2.0.0", + "fast-glob": "^3.2.11", + "fastest-levenshtein": "^1.0.12", + "file-entry-cache": "^6.0.1", + "get-stdin": "^8.0.0", + "global-modules": "^2.0.0", + "globby": "^11.1.0", + "globjoin": "^0.1.4", + "html-tags": "^3.2.0", + "ignore": "^5.2.0", + "import-lazy": "^4.0.0", + "imurmurhash": "^0.1.4", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.25.0", + "mathml-tag-names": "^2.1.3", + "meow": "^9.0.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.14", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-safe-parser": "^6.0.0", + "postcss-selector-parser": "^6.0.10", + "postcss-value-parser": "^4.2.0", + "resolve-from": "^5.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "style-search": "^0.1.0", + "supports-hyperlinks": "^2.2.0", + "svg-tags": "^1.0.0", + "table": "^6.8.0", + "v8-compile-cache": "^2.3.0", + "write-file-atomic": "^4.0.1" + }, + "bin": { + "stylelint": "bin/stylelint.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + } + }, + "node_modules/stylelint-config-html": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12 || >=14" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "postcss-html": "^1.0.0", + "stylelint": ">=14.0.0" + } + }, + "node_modules/stylelint-config-recommended": { + "version": "8.0.0", + "dev": true, + "license": "MIT", + "peerDependencies": { + "stylelint": "^14.8.0" + } + }, + "node_modules/stylelint-config-recommended-vue": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.3.5", + "stylelint-config-html": ">=1.0.0", + "stylelint-config-recommended": ">=6.0.0" + }, + "engines": { + "node": "^12 || >=14" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "postcss-html": "^1.0.0", + "stylelint": ">=14.0.0" + } + }, + "node_modules/stylelint-config-recommended-vue/node_modules/semver": { + "version": "7.3.8", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stylelint-config-recommended-vue/node_modules/stylelint-config-recommended": { + "version": "9.0.0", + "dev": true, + "license": "MIT", + "peerDependencies": { + "stylelint": "^14.10.0" + } + }, + "node_modules/stylelint-config-standard": { + "version": "26.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "stylelint-config-recommended": "^8.0.0" + }, + "peerDependencies": { + "stylelint": "^14.9.0" + } + }, + "node_modules/stylelint-scss": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.17.21", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-selector-parser": "^6.0.6", + "postcss-value-parser": "^4.1.0" + }, + "peerDependencies": { + "stylelint": "^14.5.1" + } + }, + "node_modules/stylelint/node_modules/balanced-match": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/stylelint/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/stylelint/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/stylelint/node_modules/meow": { + "version": "9.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylelint/node_modules/normalize-package-data": { + "version": "3.0.3", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stylelint/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylelint/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/stylelint/node_modules/p-try": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/stylelint/node_modules/parse-json": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "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/stylelint/node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/stylelint/node_modules/read-pkg": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "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/stylelint/node_modules/read-pkg-up": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "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/stylelint/node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/stylelint/node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "dev": true, + "license": "ISC" + }, + "node_modules/stylelint/node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "dev": true, + "license": "BSD-2-Clause", + "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/stylelint/node_modules/read-pkg/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/stylelint/node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/stylelint/node_modules/resolve-from": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/stylelint/node_modules/semver": { + "version": "7.3.8", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stylelint/node_modules/type-fest": { + "version": "0.18.1", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sumchecker": { + "version": "3.0.1", + "license": "Apache-2.0", + "dependencies": { + "debug": "^4.1.0" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-tags": { + "version": "1.0.0", + "dev": true + }, + "node_modules/table": { + "version": "6.8.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.11.2", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/table/node_modules/slice-ansi": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/temp-file": { + "version": "3.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "async-exit-hook": "^2.0.1", + "fs-extra": "^10.0.0" + } + }, + "node_modules/temp-file/node_modules/fs-extra": { + "version": "10.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/temp-file/node_modules/jsonfile": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/temp-file/node_modules/universalify": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/terser": { + "version": "5.16.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.14", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.14.1" + }, + "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/jest-worker": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "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/serialize-javascript": { + "version": "6.0.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/terser/node_modules/acorn": { + "version": "8.8.1", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "dev": true, + "license": "MIT" + }, + "node_modules/text-extensions": { + "version": "1.9.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/through": { + "version": "2.3.8", + "dev": true, + "license": "MIT" + }, + "node_modules/through2": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/tmp": { + "version": "0.0.33", + "dev": true, + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-readable-stream": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/trim-newlines": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/truncate-utf8-bytes": { + "version": "1.0.2", + "dev": true, + "license": "WTFPL", + "dependencies": { + "utf8-byte-length": "^1.0.1" + } + }, + "node_modules/ts-loader": { + "version": "9.2.9", + "dev": true, + "license": "MIT", + "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/semver": { + "version": "7.3.8", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tslib": { + "version": "2.4.1", + "dev": true, + "license": "0BSD" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "2.19.0", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "dev": true, + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.6.4", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/uglify-js": { + "version": "3.17.4", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "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.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unzip-crx-3": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "jszip": "^3.1.0", + "mkdirp": "^0.5.1", + "yaku": "^0.16.6" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.10", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/update-notifier": { + "version": "5.1.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" + } + }, + "node_modules/update-notifier/node_modules/import-lazy": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/update-notifier/node_modules/semver": { + "version": "7.3.8", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/utf8-byte-length": { + "version": "1.0.4", + "dev": true, + "license": "WTFPL" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/utila": { + "version": "0.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vue": { + "version": "3.2.45", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.2.45", + "@vue/compiler-sfc": "3.2.45", + "@vue/runtime-dom": "3.2.45", + "@vue/server-renderer": "3.2.45", + "@vue/shared": "3.2.45" + } + }, + "node_modules/vue-eslint-parser": { + "version": "8.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.2", + "eslint-scope": "^7.0.0", + "eslint-visitor-keys": "^3.1.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/acorn": { + "version": "8.8.1", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/eslint-scope": { + "version": "7.1.1", + "dev": true, + "license": "BSD-2-Clause", + "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/eslint-visitor-keys": { + "version": "3.3.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/espree": { + "version": "9.4.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/vue-eslint-parser/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/semver": { + "version": "7.3.8", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/vue-i18n": { + "version": "9.2.2", + "license": "MIT", + "dependencies": { + "@intlify/core-base": "9.2.2", + "@intlify/shared": "9.2.2", + "@intlify/vue-devtools": "9.2.2", + "@vue/devtools-api": "^6.2.1" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/vue-loader": { + "version": "16.8.3", + "dev": true, + "license": "MIT", + "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-resize": { + "version": "2.0.0-alpha.1", + "license": "MIT", + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "dev": true, + "license": "MIT", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/webpack": { + "version": "5.72.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@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.9.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-even-better-errors": "^2.3.1", + "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.3" + }, + "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-cli": { + "version": "4.9.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.1.1", + "@webpack-cli/info": "^1.4.1", + "@webpack-cli/serve": "^1.6.1", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "execa": "^5.0.0", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "@webpack-cli/migrate": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "5.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "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.11.2", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "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.11.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.4.2" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ajv": { + "version": "8.11.2", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "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-merge": { + "version": "5.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/@types/estree": { + "version": "0.0.51", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack/node_modules/acorn": { + "version": "8.8.1", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/webpack/node_modules/acorn-import-assertions": { + "version": "1.8.0", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "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/websocket-driver": { + "version": "0.7.4", + "dev": true, + "license": "Apache-2.0", + "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", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/widest-line": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wildcard": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/ws": { + "version": "8.4.2", + "dev": true, + "license": "MIT", + "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/xdg-basedir": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/xvfb-maybe": { + "version": "0.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^2.2.0", + "which": "^1.2.4" + }, + "bin": { + "xvfb-maybe": "src/xvfb-maybe.js" + } + }, + "node_modules/xvfb-maybe/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/xvfb-maybe/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/xvfb-maybe/node_modules/which": { + "version": "1.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "dev": true, + "license": "ISC" + }, + "node_modules/yaku": { + "version": "0.16.7", + "dev": true, + "license": "MIT" + }, + "node_modules/yallist": { + "version": "4.0.0", + "license": "ISC" + }, + "node_modules/yaml": { + "version": "1.10.2", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "15.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/camelcase": { + "version": "5.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/p-try": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "18.1.3", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.0", + "dev": true, + "peer": true, + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/compat-data": { + "version": "7.20.5", + "dev": true + }, + "@babel/core": { + "version": "7.20.5", + "dev": true, + "peer": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-module-transforms": "^7.20.2", + "@babel/helpers": "^7.20.5", + "@babel/parser": "^7.20.5", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.5", + "@babel/types": "^7.20.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + } + }, + "@babel/eslint-parser": { + "version": "7.15.8", + "dev": true, + "requires": { + "eslint-scope": "^5.1.1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.0" + } + }, + "@babel/generator": { + "version": "7.20.5", + "dev": true, + "requires": { + "@babel/types": "^7.20.5", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.20.0", + "dev": true, + "requires": { + "@babel/compat-data": "^7.20.0", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "semver": "^6.3.0" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.20.5", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.19.1", + "@babel/helper-split-export-declaration": "^7.18.6" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.20.5", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.2.1" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.2.4", + "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.18.9", + "dev": true + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-function-name": { + "version": "7.19.0", + "dev": true, + "requires": { + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-module-imports": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-transforms": { + "version": "7.20.2", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.2" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-replace-supers": { + "version": "7.19.1", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.19.1", + "@babel/types": "^7.19.0" + } + }, + "@babel/helper-simple-access": { + "version": "7.20.2", + "dev": true, + "requires": { + "@babel/types": "^7.20.2" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.20.0", + "dev": true, + "requires": { + "@babel/types": "^7.20.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-string-parser": { + "version": "7.19.4", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.20.5", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.5", + "@babel/types": "^7.20.5" + } + }, + "@babel/helpers": { + "version": "7.20.6", + "dev": true, + "peer": true, + "requires": { + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.5", + "@babel/types": "^7.20.5" + } + }, + "@babel/highlight": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.20.5" + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-proposal-optional-chaining": "^7.18.9" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.1", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.20.2", + "dev": true, + "requires": { + "@babel/compat-data": "^7.20.1", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.1" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.20.5", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.20.5", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.20.0", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.19.0" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.20.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.20.2" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.20.2", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-replace-supers": "^7.19.1", + "@babel/helper-split-export-declaration": "^7.18.6", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.20.2", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.20.2" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.18.8", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.19.6", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.19.6", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-simple-access": "^7.19.4" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.19.6", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-validator-identifier": "^7.19.1" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.20.5", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.20.5", + "@babel/helper-plugin-utils": "^7.20.2" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.20.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.20.2" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.20.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.20.2", + "regenerator-transform": "^0.15.1" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.19.0", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.20.2", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.20.2", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-typescript": "^7.20.0" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.18.10", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/preset-env": { + "version": "7.15.8", + "dev": true, + "requires": { + "@babel/compat-data": "^7.15.0", + "@babel/helper-compilation-targets": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.15.4", + "@babel/plugin-proposal-async-generator-functions": "^7.15.8", + "@babel/plugin-proposal-class-properties": "^7.14.5", + "@babel/plugin-proposal-class-static-block": "^7.15.4", + "@babel/plugin-proposal-dynamic-import": "^7.14.5", + "@babel/plugin-proposal-export-namespace-from": "^7.14.5", + "@babel/plugin-proposal-json-strings": "^7.14.5", + "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", + "@babel/plugin-proposal-numeric-separator": "^7.14.5", + "@babel/plugin-proposal-object-rest-spread": "^7.15.6", + "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", + "@babel/plugin-proposal-optional-chaining": "^7.14.5", + "@babel/plugin-proposal-private-methods": "^7.14.5", + "@babel/plugin-proposal-private-property-in-object": "^7.15.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", + "@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.14.5", + "@babel/plugin-transform-async-to-generator": "^7.14.5", + "@babel/plugin-transform-block-scoped-functions": "^7.14.5", + "@babel/plugin-transform-block-scoping": "^7.15.3", + "@babel/plugin-transform-classes": "^7.15.4", + "@babel/plugin-transform-computed-properties": "^7.14.5", + "@babel/plugin-transform-destructuring": "^7.14.7", + "@babel/plugin-transform-dotall-regex": "^7.14.5", + "@babel/plugin-transform-duplicate-keys": "^7.14.5", + "@babel/plugin-transform-exponentiation-operator": "^7.14.5", + "@babel/plugin-transform-for-of": "^7.15.4", + "@babel/plugin-transform-function-name": "^7.14.5", + "@babel/plugin-transform-literals": "^7.14.5", + "@babel/plugin-transform-member-expression-literals": "^7.14.5", + "@babel/plugin-transform-modules-amd": "^7.14.5", + "@babel/plugin-transform-modules-commonjs": "^7.15.4", + "@babel/plugin-transform-modules-systemjs": "^7.15.4", + "@babel/plugin-transform-modules-umd": "^7.14.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.9", + "@babel/plugin-transform-new-target": "^7.14.5", + "@babel/plugin-transform-object-super": "^7.14.5", + "@babel/plugin-transform-parameters": "^7.15.4", + "@babel/plugin-transform-property-literals": "^7.14.5", + "@babel/plugin-transform-regenerator": "^7.14.5", + "@babel/plugin-transform-reserved-words": "^7.14.5", + "@babel/plugin-transform-shorthand-properties": "^7.14.5", + "@babel/plugin-transform-spread": "^7.15.8", + "@babel/plugin-transform-sticky-regex": "^7.14.5", + "@babel/plugin-transform-template-literals": "^7.14.5", + "@babel/plugin-transform-typeof-symbol": "^7.14.5", + "@babel/plugin-transform-unicode-escapes": "^7.14.5", + "@babel/plugin-transform-unicode-regex": "^7.14.5", + "@babel/preset-modules": "^0.1.4", + "@babel/types": "^7.15.6", + "babel-plugin-polyfill-corejs2": "^0.2.2", + "babel-plugin-polyfill-corejs3": "^0.2.5", + "babel-plugin-polyfill-regenerator": "^0.2.2", + "core-js-compat": "^3.16.0", + "semver": "^6.3.0" + } + }, + "@babel/preset-modules": { + "version": "0.1.5", + "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/preset-typescript": { + "version": "7.16.7", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-transform-typescript": "^7.16.7" + } + }, + "@babel/runtime": { + "version": "7.20.6", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.11" + } + }, + "@babel/template": { + "version": "7.18.10", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + } + }, + "@babel/traverse": { + "version": "7.20.5", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.5", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.20.5", + "@babel/types": "^7.20.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.20.5", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + }, + "@csstools/selector-specificity": { + "version": "2.0.2", + "dev": true, + "requires": {} + }, + "@develar/schema-utils": { + "version": "2.6.5", + "dev": true, + "requires": { + "ajv": "^6.12.0", + "ajv-keywords": "^3.4.1" + } + }, + "@discoveryjs/json-ext": { + "version": "0.5.7", + "dev": true + }, + "@electron/get": { + "version": "2.0.2", + "requires": { + "debug": "^4.1.1", + "env-paths": "^2.2.0", + "fs-extra": "^8.1.0", + "global-agent": "^3.0.0", + "got": "^11.8.5", + "progress": "^2.0.3", + "semver": "^6.2.0", + "sumchecker": "^3.0.1" + }, + "dependencies": { + "@sindresorhus/is": { + "version": "4.6.0" + }, + "@szmarczak/http-timer": { + "version": "4.0.6", + "requires": { + "defer-to-connect": "^2.0.0" + } + }, + "cacheable-request": { + "version": "7.0.2", + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + } + }, + "decompress-response": { + "version": "6.0.0", + "requires": { + "mimic-response": "^3.1.0" + } + }, + "defer-to-connect": { + "version": "2.0.1" + }, + "get-stream": { + "version": "5.2.0", + "requires": { + "pump": "^3.0.0" + } + }, + "got": { + "version": "11.8.5", + "requires": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + } + }, + "json-buffer": { + "version": "3.0.1" + }, + "keyv": { + "version": "4.5.2", + "requires": { + "json-buffer": "3.0.1" + } + }, + "lowercase-keys": { + "version": "2.0.0" + }, + "mimic-response": { + "version": "3.1.0" + }, + "normalize-url": { + "version": "6.1.0" + }, + "p-cancelable": { + "version": "2.1.1" + }, + "responselike": { + "version": "2.0.1", + "requires": { + "lowercase-keys": "^2.0.0" + } + } + } + }, + "@electron/remote": { + "version": "2.0.8", + "requires": {} + }, + "@eslint/eslintrc": { + "version": "0.4.3", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "globals": { + "version": "13.18.0", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "ignore": { + "version": "4.0.6", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "dev": true + }, + "type-fest": { + "version": "0.20.2", + "dev": true + } + } + }, + "@floating-ui/core": { + "version": "0.3.1" + }, + "@floating-ui/dom": { + "version": "0.1.10", + "requires": { + "@floating-ui/core": "^0.3.0" + } + }, + "@humanwhocodes/config-array": { + "version": "0.5.0", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "dev": true + }, + "@hutson/parse-repository-url": { + "version": "3.0.2", + "dev": true + }, + "@intlify/core-base": { + "version": "9.2.2", + "requires": { + "@intlify/devtools-if": "9.2.2", + "@intlify/message-compiler": "9.2.2", + "@intlify/shared": "9.2.2", + "@intlify/vue-devtools": "9.2.2" + } + }, + "@intlify/devtools-if": { + "version": "9.2.2", + "requires": { + "@intlify/shared": "9.2.2" + } + }, + "@intlify/message-compiler": { + "version": "9.2.2", + "requires": { + "@intlify/shared": "9.2.2", + "source-map": "0.6.1" + } + }, + "@intlify/shared": { + "version": "9.2.2" + }, + "@intlify/vue-devtools": { + "version": "9.2.2", + "requires": { + "@intlify/core-base": "9.2.2", + "@intlify/shared": "9.2.2" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "dev": true, + "peer": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.17", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "@leichtgewicht/ip-codec": { + "version": "2.0.4", + "dev": true + }, + "@mdi/font": { + "version": "7.1.96", + "resolved": "https://registry.npmjs.org/@mdi/font/-/font-7.1.96.tgz", + "integrity": "sha512-Imag6npmfkBDi2Ze2jiZVAPTDIKLxhz2Sx82xJ2zctyAU5LYJejLI5ChnDwiD9bMkQfVuzEsI98Q8toHyC+HCg==" + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@playwright/test": { + "version": "1.28.1", + "dev": true, + "requires": { + "@types/node": "*", + "playwright-core": "1.28.1" + } + }, + "@sindresorhus/is": { + "version": "0.14.0", + "dev": true + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "dev": true, + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "@types/body-parser": { + "version": "1.19.2", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/bonjour": { + "version": "3.5.10", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/cacheable-request": { + "version": "6.0.3", + "requires": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, + "@types/connect": { + "version": "3.4.35", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect-history-api-fallback": { + "version": "1.3.5", + "dev": true, + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "@types/debug": { + "version": "4.1.7", + "dev": true, + "requires": { + "@types/ms": "*" + } + }, + "@types/eslint": { + "version": "8.4.10", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.4", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "1.0.0", + "dev": true + }, + "@types/express": { + "version": "4.17.14", + "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.31", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "@types/fs-extra": { + "version": "9.0.13", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/html-minifier-terser": { + "version": "6.1.0", + "dev": true + }, + "@types/http-cache-semantics": { + "version": "4.0.1" + }, + "@types/http-proxy": { + "version": "1.17.9", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/json-schema": { + "version": "7.0.11", + "dev": true + }, + "@types/json5": { + "version": "0.0.29", + "dev": true + }, + "@types/keyv": { + "version": "3.1.4", + "requires": { + "@types/node": "*" + } + }, + "@types/mime": { + "version": "3.0.1", + "dev": true + }, + "@types/minimist": { + "version": "1.2.2", + "dev": true + }, + "@types/ms": { + "version": "0.7.31", + "dev": true + }, + "@types/node": { + "version": "17.0.45" + }, + "@types/normalize-package-data": { + "version": "2.4.1", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "dev": true + }, + "@types/qs": { + "version": "6.9.7", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.4", + "dev": true + }, + "@types/responselike": { + "version": "1.0.0", + "requires": { + "@types/node": "*" + } + }, + "@types/retry": { + "version": "0.12.0", + "dev": true + }, + "@types/semver": { + "version": "7.3.13" + }, + "@types/serve-index": { + "version": "1.9.1", + "dev": true, + "requires": { + "@types/express": "*" + } + }, + "@types/serve-static": { + "version": "1.15.0", + "dev": true, + "requires": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "@types/sockjs": { + "version": "0.3.33", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/web-bluetooth": { + "version": "0.0.14" + }, + "@types/ws": { + "version": "8.5.3", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/yargs": { + "version": "15.0.14", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "21.0.0", + "dev": true + }, + "@types/yauzl": { + "version": "2.10.0", + "optional": true, + "requires": { + "@types/node": "*" + } + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.18.0", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.18.0", + "@typescript-eslint/type-utils": "5.18.0", + "@typescript-eslint/utils": "5.18.0", + "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.8", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/parser": { + "version": "5.18.0", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.18.0", + "@typescript-eslint/types": "5.18.0", + "@typescript-eslint/typescript-estree": "5.18.0", + "debug": "^4.3.2" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.18.0", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.18.0", + "@typescript-eslint/visitor-keys": "5.18.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.18.0", + "dev": true, + "requires": { + "@typescript-eslint/utils": "5.18.0", + "debug": "^4.3.2", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/types": { + "version": "5.18.0", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.18.0", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.18.0", + "@typescript-eslint/visitor-keys": "5.18.0", + "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.8", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/utils": { + "version": "5.18.0", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.18.0", + "@typescript-eslint/types": "5.18.0", + "@typescript-eslint/typescript-estree": "5.18.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.18.0", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.18.0", + "eslint-visitor-keys": "^3.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "3.3.0", + "dev": true + } + } + }, + "@vue/compiler-core": { + "version": "3.2.45", + "requires": { + "@babel/parser": "^7.16.4", + "@vue/shared": "3.2.45", + "estree-walker": "^2.0.2", + "source-map": "^0.6.1" + } + }, + "@vue/compiler-dom": { + "version": "3.2.45", + "requires": { + "@vue/compiler-core": "3.2.45", + "@vue/shared": "3.2.45" + } + }, + "@vue/compiler-sfc": { + "version": "3.2.45", + "requires": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.45", + "@vue/compiler-dom": "3.2.45", + "@vue/compiler-ssr": "3.2.45", + "@vue/reactivity-transform": "3.2.45", + "@vue/shared": "3.2.45", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7", + "postcss": "^8.1.10", + "source-map": "^0.6.1" + } + }, + "@vue/compiler-ssr": { + "version": "3.2.45", + "requires": { + "@vue/compiler-dom": "3.2.45", + "@vue/shared": "3.2.45" + } + }, + "@vue/devtools-api": { + "version": "6.4.5" + }, + "@vue/reactivity": { + "version": "3.2.45", + "requires": { + "@vue/shared": "3.2.45" + } + }, + "@vue/reactivity-transform": { + "version": "3.2.45", + "requires": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.45", + "@vue/shared": "3.2.45", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7" + } + }, + "@vue/runtime-core": { + "version": "3.2.45", + "requires": { + "@vue/reactivity": "3.2.45", + "@vue/shared": "3.2.45" + } + }, + "@vue/runtime-dom": { + "version": "3.2.45", + "requires": { + "@vue/runtime-core": "3.2.45", + "@vue/shared": "3.2.45", + "csstype": "^2.6.8" + } + }, + "@vue/server-renderer": { + "version": "3.2.45", + "requires": { + "@vue/compiler-ssr": "3.2.45", + "@vue/shared": "3.2.45" + } + }, + "@vue/shared": { + "version": "3.2.45" + }, + "@vueuse/core": { + "version": "8.7.5", + "requires": { + "@types/web-bluetooth": "^0.0.14", + "@vueuse/metadata": "8.7.5", + "@vueuse/shared": "8.7.5", + "vue-demi": "*" + }, + "dependencies": { + "@vueuse/shared": { + "version": "8.7.5", + "requires": { + "vue-demi": "*" + } + }, + "vue-demi": { + "version": "0.13.11", + "requires": {} + } + } + }, + "@vueuse/metadata": { + "version": "8.7.5" + }, + "@webassemblyjs/ast": { + "version": "1.11.1", + "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", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "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", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "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", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.1", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.1", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "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", + "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", + "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", + "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", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webpack-cli/configtest": { + "version": "1.2.0", + "dev": true, + "requires": {} + }, + "@webpack-cli/info": { + "version": "1.5.0", + "dev": true, + "requires": { + "envinfo": "^7.7.3" + } + }, + "@webpack-cli/serve": { + "version": "1.7.0", + "dev": true, + "requires": {} + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "dev": true + }, + "7zip-bin": { + "version": "5.0.3", + "dev": true + }, + "accepts": { + "version": "1.3.8", + "dev": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "7.4.1", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "dev": true, + "requires": {} + }, + "add-stream": { + "version": "1.0.0", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "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", + "requires": { + "ajv": "^8.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.2", + "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" + } + } + }, + "ajv-keywords": { + "version": "3.5.2", + "dev": true, + "requires": {} + }, + "all-contributors-cli": { + "version": "6.20.5", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.6", + "async": "^3.1.0", + "chalk": "^4.0.0", + "didyoumean": "^1.2.1", + "inquirer": "^7.3.3", + "json-fixer": "^1.6.8", + "lodash": "^4.11.2", + "node-fetch": "^2.6.0", + "pify": "^5.0.0", + "yargs": "^15.0.1" + } + }, + "ansi-align": { + "version": "3.0.1", + "dev": true, + "requires": { + "string-width": "^4.1.0" + } + }, + "ansi-colors": { + "version": "4.1.3", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.2", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "dev": true + } + } + }, + "ansi-html-community": { + "version": "0.0.8", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.3", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "app-builder-bin": { + "version": "3.5.10", + "dev": true + }, + "app-builder-lib": { + "version": "22.10.3", + "dev": true, + "requires": { + "@develar/schema-utils": "~2.6.5", + "7zip-bin": "~5.0.3", + "async-exit-hook": "^2.0.1", + "bluebird-lst": "^1.0.9", + "builder-util": "22.10.3", + "builder-util-runtime": "8.7.3", + "chromium-pickle-js": "^0.2.0", + "debug": "^4.3.2", + "ejs": "^3.1.5", + "electron-publish": "22.10.3", + "fs-extra": "^9.0.1", + "hosted-git-info": "^3.0.7", + "is-ci": "^2.0.0", + "isbinaryfile": "^4.0.6", + "js-yaml": "^3.14.1", + "lazy-val": "^1.0.4", + "minimatch": "^3.0.4", + "normalize-package-data": "^3.0.0", + "read-config-file": "6.0.0", + "sanitize-filename": "^1.6.3", + "semver": "^7.3.4", + "temp-file": "^3.3.7" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "fs-extra": { + "version": "9.1.0", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "hosted-git-info": { + "version": "3.0.8", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "js-yaml": { + "version": "3.14.1", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "normalize-package-data": { + "version": "3.0.3", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "hosted-git-info": { + "version": "4.1.0", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "semver": { + "version": "7.3.8", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "dev": true + }, + "universalify": { + "version": "2.0.0", + "dev": true + } + } + }, + "argparse": { + "version": "2.0.1" + }, + "array-flatten": { + "version": "2.1.2", + "dev": true + }, + "array-ify": { + "version": "1.0.0", + "dev": true + }, + "array-includes": { + "version": "3.1.6", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" + } + }, + "array-union": { + "version": "2.1.0", + "dev": true + }, + "array.prototype.flat": { + "version": "1.3.1", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + } + }, + "arrify": { + "version": "1.0.1", + "dev": true + }, + "astral-regex": { + "version": "2.0.0", + "dev": true + }, + "async": { + "version": "3.2.4", + "dev": true + }, + "async-exit-hook": { + "version": "2.0.1", + "dev": true + }, + "at-least-node": { + "version": "1.0.0", + "dev": true + }, + "atomically": { + "version": "1.7.0" + }, + "babel-loader": { + "version": "8.2.5", + "dev": true, + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.2.3", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.2.4", + "semver": "^6.1.1" + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.2.5", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.2.2", + "core-js-compat": "^3.16.2" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.2.3", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.2.4" + } + }, + "balanced-match": { + "version": "1.0.2", + "dev": true + }, + "batch": { + "version": "0.6.1", + "dev": true + }, + "big.js": { + "version": "5.2.2", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "dev": true + }, + "bluebird": { + "version": "3.7.2", + "dev": true + }, + "bluebird-lst": { + "version": "1.0.9", + "dev": true, + "requires": { + "bluebird": "^3.5.5" + } + }, + "body-parser": { + "version": "1.20.1", + "dev": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "dev": true + }, + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "bonjour-service": { + "version": "1.0.14", + "dev": true, + "requires": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "boolbase": { + "version": "1.0.0", + "dev": true + }, + "boolean": { + "version": "3.2.0", + "optional": true + }, + "boxen": { + "version": "5.1.2", + "dev": true, + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "type-fest": { + "version": "0.20.2", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.21.4", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" + } + }, + "buffer-crc32": { + "version": "0.2.13" + }, + "buffer-from": { + "version": "1.1.2" + }, + "builder-util": { + "version": "22.10.3", + "dev": true, + "requires": { + "@types/debug": "^4.1.5", + "@types/fs-extra": "^9.0.5", + "7zip-bin": "~5.0.3", + "app-builder-bin": "3.5.10", + "bluebird-lst": "^1.0.9", + "builder-util-runtime": "8.7.3", + "chalk": "^4.1.0", + "debug": "^4.3.2", + "fs-extra": "^9.0.1", + "is-ci": "^2.0.0", + "js-yaml": "^3.14.1", + "source-map-support": "^0.5.19", + "stat-mode": "^1.0.0", + "temp-file": "^3.3.7" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "fs-extra": { + "version": "9.1.0", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "js-yaml": { + "version": "3.14.1", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "dev": true + }, + "universalify": { + "version": "2.0.0", + "dev": true + } + } + }, + "builder-util-runtime": { + "version": "8.7.3", + "dev": true, + "requires": { + "debug": "^4.3.2", + "sax": "^1.2.4" + } + }, + "bytes": { + "version": "3.0.0", + "dev": true + }, + "cacheable-lookup": { + "version": "5.0.4" + }, + "cacheable-request": { + "version": "6.1.0", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "dev": true + } + } + }, + "call-bind": { + "version": "1.0.2", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "dev": true + }, + "camel-case": { + "version": "4.1.2", + "dev": true, + "requires": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "camelcase": { + "version": "6.3.0", + "dev": true + }, + "camelcase-keys": { + "version": "6.2.2", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "dev": true + } + } + }, + "caniuse-lite": { + "version": "1.0.30001436", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chardet": { + "version": "0.7.0", + "dev": true + }, + "chokidar": { + "version": "3.5.3", + "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" + } + }, + "chrome-trace-event": { + "version": "1.0.3", + "dev": true + }, + "chromium-pickle-js": { + "version": "0.2.0", + "dev": true + }, + "clean-css": { + "version": "5.3.1", + "dev": true, + "requires": { + "source-map": "~0.6.0" + } + }, + "cli-boxes": { + "version": "2.2.1", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-width": { + "version": "3.0.0", + "dev": true + }, + "cliui": { + "version": "6.0.0", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "wrap-ansi": { + "version": "6.2.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "clone-deep": { + "version": "4.0.1", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "dependencies": { + "is-plain-object": { + "version": "2.0.4", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + } + } + }, + "clone-regexp": { + "version": "2.2.0", + "dev": true, + "requires": { + "is-regexp": "^2.0.0" + } + }, + "clone-response": { + "version": "1.0.3", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "colord": { + "version": "2.9.3", + "dev": true + }, + "colorette": { + "version": "2.0.19", + "dev": true + }, + "commander": { + "version": "8.3.0", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "dev": true + }, + "compare-func": { + "version": "2.0.0", + "dev": true, + "requires": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + }, + "dependencies": { + "dot-prop": { + "version": "5.3.0", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + } + } + }, + "compressible": { + "version": "2.0.18", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "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", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "dev": true + }, + "conf": { + "version": "10.2.0", + "requires": { + "ajv": "^8.6.3", + "ajv-formats": "^2.1.1", + "atomically": "^1.7.0", + "debounce-fn": "^4.0.0", + "dot-prop": "^6.0.1", + "env-paths": "^2.2.1", + "json-schema-typed": "^7.0.3", + "onetime": "^5.1.2", + "pkg-up": "^3.1.0", + "semver": "^7.3.5" + }, + "dependencies": { + "ajv": { + "version": "8.11.2", + "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" + }, + "semver": { + "version": "7.3.8", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "configstore": { + "version": "5.0.1", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "dependencies": { + "dot-prop": { + "version": "5.3.0", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "write-file-atomic": { + "version": "3.0.3", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + } + } + }, + "connect-history-api-fallback": { + "version": "2.0.0", + "dev": true + }, + "content-disposition": { + "version": "0.5.4", + "dev": true, + "requires": { + "safe-buffer": "5.2.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "dev": true + } + } + }, + "content-type": { + "version": "1.0.4", + "dev": true + }, + "conventional-changelog": { + "version": "3.1.24", + "dev": true, + "requires": { + "conventional-changelog-angular": "^5.0.12", + "conventional-changelog-atom": "^2.0.8", + "conventional-changelog-codemirror": "^2.0.8", + "conventional-changelog-conventionalcommits": "^4.5.0", + "conventional-changelog-core": "^4.2.1", + "conventional-changelog-ember": "^2.0.9", + "conventional-changelog-eslint": "^3.0.9", + "conventional-changelog-express": "^2.0.6", + "conventional-changelog-jquery": "^3.0.11", + "conventional-changelog-jshint": "^2.0.9", + "conventional-changelog-preset-loader": "^2.3.4" + } + }, + "conventional-changelog-angular": { + "version": "5.0.13", + "dev": true, + "requires": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + } + }, + "conventional-changelog-atom": { + "version": "2.0.8", + "dev": true, + "requires": { + "q": "^1.5.1" + } + }, + "conventional-changelog-codemirror": { + "version": "2.0.8", + "dev": true, + "requires": { + "q": "^1.5.1" + } + }, + "conventional-changelog-config-spec": { + "version": "2.1.0", + "dev": true + }, + "conventional-changelog-conventionalcommits": { + "version": "4.6.1", + "dev": true, + "requires": { + "compare-func": "^2.0.0", + "lodash": "^4.17.15", + "q": "^1.5.1" + } + }, + "conventional-changelog-core": { + "version": "4.2.4", + "dev": true, + "requires": { + "add-stream": "^1.0.0", + "conventional-changelog-writer": "^5.0.0", + "conventional-commits-parser": "^3.2.0", + "dateformat": "^3.0.0", + "get-pkg-repo": "^4.0.0", + "git-raw-commits": "^2.0.8", + "git-remote-origin-url": "^2.0.0", + "git-semver-tags": "^4.1.1", + "lodash": "^4.17.15", + "normalize-package-data": "^3.0.0", + "q": "^1.5.1", + "read-pkg": "^3.0.0", + "read-pkg-up": "^3.0.0", + "through2": "^4.0.0" + }, + "dependencies": { + "normalize-package-data": { + "version": "3.0.3", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + } + }, + "semver": { + "version": "7.3.8", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "conventional-changelog-ember": { + "version": "2.0.9", + "dev": true, + "requires": { + "q": "^1.5.1" + } + }, + "conventional-changelog-eslint": { + "version": "3.0.9", + "dev": true, + "requires": { + "q": "^1.5.1" + } + }, + "conventional-changelog-express": { + "version": "2.0.6", + "dev": true, + "requires": { + "q": "^1.5.1" + } + }, + "conventional-changelog-jquery": { + "version": "3.0.11", + "dev": true, + "requires": { + "q": "^1.5.1" + } + }, + "conventional-changelog-jshint": { + "version": "2.0.9", + "dev": true, + "requires": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + } + }, + "conventional-changelog-preset-loader": { + "version": "2.3.4", + "dev": true + }, + "conventional-changelog-writer": { + "version": "5.0.1", + "dev": true, + "requires": { + "conventional-commits-filter": "^2.0.7", + "dateformat": "^3.0.0", + "handlebars": "^4.7.7", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "semver": "^6.0.0", + "split": "^1.0.0", + "through2": "^4.0.0" + } + }, + "conventional-commits-filter": { + "version": "2.0.7", + "dev": true, + "requires": { + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.0" + } + }, + "conventional-commits-parser": { + "version": "3.2.4", + "dev": true, + "requires": { + "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "split2": { + "version": "3.2.2", + "dev": true, + "requires": { + "readable-stream": "^3.0.0" + } + } + } + }, + "conventional-recommended-bump": { + "version": "6.1.0", + "dev": true, + "requires": { + "concat-stream": "^2.0.0", + "conventional-changelog-preset-loader": "^2.3.4", + "conventional-commits-filter": "^2.0.7", + "conventional-commits-parser": "^3.2.0", + "git-raw-commits": "^2.0.8", + "git-semver-tags": "^4.1.1", + "meow": "^8.0.0", + "q": "^1.5.1" + }, + "dependencies": { + "concat-stream": { + "version": "2.0.0", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "readable-stream": { + "version": "3.6.0", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "convert-source-map": { + "version": "1.9.0", + "dev": true, + "peer": true + }, + "cookie": { + "version": "0.5.0", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "dev": true + }, + "core-js-compat": { + "version": "3.26.1", + "dev": true, + "requires": { + "browserslist": "^4.21.4" + } + }, + "core-util-is": { + "version": "1.0.3", + "dev": true + }, + "cosmiconfig": { + "version": "7.1.0", + "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" + }, + "dependencies": { + "parse-json": { + "version": "5.2.0", + "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" + } + } + } + }, + "cross-env": { + "version": "7.0.3", + "dev": true, + "requires": { + "cross-spawn": "^7.0.1" + } + }, + "cross-spawn": { + "version": "7.0.3", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypto-random-string": { + "version": "2.0.0", + "dev": true + }, + "css-functions-list": { + "version": "3.1.0", + "dev": true + }, + "css-loader": { + "version": "6.5.1", + "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.8", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "css-select": { + "version": "4.3.0", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "dependencies": { + "dom-serializer": { + "version": "1.4.1", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domhandler": { + "version": "4.3.1", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "entities": { + "version": "2.2.0", + "dev": true + } + } + }, + "css-what": { + "version": "6.1.0", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "dev": true + }, + "csstype": { + "version": "2.6.21" + }, + "dargs": { + "version": "7.0.0", + "dev": true + }, + "dateformat": { + "version": "3.0.3", + "dev": true + }, + "debounce-fn": { + "version": "4.0.0", + "requires": { + "mimic-fn": "^3.0.0" + } + }, + "debug": { + "version": "4.3.4", + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2" + } + } + }, + "decamelize": { + "version": "1.2.0", + "dev": true + }, + "decamelize-keys": { + "version": "1.1.1", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "dev": true + } + } + }, + "decompress-response": { + "version": "3.3.0", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "dev": true + }, + "deep-is": { + "version": "0.1.4", + "dev": true + }, + "default-gateway": { + "version": "6.0.3", + "dev": true, + "requires": { + "execa": "^5.0.0" + } + }, + "defer-to-connect": { + "version": "1.1.3", + "dev": true + }, + "define-lazy-prop": { + "version": "2.0.0", + "dev": true + }, + "define-properties": { + "version": "1.1.4", + "devOptional": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "depd": { + "version": "2.0.0", + "dev": true + }, + "destroy": { + "version": "1.2.0", + "dev": true + }, + "detect-indent": { + "version": "6.1.0", + "dev": true + }, + "detect-newline": { + "version": "3.1.0", + "dev": true + }, + "detect-node": { + "version": "2.1.0", + "devOptional": true + }, + "didyoumean": { + "version": "1.2.2", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "dmg-builder": { + "version": "22.10.3", + "dev": true, + "requires": { + "app-builder-lib": "22.10.3", + "builder-util": "22.10.3", + "dmg-license": "^1.0.8", + "fs-extra": "^9.0.1", + "iconv-lite": "^0.6.2", + "js-yaml": "^3.14.1", + "sanitize-filename": "^1.6.3" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "fs-extra": { + "version": "9.1.0", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "js-yaml": { + "version": "3.14.1", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "dev": true + }, + "universalify": { + "version": "2.0.0", + "dev": true + } + } + }, + "dns-equal": { + "version": "1.0.0", + "dev": true + }, + "dns-packet": { + "version": "5.4.0", + "dev": true, + "requires": { + "@leichtgewicht/ip-codec": "^2.0.1" + } + }, + "doctrine": { + "version": "3.0.0", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-converter": { + "version": "0.2.0", + "dev": true, + "requires": { + "utila": "~0.4" + } + }, + "dom-serializer": { + "version": "2.0.0", + "dev": true, + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "dev": true + }, + "domhandler": { + "version": "5.0.3", + "dev": true, + "requires": { + "domelementtype": "^2.3.0" + } + }, + "domutils": { + "version": "3.0.1", + "dev": true, + "requires": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.1" + } + }, + "dot-case": { + "version": "3.0.4", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "dot-prop": { + "version": "6.0.1", + "requires": { + "is-obj": "^2.0.0" + } + }, + "dotenv-expand": { + "version": "5.1.0", + "dev": true + }, + "dotgitignore": { + "version": "2.1.0", + "dev": true, + "requires": { + "find-up": "^3.0.0", + "minimatch": "^3.0.4" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "dev": true + } + } + }, + "duplexer3": { + "version": "0.1.5", + "dev": true + }, + "ee-first": { + "version": "1.1.1", + "dev": true + }, + "ejs": { + "version": "3.1.8", + "dev": true, + "requires": { + "jake": "^10.8.5" + } + }, + "electron": { + "version": "22.0.3", + "resolved": "https://registry.npmjs.org/electron/-/electron-22.0.3.tgz", + "integrity": "sha512-eETrJTINTzlXgQrnJSrKiF2Xdt5EHpxZ6Kk+WUjFCE0zUztdVm+hrngUecqhj8TPFlYScTANzPwRwUIjOChl+g==", + "requires": { + "@electron/get": "^2.0.0", + "@types/node": "^16.11.26", + "extract-zip": "^2.0.1" + }, + "dependencies": { + "@types/node": { + "version": "16.18.4" + } + } + }, + "electron-builder": { + "version": "22.10.3", + "dev": true, + "requires": { + "@types/yargs": "^15.0.11", + "app-builder-lib": "22.10.3", + "bluebird-lst": "^1.0.9", + "builder-util": "22.10.3", + "builder-util-runtime": "8.7.3", + "chalk": "^4.1.0", + "dmg-builder": "22.10.3", + "fs-extra": "^9.0.1", + "is-ci": "^2.0.0", + "lazy-val": "^1.0.4", + "read-config-file": "6.0.0", + "sanitize-filename": "^1.6.3", + "update-notifier": "^5.0.1", + "yargs": "^16.2.0" + }, + "dependencies": { + "cliui": { + "version": "7.0.4", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "fs-extra": { + "version": "9.1.0", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "5.0.8", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "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" + } + } + } + }, + "electron-log": { + "version": "4.4.8" + }, + "electron-publish": { + "version": "22.10.3", + "dev": true, + "requires": { + "@types/fs-extra": "^9.0.5", + "bluebird-lst": "^1.0.9", + "builder-util": "22.10.3", + "builder-util-runtime": "8.7.3", + "chalk": "^4.1.0", + "fs-extra": "^9.0.1", + "lazy-val": "^1.0.4", + "mime": "^2.4.6" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "mime": { + "version": "2.6.0", + "dev": true + }, + "universalify": { + "version": "2.0.0", + "dev": true + } + } + }, + "electron-store": { + "version": "8.1.0", + "requires": { + "conf": "^10.2.0", + "type-fest": "^2.17.0" + } + }, + "electron-to-chromium": { + "version": "1.4.284", + "dev": true + }, + "electron-updater": { + "version": "4.6.5", + "requires": { + "@types/semver": "^7.3.6", + "builder-util-runtime": "8.9.2", + "fs-extra": "^10.0.0", + "js-yaml": "^4.1.0", + "lazy-val": "^1.0.5", + "lodash.escaperegexp": "^4.1.2", + "lodash.isequal": "^4.5.0", + "semver": "^7.3.5" + }, + "dependencies": { + "builder-util-runtime": { + "version": "8.9.2", + "requires": { + "debug": "^4.3.2", + "sax": "^1.2.4" + } + }, + "fs-extra": { + "version": "10.1.0", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "semver": { + "version": "7.3.8", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "universalify": { + "version": "2.0.0" + } + } + }, + "electron-window-state": { + "version": "5.0.3", + "requires": { + "jsonfile": "^4.0.0", + "mkdirp": "^0.5.1" + } + }, + "emoji-regex": { + "version": "8.0.0", + "dev": true + }, + "emojis-list": { + "version": "3.0.0", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "dev": true + }, + "encoding": { + "version": "0.1.13", + "requires": { + "iconv-lite": "^0.6.2" + } + }, + "end-of-stream": { + "version": "1.4.4", + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "5.12.0", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "enquirer": { + "version": "2.3.6", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "entities": { + "version": "4.4.0", + "dev": true + }, + "env-paths": { + "version": "2.2.1" + }, + "envinfo": { + "version": "7.8.1", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.20.4", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + } + }, + "es-module-lexer": { + "version": "0.9.3", + "dev": true + }, + "es-shim-unscopables": { + "version": "1.0.0", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es6-error": { + "version": "4.1.1", + "optional": true + }, + "escalade": { + "version": "3.1.1", + "dev": true + }, + "escape-goat": { + "version": "2.1.1", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "devOptional": true + }, + "eslint": { + "version": "7.32.0", + "dev": true, + "requires": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "argparse": { + "version": "1.0.10", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "eslint-utils": { + "version": "2.1.0", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "dev": true + } + } + }, + "globals": { + "version": "13.18.0", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "ignore": { + "version": "4.0.6", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "semver": { + "version": "7.3.8", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "dev": true + }, + "type-fest": { + "version": "0.20.2", + "dev": true + } + } + }, + "eslint-config-standard": { + "version": "16.0.3", + "dev": true, + "requires": {} + }, + "eslint-import-resolver-node": { + "version": "0.3.6", + "dev": true, + "requires": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-module-utils": { + "version": "2.7.4", + "dev": true, + "requires": { + "debug": "^3.2.7" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-plugin-es": { + "version": "3.0.1", + "dev": true, + "requires": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "dependencies": { + "eslint-utils": { + "version": "2.1.0", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "dev": true + } + } + }, + "eslint-plugin-import": { + "version": "2.24.2", + "dev": true, + "requires": { + "array-includes": "^3.1.3", + "array.prototype.flat": "^1.2.4", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.6.2", + "find-up": "^2.0.0", + "has": "^1.0.3", + "is-core-module": "^2.6.0", + "minimatch": "^3.0.4", + "object.values": "^1.1.4", + "pkg-up": "^2.0.0", + "read-pkg-up": "^3.0.0", + "resolve": "^1.20.0", + "tsconfig-paths": "^3.11.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "2.1.0", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + }, + "pkg-up": { + "version": "2.0.0", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + } + } + }, + "eslint-plugin-node": { + "version": "11.1.0", + "dev": true, + "requires": { + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" + }, + "dependencies": { + "eslint-utils": { + "version": "2.1.0", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "dev": true + } + } + }, + "eslint-plugin-promise": { + "version": "5.2.0", + "dev": true, + "requires": {} + }, + "eslint-plugin-vue": { + "version": "8.0.3", + "dev": 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.8", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "eslint-scope": { + "version": "5.1.1", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "3.0.0", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + } + }, + "eslint-visitor-keys": { + "version": "2.1.0", + "dev": true + }, + "espree": { + "version": "7.3.1", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "dev": true + } + } + }, + "esprima": { + "version": "4.0.1", + "dev": true + }, + "esquery": { + "version": "1.4.0", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "dev": true + }, + "estree-walker": { + "version": "2.0.2" + }, + "esutils": { + "version": "2.0.3", + "dev": true + }, + "etag": { + "version": "1.8.1", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "dev": true + }, + "events": { + "version": "3.3.0", + "dev": true + }, + "execa": { + "version": "5.1.1", + "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" + }, + "dependencies": { + "get-stream": { + "version": "6.0.1", + "dev": true + } + } + }, + "execall": { + "version": "2.0.0", + "dev": true, + "requires": { + "clone-regexp": "^2.1.0" + } + }, + "express": { + "version": "4.18.2", + "dev": true, + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "dev": true + }, + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + }, + "safe-buffer": { + "version": "5.2.1", + "dev": true + } + } + }, + "external-editor": { + "version": "3.1.0", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, + "extract-zip": { + "version": "2.0.1", + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "requires": { + "pump": "^3.0.0" + } + } + } + }, + "fast-deep-equal": { + "version": "3.1.3" + }, + "fast-glob": { + "version": "3.2.12", + "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" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "dev": true + }, + "fastest-levenshtein": { + "version": "1.0.16", + "dev": true + }, + "fastq": { + "version": "1.14.0", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.11.4", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fd-slicer": { + "version": "1.1.0", + "requires": { + "pend": "~1.2.0" + } + }, + "figures": { + "version": "3.2.0", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "dev": true + } + } + }, + "file-entry-cache": { + "version": "6.0.1", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "file-loader": { + "version": "6.2.0", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.1.1", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "filelist": { + "version": "1.0.4", + "dev": true, + "requires": { + "minimatch": "^5.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.1", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "fill-range": { + "version": "7.0.1", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.2.0", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "find-cache-dir": { + "version": "3.3.2", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "2.1.0", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.7", + "dev": true + }, + "floating-vue": { + "version": "2.0.0-beta.20", + "requires": { + "@floating-ui/dom": "^0.1.10", + "vue-resize": "^2.0.0-alpha.1" + } + }, + "follow-redirects": { + "version": "1.15.2", + "dev": true + }, + "forwarded": { + "version": "0.2.0", + "dev": true + }, + "fresh": { + "version": "0.5.2", + "dev": true + }, + "fs-access": { + "version": "1.0.1", + "dev": true, + "requires": { + "null-check": "^1.0.0" + } + }, + "fs-extra": { + "version": "8.1.0", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-monkey": { + "version": "1.0.3", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "devOptional": true + }, + "function.prototype.name": { + "version": "1.1.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functional-red-black-tree": { + "version": "1.0.1", + "dev": true + }, + "functions-have-names": { + "version": "1.2.3", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "dev": true, + "peer": true + }, + "get-caller-file": { + "version": "2.0.5", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.3", + "devOptional": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-pkg-repo": { + "version": "4.2.1", + "dev": true, + "requires": { + "@hutson/parse-repository-url": "^3.0.0", + "hosted-git-info": "^4.0.0", + "through2": "^2.0.0", + "yargs": "^16.2.0" + }, + "dependencies": { + "cliui": { + "version": "7.0.4", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "through2": { + "version": "2.0.5", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "5.0.8", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "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" + } + } + } + }, + "get-stdin": { + "version": "8.0.0", + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "get-symbol-description": { + "version": "1.0.0", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "git-raw-commits": { + "version": "2.0.11", + "dev": true, + "requires": { + "dargs": "^7.0.0", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "split2": { + "version": "3.2.2", + "dev": true, + "requires": { + "readable-stream": "^3.0.0" + } + } + } + }, + "git-remote-origin-url": { + "version": "2.0.0", + "dev": true, + "requires": { + "gitconfiglocal": "^1.0.0", + "pify": "^2.3.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "dev": true + } + } + }, + "git-semver-tags": { + "version": "4.1.1", + "dev": true, + "requires": { + "meow": "^8.0.0", + "semver": "^6.0.0" + } + }, + "gitconfiglocal": { + "version": "1.0.0", + "dev": true, + "requires": { + "ini": "^1.3.2" + } + }, + "glob": { + "version": "7.2.3", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "minimatch": { + "version": "3.1.2", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "glob-parent": { + "version": "5.1.2", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "dev": true + }, + "global-agent": { + "version": "3.0.0", + "optional": true, + "requires": { + "boolean": "^3.0.1", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "optional": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "global-dirs": { + "version": "3.0.1", + "dev": true, + "requires": { + "ini": "2.0.0" + }, + "dependencies": { + "ini": { + "version": "2.0.0", + "dev": true + } + } + }, + "global-modules": { + "version": "2.0.0", + "dev": true, + "requires": { + "global-prefix": "^3.0.0" + } + }, + "global-prefix": { + "version": "3.0.0", + "dev": true, + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "dependencies": { + "which": { + "version": "1.3.1", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "globals": { + "version": "11.12.0", + "dev": true + }, + "globalthis": { + "version": "1.0.3", + "optional": true, + "requires": { + "define-properties": "^1.1.3" + } + }, + "globby": { + "version": "11.1.0", + "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" + } + }, + "globjoin": { + "version": "0.1.4", + "dev": true + }, + "got": { + "version": "9.6.0", + "dev": true, + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.10" + }, + "handle-thing": { + "version": "2.0.1", + "dev": true + }, + "handlebars": { + "version": "4.7.7", + "dev": true, + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + } + }, + "hard-rejection": { + "version": "2.1.0", + "dev": true + }, + "has": { + "version": "1.0.3", + "devOptional": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.2", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.0", + "devOptional": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "devOptional": true + }, + "has-tostringtag": { + "version": "1.0.0", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "has-yarn": { + "version": "2.1.0", + "dev": true + }, + "hash-sum": { + "version": "2.0.0", + "dev": true + }, + "he": { + "version": "1.2.0", + "dev": true + }, + "hosted-git-info": { + "version": "4.1.0", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "hpack.js": { + "version": "2.1.6", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "html-entities": { + "version": "2.3.3", + "dev": true + }, + "html-minifier-terser": { + "version": "6.1.0", + "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.2.0", + "dev": true + }, + "html-webpack-plugin": { + "version": "5.5.0", + "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" + } + }, + "htmlparser2": { + "version": "8.0.1", + "dev": true, + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "entities": "^4.3.0" + } + }, + "http-cache-semantics": { + "version": "4.1.0" + }, + "http-deceiver": { + "version": "1.2.7", + "dev": true + }, + "http-errors": { + "version": "2.0.0", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "http-parser-js": { + "version": "0.5.8", + "dev": true + }, + "http-proxy": { + "version": "1.18.1", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "2.0.6", + "dev": true, + "requires": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "dependencies": { + "is-plain-obj": { + "version": "3.0.0", + "dev": true + } + } + }, + "http2-wrapper": { + "version": "1.0.3", + "requires": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "dependencies": { + "quick-lru": { + "version": "5.1.1" + } + } + }, + "human-signals": { + "version": "2.1.0", + "dev": true + }, + "iconv-lite": { + "version": "0.6.3", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "icss-utils": { + "version": "5.1.0", + "dev": true, + "requires": {} + }, + "ignore": { + "version": "5.2.1", + "dev": true + }, + "immediate": { + "version": "3.0.6", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-lazy": { + "version": "4.0.0", + "dev": true + }, + "import-local": { + "version": "3.1.0", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "dev": true + }, + "ini": { + "version": "1.3.8", + "dev": true + }, + "inquirer": { + "version": "7.3.3", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + } + }, + "internal-slot": { + "version": "1.0.3", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "interpret": { + "version": "2.2.0", + "dev": true + }, + "ipaddr.js": { + "version": "2.0.1", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "dev": true + }, + "is-bigint": { + "version": "1.0.4", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.7", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + }, + "dependencies": { + "ci-info": { + "version": "2.0.0", + "dev": true + } + } + }, + "is-core-module": { + "version": "2.11.0", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.5", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-installed-globally": { + "version": "0.4.0", + "dev": true, + "requires": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + } + }, + "is-negative-zero": { + "version": "2.0.2", + "dev": true + }, + "is-npm": { + "version": "5.0.0", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "dev": true + }, + "is-number-object": { + "version": "1.0.7", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-obj": { + "version": "2.0.0" + }, + "is-path-inside": { + "version": "3.0.3", + "dev": true + }, + "is-plain-obj": { + "version": "1.1.0", + "dev": true + }, + "is-plain-object": { + "version": "5.0.0", + "dev": true + }, + "is-regex": { + "version": "1.1.4", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-regexp": { + "version": "2.1.0", + "dev": true + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-stream": { + "version": "2.0.1", + "dev": true + }, + "is-string": { + "version": "1.0.7", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-text-path": { + "version": "1.0.1", + "dev": true, + "requires": { + "text-extensions": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "dev": true + }, + "is-weakref": { + "version": "1.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-wsl": { + "version": "2.2.0", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + }, + "dependencies": { + "is-docker": { + "version": "2.2.1", + "dev": true + } + } + }, + "is-yarn-global": { + "version": "0.3.0", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "dev": true + }, + "isbinaryfile": { + "version": "4.0.10", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "dev": true + }, + "jake": { + "version": "10.8.5", + "dev": true, + "requires": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + } + }, + "js-tokens": { + "version": "4.0.0", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "requires": { + "argparse": "^2.0.1" + } + }, + "jsesc": { + "version": "2.5.2", + "dev": true + }, + "json-buffer": { + "version": "3.0.0", + "dev": true + }, + "json-fixer": { + "version": "1.6.15", + "dev": true, + "requires": { + "@babel/runtime": "^7.18.9", + "chalk": "^4.1.2", + "pegjs": "^0.10.0" + } + }, + "json-parse-better-errors": { + "version": "1.0.2", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "dev": true + }, + "json-schema-typed": { + "version": "7.0.3" + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "devOptional": true + }, + "json5": { + "version": "2.2.1", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonparse": { + "version": "1.3.1", + "dev": true + }, + "JSONStream": { + "version": "1.3.5", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "jszip": { + "version": "3.10.1", + "dev": true, + "requires": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "keyv": { + "version": "3.1.0", + "dev": true, + "requires": { + "json-buffer": "3.0.0" + } + }, + "kind-of": { + "version": "6.0.3", + "dev": true + }, + "klona": { + "version": "2.0.5", + "dev": true + }, + "known-css-properties": { + "version": "0.25.0", + "dev": true + }, + "latest-version": { + "version": "5.1.0", + "dev": true, + "requires": { + "package-json": "^6.3.0" + } + }, + "lazy-val": { + "version": "1.0.5" + }, + "levn": { + "version": "0.4.1", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lie": { + "version": "3.3.0", + "dev": true, + "requires": { + "immediate": "~3.0.5" + } + }, + "lines-and-columns": { + "version": "1.2.4", + "dev": true + }, + "load-json-file": { + "version": "4.0.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "dev": true + } + } + }, + "loader-runner": { + "version": "4.3.0", + "dev": true + }, + "loader-utils": { + "version": "2.0.4", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "locate-path": { + "version": "2.0.0", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "dev": true + }, + "lodash.escaperegexp": { + "version": "4.1.2" + }, + "lodash.isequal": { + "version": "4.5.0" + }, + "lodash.ismatch": { + "version": "4.4.0", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "dev": true + }, + "lodash.truncate": { + "version": "4.4.2", + "dev": true + }, + "log-update": { + "version": "2.3.0", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "cli-cursor": "^2.0.0", + "wrap-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-escapes": { + "version": "3.2.0", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "dev": true + }, + "onetime": { + "version": "2.0.1", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "restore-cursor": { + "version": "2.0.0", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + } + } + }, + "lower-case": { + "version": "2.0.2", + "dev": true, + "requires": { + "tslib": "^2.0.3" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "requires": { + "yallist": "^4.0.0" + } + }, + "magic-string": { + "version": "0.25.9", + "requires": { + "sourcemap-codec": "^1.4.8" + } + }, + "make-dir": { + "version": "3.1.0", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "map-obj": { + "version": "4.3.0", + "dev": true + }, + "matcher": { + "version": "3.0.0", + "optional": true, + "requires": { + "escape-string-regexp": "^4.0.0" + } + }, + "mathml-tag-names": { + "version": "2.1.3", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "dev": true + }, + "memfs": { + "version": "3.4.12", + "dev": true, + "requires": { + "fs-monkey": "^1.0.3" + } + }, + "meow": { + "version": "8.1.2", + "dev": true, + "requires": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "normalize-package-data": { + "version": "3.0.3", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + } + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "dev": true + }, + "parse-json": { + "version": "5.2.0", + "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" + } + }, + "path-exists": { + "version": "4.0.0", + "dev": true + }, + "read-pkg": { + "version": "5.2.0", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "2.8.9", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "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" + } + }, + "semver": { + "version": "5.7.1", + "dev": true + }, + "type-fest": { + "version": "0.6.0", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "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", + "dev": true + } + } + }, + "semver": { + "version": "7.3.8", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "type-fest": { + "version": "0.18.1", + "dev": true + } + } + }, + "merge-descriptors": { + "version": "1.0.1", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "dev": true + }, + "methods": { + "version": "1.1.2", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime-db": { + "version": "1.52.0", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "3.1.0" + }, + "mimic-response": { + "version": "1.0.1" + }, + "min-indent": { + "version": "1.0.1", + "dev": true + }, + "mini-css-extract-plugin": { + "version": "2.4.7", + "dev": true, + "requires": { + "schema-utils": "^4.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.2", + "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", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "dev": true + }, + "schema-utils": { + "version": "4.0.0", + "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", + "dev": true + }, + "minimatch": { + "version": "3.0.8", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.7" + }, + "minimist-options": { + "version": "4.1.0", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + } + }, + "mkdirp": { + "version": "0.5.6", + "requires": { + "minimist": "^1.2.6" + } + }, + "modify-values": { + "version": "1.0.1", + "dev": true + }, + "moment": { + "version": "2.29.4" + }, + "ms": { + "version": "2.1.3", + "dev": true + }, + "multicast-dns": { + "version": "7.2.5", + "dev": true, + "requires": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + } + }, + "mute-stream": { + "version": "0.0.8", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "dev": true + }, + "negotiator": { + "version": "0.6.3", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "dev": true + }, + "no-case": { + "version": "3.0.4", + "dev": true, + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node-fetch": { + "version": "2.6.7", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "node-forge": { + "version": "1.3.1", + "dev": true + }, + "node-loader": { + "version": "2.0.0", + "dev": true, + "requires": { + "loader-utils": "^2.0.0" + } + }, + "node-releases": { + "version": "2.0.6", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "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": { + "hosted-git-info": { + "version": "2.8.9", + "dev": true + }, + "semver": { + "version": "5.7.1", + "dev": true + } + } + }, + "normalize-path": { + "version": "3.0.0", + "dev": true + }, + "normalize-url": { + "version": "4.5.1", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "nth-check": { + "version": "2.1.1", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "null-check": { + "version": "1.0.0", + "dev": true + }, + "object-inspect": { + "version": "1.12.2", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "devOptional": true + }, + "object.assign": { + "version": "4.1.4", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "object.values": { + "version": "1.1.6", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "obuf": { + "version": "1.1.2", + "dev": true + }, + "on-finished": { + "version": "2.4.1", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "dev": true + }, + "once": { + "version": "1.4.0", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "requires": { + "mimic-fn": "^2.1.0" + }, + "dependencies": { + "mimic-fn": { + "version": "2.1.0" + } + } + }, + "open": { + "version": "8.4.0", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "dependencies": { + "is-docker": { + "version": "2.2.1", + "dev": true + } + } + }, + "optionator": { + "version": "0.9.1", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "dev": true + }, + "p-cancelable": { + "version": "1.1.0", + "dev": true + }, + "p-limit": { + "version": "1.3.0", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-retry": { + "version": "4.6.2", + "dev": true, + "requires": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "dependencies": { + "retry": { + "version": "0.13.1", + "dev": true + } + } + }, + "p-try": { + "version": "1.0.0", + "dev": true + }, + "package-json": { + "version": "6.5.0", + "dev": true, + "requires": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + } + }, + "pako": { + "version": "1.0.11", + "dev": true + }, + "param-case": { + "version": "3.0.4", + "dev": true, + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "parent-module": { + "version": "1.0.1", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parseurl": { + "version": "1.3.3", + "dev": true + }, + "pascal-case": { + "version": "3.1.2", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "path-exists": { + "version": "3.0.0" + }, + "path-is-absolute": { + "version": "1.0.1", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "dev": true + }, + "pegjs": { + "version": "0.10.0", + "dev": true + }, + "pend": { + "version": "1.2.0" + }, + "picocolors": { + "version": "1.0.0" + }, + "picomatch": { + "version": "2.3.1", + "dev": true + }, + "pify": { + "version": "5.0.0", + "dev": true + }, + "pinia": { + "version": "2.0.28", + "requires": { + "@vue/devtools-api": "^6.4.5", + "vue-demi": "*" + }, + "dependencies": { + "vue-demi": { + "version": "0.13.11", + "requires": {} + } + } + }, + "pkg-dir": { + "version": "4.2.0", + "dev": true, + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "dev": true + } + } + }, + "pkg-up": { + "version": "3.1.0", + "requires": { + "find-up": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0" + } + } + }, + "playwright": { + "version": "1.28.1", + "dev": true, + "requires": { + "playwright-core": "1.28.1" + } + }, + "playwright-core": { + "version": "1.28.1", + "dev": true + }, + "postcss": { + "version": "8.4.19", + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "dependencies": { + "nanoid": { + "version": "3.3.4" + } + } + }, + "postcss-html": { + "version": "1.5.0", + "dev": true, + "requires": { + "htmlparser2": "^8.0.0", + "js-tokens": "^8.0.0", + "postcss": "^8.4.0", + "postcss-safe-parser": "^6.0.0" + }, + "dependencies": { + "js-tokens": { + "version": "8.0.0", + "dev": true + } + } + }, + "postcss-media-query-parser": { + "version": "0.2.3", + "dev": true + }, + "postcss-modules-extract-imports": { + "version": "3.0.0", + "dev": true, + "requires": {} + }, + "postcss-modules-local-by-default": { + "version": "4.0.0", + "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", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "dev": true, + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-resolve-nested-selector": { + "version": "0.1.1", + "dev": true + }, + "postcss-safe-parser": { + "version": "6.0.0", + "dev": true, + "requires": {} + }, + "postcss-selector-parser": { + "version": "6.0.11", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "dev": true + }, + "prepend-http": { + "version": "2.0.0", + "dev": true + }, + "pretty-error": { + "version": "4.0.0", + "dev": true, + "requires": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "process-nextick-args": { + "version": "2.0.1", + "dev": true + }, + "progress": { + "version": "2.0.3" + }, + "progress-webpack-plugin": { + "version": "1.0.16", + "dev": true, + "requires": { + "chalk": "^2.1.0", + "figures": "^2.0.0", + "log-update": "^2.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "dev": true + }, + "figures": { + "version": "2.0.0", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "has-flag": { + "version": "3.0.0", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "proxy-addr": { + "version": "2.0.7", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "dependencies": { + "ipaddr.js": { + "version": "1.9.1", + "dev": true + } + } + }, + "pump": { + "version": "3.0.0", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1" + }, + "pupa": { + "version": "2.1.1", + "dev": true, + "requires": { + "escape-goat": "^2.0.0" + } + }, + "q": { + "version": "1.5.1", + "dev": true + }, + "qs": { + "version": "6.11.0", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "queue-microtask": { + "version": "1.2.3", + "dev": true + }, + "quick-lru": { + "version": "4.0.1", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "dev": true + }, + "raw-body": { + "version": "2.5.1", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, + "rc": { + "version": "1.2.8", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "strip-json-comments": { + "version": "2.0.1", + "dev": true + } + } + }, + "read-config-file": { + "version": "6.0.0", + "dev": true, + "requires": { + "dotenv": "^8.2.0", + "dotenv-expand": "^5.1.0", + "js-yaml": "^3.13.1", + "json5": "^2.1.2", + "lazy-val": "^1.0.4" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "dotenv": { + "version": "8.6.0", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "dev": true + } + } + }, + "read-pkg": { + "version": "3.0.0", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "dependencies": { + "path-type": { + "version": "3.0.0", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "3.0.0", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + } + }, + "readable-stream": { + "version": "2.3.7", + "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" + } + }, + "readdirp": { + "version": "3.6.0", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "rechoir": { + "version": "0.7.1", + "dev": true, + "requires": { + "resolve": "^1.9.0" + } + }, + "redent": { + "version": "3.0.0", + "dev": true, + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + } + }, + "regenerate": { + "version": "1.4.2", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "10.1.0", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.13.11", + "dev": true + }, + "regenerator-transform": { + "version": "0.15.1", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regexp.prototype.flags": { + "version": "1.4.3", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, + "regexpp": { + "version": "3.2.0", + "dev": true + }, + "regexpu-core": { + "version": "5.2.2", + "dev": true, + "requires": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsgen": "^0.7.1", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + } + }, + "registry-auth-token": { + "version": "4.2.2", + "dev": true, + "requires": { + "rc": "1.2.8" + } + }, + "registry-url": { + "version": "5.1.0", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "regjsgen": { + "version": "0.7.1", + "dev": true + }, + "regjsparser": { + "version": "0.9.1", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "dev": true + } + } + }, + "relateurl": { + "version": "0.2.7", + "dev": true + }, + "renderkid": { + "version": "3.0.0", + "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" + }, + "dependencies": { + "dom-serializer": { + "version": "1.4.1", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domhandler": { + "version": "4.3.1", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "entities": { + "version": "2.2.0", + "dev": true + }, + "htmlparser2": { + "version": "6.1.0", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + } + } + }, + "require-directory": { + "version": "2.1.1", + "dev": true + }, + "require-from-string": { + "version": "2.0.2" + }, + "require-main-filename": { + "version": "2.0.0", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "dev": true + }, + "resolve": { + "version": "1.22.1", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-alpn": { + "version": "1.2.1" + }, + "resolve-cwd": { + "version": "3.0.0", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "dev": true + } + } + }, + "resolve-from": { + "version": "4.0.0", + "dev": true + }, + "responselike": { + "version": "1.0.2", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "restore-cursor": { + "version": "3.1.0", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "reusify": { + "version": "1.0.4", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "roarr": { + "version": "2.15.4", + "optional": true, + "requires": { + "boolean": "^3.0.1", + "detect-node": "^2.0.4", + "globalthis": "^1.0.1", + "json-stringify-safe": "^5.0.1", + "semver-compare": "^1.0.0", + "sprintf-js": "^1.1.2" + } + }, + "run-async": { + "version": "2.4.1", + "dev": true + }, + "run-parallel": { + "version": "1.2.0", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rxjs": { + "version": "6.6.7", + "dev": true, + "requires": { + "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "dev": true + } + } + }, + "safe-buffer": { + "version": "5.1.2", + "dev": true + }, + "safe-regex-test": { + "version": "1.0.0", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + } + }, + "safer-buffer": { + "version": "2.1.2" + }, + "sanitize-filename": { + "version": "1.6.3", + "dev": true, + "requires": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "sass": { + "version": "1.42.1", + "dev": true, + "requires": { + "chokidar": ">=3.0.0 <4.0.0" + } + }, + "sass-loader": { + "version": "12.3.0", + "dev": true, + "requires": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + } + }, + "sax": { + "version": "1.2.4" + }, + "schema-utils": { + "version": "2.7.1", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + }, + "select-hose": { + "version": "2.0.0", + "dev": true + }, + "selfsigned": { + "version": "2.1.1", + "dev": true, + "requires": { + "node-forge": "^1" + } + }, + "semver": { + "version": "6.3.0" + }, + "semver-compare": { + "version": "1.0.0", + "optional": true + }, + "semver-diff": { + "version": "3.1.1", + "dev": true, + "requires": { + "semver": "^6.3.0" + } + }, + "send": { + "version": "0.18.0", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "mime": { + "version": "1.6.0", + "dev": true + } + } + }, + "serialize-error": { + "version": "7.0.1", + "optional": true, + "requires": { + "type-fest": "^0.13.1" + }, + "dependencies": { + "type-fest": { + "version": "0.13.1", + "optional": true + } + } + }, + "serve-index": { + "version": "1.9.1", + "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", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "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", + "dev": true + }, + "ms": { + "version": "2.0.0", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "dev": true + }, + "statuses": { + "version": "1.5.0", + "dev": true + } + } + }, + "serve-static": { + "version": "1.15.0", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "dev": true + }, + "setimmediate": { + "version": "1.0.5", + "dev": true + }, + "setprototypeof": { + "version": "1.2.0", + "dev": true + }, + "shallow-clone": { + "version": "3.0.1", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "shebang-command": { + "version": "2.0.0", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7", + "dev": true + }, + "slash": { + "version": "3.0.0", + "dev": true + }, + "sockjs": { + "version": "0.3.24", + "dev": true, + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "source-map": { + "version": "0.6.1" + }, + "source-map-js": { + "version": "1.0.2" + }, + "source-map-support": { + "version": "0.5.21", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "sourcemap-codec": { + "version": "1.4.8" + }, + "spdx-correct": { + "version": "3.1.1", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.12", + "dev": true + }, + "spdy": { + "version": "4.0.2", + "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", + "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" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "split": { + "version": "1.0.1", + "dev": true, + "requires": { + "through": "2" + } + }, + "sprintf-js": { + "version": "1.1.2", + "optional": true + }, + "standard-version": { + "version": "9.3.2", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "conventional-changelog": "3.1.24", + "conventional-changelog-config-spec": "2.1.0", + "conventional-changelog-conventionalcommits": "4.6.1", + "conventional-recommended-bump": "6.1.0", + "detect-indent": "^6.0.0", + "detect-newline": "^3.1.0", + "dotgitignore": "^2.1.0", + "figures": "^3.1.0", + "find-up": "^5.0.0", + "fs-access": "^1.0.1", + "git-semver-tags": "^4.0.0", + "semver": "^7.1.1", + "stringify-package": "^1.0.1", + "yargs": "^16.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "cliui": { + "version": "7.0.4", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "dev": true + }, + "find-up": { + "version": "5.0.0", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "dev": true + }, + "locate-path": { + "version": "6.0.0", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "path-exists": { + "version": "4.0.0", + "dev": true + }, + "semver": { + "version": "7.3.8", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "supports-color": { + "version": "5.5.0", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "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", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + } + } + }, + "y18n": { + "version": "5.0.8", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "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" + } + } + } + }, + "stat-mode": { + "version": "1.0.0", + "dev": true + }, + "statuses": { + "version": "2.0.1", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "string-width": { + "version": "4.2.3", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string.prototype.trimend": { + "version": "1.0.6", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "string.prototype.trimstart": { + "version": "1.0.6", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "stringify-package": { + "version": "1.0.1", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "dev": true + }, + "strip-indent": { + "version": "3.0.0", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "dev": true + }, + "style-loader": { + "version": "3.3.1", + "dev": true, + "requires": {} + }, + "style-search": { + "version": "0.1.0", + "dev": true + }, + "stylelint": { + "version": "14.9.1", + "dev": true, + "requires": { + "@csstools/selector-specificity": "^2.0.1", + "balanced-match": "^2.0.0", + "colord": "^2.9.2", + "cosmiconfig": "^7.0.1", + "css-functions-list": "^3.1.0", + "debug": "^4.3.4", + "execall": "^2.0.0", + "fast-glob": "^3.2.11", + "fastest-levenshtein": "^1.0.12", + "file-entry-cache": "^6.0.1", + "get-stdin": "^8.0.0", + "global-modules": "^2.0.0", + "globby": "^11.1.0", + "globjoin": "^0.1.4", + "html-tags": "^3.2.0", + "ignore": "^5.2.0", + "import-lazy": "^4.0.0", + "imurmurhash": "^0.1.4", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.25.0", + "mathml-tag-names": "^2.1.3", + "meow": "^9.0.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.14", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-safe-parser": "^6.0.0", + "postcss-selector-parser": "^6.0.10", + "postcss-value-parser": "^4.2.0", + "resolve-from": "^5.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "style-search": "^0.1.0", + "supports-hyperlinks": "^2.2.0", + "svg-tags": "^1.0.0", + "table": "^6.8.0", + "v8-compile-cache": "^2.3.0", + "write-file-atomic": "^4.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "2.0.0", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "meow": { + "version": "9.0.0", + "dev": true, + "requires": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + } + }, + "normalize-package-data": { + "version": "3.0.3", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + } + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "dev": true + }, + "parse-json": { + "version": "5.2.0", + "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" + } + }, + "path-exists": { + "version": "4.0.0", + "dev": true + }, + "read-pkg": { + "version": "5.2.0", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "2.8.9", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "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" + } + }, + "semver": { + "version": "5.7.1", + "dev": true + }, + "type-fest": { + "version": "0.6.0", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "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", + "dev": true + } + } + }, + "resolve-from": { + "version": "5.0.0", + "dev": true + }, + "semver": { + "version": "7.3.8", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "type-fest": { + "version": "0.18.1", + "dev": true + } + } + }, + "stylelint-config-html": { + "version": "1.1.0", + "dev": true, + "requires": {} + }, + "stylelint-config-recommended": { + "version": "8.0.0", + "dev": true, + "requires": {} + }, + "stylelint-config-recommended-vue": { + "version": "1.4.0", + "dev": true, + "requires": { + "semver": "^7.3.5", + "stylelint-config-html": ">=1.0.0", + "stylelint-config-recommended": ">=6.0.0" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "stylelint-config-recommended": { + "version": "9.0.0", + "dev": true, + "requires": {} + } + } + }, + "stylelint-config-standard": { + "version": "26.0.0", + "dev": true, + "requires": { + "stylelint-config-recommended": "^8.0.0" + } + }, + "stylelint-scss": { + "version": "4.3.0", + "dev": true, + "requires": { + "lodash": "^4.17.21", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-selector-parser": "^6.0.6", + "postcss-value-parser": "^4.1.0" + } + }, + "sumchecker": { + "version": "3.0.1", + "requires": { + "debug": "^4.1.0" + } + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-hyperlinks": { + "version": "2.3.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true + }, + "svg-tags": { + "version": "1.0.0", + "dev": true + }, + "table": { + "version": "6.8.1", + "dev": true, + "requires": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ajv": { + "version": "8.11.2", + "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", + "dev": true + }, + "slice-ansi": { + "version": "4.0.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + } + } + }, + "tapable": { + "version": "2.2.1", + "dev": true + }, + "temp-file": { + "version": "3.4.0", + "dev": true, + "requires": { + "async-exit-hook": "^2.0.1", + "fs-extra": "^10.0.0" + }, + "dependencies": { + "fs-extra": { + "version": "10.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "dev": true + } + } + }, + "terser": { + "version": "5.16.1", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "acorn": { + "version": "8.8.1", + "dev": true + }, + "commander": { + "version": "2.20.3", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "5.3.6", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.14", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.14.1" + }, + "dependencies": { + "jest-worker": { + "version": "27.5.1", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "schema-utils": { + "version": "3.1.1", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "serialize-javascript": { + "version": "6.0.0", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "supports-color": { + "version": "8.1.1", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "text-extensions": { + "version": "1.9.0", + "dev": true + }, + "text-table": { + "version": "0.2.0", + "dev": true + }, + "through": { + "version": "2.3.8", + "dev": true + }, + "through2": { + "version": "4.0.2", + "dev": true, + "requires": { + "readable-stream": "3" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "thunky": { + "version": "1.1.0", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "dev": true + }, + "to-readable-stream": { + "version": "1.0.0", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "dev": true + }, + "tr46": { + "version": "0.0.3", + "dev": true + }, + "tree-kill": { + "version": "1.2.2", + "dev": true + }, + "trim-newlines": { + "version": "3.0.1", + "dev": true + }, + "truncate-utf8-bytes": { + "version": "1.0.2", + "dev": true, + "requires": { + "utf8-byte-length": "^1.0.1" + } + }, + "ts-loader": { + "version": "9.2.9", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "tsconfig-paths": { + "version": "3.14.1", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "tslib": { + "version": "2.4.1", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "dev": true + } + } + }, + "type-check": { + "version": "0.4.0", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "2.19.0" + }, + "type-is": { + "version": "1.6.18", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray": { + "version": "0.0.6", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typescript": { + "version": "4.6.4", + "devOptional": true + }, + "uglify-js": { + "version": "3.17.4", + "dev": true, + "optional": true + }, + "unbox-primitive": { + "version": "1.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "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.1.0", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "dev": true + }, + "unique-string": { + "version": "2.0.0", + "dev": true, + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "universalify": { + "version": "0.1.2" + }, + "unpipe": { + "version": "1.0.0", + "dev": true + }, + "unzip-crx-3": { + "version": "0.2.0", + "dev": true, + "requires": { + "jszip": "^3.1.0", + "mkdirp": "^0.5.1", + "yaku": "^0.16.6" + } + }, + "update-browserslist-db": { + "version": "1.0.10", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "update-notifier": { + "version": "5.1.0", + "dev": true, + "requires": { + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "dependencies": { + "import-lazy": { + "version": "2.1.0", + "dev": true + }, + "semver": { + "version": "7.3.8", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "uri-js": { + "version": "4.4.1", + "requires": { + "punycode": "^2.1.0" + } + }, + "url-parse-lax": { + "version": "3.0.0", + "dev": true, + "requires": { + "prepend-http": "^2.0.0" + } + }, + "utf8-byte-length": { + "version": "1.0.4", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "dev": true + }, + "utila": { + "version": "0.4.0", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "dev": true + }, + "uuid": { + "version": "8.3.2", + "dev": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "vary": { + "version": "1.1.2", + "dev": true + }, + "vue": { + "version": "3.2.45", + "requires": { + "@vue/compiler-dom": "3.2.45", + "@vue/compiler-sfc": "3.2.45", + "@vue/runtime-dom": "3.2.45", + "@vue/server-renderer": "3.2.45", + "@vue/shared": "3.2.45" + } + }, + "vue-eslint-parser": { + "version": "8.3.0", + "dev": true, + "requires": { + "debug": "^4.3.2", + "eslint-scope": "^7.0.0", + "eslint-visitor-keys": "^3.1.0", + "espree": "^9.0.0", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.5" + }, + "dependencies": { + "acorn": { + "version": "8.8.1", + "dev": true + }, + "eslint-scope": { + "version": "7.1.1", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "dev": true + }, + "espree": { + "version": "9.4.1", + "dev": true, + "requires": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + } + }, + "estraverse": { + "version": "5.3.0", + "dev": true + }, + "semver": { + "version": "7.3.8", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "vue-i18n": { + "version": "9.2.2", + "requires": { + "@intlify/core-base": "9.2.2", + "@intlify/shared": "9.2.2", + "@intlify/vue-devtools": "9.2.2", + "@vue/devtools-api": "^6.2.1" + } + }, + "vue-loader": { + "version": "16.8.3", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "hash-sum": "^2.0.0", + "loader-utils": "^2.0.0" + } + }, + "vue-resize": { + "version": "2.0.0-alpha.1", + "requires": {} + }, + "watchpack": { + "version": "2.4.0", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "wbuf": { + "version": "1.7.3", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "webidl-conversions": { + "version": "3.0.1", + "dev": true + }, + "webpack": { + "version": "5.72.1", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@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.9.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-even-better-errors": "^2.3.1", + "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.3" + }, + "dependencies": { + "@types/estree": { + "version": "0.0.51", + "dev": true + }, + "acorn": { + "version": "8.8.1", + "dev": true + }, + "acorn-import-assertions": { + "version": "1.8.0", + "dev": true, + "requires": {} + }, + "schema-utils": { + "version": "3.1.1", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "webpack-cli": { + "version": "4.9.2", + "dev": true, + "requires": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.1.1", + "@webpack-cli/info": "^1.4.1", + "@webpack-cli/serve": "^1.6.1", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "execa": "^5.0.0", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "dev": true + } + } + }, + "webpack-dev-middleware": { + "version": "5.3.3", + "dev": true, + "requires": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.2", + "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", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "dev": true + }, + "schema-utils": { + "version": "4.0.0", + "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.11.1", + "dev": true, + "requires": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.4.2" + }, + "dependencies": { + "ajv": { + "version": "8.11.2", + "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", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "dev": true + }, + "schema-utils": { + "version": "4.0.0", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + } + } + }, + "webpack-merge": { + "version": "5.8.0", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + } + }, + "webpack-sources": { + "version": "3.2.3", + "dev": true + }, + "websocket-driver": { + "version": "0.7.4", + "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", + "dev": true + }, + "whatwg-url": { + "version": "5.0.0", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "which": { + "version": "2.0.2", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-module": { + "version": "2.0.0", + "dev": true + }, + "widest-line": { + "version": "3.1.0", + "dev": true, + "requires": { + "string-width": "^4.0.0" + } + }, + "wildcard": { + "version": "2.0.0", + "dev": true + }, + "word-wrap": { + "version": "1.2.3", + "dev": true + }, + "wordwrap": { + "version": "1.0.0", + "dev": true + }, + "wrap-ansi": { + "version": "3.0.1", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.1", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2" + }, + "write-file-atomic": { + "version": "4.0.2", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } + }, + "ws": { + "version": "8.4.2", + "dev": true, + "requires": {} + }, + "xdg-basedir": { + "version": "4.0.0", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "dev": true + }, + "xvfb-maybe": { + "version": "0.2.1", + "dev": true, + "requires": { + "debug": "^2.2.0", + "which": "^1.2.4" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + }, + "which": { + "version": "1.3.1", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "y18n": { + "version": "4.0.3", + "dev": true + }, + "yaku": { + "version": "0.16.7", + "dev": true + }, + "yallist": { + "version": "4.0.0" + }, + "yaml": { + "version": "1.10.2", + "dev": true + }, + "yargs": { + "version": "15.4.1", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "dev": true + }, + "yargs-parser": { + "version": "18.1.3", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "yargs-parser": { + "version": "20.2.9", + "dev": true + }, + "yauzl": { + "version": "2.10.0", + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "yocto-queue": { + "version": "0.1.0", + "dev": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..4908a21 --- /dev/null +++ b/package.json @@ -0,0 +1,178 @@ +{ + "name": "mizar", + "productName": "Mizar TCP Debugger", + "version": "1.0.0", + "description": "A TCP client/server debug tool", + "license": "MIT", + "scripts": { + "debug": "npm run rebuild:electron && npm run debug-runner", + "debug-runner": "node scripts/devRunner.js --remote-debug", + "compile": "npm run compile:main && npm run compile:workers && npm run compile:renderer", + "compile:main": "webpack --mode=production --config webpack.main.config.js", + "compile:workers": "webpack --mode=production --config webpack.workers.config.js", + "compile:renderer": "webpack --mode=production --config webpack.renderer.config.js", + "build": "cross-env NODE_ENV=production npm run compile && electron-builder --publish never", + "build:appx": "npm run build -- --win appx", + "rebuild:electron": "rimraf ./dist && npm run postinstall && npm run devtools:install", + "release": "standard-version", + "release:pre": "npm run release -- --prerelease alpha", + "devtools:install": "node scripts/devtoolsInstaller", + "postinstall": "electron-builder install-app-deps", + "test:e2e": "npm run compile && npm run test:e2e-dry", + "test:e2e-dry": "xvfb-maybe -- playwright test", + "lint": "eslint . --ext .js,.ts,.vue && stylelint \"./src/**/*.{css,scss,sass,vue}\"", + "lint:fix": "eslint . --ext .js,.ts,.vue --fix && stylelint \"./src/**/*.{css,scss,sass,vue}\" --fix", + "contributors:add": "all-contributors add", + "contributors:generate": "all-contributors generate" + }, + "author": "Fabio Di Stasio ", + "main": "./dist/main.js", + "mizar": { + "devtoolsId": "nhdogjmejiglipccpnnnanhbledajbpd" + }, + "build": { + "appId": "com.fabio286.mizar", + "artifactName": "${productName}-${version}-${os}_${arch}.${ext}", + "asar": true, + "buildDependenciesFromSource": true, + "directories": { + "output": "build", + "buildResources": "assets" + }, + "asarUnpack": "**\\*.{node,dll}", + "files": [ + "dist/**/*", + "node_modules", + "package.json" + ], + "win": { + "target": [ + "nsis", + "portable" + ] + }, + "linux": { + "target": [ + { + "target": "deb", + "arch": [ + "x64", + "armv7l", + "arm64" + ] + }, + { + "target": "AppImage", + "arch": [ + "x64", + "armv7l", + "arm64" + ] + } + ], + "icon": "assets/linux", + "category": "Development" + }, + "appImage": { + "license": "./LICENSE", + "category": "Development" + }, + "nsis": { + "license": "./LICENSE", + "installerIcon": "assets/icon.ico", + "uninstallerIcon": "assets/icon.ico", + "installerHeader": "assets/icon.ico" + }, + "portable": { + "artifactName": "${productName}-${version}-portable.exe" + }, + "appx": { + "displayName": "Antares SQL", + "backgroundColor": "transparent", + "showNameOnTiles": true, + "identityName": "62514FabioDiStasio.AntaresSQLClient", + "publisher": "CN=1A2729ED-865C-41D2-9038-39AE2A63AA52", + "applicationId": "FabioDiStasio.AntaresSQLClient" + }, + "dmg": { + "contents": [ + { + "x": 130, + "y": 220 + }, + { + "x": 410, + "y": 220, + "type": "link", + "path": "/Applications" + } + ] + } + }, + "dependencies": { + "@electron/remote": "~2.0.1", + "@mdi/font": "~7.1.96", + "@vueuse/core": "~8.7.5", + "electron-log": "~4.4.1", + "electron-store": "~8.1.0", + "electron-updater": "~4.6.5", + "electron-window-state": "~5.0.3", + "encoding": "~0.1.13", + "floating-vue": "~2.0.0-beta.20", + "moment": "~2.29.4", + "pinia": "~2.0.28", + "source-map-support": "~0.5.20", + "vue": "~3.2.45", + "vue-i18n": "~9.2.2" + }, + "devDependencies": { + "@babel/eslint-parser": "~7.15.7", + "@babel/preset-env": "~7.15.8", + "@babel/preset-typescript": "~7.16.7", + "@playwright/test": "~1.28.1", + "@types/node": "~17.0.23", + "@typescript-eslint/eslint-plugin": "~5.18.0", + "@typescript-eslint/parser": "~5.18.0", + "@vue/compiler-sfc": "~3.2.33", + "all-contributors-cli": "~6.20.0", + "babel-loader": "~8.2.3", + "chalk": "~4.1.2", + "cross-env": "~7.0.2", + "css-loader": "~6.5.0", + "electron": "~22.0.3", + "electron-builder": "~22.10.3", + "eslint": "~7.32.0", + "eslint-config-standard": "~16.0.3", + "eslint-plugin-import": "~2.24.2", + "eslint-plugin-node": "~11.1.0", + "eslint-plugin-promise": "~5.2.0", + "eslint-plugin-vue": "~8.0.3", + "file-loader": "~6.2.0", + "html-webpack-plugin": "~5.5.0", + "mini-css-extract-plugin": "~2.4.5", + "node-loader": "~2.0.0", + "playwright": "~1.28.1", + "playwright-core": "~1.28.1", + "postcss-html": "~1.5.0", + "progress-webpack-plugin": "~1.0.12", + "rimraf": "~3.0.2", + "sass": "~1.42.1", + "sass-loader": "~12.3.0", + "standard-version": "~9.3.1", + "style-loader": "~3.3.1", + "stylelint": "~14.9.1", + "stylelint-config-recommended-vue": "~1.4.0", + "stylelint-config-standard": "~26.0.0", + "stylelint-scss": "~4.3.0", + "tree-kill": "~1.2.2", + "ts-loader": "~9.2.8", + "typescript": "~4.6.3", + "unzip-crx-3": "~0.2.0", + "vue-eslint-parser": "~8.3.0", + "vue-loader": "~16.8.3", + "webpack": "~5.72.0", + "webpack-cli": "~4.9.1", + "webpack-dev-server": "~4.11.1", + "xvfb-maybe": "~0.2.1" + } +} diff --git a/scripts/devRunner.js b/scripts/devRunner.js new file mode 100644 index 0000000..89da976 --- /dev/null +++ b/scripts/devRunner.js @@ -0,0 +1,131 @@ +process.env.NODE_ENV = 'development'; +// process.env.ELECTRON_ENABLE_LOGGING = true +process.env.ELECTRON_DISABLE_SECURITY_WARNINGS = false; + +const chalk = require('chalk'); +const electron = require('electron'); +const webpack = require('webpack'); +const WebpackDevServer = require('webpack-dev-server'); +const kill = require('tree-kill'); + +const path = require('path'); +const { spawn } = require('child_process'); + +const mainConfig = require('../webpack.main.config'); +const rendererConfig = require('../webpack.renderer.config'); +const workersConfig = require('../webpack.workers.config'); + +let electronProcess = null; +let manualRestart = null; +const remoteDebugging = process.argv.includes('--remote-debug'); + +if (remoteDebugging) { + // disable devtools open in electron + process.env.RENDERER_REMOTE_DEBUGGING = true; +} + +async function killElectron (pid) { + return new Promise((resolve, reject) => { + if (pid) { + kill(pid, 'SIGKILL', err => { + if (err) reject(err); + + resolve(); + }); + } + else + resolve(); + }); +} + +async function restartElectron () { + console.log(chalk.gray('\nStarting electron...')); + + const { pid } = electronProcess || {}; + await killElectron(pid); + + electronProcess = spawn(electron, [ + path.join(__dirname, '../dist/main.js'), + // '--enable-logging', // Enable to show logs from all electron processes + remoteDebugging ? '--inspect=9222' : '', + remoteDebugging ? '--remote-debugging-port=9223' : '' + ]); + + electronProcess.stdout.on('data', data => { + console.log(chalk.white(data.toString())); + }); + + electronProcess.stderr.on('data', data => { + console.error(chalk.red(data.toString())); + }); + + electronProcess.on('exit', () => { + if (!manualRestart) process.exit(0); + }); +} + +function startMain () { + const webpackSetup = webpack([mainConfig, workersConfig]); + + webpackSetup.compilers.forEach((compiler) => { + const { name } = compiler; + + switch (name) { + case 'workers': + compiler.hooks.afterEmit.tap('afterEmit', async () => { + console.log(chalk.gray(`\nCompiled ${name} script!`)); + console.log( + chalk.gray(`\nWatching file changes for ${name} script...`) + ); + }); + break; + case 'main': + default: + compiler.hooks.afterEmit.tap('afterEmit', async () => { + console.log(chalk.gray(`\nCompiled ${name} script!`)); + + manualRestart = true; + await restartElectron(); + + setTimeout(() => { + manualRestart = false; + }, 2500); + + console.log( + chalk.gray(`\nWatching file changes for ${name} script...`) + ); + }); + break; + } + }); + + webpackSetup.watch({ aggregateTimeout: 500 }, err => { + if (err) console.error(chalk.red(err)); + }); +} + +function startRenderer (callback) { + const compiler = webpack(rendererConfig); + const { name } = compiler; + + compiler.hooks.afterEmit.tap('afterEmit', () => { + console.log(chalk.gray(`\nCompiled ${name} script!`)); + console.log(chalk.gray(`\nWatching file changes for ${name} script...`)); + }); + + const server = new WebpackDevServer(compiler, { + port: 9080, + client: { + overlay: true, + logging: 'warn' + } + }); + + server.startCallback(err => { + if (err) console.error(chalk.red(err)); + + callback(); + }); +} + +startRenderer(startMain); diff --git a/scripts/devtoolsInstaller.js b/scripts/devtoolsInstaller.js new file mode 100644 index 0000000..3af8068 --- /dev/null +++ b/scripts/devtoolsInstaller.js @@ -0,0 +1,49 @@ +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-nocheck +const fs = require('fs'); +const path = require('path'); +const https = require('https'); +const unzip = require('unzip-crx-3'); +const { antares } = require('../package.json'); + +const extensionID = antares.devtoolsId; +const destFolder = path.resolve(__dirname, `../misc/${extensionID}`); +const filePath = path.resolve(__dirname, `${destFolder}${extensionID}.crx`); +const fileUrl = `https://clients2.google.com/service/update2/crx?response=redirect&acceptformat=crx2,crx3&x=id%3D${extensionID}%26uc&prodversion=32`; +const fileStream = fs.createWriteStream(filePath); + +const downloadFile = url => { + return new Promise((resolve, reject) => { + const request = https.get(url); + + request.on('response', response => { + if (response.statusCode && response.statusCode >= 300 && response.statusCode < 400 && response.headers.location) { + return downloadFile(response.headers.location) + .then(resolve) + .catch(reject); + } + + response.pipe(fileStream); + + response.on('close', () => { + console.log('Devtools download completed!'); + resolve(); + }); + response.on('error', reject); + }); + request.on('error', reject); + request.end(); + }); +}; + +(async () => { + try { + await downloadFile(fileUrl); + await unzip(filePath, destFolder); + fs.unlinkSync(filePath); + fs.unlinkSync(`${destFolder}/package.json`);// <- Avoid to display annoyng npm script in vscode + } + catch (error) { + console.log(error); + } +})(); diff --git a/src/main/libs/Sender.js b/src/main/libs/Sender.js new file mode 100644 index 0000000..dd8c96c --- /dev/null +++ b/src/main/libs/Sender.js @@ -0,0 +1,408 @@ +'use strict'; + +const net = require('net'); +const fs = require('fs'); + +class Sender { + /** + *Creates an instance of Sender. + * @param {*} process Processo dove inviare i log + * @memberof Sender + */ + constructor (process) { + this.process = process; + this.closeOnEcho = true; + this.persistentConnection = false; + this.nMsgs = 0; + this.tMin = 0; + this.tMax = 0; + this.nClients = 1; + this.trace = false; + this.alertReset = false; + this.hexMsg = false; + this.nConnected = 0; + this.nClosed = 0; + this.nTryConnect = 0; + this.nReceived = []; + this.nSent = 0; + this.timeStart = new Date(); + this.hosts = []; + this.messages = []; + this.nHostClients = []; + this.nHostBytes = []; + this.nHostMsgs = []; + this.storagePath = ''; + } + + /** + * Setta gli hosts + * + * @param {*} hosts + * @memberof Sender + */ + setHosts (hosts) { + this.hosts = hosts; + } + + /** + * Setta i parametri del messaggio + * + * @param {*} params + * @memberof Sender + */ + setParams (params) { + this.closeOnEcho = params.closeOnEcho; + this.persistentConnection = params.persistentConnection; + this.nMsgs = params.nMsgs; + this.tMin = params.tMin; + this.tMax = params.tMax; + this.nClients = params.nClients; + this.trace = params.trace; + this.alertReset = params.alertReset; + this.loop = params.loop; + } + + /** + * Setta il percorso della cartella storage + * + * @param {string} storagePath + * @memberof Sender + */ + setStoragePath (storagePath) { + this.storagePath = storagePath; + } + + /** + * Carica i messaggi in memoria + * + * @memberof Sender + */ + loadMessages () { + let self = this; + if (self.trace) this.sendLog('Lettura dei messaggi'); + let messages = fs.readFileSync(`${self.storagePath}/storage/clientMessages.json`); + messages = JSON.parse(messages); + this.messages = messages.filter((message) => { + return message.enabled === true; + }); + if (self.trace) this.sendLog(`Messaggi caricari: ${this.messages.length}`); + } + + /** + * Invia i log al render process + * + * @param {string} message Messaggio del log + * @param {string} [color=''] Colore del log (green, yellow, red) + * @memberof Sender + */ + sendLog (message, color = '') { + let log = { + event: 'log', + content: { message, color } + }; + this.process.send(log); + } + + /** Restituisce un messaggio casuale */ + randMsg () { + let self = this; + if (self.messages.length > 0) { + let index = Math.floor((Math.random() * (self.messages.length))); + let msg; + + switch (self.messages[index].format) { + case 'ascii': + msg = Buffer.from(self.messages[index].message, 'ascii'); + break; + case 'hex': + msg = Buffer.from(self.messages[index].message.replace(/\s|0x/g, ''), 'hex'); + break; + case 'binary': + msg = Buffer.from(self.messages[index].message.replace(/\s/g, ''), 'binary'); + break; + } + + return msg; + } + else return 'Nessun messaggio specificato'; + }; + + /** + * Istanzia i client e invia i messaggi + * + * @param {*} params Parametri dei client + * @memberof Sender + */ + startFullTest (callback) { + let self = this; + + /** Carica in memoria i messaggi */ + self.loadMessages(); + + /** Applica uno sleep */ + function delay () { + let wait = Math.floor((Math.random() * self.tMax) + self.tMin); + return new Promise(resolve => setTimeout(resolve, wait)); + } + + for (let x = 0; x < self.hosts.length; x++) { // hosts for + let params = self.hosts[x]; + self.hosts[x].clients = []; + self.nHostClients[x] = 0; + self.nHostMsgs[x] = self.nHostMsgs[x] === undefined ? 0 : self.nHostMsgs[x]; + self.nHostBytes[x] = self.nHostBytes[x] === undefined ? 0 : self.nHostBytes[x]; + self.nReceived[x] = self.nReceived[x] === undefined ? 0 : self.nReceived[x]; + + for (let i = 0; i < self.nClients; i++) { // clients for + self.hosts[x].clients[i] = new net.Socket(); + let client = self.hosts[x].clients[i]; + let clientId = i + 1; + + try { + client.connect(params, () => { + if (self.trace) self.sendLog(`Socket #${clientId} su ${params.host}:${params.port} aperto`); + self.nHostClients[x]++; + + (async () => { + for (let i = 0; i < self.nMsgs; i++) { // msg for + await delay(); + + let msg = self.randMsg(); + + client.write(msg, err => { + if (err) + self.sendLog(`Socket #${clientId} su ${params.host}:${params.port}:\nErrore messaggio: ${err}`, 'red'); + else { + self.nSent++; + self.nHostMsgs[x]++; + self.nHostBytes[x] += msg.length; + } + }); + + if (self.trace) self.sendLog(`Socket #${clientId} su ${params.host}:${params.port} messaggio #${i + 1}`); + if (i + 1 === self.nMsgs && !self.closeOnEcho && !self.persistentConnection) client.end(); + }// <- msg for + })(); + }); + } + catch (err) { + self.sendLog(`Socket #${clientId} su ${params.host}:${params.port}:\n${err}`, 'red'); + } + + client.on('connect', err => { + self.nTryConnect++; + if (err) + self.sendLog(`Errore connessione #${clientId} su ${params.host}:${params.port}:\n${err}`, 'red'); + else + self.nConnected++; + // if (self.nConnected === (self.nClients * self.hosts.length)) self.getReport(); + }); + + client.on('data', data => { + self.nReceived[x]++; + if (self.closeOnEcho) + client.end(); + + if (self.trace) self.sendLog(`Socket #${clientId} su ${params.host}:${params.port} risposta: ${data}`); + }); + + client.on('close', () => { + self.nClosed++; + if (self.trace) self.sendLog(`Socket #${clientId} su ${params.host}:${params.port} chiuso`); + + // Misura tempo esecuzione + if (self.nClosed === self.nTryConnect) { + if (!self.loop) self.getConsoleReports(); + callback(); + } + }); + + client.on('error', err => { + switch (err.code) { + case 'ECONNRESET': + if (self.alertReset) + self.sendLog(`Socket #${clientId} su ${params.host}:${params.port}:\n${err}`, 'yellow'); + + break; + default: + self.sendLog(`Socket #${clientId} su ${params.host}:${params.port}:\n${err}`, 'red'); + } + }); + }// <- clients for + }// <- hosts for + } + + /** + * Connette i client per il test a step + * + * @param {*} callback + * @memberof Sender + */ + connectClients (callback) { + let self = this; + for (let x = 0; x < self.hosts.length; x++) { // hosts for + let params = self.hosts[x]; + self.hosts[x].clients = []; + self.nHostMsgs[x] = 0; + self.nHostBytes[x] = 0; + self.nHostClients[x] = 0; + self.nReceived[x] = 0; + + for (let i = 0; i < self.nClients; i++) { // clients for + self.hosts[x].clients[i] = new net.Socket(); + let client = self.hosts[x].clients[i]; + let clientId = i + 1; + + try { + client.connect(params, () => { + if (self.trace) self.sendLog(`Socket #${clientId} su ${params.host}:${params.port} aperto`); + self.nHostClients[x]++; + }); + } + catch (err) { + self.sendLog(`Socket #${clientId} su ${params.host}:${params.port}:\n${err}`, 'red'); + } + + client.on('connect', err => { + self.nTryConnect++; + if (err) + self.sendLog(`Errore connessione #${clientId} su ${params.host}:${params.port}:\n${err}`, 'red'); + else + self.nConnected++; + // if (self.nConnected === (self.nClients * self.hosts.length)) self.getReport(); + + if ((self.nClients * self.hosts.length) === self.nTryConnect) callback(); + }); + + client.on('data', data => { + self.nReceived[x]++; + if (self.closeOnEcho) + client.end(); + + if (self.trace) self.sendLog(`Socket #${clientId} su ${params.host}:${params.port} risposta: ${data}`); + }); + + client.on('close', () => { + self.nClosed++; + if (self.trace) self.sendLog(`Socket #${clientId} su ${params.host}:${params.port} chiuso`); + }); + + client.on('error', err => { + switch (err.code) { + case 'ECONNRESET': + if (self.alertReset) + self.sendLog(`Socket #${clientId} su ${params.host}:${params.port}:\n${err}`, 'yellow'); + + break; + default: + self.sendLog(`Socket #${clientId} su ${params.host}:${params.port}:\n${err}`, 'red'); + } + }); + }// <- clients for + }// <- hosts for + } + + /** + * Invia i messaggi nella modalità a step + * + * @param {*} callback + * @memberof Sender + */ + sendMessages (callback) { + let self = this; + + /** Carica in memoria i messaggi */ + self.loadMessages(); + + self.nSent = 0; + + /** Applica uno sleep */ + function delay () { + let wait = Math.floor((Math.random() * self.tMax) + self.tMin); + return new Promise(resolve => setTimeout(resolve, wait)); + } + + for (let x = 0; x < self.hosts.length; x++) { // hosts for + for (let i = 0; i < self.hosts[x].clients.length; i++) { // clients for + let client = self.hosts[x].clients[i]; + let params = self.hosts[x]; + let clientId = i + 1; + + (async () => { + for (let i = 0; i < self.nMsgs; i++) { // msg for + await delay(); + + let msg = self.randMsg(); + + client.write(msg, err => { + if (err) + self.sendLog(`Socket #${clientId} su ${params.host}:${params.port}:\nErrore messaggio: ${err}`, 'red'); + else { + self.nSent++; + self.nHostMsgs[x]++; + self.nHostBytes[x] += msg.length; + if ((self.nMsgs * self.hosts.length * self.nClients) === self.nSent) callback(); + } + }); + + if (self.trace) self.sendLog(`Socket #${clientId} su ${params.host}:${params.port} messaggio #${i + 1}`); + }// <- msg for + })(); + }// <- clients for + }// <- hosts for + } + + /** Genera il report su console */ + getConsoleReports () { + let self = this; + let end = new Date() - self.timeStart; + let report = `Durata del test: ${end}ms`; + + self.sendLog(report, 'green'); + } + + stopClients (callback) { + let self = this; + for (let x = 0; x < self.hosts.length; x++) { + for (let i = 0; i < self.hosts[x].clients.length; i++) + self.hosts[x].clients[i].end(); + } + + self.getConsoleReports(); + callback(); + } + + getReports () { + let self = this; + let reportList = []; + for (let i = 0; i < self.hosts.length; i++) { + let report = { + host: `${self.hosts[i].host}:${self.hosts[i].port}`, + sockets: self.nHostClients[i], + data: self.nHostBytes[i], + messages: self.nHostMsgs[i], + received: self.nReceived[i] + }; + reportList.push(report); + + if ((i + 1) === self.hosts.length) { + let rep = { + event: 'report', + content: reportList + }; + self.process.send(rep); + } + } + } + + resetReports () { + let self = this; + for (let i = 0; i < self.hosts.length; i++) { + self.nHostBytes[i] = 0; + self.nHostMsgs[i] = 0; + self.nHostClients[i] = 0; + self.nReceived[i] = 0; + } + } +} +module.exports = Sender; diff --git a/src/main/libs/Server.js b/src/main/libs/Server.js new file mode 100644 index 0000000..b1d83cb --- /dev/null +++ b/src/main/libs/Server.js @@ -0,0 +1,143 @@ +'use strict'; + +const net = require('net'); + +class Server { + constructor (process) { + this.process = process; + this.trace = false; + this.echo = false; + this.alertReset = false; + this.ports = []; + this.server = []; + this.nBytes = []; + this.nMsgs = []; + } + + /** + * Setta le porte + * + * @param {*} ports + * @memberof Server + */ + setPorts (ports) { + this.ports = ports; + } + + /** + * Invia i log al render process + * + * @param {string} message Messaggio del log + * @param {string} [color=''] Colore del log (green, yellow, red) + * @memberof Server + */ + sendLog (message, color = '') { + let log = { + event: 'log', + content: { message, color } + }; + this.process.send(log); + } + + startServer (params) { + let self = this; + + self.trace = params.trace; + self.echo = params.echo; + self.alertReset = params.alertReset; + + for (let i = 0; i < self.ports.length; i++) { + let port = self.ports[i].port; + + self.server[i] = net.createServer(); + self.nBytes[i] = 0; + self.nMsgs[i] = 0; + + self.server[i].on('connection', socket => { + if (self.trace) self.sendLog(`Client connesso su porta ${port}`); + + socket.on('data', msg => { + let msgString = msg.toString(); + if (self.echo) socket.write(msg); + self.nBytes[i] += msg.length; + self.nMsgs[i]++; + + if (self.trace) self.sendLog(`Messaggio ricevuto su porta ${port}: ${msgString}`); + });// <- socket data + + socket.on('end', () => { + if (self.trace) self.sendLog(`Client disconnesso su porta ${port}`); + }); + + socket.on('error', (err) => { + switch (err.code) { + case 'ECONNRESET': + if (self.alertReset) + self.sendLog(`Errore client su porta ${port}: \n${err}`, 'yellow'); + else + if (self.trace) self.sendLog(`Client disconnesso su porta ${port}`); + break; + default: + self.sendLog(`Errore client su porta ${port}: \n${err}`, 'red'); + } + }); + });// <- server + + self.server[i].on('error', err => { + self.sendLog(`Errore server su porta ${port}: \n${err}`, 'red'); + }); + + self.server[i].listen(port, () => { + self.sendLog(`In ascolto sulla porta ${port}`); + }); + } + } + + stopServer (callback) { + let self = this; + (async () => { + for (let i = 0; i < self.server.length; i++) { + await self.server[i].close(function () { + self.server[i].unref(); + }); + } + callback(); + })(); + } + + getReports () { + let self = this; + let reportList = []; + for (let i = 0; i < self.server.length; i++) { + let report = { + port: self.server[i].address().port, + sockets: null, + data: self.nBytes[i], + messages: self.nMsgs[i] + }; + + self.server[i].getConnections((err, nSockets) => { + if (err) self.sendLog(`Errore report: \n${err}`, 'red'); + report.sockets = nSockets; + reportList.push(report); + + if ((i + 1) === self.server.length) { + let rep = { + event: 'report', + content: reportList + }; + self.process.send(rep); + } + }); + } + } + + resetReports () { + let self = this; + for (let i = 0; i < self.server.length; i++) { + self.nBytes[i] = 0; + self.nMsgs[i] = 0; + } + } +} +module.exports = Server; diff --git a/src/main/main.ts b/src/main/main.ts new file mode 100644 index 0000000..4fbb7b9 --- /dev/null +++ b/src/main/main.ts @@ -0,0 +1,230 @@ +import { app, BrowserWindow, nativeImage, ipcMain } from 'electron'; +import * as fs from 'fs'; +import * as path from 'path'; +import * as Store from 'electron-store'; +import { ChildProcess, fork, Serializable } from 'child_process'; +import * as windowStateKeeper from 'electron-window-state'; +import * as remoteMain from '@electron/remote/main'; + +// import ipcHandlers from './ipc-handlers'; + +Store.initRenderer(); +const settingsStore = new Store({ name: 'settings' }); +const appTheme = settingsStore.get('application_theme'); +const isDevelopment = process.env.NODE_ENV !== 'production'; +const isMacOS = process.platform === 'darwin'; +const isLinux = process.platform === 'linux'; +const isWindows = process.platform === 'win32'; +const gotTheLock = app.requestSingleInstanceLock(); + +process.env.ELECTRON_DISABLE_SECURITY_WARNINGS = 'true'; + +// global reference to mainWindow (necessary to prevent window from being garbage collected) +let mainWindow: BrowserWindow; +let mainWindowState: windowStateKeeper.State; + +async function createMainWindow () { + const icon = require('../renderer/assets/icons/icon.png'); + const window = new BrowserWindow({ + width: mainWindowState.width, + height: mainWindowState.height, + x: mainWindowState.x, + y: mainWindowState.y, + minWidth: 900, + minHeight: 550, + show: !isWindows, + title: 'Mizar', + icon: nativeImage.createFromDataURL(icon.default), + webPreferences: { + nodeIntegration: true, + contextIsolation: false, + devTools: isDevelopment, + spellcheck: false + }, + autoHideMenuBar: true, + titleBarStyle: isLinux ? 'default' :'hidden', + titleBarOverlay: isWindows + ? { + color: appTheme === 'dark' ? '#3f3f3f' : '#fff', + symbolColor: appTheme === 'dark' ? '#fff' : '#000', + height: 30 + } + : false, + trafficLightPosition: isMacOS ? { x: 10, y: 8 } : undefined, + backgroundColor: '#1d1d1d' + }); + + mainWindowState.manage(window); + window.on('moved', saveWindowState); + + remoteMain.enable(window.webContents); + + try { + if (isDevelopment) + await window.loadURL('http://localhost:9080'); + else { + const indexPath = path.resolve(__dirname, 'index.html'); + await window.loadFile(indexPath); + } + } + catch (err) { + console.log(err); + } + + window.on('closed', () => { + window.removeListener('moved', saveWindowState); + mainWindow = null; + }); + + return window; +} + +if (!gotTheLock) app.quit(); +else { + require('@electron/remote/main').initialize(); + + // Initialize ipcHandlers + // ipcHandlers(); + + ipcMain.on('refresh-theme-settings', () => { + const appTheme = settingsStore.get('application_theme'); + if (isWindows && mainWindow) { + mainWindow.setTitleBarOverlay({ + color: appTheme === 'dark' ? '#3f3f3f' : '#fff', + symbolColor: appTheme === 'dark' ? '#fff' : '#000' + }); + } + }); + + ipcMain.on('change-window-title', (_, title: string) => { + if (mainWindow) mainWindow.setTitle(title); + }); + + // quit application when all windows are closed + app.on('window-all-closed', () => { + // on macOS it is common for applications to stay open until the user explicitly quits + if (!isMacOS) app.quit(); + }); + + app.on('activate', async () => { + // on macOS it is common to re-create a window even after all windows have been closed + if (mainWindow === null) + mainWindow = await createMainWindow(); + }); + + // create main BrowserWindow when electron is ready + app.on('ready', async () => { + mainWindowState = windowStateKeeper({ + defaultWidth: 1024, + defaultHeight: 800 + }); + + mainWindow = await createMainWindow(); + + if (isWindows) + mainWindow.show(); + + // if (isDevelopment) + // mainWindow.webContents.openDevTools(); + + process.on('uncaughtException', error => { + mainWindow.webContents.send('unhandled-exception', error); + }); + + process.on('unhandledRejection', error => { + mainWindow.webContents.send('unhandled-exception', error); + }); + }); + + app.on('browser-window-created', (event, window) => { + if (isDevelopment) { + const { mizar } = require('../../package.json'); + const extensionPath = path.resolve(__dirname, `../../misc/${mizar.devtoolsId}`); + window.webContents.session.loadExtension(extensionPath, { allowFileAccess: true }).catch(console.error); + } + }); +} + +// Server +let serverProcess: ChildProcess; +ipcMain.on('startServer', (event, { params, ports }) => { + event.sender.send('serverLog', { message: 'Server avviato', color: '' }); + serverProcess = fork(isDevelopment ? './dist/serverProcess.js' : path.resolve(__dirname, './serverProcess.js'), [], { + execArgv: isDevelopment ? ['--inspect=9224'] : undefined + }); + + const message = { + event: 'start', + params, + ports + }; + serverProcess.send(message); + + serverProcess.on('message', (message: Serializable & {event: string; content: string}) => { + if (!mainWindow) return; + switch (message.event) { + case 'log': + mainWindow.webContents.send('serverLog', message.content); + break; + case 'report': + mainWindow.webContents.send('reportServerList', message.content); + break; + } + }); +}); + +ipcMain.on('stopServer', (event) => { + try { + serverProcess.send({ event: 'stop' }); + event.sender.send('serverFinish', 'Server stoppato'); + } + catch (error) { + serverProcess.kill(); + } +}); + +ipcMain.on('resetReports', () => { + if (!mainWindow) return; + try { + serverProcess.send({ event: 'reset' }); + } + catch (error) { + const data = { + message: error.stack, + color: 'red' + }; + mainWindow.webContents.send('serverLog', data); + } +}); + +ipcMain.on('getPorts', (event) => { + try { + let ports = fs.readFileSync(`${storagePath}/storage/serverPorts.json`); + ports = JSON.parse(ports); + event.sender.send('portList', ports); + } + catch (error) { + const data = { + message: error.stack, + color: 'red' + }; + event.sender.send('serverLog', data); + } +}); + +ipcMain.on('updatePorts', (event, messageList) => { + try { + fs.writeFileSync(`${storagePath}/storage/serverPorts.json`, JSON.stringify(messageList, null, ' ')); + } + catch (error) { + const data = { + message: error.stack, + color: 'red' + }; + event.sender.send('serverLog', data); + } +}); + +function saveWindowState () { + mainWindowState.saveState(mainWindow); +} diff --git a/src/main/workers/clientProcess.js b/src/main/workers/clientProcess.js new file mode 100644 index 0000000..2592c5e --- /dev/null +++ b/src/main/workers/clientProcess.js @@ -0,0 +1,68 @@ +const Sender = require('../classes/Sender'); +Sends = new Sender(process); +let interval = null; + +process.on('message', message => { + switch (message.event) { + case 'start': + Sends.setHosts(message.hosts); + Sends.setParams(message.params); + Sends.setStoragePath(message.storagePath); + + Sends.startFullTest(() => { + let response = { + event: 'finish', + content: 'Test concluso' + }; + process.send(response); + if (interval !== null) clearInterval(interval); + Sends.getReports(); + }); + + Sends.getReports(); + + if (interval === null) { + interval = setInterval(() => { + Sends.getReports(); + }, 200); + } + break; + case 'startStep': + Sends.setHosts(message.hosts); + Sends.setParams(message.params); + Sends.setStoragePath(message.storagePath); + + Sends.connectClients(() => { + let response = { + event: 'log', + content: { message: 'Client connessi', color: '' } + }; + process.send(response); + }); + + Sends.getReports(); + + if (interval === null) { + interval = setInterval(() => { + Sends.getReports(); + }, 200); + } + break; + case 'sendStep': + Sends.sendMessages(() => { + let response = { + event: 'log', + content: { message: 'Messaggi inviati', color: '' } + }; + process.send(response); + }); + break; + case 'stop': + Sends.stopClients(() => { + if (interval !== null) clearInterval(interval); + Sends.getReports(); + process.exit(); + }); + break; + } +}); diff --git a/src/main/workers/exporter.ts b/src/main/workers/exporter.ts new file mode 100644 index 0000000..9f03826 --- /dev/null +++ b/src/main/workers/exporter.ts @@ -0,0 +1,69 @@ +import * as antares from 'common/interfaces/antares'; +import * as fs from 'fs'; +import { MySQLClient } from '../libs/clients/MySQLClient'; +import { PostgreSQLClient } from '../libs/clients/PostgreSQLClient'; +import { ClientsFactory } from '../libs/ClientsFactory'; +import MysqlExporter from '../libs/exporters/sql/MysqlExporter'; +import PostgreSQLExporter from '../libs/exporters/sql/PostgreSQLExporter'; +let exporter: antares.Exporter; + +process.on('message', async ({ type, client, tables, options }) => { + if (type === 'init') { + const connection = await ClientsFactory.getClient({ + client: client.name, + params: client.config, + poolSize: 5 + }) as MySQLClient | PostgreSQLClient; + await connection.connect(); + + switch (client.name) { + case 'mysql': + case 'maria': + exporter = new MysqlExporter(connection as MySQLClient, tables, options); + break; + case 'pg': + exporter = new PostgreSQLExporter(connection as PostgreSQLClient, tables, options); + break; + default: + process.send({ + type: 'error', + payload: `"${client.name}" exporter not aviable` + }); + return; + } + + exporter.once('error', err => { + console.error(err); + process.send({ + type: 'error', + payload: err.toString() + }); + }); + + exporter.once('end', () => { + process.send({ + type: 'end', + payload: { cancelled: exporter.isCancelled } + }); + connection.destroy(); + }); + + exporter.once('cancel', () => { + fs.unlinkSync(exporter.outputFile); + process.send({ type: 'cancel' }); + }); + + exporter.on('progress', state => { + process.send({ + type: 'export-progress', + payload: state + }); + }); + + exporter.run(); + } + else if (type === 'cancel') + exporter.cancel(); +}); + +process.on('beforeExit', console.log); diff --git a/src/main/workers/importer.ts b/src/main/workers/importer.ts new file mode 100644 index 0000000..47500af --- /dev/null +++ b/src/main/workers/importer.ts @@ -0,0 +1,111 @@ +import * as antares from 'common/interfaces/antares'; +import * as pg from 'pg'; +import * as mysql from 'mysql2'; +import { MySQLClient } from '../libs/clients/MySQLClient'; +import { PostgreSQLClient } from '../libs/clients/PostgreSQLClient'; +import { ClientsFactory } from '../libs/ClientsFactory'; +import MySQLImporter from '../libs/importers/sql/MySQLlImporter'; +import PostgreSQLImporter from '../libs/importers/sql/PostgreSQLImporter'; +import SSHConfig from 'ssh2-promise/lib/sshConfig'; +import { ImportOptions } from 'common/interfaces/importer'; +let importer: antares.Importer; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +process.on('message', async ({ type, dbConfig, options }: { + type: string; + dbConfig: mysql.ConnectionOptions & { schema: string; ssl?: mysql.SslOptions; ssh?: SSHConfig; readonly: boolean } + | pg.ClientConfig & { schema: string; ssl?: mysql.SslOptions; ssh?: SSHConfig; readonly: boolean } + | { databasePath: string; readonly: boolean }; + options: ImportOptions; +}) => { + if (type === 'init') { + try { + const connection = await ClientsFactory.getClient({ + client: options.type, + params: { + ...dbConfig, + schema: options.schema + }, + poolSize: 1 + }) as MySQLClient | PostgreSQLClient; + + const pool = await connection.getConnectionPool(); + + switch (options.type) { + case 'mysql': + case 'maria': + importer = new MySQLImporter(pool as unknown as mysql.Pool, options); + break; + case 'pg': + importer = new PostgreSQLImporter(pool as unknown as pg.PoolClient, options); + break; + default: + process.send({ + type: 'error', + payload: `"${options.type}" importer not aviable` + }); + return; + } + + importer.once('error', err => { + console.error(err); + process.send({ + type: 'error', + payload: err.toString() + }); + }); + + importer.once('end', () => { + process.send({ + type: 'end', + payload: { cancelled: importer.isCancelled } + }); + }); + + importer.once('cancel', () => { + process.send({ type: 'cancel' }); + }); + + importer.on('progress', state => { + process.send({ + type: 'import-progress', + payload: state + }); + }); + + importer.on('query-error', state => { + process.send({ + type: 'query-error', + payload: state + }); + }); + + importer.run(); + } + catch (err) { + console.error(err); + process.send({ + type: 'error', + payload: err.toString() + }); + } + } + else if (type === 'cancel') + importer.cancel(); +}); + +process.on('uncaughtException', (err) => { + console.error(err); + process.send({ + type: 'error', + payload: err.toString() + }); +}); + +process.on('unhandledRejection', (err) => { + console.error(err); + process.send({ + type: 'error', + payload: err.toString() + }); +}); diff --git a/src/main/workers/serverProcess.js b/src/main/workers/serverProcess.js new file mode 100644 index 0000000..5f1faeb --- /dev/null +++ b/src/main/workers/serverProcess.js @@ -0,0 +1,27 @@ +const Server = require('../classes/Server'); +myServer = new Server(process); +let interval = null; + +process.on('message', message => { + switch (message.event) { + case 'start': + myServer.setPorts(message.ports); + myServer.startServer(message.params); + + if (interval === null) { + interval = setInterval(() => { + myServer.getReports(); + }, 200); + } + break; + case 'stop': + myServer.stopServer(() => { + if (interval !== null) clearInterval(interval); + process.exit(); + }); + break; + case 'reset': + myServer.resetReports(); + break; + } +}); diff --git a/src/renderer/App.vue b/src/renderer/App.vue new file mode 100644 index 0000000..3d3b720 --- /dev/null +++ b/src/renderer/App.vue @@ -0,0 +1,179 @@ + + + + + diff --git a/src/renderer/assets/fonts/MaterialIcons-Regular.eot b/src/renderer/assets/fonts/MaterialIcons-Regular.eot new file mode 100644 index 0000000..9fcecb1 Binary files /dev/null and b/src/renderer/assets/fonts/MaterialIcons-Regular.eot differ diff --git a/src/renderer/assets/fonts/MaterialIcons-Regular.ttf b/src/renderer/assets/fonts/MaterialIcons-Regular.ttf new file mode 100644 index 0000000..cc192ae Binary files /dev/null and b/src/renderer/assets/fonts/MaterialIcons-Regular.ttf differ diff --git a/src/renderer/assets/fonts/MaterialIcons-Regular.woff b/src/renderer/assets/fonts/MaterialIcons-Regular.woff new file mode 100644 index 0000000..62ad9f1 Binary files /dev/null and b/src/renderer/assets/fonts/MaterialIcons-Regular.woff differ diff --git a/src/renderer/assets/fonts/MaterialIcons-Regular.woff2 b/src/renderer/assets/fonts/MaterialIcons-Regular.woff2 new file mode 100644 index 0000000..dcffe91 Binary files /dev/null and b/src/renderer/assets/fonts/MaterialIcons-Regular.woff2 differ diff --git a/src/renderer/assets/fonts/Roboto-Regular.ttf b/src/renderer/assets/fonts/Roboto-Regular.ttf new file mode 100644 index 0000000..2c97eea Binary files /dev/null and b/src/renderer/assets/fonts/Roboto-Regular.ttf differ diff --git a/src/renderer/assets/fonts/RobotoMono-Regular.ttf b/src/renderer/assets/fonts/RobotoMono-Regular.ttf new file mode 100644 index 0000000..0c1ee1c Binary files /dev/null and b/src/renderer/assets/fonts/RobotoMono-Regular.ttf differ diff --git a/src/renderer/assets/icons/icon.ico b/src/renderer/assets/icons/icon.ico new file mode 100644 index 0000000..f7d6a2b Binary files /dev/null and b/src/renderer/assets/icons/icon.ico differ diff --git a/src/renderer/assets/icons/icon.png b/src/renderer/assets/icons/icon.png new file mode 100644 index 0000000..1fc2a3a Binary files /dev/null and b/src/renderer/assets/icons/icon.png differ diff --git a/src/renderer/assets/icons/icon1.png b/src/renderer/assets/icons/icon1.png new file mode 100644 index 0000000..9b11b82 Binary files /dev/null and b/src/renderer/assets/icons/icon1.png differ diff --git a/src/renderer/assets/icons/icon2.ico b/src/renderer/assets/icons/icon2.ico new file mode 100644 index 0000000..8176755 Binary files /dev/null and b/src/renderer/assets/icons/icon2.ico differ diff --git a/src/renderer/assets/icons/installer.ico b/src/renderer/assets/icons/installer.ico new file mode 100644 index 0000000..949b397 Binary files /dev/null and b/src/renderer/assets/icons/installer.ico differ diff --git a/src/renderer/components/app-header.vue b/src/renderer/components/app-header.vue new file mode 100644 index 0000000..44265f4 --- /dev/null +++ b/src/renderer/components/app-header.vue @@ -0,0 +1,53 @@ + + + diff --git a/src/renderer/components/client-reports.vue b/src/renderer/components/client-reports.vue new file mode 100644 index 0000000..a3cc143 --- /dev/null +++ b/src/renderer/components/client-reports.vue @@ -0,0 +1,54 @@ + + + diff --git a/src/renderer/components/client.vue b/src/renderer/components/client.vue new file mode 100644 index 0000000..9014224 --- /dev/null +++ b/src/renderer/components/client.vue @@ -0,0 +1,460 @@ + + + diff --git a/src/renderer/components/console.vue b/src/renderer/components/console.vue new file mode 100644 index 0000000..ee18605 --- /dev/null +++ b/src/renderer/components/console.vue @@ -0,0 +1,25 @@ + + + diff --git a/src/renderer/components/edit-message.vue b/src/renderer/components/edit-message.vue new file mode 100644 index 0000000..94b45f3 --- /dev/null +++ b/src/renderer/components/edit-message.vue @@ -0,0 +1,79 @@ + + + diff --git a/src/renderer/components/hosts.vue b/src/renderer/components/hosts.vue new file mode 100644 index 0000000..aed7bd4 --- /dev/null +++ b/src/renderer/components/hosts.vue @@ -0,0 +1,82 @@ + + + diff --git a/src/renderer/components/load-config.vue b/src/renderer/components/load-config.vue new file mode 100644 index 0000000..e44101a --- /dev/null +++ b/src/renderer/components/load-config.vue @@ -0,0 +1,78 @@ + + + diff --git a/src/renderer/components/main.vue b/src/renderer/components/main.vue new file mode 100644 index 0000000..c6476ae --- /dev/null +++ b/src/renderer/components/main.vue @@ -0,0 +1,65 @@ + + + + + diff --git a/src/renderer/components/messages.vue b/src/renderer/components/messages.vue new file mode 100644 index 0000000..f2bdc3d --- /dev/null +++ b/src/renderer/components/messages.vue @@ -0,0 +1,97 @@ + + + diff --git a/src/renderer/components/new-host.vue b/src/renderer/components/new-host.vue new file mode 100644 index 0000000..c4e1d20 --- /dev/null +++ b/src/renderer/components/new-host.vue @@ -0,0 +1,73 @@ + + + diff --git a/src/renderer/components/new-message.vue b/src/renderer/components/new-message.vue new file mode 100644 index 0000000..ed2b8d9 --- /dev/null +++ b/src/renderer/components/new-message.vue @@ -0,0 +1,86 @@ + + + diff --git a/src/renderer/components/new-port.vue b/src/renderer/components/new-port.vue new file mode 100644 index 0000000..af78a2a --- /dev/null +++ b/src/renderer/components/new-port.vue @@ -0,0 +1,76 @@ + + + diff --git a/src/renderer/components/ports.vue b/src/renderer/components/ports.vue new file mode 100644 index 0000000..a9057ee --- /dev/null +++ b/src/renderer/components/ports.vue @@ -0,0 +1,82 @@ + + + diff --git a/src/renderer/components/save-config.vue b/src/renderer/components/save-config.vue new file mode 100644 index 0000000..a415b39 --- /dev/null +++ b/src/renderer/components/save-config.vue @@ -0,0 +1,62 @@ + + + diff --git a/src/renderer/components/server-reports.vue b/src/renderer/components/server-reports.vue new file mode 100644 index 0000000..61e0296 --- /dev/null +++ b/src/renderer/components/server-reports.vue @@ -0,0 +1,68 @@ + + + diff --git a/src/renderer/components/server.vue b/src/renderer/components/server.vue new file mode 100644 index 0000000..d7bfc24 --- /dev/null +++ b/src/renderer/components/server.vue @@ -0,0 +1,208 @@ + + + diff --git a/src/renderer/css/main.css b/src/renderer/css/main.css new file mode 100644 index 0000000..a84a5a0 --- /dev/null +++ b/src/renderer/css/main.css @@ -0,0 +1,849 @@ +@font-face { + font-family: 'Material Icons'; + font-style: normal; + font-weight: 400; + src: url(../assets/fonts/MaterialIcons-Regular.eot); /* For IE6-8 */ + src: local('Material Icons'), + local('MaterialIcons-Regular'), + url(../assets/fonts/MaterialIcons-Regular.woff2) format('woff2'), + url(../assets/fonts/MaterialIcons-Regular.woff) format('woff'), + url(../assets/fonts/MaterialIcons-Regular.ttf) format('truetype'); +} +@font-face { + font-family: 'Roboto Regular'; + font-style: normal; + font-weight: 400; + src: url(../assets/fonts/Roboto-Regular.ttf) format('truetype'); +} +@font-face { + font-family: 'Roboto Mono'; + font-style: normal; + font-weight: 400; + src: url(../assets/fonts/RobotoMono-Regular.ttf) format('truetype'); +} + +.material-icons { + font-family: 'Material Icons'; + font-style: normal; + font-weight: normal; + font-size: 14px; + display: inline-flex; + vertical-align: middle; + text-decoration: inherit; + margin-right: 2px; + text-align: center; + line-height: 1; + text-transform: initial; + + /* Support for all WebKit browsers. */ + -webkit-font-smoothing: antialiased; + /* Support for Safari and Chrome. */ + text-rendering: optimizeLegibility; + + /* Support for Firefox. */ + -moz-osx-font-smoothing: grayscale; + + /* Support for IE. */ + font-feature-settings: 'liga'; +} + + +/*Generale*/ + +*{ + box-sizing:border-box; +} + +html{ + font-family: 'Roboto Regular', Helvetica, sans-serif; + font-size:100%; + color:#222; + height: 100%; +} + +body{ + height: 100%; + background: #EAEAEA; + color: #222; + -webkit-touch-callout: none; /* iOS Safari */ + -webkit-user-select: none; /* Safari */ + -khtml-user-select: none; /* Konqueror HTML */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* Internet Explorer/Edge */ + user-select: none; +} + +a, a:link, a:visited{ + color:#006799; + transition:color 0.2s; +} + +a:hover{ + color:#000; +} + +p{ + font-size:1.0em; + margin-bottom: 1em; +} + +li{ + list-style:none; +} + +img{ + max-width:100%; +} + +input, +textarea, +select{ + font-size: 14px; + font-family: "Trebuchet MS", Helvetica, sans-serif; + border: 1px solid #B7B7B7; + border-radius: 5px; + box-sizing: border-box; + margin: 1px; + padding: 10px; + display: block; + background: transparent; + color: #777; + max-width: 100%; + width: 100%; + outline: none; + letter-spacing: 0px; +} + +select{ + padding: 6px 3px; +} + +input[type="text"], +input[type="email"], +input[type="password"], +select{ + width: 100%; +} + +input[type="text"]:disabled, +input[type="number"]:disabled, +input[type="submit"]:disabled{ + opacity: 0.5; +} + +input:focus, select:focus, textarea:focus { + border-color: #0153B0; + border-width: 2px; + color: #777; + margin: 0; +} + +label { + margin: 5px 0; + display: block; + font-size: 11px; + font-weight: 700; + letter-spacing: 1px; + color: #0153B0; + background: #eaeaea; +} + +/*HEADER*/ + + +/*MAIN*/ + +#wrapper{ + height: 100%; +} + +#header { + padding: 10px 15px 0; + justify-content: space-between; + align-items: center; + width: 100%; + box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); + background: #383e42; + color: #fcfcfc; + margin-bottom: 10px; +} + +#header .material-icons{ + font-size: 24px; + margin-top: -2px; +} + +#appTitle{ + font-size: 18px; +} + +#appTabs{ + display: flex; + /* margin-top: 15px; */ +} + +#appTabs .navTab{ + padding: 10px 30px 15px; + cursor: pointer; + font-size: 14px; + opacity: 0.6; + border-bottom: 2px solid transparent; + text-transform: uppercase; + letter-spacing: 1px; + transition: all 0.2s; + position: relative; +} + +#appTabs .navTab.selected{ + border-bottom: 2px solid #fff; + opacity: 1; +} + +#appTabs .navTab .running{ + position: absolute; + right: 5px; + top: 7px; + color: #33ce33; + font-size: 22px; +} + +#main{ + padding: 5px 5px; + position: relative; +} + +#client{ + max-width: 400px; + min-width: 400px; + height: calc(100vh - 90px); + overflow-y: auto; + overflow-x: hidden; + padding-top: 10px; +} + +#server{ + max-width: 400px; + min-width: 400px; + height: calc(100vh - 90px); + overflow-y: auto; + overflow-x: hidden; + padding-top: 10px; +} + +.input-element{ + padding: 15px 10px; + position: relative; +} + +.input-element label{ + position: absolute; + top: 5px; + left: 20px; + padding: 0 5px; + z-index: 1; +} + +.input-msg{ + font-size: 12px; + color: #ff2f2f; +} + +.box-50{ + width: 50%; + margin: 5px; +} + +.box-100{ + width: 100%; +} + +.console{ + background: #2f323a; + border-radius: 5px; + color: #FCFCFC; + padding: 15px; + font-size: 12px; + line-height: 1.3; + font-family: monospace; + margin-right: 10px; + height: calc(100vh - 90px); + overflow: auto; + width: 100%; + user-select: text; +} + +.console ::selection{ + background-color: #33ce33; + color: #FCFCFC; +} + +#hostBox, +#portBox, +#messageBox{ + padding: 5px 5px 15px 10px; + position: relative; +} + +#hostBox h3, +#portBox h3, +#messageBox h3{ + margin: 5px 0; + display: flex; + font-size: 11px; + font-weight: 700; + letter-spacing: 1px; + color: #0153B0; + position: absolute; + align-items: center; + top: -9px; + left: 19px; + padding: 0 5px; + z-index: 1; + text-shadow: -1px 0 #eaeaea, 0 1px #eaeaea, 1px 0 #eaeaea, 0 -1px #eaeaea +} + + +#hostBox h3 span, +#portBox h3 span, +#messageBox h3 span{ + z-index: 1; +} + +#hostBox h3::after, +#portBox h3::after, +#messageBox h3::after{ + content: ''; + height: 1px; + width: 100%; + background: #eaeaea; + display: block; + position: absolute; + z-index: 0; + left: 0; +} + +.tools-box{ + position: absolute; + top: -8px; + right: 15px; + display: flex; +} + +#hostBox .round-button, +#portBox .round-button, +#messageBox .round-button{ + position: relative; + border-radius: 50px; + color: #fff; + padding: 5px; + height: 26px; + max-width: 26px; + overflow: hidden; + cursor: pointer; + align-items: center; + transition: max-width 0.3s; + z-index: 2; + margin-left: 10px; +} + +#hostBox .round-button span, +#portBox .round-button span, +#messageBox .round-button span{ + white-space: nowrap; + opacity: 0; + margin-right: 20px; + font-size: 14px; + padding: 1px 0 0 5px; + transition: opacity 0.2s; +} + +#hostBox .round-button .material-icons, +#portBox .round-button .material-icons, +#messageBox .round-button .material-icons{ + font-size: 16px; + height: 16px; + margin: 0; + position: absolute; + top: 5px; + right: 5px; +} + +#hostBox .round-button:hover, +#portBox .round-button:hover, +#messageBox .round-button:hover{ + max-width: 180px; +} + +#hostBox .round-button:hover span, +#portBox .round-button:hover span, +#messageBox .round-button:hover span{ + opacity: 1; +} + +#messageBox .format{ + font-family: "Roboto Mono"; + font-size: 10px; +} + +#hostList, +#portList, +#messageList{ + max-height: 120px; + border: 1px solid #B7B7B7; + border-radius: 5px; + box-sizing: border-box; + padding: 8px 10px; + overflow: auto; +} + +#portList{ + max-height: 300px; +} + +#configList{ + padding: 0 5px 0; + max-height: 40vh; + overflow: auto; + margin-bottom: 20px; +} + +#configList li{ + display: flex; + align-items: center; + margin-bottom: 10px; +} + +#configList li .radio-btn{ + font-size: 24px; + cursor: pointer; + color: #1565C0; +} + +#hostList li, +#portList li, +#configList li, +#messageList li{ + position: relative; + padding-right: 25px; +} + +#hostList li .deleteHost, +#portList li .deletePort, +#configList li .deleteConfig, +#messageList li .deleteMessage{ + position: absolute; + top: -2px; + right: 0; + cursor: pointer; + font-size: 18px; + height: 18px; + width: 18px; + background: #e22424; + border-radius: 50px; + color: #EAEAEA; + opacity: 0; + transition: opacity 0.2s; +} + +#hostList li .editHost, +#portList li .editPort, +#configList li .editConfig, +#messageList li .editMessage{ + position: absolute; + top: -2px; + right: 24px; + cursor: pointer; + font-size: 16px; + height: 18px; + width: 18px; + background: #1565c0; + border-radius: 50px; + color: #EAEAEA; + opacity: 0; + transition: opacity 0.2s; + display: flex; + justify-content: center; + align-items: center; +} + + +#configList li .deleteConfig{ + top: 3px; + margin: 0; +} + +fieldset:not(:disabled) #hostList li:hover .deleteHost, +fieldset:not(:disabled) #portList li:hover .deletePort, +#configList li:hover .deleteConfig, +fieldset:not(:disabled) #messageList li:hover .deleteMessage, +fieldset:not(:disabled) #hostList li:hover .editHost, +fieldset:not(:disabled) #portList li:hover .editPort, +#configList li:hover .editConfig, +fieldset:not(:disabled) #messageList li:hover .editMessage{ + opacity: 1; +} + +#hostList li .checkbox, +#portList li .checkbox, +#messageList li .checkbox{ + font-size: 13px; + color: #777; + margin-left: 5px; + width: fit-content; +} + +#serverReports{ + padding: 5px 5px 15px 10px; +} + +#serverReports h3{ + margin: 15px 0 20px; +} + +#serverReports table{ + width: 100%; +} + +#serverReports th{ + padding: 5px; + vertical-align: middle; + border-bottom: 2px solid #B7B7B7; + font-size: 14px; + font-weight: 700; + text-align: left; +} + +#serverReports td{ + border-bottom: 1px solid #B7B7B7; + padding: 5px 5px 4px; + font-size: 12px; + line-height: 1.2; +} + +#serverReports tfoot{ + background: #d0d0d0; + font-weight: 700; +} + +.help{ + cursor: help; +} + +.bold{ + font-weight: 700; +} + +.green { + color: #33ce33; +} + +.green-bg { + background: #2aa72a; +} + +.blue-bg { + background: #0153B0; +} + +.yellow { + color: yellow; +} + +.red { + color: #ff2f2f; +} + +#popcontainer{ + position: fixed; + height: 100vh; + width: 100vw; + background: rgba(0,0,0,0.3); + z-index: 11; + display: flex; + justify-content: center; + align-items: center; + top: 0; + left: 0; +} + +.popup{ + padding: 15px; + border-radius: 3px; + background: #EAEAEA; + color: #000; + box-shadow: 0 0 10px -2px #000; + max-width: 70vw; + max-height: 90vh; +} + +.popup h4 { + font-size: 18px; + margin-bottom: 15px; +} + +.popup p{ + line-height: 1.4; +} + +.buttons { + display: flex; + justify-content: space-evenly; +} + +.buttons button{ + transition: filter 0.2s; + letter-spacing: 1px; +} + +.buttons button:hover { + filter: brightness(110%); +} + +.buttons button:active { + filter: brightness(85%); +} + +.button-wrap{ + position: relative; + margin: 20px 5px; +} + +.button-wrap .material-icons{ + position: absolute; + top: 11px; + left: 8px; + font-size: 16px; + z-index: 1; + pointer-events: none; +} + +button.cancel { + background: transparent; + display: inline-block; + padding: 10px 14px 9px; + color: #0153B0 !important; + text-transform: uppercase; + border-radius: 5px; + border: none; + font-family: "Trebuchet MS", Helvetica, sans-serif; + cursor: pointer; + outline: none; +} + +button.save { + display: inline-block; + padding: 10px 14px 9px; + text-transform: uppercase; + border-radius: 5px; + border: 1px solid #B7B7B7; + font-family: "Trebuchet MS", Helvetica, sans-serif; + cursor: pointer; + outline: none; + width: max-content; +} + +button.confirm, +input[type="submit"]{ + background: #0153B0; + display: inline-block; + padding: 10px 14px 9px; + color: #fff !important; + text-transform: uppercase; + border-radius: 5px; + border: none; + border-bottom: 1px solid #0153B0; + font-family: "Trebuchet MS", Helvetica, sans-serif; + cursor: pointer; + outline: none; + width: max-content; +} + +button:disabled.confirm, +input[type="submit"]:disabled{ + background: #777; + border-bottom: 1px solid #777; + cursor: not-allowed; +} + +button.stop, +input[type="submit"]{ + background: #e22424; + display: inline-block; + padding: 10px 14px 9px; + color: #fff !important; + text-transform: uppercase; + border-radius: 5px; + border: none; + border-bottom: 1px solid #e22424; + font-family: "Trebuchet MS", Helvetica, sans-serif; + cursor: pointer; + outline: none; + width: max-content; +} + +.button-wrap .material-icons.white{ + color: #fff; +} + +.button-wrap button{ + padding-left: 30px; +} + +#error404{ + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; + text-align: center; +} + +/*SIDEBAR*/ + + +/*FOOTER*/ + + +/*VARI*/ +.txtright{ + text-align: right; +} + +.txtleft{ + text-align: left; +} + +.txtcenter{ + text-align: center; +} + +.alignright { + float: right; + margin: 0.5em; + margin-right:0; +} + +.alignleft { + float: left; + margin: 0.5em; + margin-left:0; +} + +.flex{ + display: flex; +} + +.checkbox{ + display: flex; + align-items: center; + user-select: none; + cursor: pointer; + margin: 7px 10px; + transition: opacity 0.2s; +} + +fieldset:disabled .checkbox{ + opacity: 0.5; + cursor: default; +} + +.toggle-select{ + position: relative; +} + +.toggle-select .material-icons{ + font-size: 18px; + color: #1565C0; + z-index: 1; + position: relative; + cursor: pointer; +} + +.toggle-select::after{ + content: ''; + height: 10px; + width: 10px; + background: #eaeaea; + display: block; + position: absolute; + top: 4px; + left: 4px; + border-radius: 1px; + z-index: 0; +} + +.checkbox-block{ + display: flex; + height: 14px; + width: 14px; + min-width: 14px; + background: #EBEBEB; + margin-right: 5px; + border: 2px solid #1565C0; + border-radius: 2px; + justify-content: center; + align-items: center; + transition: background 0.2s; +} + +.checkbox input[type="checkbox"]{ + display: none; +} + +.checkbox input:checked + .checkbox-block{ + background:#1565C0; +} + +.checkbox input:checked + .checkbox-block::before{ + content: 'done'; + display: block; + font-family: 'Material Icons'; + color: #fcfcfc; + font-size: 14px; + /* Support for all WebKit browsers. */ + -webkit-font-smoothing: antialiased; + /* Support for Safari and Chrome. */ + text-rendering: optimizeLegibility; + /* Support for Firefox. */ + -moz-osx-font-smoothing: grayscale; + /* Support for IE. */ + font-feature-settings: 'liga'; +} + +/*TABLET PORTRAIT*/ + +@media only screen and (min-width: 768px) { + +/*768px-HEADER*/ + + +/*768px-MAIN*/ + + +/*768px-FOOTER*/ + + +}/**/ + +/*TABLET LANDSCAPE & NETBOOK*/ +@media only screen and (min-width: 1024px){ + + +/*1024px-HEADER*/ + + +/*1024px-MAIN*/ + + +/*SIDEBAR*/ + + +/*1024px-FOOTER*/ + + +}/**/ + +/*DESKTOP*/ +@media only screen and (min-width: 1200px){ + + +}/**/ diff --git a/src/renderer/css/reset.css b/src/renderer/css/reset.css new file mode 100644 index 0000000..85cacdd --- /dev/null +++ b/src/renderer/css/reset.css @@ -0,0 +1,95 @@ +html, body, div, span, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +abbr, address, cite, code, +del, dfn, em, img, ins, kbd, q, samp, +small, strong, sub, sup, var, +b, i, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, figcaption, figure, +footer, header, hgroup, menu, nav, section, summary, +time, mark, audio, video { + margin:0; + padding:0; + border:0; + outline:0; + font-size:100%; + vertical-align:baseline; + background:transparent; +} + +body { + line-height:1; +} + +article,aside,details,figcaption,figure, +footer,header,hgroup,menu,nav,section { + display:block; +} + +nav ul { + list-style:none; +} + +blockquote, q { + quotes:none; +} + +blockquote:before, blockquote:after, +q:before, q:after { + content:''; + content:none; +} + +a { + margin:0; + padding:0; + font-size:100%; + vertical-align:baseline; + background:transparent; + text-decoration:none; +} + +/* change colours to suit your needs */ +ins { + background-color:#ff9; + color:#000; + text-decoration:none; +} + +/* change colours to suit your needs */ +mark { + background-color:#ff9; + color:#000; + font-style:italic; + font-weight:bold; +} + +del { + text-decoration: line-through; +} + +abbr[title], dfn[title] { + border-bottom:1px dotted; + cursor:help; +} + +table { + border-collapse:collapse; + border-spacing:0; +} + +/* change border colour to suit your needs */ +hr { + display:block; + height:1px; + border:0; + border-top:1px solid #cccccc; + margin:1em 0; + padding:0; +} + +input, select { + vertical-align:middle; +} diff --git a/src/renderer/i18n/en-US.ts b/src/renderer/i18n/en-US.ts new file mode 100644 index 0000000..75a92c0 --- /dev/null +++ b/src/renderer/i18n/en-US.ts @@ -0,0 +1,507 @@ +export const enUS = { + word: { + edit: 'Edit', + save: 'Save', + close: 'Close', + delete: 'Delete', + confirm: 'Confirm', + cancel: 'Cancel', + send: 'Send', + connectionName: 'Connection name', + client: 'Client', + hostName: 'Host name', + port: 'Port', + user: 'User', + password: 'Password', + credentials: 'Credentials', + connect: 'Connect', + connected: 'Connected', + disconnect: 'Disconnect', + disconnected: 'Disconnected', + refresh: 'Refresh', + settings: 'Settings', + general: 'General', + themes: 'Themes', + update: 'Update', + about: 'About', + language: 'Language', + version: 'Version', + donate: 'Donate', + run: 'Run', + schema: 'Schema', + results: 'Results', + size: 'Size', + seconds: 'Seconds', + type: 'Type', + mimeType: 'Mime-Type', + download: 'Download', + add: 'Add', + data: 'Data', + properties: 'Properties', + insert: 'Insert', + connecting: 'Connecting', + name: 'Name', + collation: 'Collation', + clear: 'Clear', + options: 'Options', + autoRefresh: 'Auto-refresh', + indexes: 'Indexes', + foreignKeys: 'Foreign keys', + length: 'Length', + unsigned: 'Unsigned', + default: 'Default', + comment: 'Comment', + key: 'Key | Keys', + order: 'Order', + expression: 'Expression', + autoIncrement: 'Auto Increment', + engine: 'Engine', + field: 'Field | Fields', + approximately: 'Approximately', + total: 'Total', + table: 'Table', + discard: 'Discard', + stay: 'Stay', + author: 'Author', + light: 'Light', + dark: 'Dark', + autoCompletion: 'Auto Completion', + application: 'Application', + editor: 'Editor', + view: 'View', + definer: 'Definer', + algorithm: 'Algorithm', + trigger: 'Trigger | Triggers', + storedRoutine: 'Stored routine | Stored routines', + scheduler: 'Scheduler | Schedulers', + event: 'Event', + parameters: 'Parameters', + function: 'Function | Functions', + deterministic: 'Deterministic', + context: 'Context', + export: 'Export', + import: 'Import', + returns: 'Returns', + timing: 'Timing', + state: 'State', + execution: 'Execution', + starts: 'Starts', + ends: 'Ends', + ssl: 'SSL', + privateKey: 'Private key', + certificate: 'Certificate', + caCertificate: 'CA certificate', + ciphers: 'Ciphers', + upload: 'Upload', + browse: 'Browse', + faker: 'Faker', + content: 'Content', + cut: 'Cut', + copy: 'Copy', + paste: 'Paste', + tools: 'Tools', + variables: 'Variables', + processes: 'Processes', + database: 'Database', + scratchpad: 'Scratchpad', + array: 'Array', + changelog: 'Changelog', + format: 'Format', + sshTunnel: 'SSH tunnel', + structure: 'Structure', + small: 'Small', + medium: 'Medium', + large: 'Large', + row: 'Row | Rows', + cell: 'Cell | Cells', + triggerFunction: 'Trigger function | Trigger functions', + all: 'All', + duplicate: 'Duplicate', + routine: 'Routine', + new: 'New', + history: 'History', + select: 'Select', + passphrase: 'Passphrase', + filter: 'Filter', + change: 'Change', + views: 'Views', + triggers: 'Triggers', + routines: 'Routines', + functions: 'Functions', + schedulers: 'Schedulers', + includes: 'Includes', + drop: 'Drop', + completed: 'Completed', + aborted: 'Aborted', + disabled: 'Disabled', + enable: 'Enable', + disable: 'Disable', + commit: 'Commit', + rollback: 'Rollback', + connectionString: 'Connection string', + contributors: 'Contributors', + pin: 'Pin', + unpin: 'Unpin', + console: 'Console', + shortcuts: 'Shortcuts', + folder: 'Folder | Folders', + appearence: 'Appearence', + color: 'Color', + label: 'Label', + icon: 'Icon', + resultsTable: 'Results table' + }, + message: { + appWelcome: 'Welcome to Antares SQL Client!', + appFirstStep: 'Your first step: create a new database connection.', + addConnection: 'Add connection', + createConnection: 'Create connection', + createNewConnection: 'Create new connection', + askCredentials: 'Ask for credentials', + testConnection: 'Test connection', + editConnection: 'Edit connection', + deleteConnection: 'Delete connection', + deleteCorfirm: 'Do you confirm the cancellation of', + connectionSuccessfullyMade: 'Connection successfully made!', + madeWithJS: 'Made with 💛 and JavaScript!', + checkForUpdates: 'Check for updates', + noUpdatesAvailable: 'No updates available', + checkingForUpdate: 'Checking for updates', + checkFailure: 'Check failed, please try later', + updateAvailable: 'Update available', + downloadingUpdate: 'Downloading update', + updateDownloaded: 'Update downloaded', + restartToInstall: 'Restart Antares to install', + unableEditFieldWithoutPrimary: 'Unable to edit a field without a primary key in resultset', + editCell: 'Edit cell', + deleteRows: 'Delete row | Delete {count} rows', + confirmToDeleteRows: 'Do you confirm to delete one row? | Do you confirm to delete {count} rows?', + notificationsTimeout: 'Notifications timeout', + uploadFile: 'Upload file', + addNewRow: 'Add new row', + numberOfInserts: 'Number of inserts', + openNewTab: 'Open a new tab', + affectedRows: 'Affected rows', + createNewDatabase: 'Create new Database', + databaseName: 'Database name', + serverDefault: 'Server default', + deleteDatabase: 'Delete database', + editDatabase: 'Edit database', + clearChanges: 'Clear changes', + addNewField: 'Add new field', + manageIndexes: 'Manage indexes', + manageForeignKeys: 'Manage foreign keys', + allowNull: 'Allow NULL', + zeroFill: 'Zero fill', + customValue: 'Custom value', + onUpdate: 'On update', + deleteField: 'Delete field', + createNewIndex: 'Create new index', + addToIndex: 'Add to index', + createNewTable: 'Create new table', + emptyTable: 'Empty table', + deleteTable: 'Delete table', + emptyCorfirm: 'Do you confirm to empty', + unsavedChanges: 'Unsaved changes', + discardUnsavedChanges: 'You have some unsaved changes. Closing this tab these changes will be discarded.', + thereAreNoIndexes: 'There are no indexes', + thereAreNoForeign: 'There are no foreign keys', + createNewForeign: 'Create new foreign key', + referenceTable: 'Ref. table', + referenceField: 'Ref. field', + foreignFields: 'Foreign fields', + invalidDefault: 'Invalid default', + onDelete: 'On delete', + applicationTheme: 'Application Theme', + editorTheme: 'Editor Theme', + wrapLongLines: 'Wrap long lines', + selectStatement: 'Select statement', + triggerStatement: 'Trigger statement', + sqlSecurity: 'SQL security', + updateOption: 'Update option', + deleteView: 'Delete view', + createNewView: 'Create new view', + deleteTrigger: 'Delete trigger', + createNewTrigger: 'Create new trigger', + currentUser: 'Current user', + routineBody: 'Routine body', + dataAccess: 'Data access', + thereAreNoParameters: 'There are no parameters', + createNewParameter: 'Create new parameter', + createNewRoutine: 'Create new stored routine', + deleteRoutine: 'Delete stored routine', + functionBody: 'Function body', + createNewFunction: 'Create new function', + deleteFunction: 'Delete function', + schedulerBody: 'Scheduler body', + createNewScheduler: 'Create new scheduler', + deleteScheduler: 'Delete scheduler', + preserveOnCompletion: 'Preserve on completion', + enableSsl: 'Enable SSL', + manualValue: 'Manual value', + tableFiller: 'Table Filler', + fakeDataLanguage: 'Fake data language', + searchForElements: 'Search for elements', + selectAll: 'Select all', + queryDuration: 'Query duration', + includeBetaUpdates: 'Include beta updates', + setNull: 'Set NULL', + processesList: 'Processes list', + processInfo: 'Process info', + manageUsers: 'Manage users', + createNewSchema: 'Create new schema', + schemaName: 'Schema name', + editSchema: 'Edit schema', + deleteSchema: 'Delete schema', + markdownSupported: 'Markdown supported', + plantATree: 'Plant a Tree', + dataTabPageSize: 'DATA tab page size', + enableSsh: 'Enable SSH', + pageNumber: 'Page number', + duplicateTable: 'Duplicate table', + noOpenTabs: 'There are no open tabs, navigate on the left bar or:', + noSchema: 'No schema', + restorePreviourSession: 'Restore previous session', + runQuery: 'Run query', + thereAreNoTableFields: 'There are no table fields', + newTable: 'New table', + newView: 'New view', + newTrigger: 'New trigger', + newRoutine: 'New routine', + newFunction: 'New function', + newScheduler: 'New scheduler', + newTriggerFunction: 'New trigger function', + thereIsNoQueriesYet: 'There is no queries yet', + searchForQueries: 'Search for queries', + killProcess: 'Kill process', + closeTab: 'Close tab', + exportSchema: 'Export schema', + importSchema: 'Import schema', + directoryPath: 'Directory path', + newInserStmtEvery: 'New INSERT statement every', + processingTableExport: 'Processing {table}', + fechingTableExport: 'Fetching {table} data', + writingTableExport: 'Writing {table} data', + checkAllTables: 'Check all tables', + uncheckAllTables: 'Uncheck all tables', + goToDownloadPage: 'Go to download page', + readOnlyMode: 'Read-only mode', + killQuery: 'Kill query', + insertRow: 'Insert row | Insert rows', + commitMode: 'Commit mode', + autoCommit: 'Auto commit', + manualCommit: 'Manual commit', + actionSuccessful: '{action} successful', + importQueryErrors: 'Warning: {n} error has occurrend | Warning: {n} errors occurred', + executedQueries: '{n} query executed | {n} queries executed', + ourputFormat: 'Output format', + singleFile: 'Single {ext} file', + zipCompressedFile: 'ZIP compressed {ext} file', + disableBlur: 'Disable blur', + untrustedConnection: 'Untrusted connection', + missingOrIncompleteTranslation: 'Missing or incomplete translation?', + findOutHowToContribute: 'Find out how to contribute', + disableFKChecks: 'Disable foreigh key checks', + allConnections: 'All connections', + searchForConnections: 'Search for connections', + disableScratchpad: 'Disable scratchpad', + reportABug: 'Report a bug', + nextTab: 'Next tab', + previousTab: 'Previous tab', + selectTabNumber: 'Select tab number {param}', + toggleConsole: 'Toggle console', + addShortcut: 'Add shortcut', + editShortcut: 'Edit shortcut', + deleteShortcut: 'Delete shortcut', + restoreDefaults: 'Restore defaults', + restoreDefaultsQuestion: 'Do you confirm to restore default values?', + registerAShortcut: 'Register a shortcut', + invalidShortcutMessage: 'Invalid combination, continue to type', + shortcutAlreadyExists: 'Shortcut already exists', + saveContent: 'Save content', + openAllConnections: 'Open all connections', + openSettings: 'Open settings', + openScratchpad: 'Open scratchpad', + runOrReload: 'Run or reload', + formatQuery: 'Format query', + queryHistory: 'Query history', + clearQuery: 'Clear query', + openFilter: 'Open filter', + nextResultsPage: 'Next results page', + previousResultsPage: 'Previous results page', + fillCell: 'Fill cell', + editFolder: 'Edit folder', + folderName: 'Folder name', + deleteFolder: 'Delete folder', + editConnectionAppearence: 'Edit connection appearence', + executeSelectedQuery: 'Execute selected query', + defaultCopyType: 'Default copy type', + showTableSize: 'Show table size in sidebar', + showTableSizeDescription: 'MySQL/MariaDB only. Enable this option may affects performance on schema with many tables.' + }, + faker: { + address: 'Address', + commerce: 'Commerce', + company: 'Company', + database: 'Database', + date: 'Date', + finance: 'Finance', + git: 'Git', + hacker: 'Hacker', + internet: 'Internet', + lorem: 'Lorem', + name: 'Name', + music: 'Music', + phone: 'Phone', + random: 'Random', + system: 'System', + time: 'Time', + vehicle: 'Vehicle', + zipCode: 'Zip code', + zipCodeByState: 'Zip code by state', + city: 'City', + cityPrefix: 'City prefix', + citySuffix: 'City suffix', + streetName: 'Street name', + streetAddress: 'Street address', + streetSuffix: 'Street suffix', + streetPrefix: 'Street prefix', + secondaryAddress: 'Secondary address', + county: 'County', + country: 'Country', + countryCode: 'Country code', + state: 'State', + stateAbbr: 'State abbreviation', + latitude: 'Latitude', + longitude: 'Longitude', + direction: 'Direction', + cardinalDirection: 'Cardinal direction', + ordinalDirection: 'Ordinal direction', + nearbyGPSCoordinate: 'Nearby GPS coordinate', + timeZone: 'Time zone', + color: 'Color', + department: 'Department', + productName: 'Product name', + price: 'Price', + productAdjective: 'Product adjective', + productMaterial: 'Product material', + product: 'Product', + productDescription: 'Product description', + suffixes: 'Suffixes', + companyName: 'Company name', + companySuffix: 'Company suffix', + catchPhrase: 'Catch phrase', + bs: 'BS', + catchPhraseAdjective: 'Catch phrase adjective', + catchPhraseDescriptor: 'Catch phrase descriptor', + catchPhraseNoun: 'Catch phrase noun', + bsAdjective: 'BS adjective', + bsBuzz: 'BS buzz', + bsNoun: 'BS noun', + column: 'Column', + type: 'Type', + collation: 'Collation', + engine: 'Engine', + past: 'Past', + now: 'Now', + future: 'Future', + between: 'Between', + recent: 'Recent', + soon: 'Soon', + month: 'Month', + weekday: 'Weekday', + account: 'Account', + accountName: 'Account name', + routingNumber: 'Routing number', + mask: 'Mask', + amount: 'Amount', + transactionType: 'Transaction type', + currencyCode: 'Currency code', + currencyName: 'Currency name', + currencySymbol: 'Currency symbol', + bitcoinAddress: 'Bitcoin address', + litecoinAddress: 'Litecoin address', + creditCardNumber: 'Credit card number', + creditCardCVV: 'Credit card CVV', + ethereumAddress: 'Ethereum address', + iban: 'Iban', + bic: 'Bic', + transactionDescription: 'Transaction description', + branch: 'Branch', + commitEntry: 'Commit entry', + commitMessage: 'Commit message', + commitSha: 'Commit SHA', + shortSha: 'Short SHA', + abbreviation: 'Abbreviation', + adjective: 'Adjective', + noun: 'Noun', + verb: 'Verb', + ingverb: 'Ingverb', + phrase: 'Phrase', + avatar: 'Avatar', + email: 'Email', + exampleEmail: 'Example email', + userName: 'Username', + protocol: 'Protocol', + url: 'Url', + domainName: 'Domin name', + domainSuffix: 'Domain suffix', + domainWord: 'Domain word', + ip: 'Ip', + ipv6: 'Ipv6', + userAgent: 'User agent', + mac: 'Mac', + password: 'Password', + word: 'Word', + words: 'Words', + sentence: 'Sentence', + slug: 'Slug', + sentences: 'Sentences', + paragraph: 'Paragraph', + paragraphs: 'Paragraphs', + text: 'Text', + lines: 'Lines', + genre: 'Genre', + firstName: 'First name', + lastName: 'Last name', + middleName: 'Middle name', + findName: 'Full name', + jobTitle: 'Job title', + gender: 'Gender', + prefix: 'Prefix', + suffix: 'Suffix', + title: 'Title', + jobDescriptor: 'Job descriptor', + jobArea: 'Job area', + jobType: 'Job type', + phoneNumber: 'Phone number', + phoneNumberFormat: 'Phone number format', + phoneFormats: 'Phone formats', + number: 'Number', + float: 'Float', + arrayElement: 'Array element', + arrayElements: 'Array elements', + objectElement: 'Object element', + uuid: 'Uuid', + boolean: 'Boolean', + image: 'Image', + locale: 'Locale', + alpha: 'Alpha', + alphaNumeric: 'Alphanumeric', + hexaDecimal: 'Hexadecimal', + fileName: 'File name', + commonFileName: 'Common file name', + mimeType: 'Mime type', + commonFileType: 'Common file type', + commonFileExt: 'Common file extension', + fileType: 'File type', + fileExt: 'File extension', + directoryPath: 'Directory path', + filePath: 'File path', + semver: 'Semver', + manufacturer: 'Manufacturer', + model: 'Model', + fuel: 'Fuel', + vin: 'Vin' + } +}; diff --git a/src/renderer/i18n/index.ts b/src/renderer/i18n/index.ts new file mode 100644 index 0000000..0f94f78 --- /dev/null +++ b/src/renderer/i18n/index.ts @@ -0,0 +1,43 @@ +import { createI18n } from 'vue-i18n'; +import { enUS } from './en-US'; +import { itIT } from './it-IT'; +import { arSA } from './ar-SA'; +import { esES } from './es-ES'; +import { frFR } from './fr-FR'; +import { ptBR } from './pt-BR'; +import { deDE } from './de-DE'; +import { viVN } from './vi-VN'; +import { jaJP } from './ja-JP'; +import { zhCN } from './zh-CN'; +import { ruRU } from './ru-RU'; +import { idID } from './id-ID'; + +const messages = { + 'en-US': enUS, + 'it-IT': itIT, + 'ar-SA': arSA, + 'es-ES': esES, + 'fr-FR': frFR, + 'pt-BR': ptBR, + 'de-DE': deDE, + 'vi-VN': viVN, + 'ja-JP': jaJP, + 'zh-CN': zhCN, + 'ru-RU': ruRU, + 'id-ID': idID +}; + +type NestedPartial = { + [K in keyof T]?: T[K] extends Array ? Array> : (T[K] extends unknown ? unknown : NestedPartial) +}; + +export type MessageSchema = typeof enUS +export type AvailableLocale = keyof typeof messages + +const i18n = createI18n<[NestedPartial], AvailableLocale>({ + fallbackLocale: 'en-US', + allowComposition: true, + messages +}); + +export { i18n }; diff --git a/src/renderer/i18n/it-IT.ts b/src/renderer/i18n/it-IT.ts new file mode 100644 index 0000000..af69c86 --- /dev/null +++ b/src/renderer/i18n/it-IT.ts @@ -0,0 +1,491 @@ +export const itIT = { + word: { + edit: 'Modifica', + save: 'Salva', + close: 'Chiudi', + delete: 'Elimina', + confirm: 'Conferma', + cancel: 'Annulla', + send: 'Invia', + connectionName: 'Nome connessione', + client: 'Client', + hostName: 'Nome host', + port: 'Porta', + user: 'Utente', + password: 'Password', + credentials: 'Credenziali', + connect: 'Connetti', + connected: 'Connesso', + disconnect: 'Disconnetti', + disconnected: 'Disconnesso', + refresh: 'Aggiorna', + settings: 'Impostazioni', + general: 'Generale', + themes: 'Temi', + update: 'Aggiornamento', + about: 'Informazioni', + language: 'Lingua', + version: 'Versione', + donate: 'Dona', + run: 'Esegui', + schema: 'Schema', + results: 'Risultati', + size: 'Dimensioni', + seconds: 'Secondi', + type: 'Tipo', + mimeType: 'Mime-Type', + download: 'Scarica', + add: 'Aggiungi', + data: 'Dati', + properties: 'Proprietà', + insert: 'Inserisci', + connecting: 'Connessione in corso', + name: 'Nome', + collation: 'Confronto', + clear: 'Scarta', + options: 'Opzioni', + autoRefresh: 'Auto-aggiorna', + indexes: 'Indici', + foreignKeys: 'Chiavi esterne', + length: 'Lunghezza', + unsigned: 'Senza segno', + default: 'Default', + comment: 'Commento', + key: 'Chiave | Chiavi', + order: 'Ordine', + expression: 'Espressione', + autoIncrement: 'Auto Incremento', + engine: 'Motore', + field: 'Campo | Campi', + approximately: 'Approssimativamente', + total: 'Totali', + table: 'Tabella', + discard: 'Scarta', + stay: 'Resta', + author: 'Autore', + light: 'Chiaro', + dark: 'Scuro', + autoCompletion: 'Auto Completamento', + application: 'Applicazione', + editor: 'Editor', + view: 'Vista', + definer: 'Definer', + algorithm: 'Algoritmo', + trigger: 'Trigger | Triggers', + storedRoutine: 'Stored routine | Stored routines', + scheduler: 'Scheduler | Schedulers', + event: 'Evento', + parameters: 'Parametri', + function: 'Funzione | Funzioni', + deterministic: 'Deterministico', + context: 'Contesto', + export: 'Esporta', + import: 'Importa', + returns: 'Ritorna', + timing: 'Temporizzazione', + state: 'Stato', + execution: 'Esecuzione', + starts: 'Inizia', + ends: 'Finisce', + ssl: 'SSL', + privateKey: 'Chiave privata', + certificate: 'Certificato', + caCertificate: 'Certificato CA', + ciphers: 'Ciphers', + upload: 'Carica', + browse: 'Sfoglia', + faker: 'Faker', + content: 'Contenuto', + cut: 'Taglia', + copy: 'Copia', + paste: 'Incolla', + tools: 'Strumenti', + variables: 'Variabili', + processes: 'Processi', + database: 'Database', + scratchpad: 'Blocco appunti', + array: 'Array', + changelog: 'Changelog', + format: 'Formatta', + sshTunnel: 'SSH tunnel', + structure: 'Structure', + small: 'Piccolo', + medium: 'Medio', + large: 'Largo', + row: 'Riga | Righe', + cell: 'Cella | Celle', + triggerFunction: 'Funzione di trigger | Funzioni di trigger', + all: 'Tutto', + duplicate: 'Duplica', + routine: 'Routine', + new: 'Nuovo', + history: 'Cronologia', + select: 'Seleziona', + passphrase: 'Passphrase', + filter: 'Filtra', + change: 'Cambia', + views: 'Viste', + triggers: 'Trigger', + routines: 'Routine', + functions: 'Function', + schedulers: 'Scheduler', + includes: 'Includi', + drop: 'Drop', + completed: 'Completato', + aborted: 'Annullato', + disabled: 'Disabilitato', + enable: 'Abilita', + disable: 'Disabilita', + commit: 'Commit', + rollback: 'Rollback', + connectionString: 'Connection string', + contributors: 'Contributori', + pin: 'Fissa', + unpin: 'Sgancia', + console: 'Console', + shortcuts: 'Scorciatoie' + }, + message: { + appWelcome: 'Benvenuto in Antares SQL Client!', + appFirstStep: 'Primo step: crea una nuova connessione.', + addConnection: 'Aggiungi connessione', + createConnection: 'Crea connessione', + createNewConnection: 'Crea nuova connessione', + askCredentials: 'Chiedi credenziali', + testConnection: 'Testa connessione', + editConnection: 'Modifica connessione', + deleteConnection: 'Elimina connessione', + deleteCorfirm: 'Confermi l\'eliminazione di', + connectionSuccessfullyMade: 'Connessione avvenuta con successo!', + madeWithJS: 'Fatto con 💛 e JavaScript!', + checkForUpdates: 'Cerca aggiornamenti', + noUpdatesAvailable: 'Nessun aggiornamento disponibile', + checkingForUpdate: 'Controllo aggiornamenti in corso', + checkFailure: 'Controllo fallito, riprova più tardi', + updateAvailable: 'Aggiornamento disponibile', + downloadingUpdate: 'Download dell\'aggiornamento', + updateDownloaded: 'Aggiornamento scaricato', + restartToInstall: 'Riavvia Antares per installare l\'aggiornamento', + unableEditFieldWithoutPrimary: 'Impossibile modificare il campo senza una primary key nel resultset', + editCell: 'Modifica cella', + deleteRows: 'Elimina riga | Elimina {count} righe', + confirmToDeleteRows: 'Confermi di voler cancellare una riga? | Confermi di voler cancellare {count} righe?', + notificationsTimeout: 'Timeout Notifiche', + uploadFile: 'Carica file', + addNewRow: 'Aggiungi nuova riga', + numberOfInserts: 'Numero di insert', + openNewTab: 'Apri nuova scheda', + affectedRows: 'Righe interessate', + createNewDatabase: 'Crea nuovo database', + databaseName: 'Nome database', + serverDefault: 'Default del server', + deleteDatabase: 'Cancella database', + editDatabase: 'Modifica database', + clearChanges: 'Scarta modifiche', + addNewField: 'Aggiungi nuovo campo', + manageIndexes: 'Gestisci indici', + manageForeignKeys: 'Gestisci chiavi esterne', + allowNull: 'Permetti NULL', + zeroFill: 'Riempimento con zero', + customValue: 'Varore personalizzato', + onUpdate: 'All\'aggiornamento', + deleteField: 'Cancella campo', + createNewIndex: 'Crea nuovo indice', + addToIndex: 'Aggiungi a indice', + createNewTable: 'Crea nuova tabella', + emptyTable: 'Svuota tabella', + deleteTable: 'Cancella tabella', + emptyCorfirm: 'Confermi di voler svuotare', + unsavedChanges: 'Modifiche non salvate', + discardUnsavedChanges: 'Hai modifiche non salvate. Lasciando questa scheda le modifiche saranno scartate.', + thereAreNoIndexes: 'Non ci sono indici', + thereAreNoForeign: 'Non ci sono chiavi esterne', + createNewForeign: 'Crea nuova chiave esterna', + referenceTable: 'Tabella di rif.', + referenceField: 'Campo di rif.', + foreignFields: 'Campi esterni', + invalidDefault: 'Default non valido', + onDelete: 'All\'eliminazione', + applicationTheme: 'Tema applicazione', + editorTheme: 'Tema editor', + wrapLongLines: 'A capo righe lunghe', + selectStatement: 'Dichiarazione select', + triggerStatement: 'Dichiarazione trigger', + sqlSecurity: 'Sicurezza SQL', + updateOption: 'Update option', + deleteView: 'Elimina vista', + createNewView: 'Crea nuova vista', + deleteTrigger: 'Elimina trigger', + createNewTrigger: 'Crea nuovo trigger', + currentUser: 'Utente attuale', + routineBody: 'Corpo della routine', + dataAccess: 'Accesso dati', + thereAreNoParameters: 'Non ci sono parametri', + createNewParameter: 'Crea nuovo parametro', + createNewRoutine: 'Crea nuova stored routine', + deleteRoutine: 'Elimina stored routine', + functionBody: 'Corpo della funzione', + createNewFunction: 'Crea nuova funzione', + deleteFunction: 'Elimina funzione', + schedulerBody: 'Corpo dello scheduler', + createNewScheduler: 'Crea nuovo scheduler', + deleteScheduler: 'Elimina scheduler', + preserveOnCompletion: 'Preserva al completamento', + enableSsl: 'Abilita SSL', + manualValue: 'Valore manuale', + tableFiller: 'Riempitore Tabella', + fakeDataLanguage: 'Lingua dati falsi', + searchForElements: 'Cerca elementi', + selectAll: 'Seleziona tutto', + queryDuration: 'Durata query', + includeBetaUpdates: 'Includi aggiornamenti beta', + setNull: 'Imposta NULL', + processesList: 'Lista processi', + processInfo: 'Info processo', + manageUsers: 'Gestisci utenti', + createNewSchema: 'Crea nuovo schema', + schemaName: 'Nome schema', + editSchema: 'Modifica schema', + deleteSchema: 'Elimina schema', + markdownSupported: 'Markdown supportato', + plantATree: 'Pianta un albero', + dataTabPageSize: 'Grandezza pagina tab DATI', + enableSsh: 'Abilita SSH', + pageNumber: 'Numero pagina', + duplicateTable: 'Duplica tabella', + noOpenTabs: 'Non ci sono tab aperte, naviga nella barra sinistra o:', + noSchema: 'Nessuno schema', + restorePreviourSession: 'Ripristina sessione precedente', + runQuery: 'Esegui query', + thereAreNoTableFields: 'Non ci sono campi della tabella', + newTable: 'Nuova tabella', + newView: 'Nuova vista', + newTrigger: 'Nuovo trigger', + newRoutine: 'Nuova routine', + newFunction: 'Nuova funzione', + newScheduler: 'Nuovo scheduler', + newTriggerFunction: 'Nuova funzione di trigger', + thereIsNoQueriesYet: 'Non ci sono ancora query', + searchForQueries: 'Cerca query', + killProcess: 'Uccidi processo', + closeTab: 'Chiudi tab', + exportSchema: 'Esporta schema', + importSchema: 'Importa schema', + directoryPath: 'Percorso directory', + newInserStmtEvery: 'Nuova istruzione INSERT ogni', + processingTableExport: 'Processo {table}', + fechingTableExport: 'Ricavo i dati {table}', + writingTableExport: 'Scrittura dati {table}', + checkAllTables: 'Seleziona tutte le tabelle', + uncheckAllTables: 'Deseleziona tutte le tabelle', + goToDownloadPage: 'Vai alla pagina di download', + readOnlyMode: 'Modalità sola lettura', + killQuery: 'Interrompi query', + insertRow: 'Inserisci riga | Inserisci righe', + commitMode: 'Modalità commit', + autoCommit: 'Auto commit', + manualCommit: 'Commit manuale', + actionSuccessful: '{action} riuscito', + importQueryErrors: 'Attenzione: si è verificato un errore | Attenzione si sono verificati {n} errori', + executedQueries: '{n} query eseguite | {n} query eseguite', + ourputFormat: 'Formato output', + singleFile: 'Singolo file {ext}', + zipCompressedFile: 'File {ext} zippato', + disableBlur: 'Disabilita sfocatura', + untrustedConnection: 'Connessione non affidabile', + missingOrIncompleteTranslation: 'Traduzione mancante o incompleta?', + findOutHowToContribute: 'Scopri come contribuire', + disableFKChecks: 'DIsabilita controllo foreigh key', + allConnections: 'Tutte le connessioni', + searchForConnections: 'Cerca una connessione', + disableScratchpad: 'Disabilita scratchpad', + reportABug: 'Segnala un bug', + nextTab: 'Prossima tab', + previousTab: 'Tab precedente', + selectTabNumber: 'Seleziona tab numero {param}', + toggleConsole: 'Attiva/disattiva console', + addShortcut: 'Aggiungi scorciatoia', + editShortcut: 'Modifica scorciatoia', + deleteShortcut: 'Cancella scorciatoia', + restoreDefaults: 'Ripristina predefiniti', + restoreDefaultsQuestion: 'Confermi di ripristinare i valori predefiniti?', + registerAShortcut: 'Registra una scorciatoia', + invalidShortcutMessage: 'Combinazione non valida, continua a digitare', + shortcutAlreadyExists: 'Scorciatoia esistente', + saveContent: 'Salva contenuto', + openAllConnections: 'Apri tutte le connessioni', + openSettings: 'Apri le impostazioni', + openScratchpad: 'Apri lo scratchpad', + runOrReload: 'Esegui o ricarica', + formatQuery: 'Formatta query', + queryHistory: 'Cronologia query', + clearQuery: 'Pulisci query', + openFilter: 'Apri il filtro', + nextResultsPage: 'Prossima pagina risultati', + previousResultsPage: 'Pagina risultati precedente' + }, + faker: { + address: 'Indirizzo', + commerce: 'Commercio', + company: 'Compagnia', + database: 'Database', + date: 'Data', + finance: 'Finanza', + git: 'Git', + hacker: 'Hacker', + internet: 'Internet', + lorem: 'Lorem', + name: 'Nome', + music: 'Musica', + phone: 'Telefono', + random: 'Casuale', + system: 'Sistema', + time: 'Tempo', + vehicle: 'Veicolo', + zipCode: 'Codice zip', + zipCodeByState: 'Codice zip per stato', + city: 'Città', + cityPrefix: 'Prefisso città', + citySuffix: 'Suffisso città', + streetName: 'Nome strada', + streetAddress: 'Indirizzo strada', + streetSuffix: 'Suffisso strada', + streetPrefix: 'Prefisso strada', + secondaryAddress: 'Indirizzo secondario', + county: 'Contea', + country: 'Nazione', + countryCode: 'Codice nazione', + state: 'Stato', + stateAbbr: 'Abbreviazione stato', + latitude: 'Latitudine', + longitude: 'Longitudine', + direction: 'Direzione', + cardinalDirection: 'Direzione cardinale', + ordinalDirection: 'Direzione ordinale', + nearbyGPSCoordinate: 'Coordinate GPS vicine', + timeZone: 'Time zone', + color: 'Colore', + department: 'Dipartimento', + productName: 'Nome prodotto', + price: 'Prezzo', + productAdjective: 'Aggettivo prodotto', + productMaterial: 'Materiale prodotto', + product: 'Prodotto', + productDescription: 'Descrizione prodotto', + suffixes: 'Suffissi', + companyName: 'Nome compagnia', + companySuffix: 'Suffisso compagnia', + catchPhrase: 'Slogan', + bs: 'BS', + catchPhraseAdjective: 'Aggettivo slogan', + catchPhraseDescriptor: 'Descrittore slogan', + catchPhraseNoun: 'Sostantivo slogan', + bsAdjective: 'Aggettivo BS', + bsBuzz: 'Buzz BS', + bsNoun: 'Sostantivo BS', + column: 'Colonna', + type: 'Tipo', + collation: 'Confronto', + engine: 'Motore', + past: 'Passato', + future: 'Futuro', + between: 'Tra', + recent: 'Recente', + soon: 'Presto', + month: 'Mese', + weekday: 'Giorno della settimana', + account: 'Account', + accountName: 'Nome account', + routingNumber: 'Numero di instradamento', + mask: 'Maschera', + amount: 'Ammontare', + transactionType: 'Tipo transazione', + currencyCode: 'Codice valuta', + currencyName: 'Nome valuta', + currencySymbol: 'Simbolo valuta', + bitcoinAddress: 'Indirizzo Bitcoin', + litecoinAddress: 'Indirizzo Litecoin', + creditCardNumber: 'Numero carta di credito', + creditCardCVV: 'CVV carta di credito', + ethereumAddress: 'Indirizzo Ethereum', + iban: 'Iban', + bic: 'Bic', + transactionDescription: 'Descrizione transazione', + branch: 'Ramo', + commitEntry: 'Commit entry', + commitMessage: 'Messaggio di commit', + commitSha: 'SHA del commit', + shortSha: 'SHA breve', + abbreviation: 'Abbreviazione', + adjective: 'Aggettivo', + noun: 'Sostantivo', + verb: 'Verbo', + ingverb: 'Ingverb', + phrase: 'Frase', + avatar: 'Avatar', + email: 'Email', + exampleEmail: 'Email di esempio', + userName: 'Username', + protocol: 'Protocollo', + url: 'Url', + domainName: 'Nome dominio', + domainSuffix: 'Suffisso dominio', + domainWord: 'Parola dominio', + ip: 'Ip', + ipv6: 'Ipv6', + userAgent: 'User agent', + mac: 'Mac', + password: 'Password', + word: 'Parola', + words: 'Parole', + sentence: 'Sentenza', + slug: 'Slug', + sentences: 'Sentenze', + paragraph: 'Paragrafo', + paragraphs: 'Paragrafi', + text: 'Testo', + lines: 'Righe', + genre: 'Genere', + firstName: 'Nome', + lastName: 'Cognome', + middleName: 'Secondo nome', + findName: 'Nome completo', + jobTitle: 'Titolo di lavoro', + gender: 'Genere', + prefix: 'Prefisso', + suffix: 'Suffisso', + title: 'Titolo', + jobDescriptor: 'Descrittore del lavoro', + jobArea: 'Area di lavoro', + jobType: 'Tipo di lavoro', + phoneNumber: 'Numero di telefono', + phoneNumberFormat: 'Formato numeri di telefono', + phoneFormats: 'Formati di telefono', + number: 'Numero', + float: 'Float', + arrayElement: 'Elemento array', + arrayElements: 'Elementi array', + objectElement: 'Elemento object', + uuid: 'Uuid', + boolean: 'Booleano', + image: 'Immagine', + locale: 'Localizzazione', + alpha: 'Alfabetico', + alphaNumeric: 'Alfanumerico', + hexaDecimal: 'Esadecimale', + fileName: 'Nome file', + commonFileName: 'Nome file comune', + mimeType: 'Mime type', + commonFileType: 'Tipo file comune', + commonFileExt: 'Estensione file comune', + fileType: 'Tipo file', + fileExt: 'Estensione file', + directoryPath: 'Percorso directory', + filePath: 'Percorso file', + semver: 'Semver', + manufacturer: 'Produttore', + model: 'Modello', + fuel: 'Carburante', + vin: 'Vin' + } +}; diff --git a/src/renderer/i18n/supported-locales.ts b/src/renderer/i18n/supported-locales.ts new file mode 100644 index 0000000..83ce5ef --- /dev/null +++ b/src/renderer/i18n/supported-locales.ts @@ -0,0 +1,14 @@ +export const localesNames: {[key: string]: string} = { + 'en-US': 'English', + 'it-IT': 'Italiano', + 'ar-SA': 'العربية', + 'es-ES': 'Español', + 'fr-FR': 'Français', + 'pt-BR': 'Português (Brasil)', + 'de-DE': 'Deutsch (Deutschland)', + 'vi-VN': 'Tiếng Việt', + 'ja-JP': '日本語', + 'zh-CN': '简体中文', + 'ru-RU': 'Русский', + 'id-ID': 'Bahasa Indonesia' +}; diff --git a/src/renderer/images/dark.png b/src/renderer/images/dark.png new file mode 100644 index 0000000..136134c Binary files /dev/null and b/src/renderer/images/dark.png differ diff --git a/src/renderer/images/light.png b/src/renderer/images/light.png new file mode 100644 index 0000000..2c62138 Binary files /dev/null and b/src/renderer/images/light.png differ diff --git a/src/renderer/images/logo-16.png b/src/renderer/images/logo-16.png new file mode 100644 index 0000000..bf0db5f Binary files /dev/null and b/src/renderer/images/logo-16.png differ diff --git a/src/renderer/images/logo-32.png b/src/renderer/images/logo-32.png new file mode 100644 index 0000000..8d6b998 Binary files /dev/null and b/src/renderer/images/logo-32.png differ diff --git a/src/renderer/images/logo-64.png b/src/renderer/images/logo-64.png new file mode 100644 index 0000000..017e81e Binary files /dev/null and b/src/renderer/images/logo-64.png differ diff --git a/src/renderer/images/logo-dark.svg b/src/renderer/images/logo-dark.svg new file mode 100644 index 0000000..dbe07d2 --- /dev/null +++ b/src/renderer/images/logo-dark.svg @@ -0,0 +1,301 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/renderer/images/logo-light.svg b/src/renderer/images/logo-light.svg new file mode 100644 index 0000000..30d40b7 --- /dev/null +++ b/src/renderer/images/logo-light.svg @@ -0,0 +1,301 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/renderer/images/logo.png b/src/renderer/images/logo.png new file mode 100644 index 0000000..c733755 Binary files /dev/null and b/src/renderer/images/logo.png differ diff --git a/src/renderer/images/logo.svg b/src/renderer/images/logo.svg new file mode 100644 index 0000000..88b0934 --- /dev/null +++ b/src/renderer/images/logo.svg @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/renderer/index.ejs b/src/renderer/index.ejs new file mode 100644 index 0000000..9fd1dc6 --- /dev/null +++ b/src/renderer/index.ejs @@ -0,0 +1,22 @@ + + + + + + + + <% if (htmlWebpackPlugin.options.nodeModules) { %> + + <% } %> + + +
+ + + diff --git a/src/renderer/index.ts b/src/renderer/index.ts new file mode 100644 index 0000000..76694af --- /dev/null +++ b/src/renderer/index.ts @@ -0,0 +1,98 @@ +'use strict'; +import { ipcRenderer } from 'electron'; +import { createApp } from 'vue'; +import { createPinia } from 'pinia'; +import { VueMaskDirective } from 'v-mask'; +import * as FloatingVue from 'floating-vue'; +import '@mdi/font/css/materialdesignicons.css'; +import 'floating-vue/dist/style.css'; +import 'leaflet/dist/leaflet.css'; +import '@/scss/main.scss'; + +import { useApplicationStore } from '@/stores/application'; +import { useSettingsStore } from '@/stores/settings'; +import { useNotificationsStore } from '@/stores/notifications'; +import { useConsoleStore } from '@/stores/console'; + +import App from '@/App.vue'; +import { i18n } from '@/i18n'; + +// https://github.com/probil/v-mask/issues/498#issuecomment-827027834 +const vMaskV2 = VueMaskDirective; +const vMaskV3 = { + beforeMount: vMaskV2.bind, + updated: vMaskV2.componentUpdated, + unmounted: vMaskV2.unbind +}; + +createApp(App) + .directive('mask', vMaskV3) + .use(createPinia()) + .use(i18n) + .use(FloatingVue) + .mount('#app'); + +const { locale } = useSettingsStore(); +i18n.global.locale = locale; + +// IPC exceptions +ipcRenderer.on('unhandled-exception', (event, error) => { + useNotificationsStore().addNotification({ status: 'error', message: error.message }); +}); + +// IPC query logs +ipcRenderer.on('query-log', (event, logRecord) => { + useConsoleStore().putLog(logRecord); +}); + +ipcRenderer.on('toggle-console', () => { + useConsoleStore().toggleConsole(); +}); + +// IPC app updates +ipcRenderer.on('checking-for-update', () => { + useApplicationStore().updateStatus = 'checking'; +}); + +ipcRenderer.on('update-available', () => { + useApplicationStore().updateStatus = 'available'; +}); + +ipcRenderer.on('update-not-available', () => { + useApplicationStore().updateStatus = 'noupdate'; +}); + +ipcRenderer.on('check-failed', () => { + useApplicationStore().updateStatus = 'nocheck'; +}); + +ipcRenderer.on('no-auto-update', () => { + useApplicationStore().updateStatus = 'disabled'; +}); + +ipcRenderer.on('download-progress', (event, data) => { + useApplicationStore().updateStatus = 'downloading'; + useApplicationStore().downloadProgress = data.percent; +}); + +ipcRenderer.on('update-downloaded', () => { + useApplicationStore().updateStatus = 'downloaded'; +}); + +ipcRenderer.on('link-to-download', () => { + useApplicationStore().updateStatus = 'link'; +}); + +// IPC shortcuts +ipcRenderer.on('toggle-preferences', () => { + useApplicationStore().showSettingModal('general'); +}); + +ipcRenderer.on('open-updates-preferences', () => { + useApplicationStore().showSettingModal('update'); + ipcRenderer.send('check-for-updates'); +}); + +ipcRenderer.on('update-shortcuts', (event, shortcuts) => { + useSettingsStore().updateShortcuts(shortcuts); +}); diff --git a/src/renderer/libs/connStringDecode.ts b/src/renderer/libs/connStringDecode.ts new file mode 100644 index 0000000..bb8c681 --- /dev/null +++ b/src/renderer/libs/connStringDecode.ts @@ -0,0 +1,50 @@ +import { ConnectionParams } from 'common/interfaces/antares'; +import * as formatter from 'pg-connection-string'; // parses a connection string + +const formatHost = (host: string) => { + const results = host === 'localhost' ? '127.0.0.1' : host; + return results; +}; + +const checkForSSl = (conn: string) => { + return conn.includes('ssl=true'); +}; + +const connStringConstruct = (args: ConnectionParams & { pgConnString?: string }): ConnectionParams => { + if (!args.pgConnString) + return args; + + if (typeof args.pgConnString !== 'string') + return args; + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const stringArgs: any = formatter.parse(args.pgConnString); + + const client = args.client || 'pg'; + + args.client = client; + args.host = formatHost(stringArgs.host); + args.database = stringArgs.database; + args.port = stringArgs.port || '5432'; + args.user = stringArgs.user; + args.password = stringArgs.password; + + // ssh + args.ssh = stringArgs.ssh || args.ssh; + args.sshHost = stringArgs.sshHost; + args.sshUser = stringArgs.sshUser; + args.sshPass = stringArgs.sshPass; + args.sshKey = stringArgs.sshKey; + args.sshPort = stringArgs.sshPort; + + // ssl mode + args.ssl = checkForSSl(args.pgConnString); + args.cert = stringArgs.sslcert; + args.key = stringArgs.sslkey; + args.ca = stringArgs.sslrootcert; + args.ciphers = stringArgs.ciphers; + + return args; +}; + +export default connStringConstruct; diff --git a/src/renderer/libs/exportRows.ts b/src/renderer/libs/exportRows.ts new file mode 100644 index 0000000..247b51e --- /dev/null +++ b/src/renderer/libs/exportRows.ts @@ -0,0 +1,63 @@ +import { ClientCode } from 'common/interfaces/antares'; +import { jsonToSqlInsert } from 'common/libs/sqlUtils'; + +export const exportRows = (args: { + type: 'csv' | 'json'| 'sql'; + content: object[]; + table: string; + client?: ClientCode; + fields?: { + [key: string]: {type: string; datePrecision: number}; + }; +}) => { + let mime; + let content; + + switch (args.type) { + case 'csv': { + mime = 'text/csv'; + const csv = []; + + if (args.content.length) + csv.push(Object.keys(args.content[0]).join(';')); + + for (const row of args.content) + csv.push(Object.values(row).map(col => typeof col === 'string' ? `"${col}"` : col).join(';')); + + content = csv.join('\n'); + break; + } + case 'sql': { + mime = 'text/sql'; + const sql = []; + + for (const row of args.content) { + sql.push(jsonToSqlInsert({ + json: row, + client: + args.client, + fields: args.fields, + table: args.table + })); + } + + content = sql.join('\n'); + break; + } + case 'json': + mime = 'application/json'; + content = JSON.stringify(args.content, null, 3); + break; + default: + break; + } + + const file = new Blob([content], { type: mime }); + const downloadLink = document.createElement('a'); + downloadLink.download = `${args.table}.${args.type}`; + downloadLink.href = window.URL.createObjectURL(file); + downloadLink.style.display = 'none'; + document.body.appendChild(downloadLink); + downloadLink.click(); + downloadLink.remove(); +}; diff --git a/src/renderer/libs/ext-language_tools.js b/src/renderer/libs/ext-language_tools.js new file mode 100644 index 0000000..df9375e --- /dev/null +++ b/src/renderer/libs/ext-language_tools.js @@ -0,0 +1,2271 @@ +/* eslint-disable */ +/* + Got from 'ace-builds/src-noconflict/ext-language_tools' and edited to support icons. + I'm not responsible of this crazy code 🤯. +*/ + +ace.define('ace/snippets', ['require', 'exports', 'module', 'ace/lib/oop', 'ace/lib/event_emitter', 'ace/lib/lang', 'ace/range', 'ace/range_list', 'ace/keyboard/hash_handler', 'ace/tokenizer', 'ace/clipboard', 'ace/lib/dom', 'ace/editor'], function (require, exports, module) { + 'use strict'; + const oop = require('./lib/oop'); + const EventEmitter = require('./lib/event_emitter').EventEmitter; + const lang = require('./lib/lang'); + const Range = require('./range').Range; + const RangeList = require('./range_list').RangeList; + const HashHandler = require('./keyboard/hash_handler').HashHandler; + const Tokenizer = require('./tokenizer').Tokenizer; + const clipboard = require('./clipboard'); + + const VARIABLES = { + CURRENT_WORD: function (editor) { + return editor.session.getTextRange(editor.session.getWordRange()); + }, + SELECTION: function (editor, name, indentation) { + const text = editor.session.getTextRange(); + if (indentation) + return text.replace(/\n\r?([ \t]*\S)/g, '\n' + indentation + '$1'); + return text; + }, + CURRENT_LINE: function (editor) { + return editor.session.getLine(editor.getCursorPosition().row); + }, + PREV_LINE: function (editor) { + return editor.session.getLine(editor.getCursorPosition().row - 1); + }, + LINE_INDEX: function (editor) { + return editor.getCursorPosition().row; + }, + LINE_NUMBER: function (editor) { + return editor.getCursorPosition().row + 1; + }, + SOFT_TABS: function (editor) { + return editor.session.getUseSoftTabs() ? 'YES' : 'NO'; + }, + TAB_SIZE: function (editor) { + return editor.session.getTabSize(); + }, + CLIPBOARD: function (editor) { + return clipboard.getText && clipboard.getText(); + }, + FILENAME: function (editor) { + return /[^/\\]*$/.exec(this.FILEPATH(editor))[0]; + }, + FILENAME_BASE: function (editor) { + return /[^/\\]*$/.exec(this.FILEPATH(editor))[0].replace(/\.[^.]*$/, ''); + }, + DIRECTORY: function (editor) { + return this.FILEPATH(editor).replace(/[^/\\]*$/, ''); + }, + FILEPATH: function (editor) { + return '/not implemented.txt'; + }, + WORKSPACE_NAME: function () { + return 'Unknown'; + }, + FULLNAME: function () { + return 'Unknown'; + }, + BLOCK_COMMENT_START: function (editor) { + const mode = editor.session.$mode || {}; + return mode.blockComment && mode.blockComment.start || ''; + }, + BLOCK_COMMENT_END: function (editor) { + const mode = editor.session.$mode || {}; + return mode.blockComment && mode.blockComment.end || ''; + }, + LINE_COMMENT: function (editor) { + const mode = editor.session.$mode || {}; + return mode.lineCommentStart || ''; + }, + CURRENT_YEAR: date.bind(null, { year: 'numeric' }), + CURRENT_YEAR_SHORT: date.bind(null, { year: '2-digit' }), + CURRENT_MONTH: date.bind(null, { month: 'numeric' }), + CURRENT_MONTH_NAME: date.bind(null, { month: 'long' }), + CURRENT_MONTH_NAME_SHORT: date.bind(null, { month: 'short' }), + CURRENT_DATE: date.bind(null, { day: '2-digit' }), + CURRENT_DAY_NAME: date.bind(null, { weekday: 'long' }), + CURRENT_DAY_NAME_SHORT: date.bind(null, { weekday: 'short' }), + CURRENT_HOUR: date.bind(null, { hour: '2-digit', hour12: false }), + CURRENT_MINUTE: date.bind(null, { minute: '2-digit' }), + CURRENT_SECOND: date.bind(null, { second: '2-digit' }) + }; + + VARIABLES.SELECTED_TEXT = VARIABLES.SELECTION; + + function date (dateFormat) { + const str = new Date().toLocaleString('en-us', dateFormat); + return str.length === 1 ? '0' + str : str; + } + + const SnippetManager = function () { + this.snippetMap = {}; + this.snippetNameMap = {}; + }; + + (function () { + oop.implement(this, EventEmitter); + + this.getTokenizer = function () { + return SnippetManager.$tokenizer || this.createTokenizer(); + }; + + this.createTokenizer = function () { + function TabstopToken (str) { + str = str.substr(1); + if (/^\d+$/.test(str)) + return [{ tabstopId: parseInt(str, 10) }]; + return [{ text: str }]; + } + function escape (ch) { + return '(?:[^\\\\' + ch + ']|\\\\.)'; + } + const formatMatcher = { + regex: '/(' + escape('/') + '+)/', + onMatch: function (val, state, stack) { + const ts = stack[0]; + ts.fmtString = true; + ts.guard = val.slice(1, -1); + ts.flag = ''; + return ''; + }, + next: 'formatString' + }; + + SnippetManager.$tokenizer = new Tokenizer({ + start: [ + { + regex: /\\./, + onMatch: function (val, state, stack) { + const ch = val[1]; + if (ch === '}' && stack.length) + val = ch; + else if ('`$\\'.indexOf(ch) !== -1) + val = ch; + + return [val]; + } + }, + { + regex: /}/, + onMatch: function (val, state, stack) { + return [stack.length ? stack.shift() : val]; + } + }, + { regex: /\$(?:\d+|\w+)/, onMatch: TabstopToken }, + { + regex: /\$\{[\dA-Z_a-z]+/, + onMatch: function (str, state, stack) { + const t = TabstopToken(str.substr(1)); + stack.unshift(t[0]); + return t; + }, + next: 'snippetVar' + }, + { regex: /\n/, token: 'newline', merge: false } + ], + snippetVar: [ + { + regex: '\\|' + escape('\\|') + '*\\|', + onMatch: function (val, state, stack) { + const choices = val.slice(1, -1).replace(/\\[,|\\]|,/g, function (operator) { + return operator.length === 2 ? operator[1] : '\x00'; + }).split('\x00').map(function (value) { + return { value: value }; + }); + stack[0].choices = choices; + return [choices[0]]; + }, + next: 'start' + }, + formatMatcher, + { regex: '([^:}\\\\]|\\\\.)*:?', token: '', next: 'start' } + ], + formatString: [ + { + regex: /:/, + onMatch: function (val, state, stack) { + if (stack.length && stack[0].expectElse) { + stack[0].expectElse = false; + stack[0].ifEnd = { elseEnd: stack[0] }; + return [stack[0].ifEnd]; + } + return ':'; + } + }, + { + regex: /\\./, + onMatch: function (val, state, stack) { + const ch = val[1]; + if (ch === '}' && stack.length) + val = ch; + else if ('`$\\'.indexOf(ch) !== -1) + val = ch; + else if (ch === 'n') + val = '\n'; + else if (ch === 't') + val = '\t'; + else if ('ulULE'.indexOf(ch) !== -1) + val = { changeCase: ch, local: ch > 'a' }; + return [val]; + } + }, + { + regex: '/\\w*}', + onMatch: function (val, state, stack) { + const next = stack.shift(); + if (next) + next.flag = val.slice(1, -1); + this.next = next && next.tabstopId ? 'start' : ''; + return [next || val]; + }, + next: 'start' + }, + { + regex: /\$(?:\d+|\w+)/, + onMatch: function (val, state, stack) { + return [{ text: val.slice(1) }]; + } + }, + { + regex: /\${\w+/, + onMatch: function (val, state, stack) { + const token = { text: val.slice(2) }; + stack.unshift(token); + return [token]; + }, + next: 'formatStringVar' + }, + { regex: /\n/, token: 'newline', merge: false }, + { + regex: /}/, + onMatch: function (val, state, stack) { + const next = stack.shift(); + this.next = next && next.tabstopId ? 'start' : ''; + return [next || val]; + }, + next: 'start' + } + ], + formatStringVar: [ + { + regex: /:\/\w+}/, + onMatch: function (val, state, stack) { + const ts = stack[0]; + ts.formatFunction = val.slice(2, -1); + return [stack.shift()]; + }, + next: 'formatString' + }, + formatMatcher, + { + regex: /:[\\?\-+]?/, + onMatch: function (val, state, stack) { + if (val[1] === '+') + stack[0].ifEnd = stack[0]; + if (val[1] === '?') + stack[0].expectElse = true; + }, + next: 'formatString' + }, + { regex: '([^:}\\\\]|\\\\.)*:?', token: '', next: 'formatString' } + ] + }); + return SnippetManager.$tokenizer; + }; + + this.tokenizeTmSnippet = function (str, startState) { + return this.getTokenizer().getLineTokens(str, startState).tokens.map(function (x) { + return x.value || x; + }); + }; + + this.getVariableValue = function (editor, name, indentation) { + if (/^\d+$/.test(name)) + return (this.variables.__ || {})[name] || ''; + if (/^[A-Z]\d+$/.test(name)) + return (this.variables[name[0] + '__'] || {})[name.substr(1)] || ''; + + name = name.replace(/^TM_/, ''); + if (!this.variables.hasOwnProperty(name)) + return ''; + let value = this.variables[name]; + if (typeof value === 'function') + value = this.variables[name](editor, name, indentation); + return value === null ? '' : value; + }; + + this.variables = VARIABLES; + this.tmStrFormat = function (str, ch, editor) { + if (!ch.fmt) return str; + const flag = ch.flag || ''; + let re = ch.guard; + re = new RegExp(re, flag.replace(/[^gim]/g, '')); + const fmtTokens = typeof ch.fmt === 'string' ? this.tokenizeTmSnippet(ch.fmt, 'formatString') : ch.fmt; + const _self = this; + const formatted = str.replace(re, function () { + const oldArgs = _self.variables.__; + _self.variables.__ = [].slice.call(arguments); + const fmtParts = _self.resolveVariables(fmtTokens, editor); + let gChangeCase = 'E'; + for (let i = 0; i < fmtParts.length; i++) { + const ch = fmtParts[i]; + if (typeof ch === 'object') { + fmtParts[i] = ''; + if (ch.changeCase && ch.local) { + const next = fmtParts[i + 1]; + if (next && typeof next === 'string') { + if (ch.changeCase === 'u') + fmtParts[i] = next[0].toUpperCase(); + else + fmtParts[i] = next[0].toLowerCase(); + fmtParts[i + 1] = next.substr(1); + } + } + else if (ch.changeCase) + gChangeCase = ch.changeCase; + } + else if (gChangeCase === 'U') + fmtParts[i] = ch.toUpperCase(); + else if (gChangeCase === 'L') + fmtParts[i] = ch.toLowerCase(); + } + _self.variables.__ = oldArgs; + return fmtParts.join(''); + }); + return formatted; + }; + + this.tmFormatFunction = function (str, ch, editor) { + if (ch.formatFunction === 'upcase') + return str.toUpperCase(); + if (ch.formatFunction === 'downcase') + return str.toLowerCase(); + return str; + }; + + this.resolveVariables = function (snippet, editor) { + const result = []; + let indentation = ''; + let afterNewLine = true; + for (let i = 0; i < snippet.length; i++) { + const ch = snippet[i]; + if (typeof ch === 'string') { + result.push(ch); + if (ch === '\n') { + afterNewLine = true; + indentation = ''; + } + else if (afterNewLine) { + indentation = /^\t*/.exec(ch)[0]; + afterNewLine = /\S/.test(ch); + } + continue; + } + if (!ch) continue; + afterNewLine = false; + + if (ch.fmtString) { + let j = snippet.indexOf(ch, i + 1); + if (j === -1) j = snippet.length; + ch.fmt = snippet.slice(i + 1, j); + i = j; + } + + if (ch.text) { + let value = this.getVariableValue(editor, ch.text, indentation) + ''; + if (ch.fmtString) + value = this.tmStrFormat(value, ch, editor); + if (ch.formatFunction) + value = this.tmFormatFunction(value, ch, editor); + + if (value && !ch.ifEnd) { + result.push(value); + gotoNext(ch); + } + else if (!value && ch.ifEnd) + gotoNext(ch.ifEnd); + } + else if (ch.elseEnd) + gotoNext(ch.elseEnd); + else if (ch.tabstopId !== null) + result.push(ch); + else if (ch.changeCase !== null) + result.push(ch); + } + function gotoNext (ch) { + const i1 = snippet.indexOf(ch, i + 1); + if (i1 !== -1) + i = i1; + } + return result; + }; + + this.insertSnippetForSelection = function (editor, snippetText) { + const cursor = editor.getCursorPosition(); + const line = editor.session.getLine(cursor.row); + const tabString = editor.session.getTabString(); + let indentString = line.match(/^\s*/)[0]; + + if (cursor.column < indentString.length) + indentString = indentString.slice(0, cursor.column); + + snippetText = snippetText.replace(/\r/g, ''); + let tokens = this.tokenizeTmSnippet(snippetText); + tokens = this.resolveVariables(tokens, editor); + tokens = tokens.map(function (x) { + if (x === '\n') + return x + indentString; + if (typeof x === 'string') + return x.replace(/\t/g, tabString); + return x; + }); + const tabstops = []; + tokens.forEach(function (p, i) { + if (typeof p !== 'object') + return; + const id = p.tabstopId; + let ts = tabstops[id]; + if (!ts) { + ts = tabstops[id] = []; + ts.index = id; + ts.value = ''; + ts.parents = {}; + } + if (ts.indexOf(p) !== -1) + return; + if (p.choices && !ts.choices) + ts.choices = p.choices; + ts.push(p); + const i1 = tokens.indexOf(p, i + 1); + if (i1 === -1) + return; + + const value = tokens.slice(i + 1, i1); + const isNested = value.some(function (t) { + return typeof t === 'object'; + }); + if (isNested && !ts.value) + ts.value = value; + else if (value.length && (!ts.value || typeof ts.value !== 'string')) + ts.value = value.join(''); + }); + tabstops.forEach(function (ts) { + ts.length = 0; + }); + const expanding = {}; + function copyValue (val) { + const copy = []; + for (let i = 0; i < val.length; i++) { + let p = val[i]; + if (typeof p === 'object') { + if (expanding[p.tabstopId]) + continue; + const j = val.lastIndexOf(p, i - 1); + p = copy[j] || { tabstopId: p.tabstopId }; + } + copy[i] = p; + } + return copy; + } + for (let i = 0; i < tokens.length; i++) { + const p = tokens[i]; + if (typeof p !== 'object') + continue; + const id = p.tabstopId; + const ts = tabstops[id]; + const i1 = tokens.indexOf(p, i + 1); + if (expanding[id]) { + if (expanding[id] === p) { + delete expanding[id]; + Object.keys(expanding).forEach(function (parentId) { + ts.parents[parentId] = true; + }); + } + continue; + } + expanding[id] = p; + let value = ts.value; + if (typeof value !== 'string') + value = copyValue(value); + else if (p.fmt) + value = this.tmStrFormat(value, p, editor); + tokens.splice.apply(tokens, [i + 1, Math.max(0, i1 - i)].concat(value, p)); + + if (ts.indexOf(p) === -1) + ts.push(p); + } + let row = 0; let column = 0; + let text = ''; + tokens.forEach(function (t) { + if (typeof t === 'string') { + const lines = t.split('\n'); + if (lines.length > 1) { + column = lines[lines.length - 1].length; + row += lines.length - 1; + } + else + column += t.length; + text += t; + } + else if (t) { + if (!t.start) + t.start = { row: row, column: column }; + else + t.end = { row: row, column: column }; + } + }); + const range = editor.getSelectionRange(); + const end = editor.session.replace(range, text); + + const tabstopManager = new TabstopManager(editor); + const selectionId = editor.inVirtualSelectionMode && editor.selection.index; + tabstopManager.addTabstops(tabstops, range.start, end, selectionId); + }; + + this.insertSnippet = function (editor, snippetText) { + const self = this; + if (editor.inVirtualSelectionMode) + return self.insertSnippetForSelection(editor, snippetText); + + editor.forEachSelection(function () { + self.insertSnippetForSelection(editor, snippetText); + }, null, { keepOrder: true }); + + if (editor.tabstopManager) + editor.tabstopManager.tabNext(); + }; + + this.$getScope = function (editor) { + let scope = editor.session.$mode.$id || ''; + scope = scope.split('/').pop(); + if (scope === 'html' || scope === 'php') { + if (scope === 'php' && !editor.session.$mode.inlinePhp) + scope = 'html'; + const c = editor.getCursorPosition(); + let state = editor.session.getState(c.row); + if (typeof state === 'object') + state = state[0]; + + if (state.substring) { + if (state.substring(0, 3) === 'js-') + scope = 'javascript'; + else if (state.substring(0, 4) === 'css-') + scope = 'css'; + else if (state.substring(0, 4) === 'php-') + scope = 'php'; + } + } + + return scope; + }; + + this.getActiveScopes = function (editor) { + const scope = this.$getScope(editor); + const scopes = [scope]; + const snippetMap = this.snippetMap; + if (snippetMap[scope] && snippetMap[scope].includeScopes) + scopes.push.apply(scopes, snippetMap[scope].includeScopes); + + scopes.push('_'); + return scopes; + }; + + this.expandWithTab = function (editor, options) { + const self = this; + const result = editor.forEachSelection(function () { + return self.expandSnippetForSelection(editor, options); + }, null, { keepOrder: true }); + if (result && editor.tabstopManager) + editor.tabstopManager.tabNext(); + return result; + }; + + this.expandSnippetForSelection = function (editor, options) { + const cursor = editor.getCursorPosition(); + const line = editor.session.getLine(cursor.row); + const before = line.substring(0, cursor.column); + const after = line.substr(cursor.column); + + const snippetMap = this.snippetMap; + let snippet; + this.getActiveScopes(editor).some(function (scope) { + const snippets = snippetMap[scope]; + if (snippets) + snippet = this.findMatchingSnippet(snippets, before, after); + return !!snippet; + }, this); + if (!snippet) + return false; + if (options && options.dryRun) + return true; + editor.session.doc.removeInLine(cursor.row, + cursor.column - snippet.replaceBefore.length, + cursor.column + snippet.replaceAfter.length + ); + + this.variables.M__ = snippet.matchBefore; + this.variables.T__ = snippet.matchAfter; + this.insertSnippetForSelection(editor, snippet.content); + + this.variables.M__ = this.variables.T__ = null; + return true; + }; + + this.findMatchingSnippet = function (snippetList, before, after) { + for (let i = snippetList.length; i--;) { + const s = snippetList[i]; + if (s.startRe && !s.startRe.test(before)) + continue; + if (s.endRe && !s.endRe.test(after)) + continue; + if (!s.startRe && !s.endRe) + continue; + + s.matchBefore = s.startRe ? s.startRe.exec(before) : ['']; + s.matchAfter = s.endRe ? s.endRe.exec(after) : ['']; + s.replaceBefore = s.triggerRe ? s.triggerRe.exec(before)[0] : ''; + s.replaceAfter = s.endTriggerRe ? s.endTriggerRe.exec(after)[0] : ''; + return s; + } + }; + + this.snippetMap = {}; + this.snippetNameMap = {}; + this.register = function (snippets, scope) { + const snippetMap = this.snippetMap; + const snippetNameMap = this.snippetNameMap; + const self = this; + + if (!snippets) + snippets = []; + + function wrapRegexp (src) { + if (src && !/^\^?\(.*\)\$?$|^\\b$/.test(src)) + src = '(?:' + src + ')'; + + return src || ''; + } + function guardedRegexp (re, guard, opening) { + re = wrapRegexp(re); + guard = wrapRegexp(guard); + if (opening) { + re = guard + re; + if (re && re[re.length - 1] !== '$') + re = re + '$'; + } + else { + re = re + guard; + if (re && re[0] !== '^') + re = '^' + re; + } + return new RegExp(re); + } + + function addSnippet (s) { + if (!s.scope) + s.scope = scope || '_'; + scope = s.scope; + if (!snippetMap[scope]) { + snippetMap[scope] = []; + snippetNameMap[scope] = {}; + } + + const map = snippetNameMap[scope]; + if (s.name) { + const old = map[s.name]; + if (old) + self.unregister(old); + map[s.name] = s; + } + snippetMap[scope].push(s); + + if (s.prefix) + s.tabTrigger = s.prefix; + + if (!s.content && s.body) + s.content = Array.isArray(s.body) ? s.body.join('\n') : s.body; + + if (s.tabTrigger && !s.trigger) { + if (!s.guard && /^\w/.test(s.tabTrigger)) + s.guard = '\\b'; + s.trigger = lang.escapeRegExp(s.tabTrigger); + } + + if (!s.trigger && !s.guard && !s.endTrigger && !s.endGuard) + return; + + s.startRe = guardedRegexp(s.trigger, s.guard, true); + s.triggerRe = new RegExp(s.trigger); + + s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true); + s.endTriggerRe = new RegExp(s.endTrigger); + } + + if (Array.isArray(snippets)) + snippets.forEach(addSnippet); + else { + Object.keys(snippets).forEach(function (key) { + addSnippet(snippets[key]); + }); + } + + this._signal('registerSnippets', { scope: scope }); + }; + this.unregister = function (snippets, scope) { + const snippetMap = this.snippetMap; + const snippetNameMap = this.snippetNameMap; + + function removeSnippet (s) { + const nameMap = snippetNameMap[s.scope || scope]; + if (nameMap && nameMap[s.name]) { + delete nameMap[s.name]; + const map = snippetMap[s.scope || scope]; + const i = map && map.indexOf(s); + if (i >= 0) + map.splice(i, 1); + } + } + if (snippets.content) + removeSnippet(snippets); + else if (Array.isArray(snippets)) + snippets.forEach(removeSnippet); + }; + this.parseSnippetFile = function (str) { + str = str.replace(/\r/g, ''); + const list = []; let snippet = {}; + const re = /^#.*|^({[\s\S]*})\s*$|^(\S+) (.*)$|^((?:\n*\t.*)+)/gm; + let m; + while (m = re.exec(str)) { + if (m[1]) { + try { + snippet = JSON.parse(m[1]); + list.push(snippet); + } + catch (e) {} + } if (m[4]) { + snippet.content = m[4].replace(/^\t/gm, ''); + list.push(snippet); + snippet = {}; + } + else { + const key = m[2]; const val = m[3]; + if (key === 'regex') { + const guardRe = /\/((?:[^\\/\\]|\\.)*)|$/g; + snippet.guard = guardRe.exec(val)[1]; + snippet.trigger = guardRe.exec(val)[1]; + snippet.endTrigger = guardRe.exec(val)[1]; + snippet.endGuard = guardRe.exec(val)[1]; + } + else if (key === 'snippet') { + snippet.tabTrigger = val.match(/^\S*/)[0]; + if (!snippet.name) + snippet.name = val; + } + else if (key) + snippet[key] = val; + } + } + return list; + }; + this.getSnippetByName = function (name, editor) { + const snippetMap = this.snippetNameMap; + let snippet; + this.getActiveScopes(editor).some(function (scope) { + const snippets = snippetMap[scope]; + if (snippets) + snippet = snippets[name]; + return !!snippet; + }, this); + return snippet; + }; + }).call(SnippetManager.prototype); + + const TabstopManager = function (editor) { + if (editor.tabstopManager) + return editor.tabstopManager; + editor.tabstopManager = this; + this.$onChange = this.onChange.bind(this); + this.$onChangeSelection = lang.delayedCall(this.onChangeSelection.bind(this)).schedule; + this.$onChangeSession = this.onChangeSession.bind(this); + this.$onAfterExec = this.onAfterExec.bind(this); + this.attach(editor); + }; + (function () { + this.attach = function (editor) { + this.index = 0; + this.ranges = []; + this.tabstops = []; + this.$openTabstops = null; + this.selectedTabstop = null; + + this.editor = editor; + this.editor.on('change', this.$onChange); + this.editor.on('changeSelection', this.$onChangeSelection); + this.editor.on('changeSession', this.$onChangeSession); + this.editor.commands.on('afterExec', this.$onAfterExec); + this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler); + }; + this.detach = function () { + this.tabstops.forEach(this.removeTabstopMarkers, this); + this.ranges = null; + this.tabstops = null; + this.selectedTabstop = null; + this.editor.removeListener('change', this.$onChange); + this.editor.removeListener('changeSelection', this.$onChangeSelection); + this.editor.removeListener('changeSession', this.$onChangeSession); + this.editor.commands.removeListener('afterExec', this.$onAfterExec); + this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler); + this.editor.tabstopManager = null; + this.editor = null; + }; + + this.onChange = function (delta) { + const isRemove = delta.action[0] === 'r'; + const selectedTabstop = this.selectedTabstop || {}; + const parents = selectedTabstop.parents || {}; + const tabstops = (this.tabstops || []).slice(); + for (let i = 0; i < tabstops.length; i++) { + const ts = tabstops[i]; + const active = ts === selectedTabstop || parents[ts.index]; + ts.rangeList.$bias = active ? 0 : 1; + + if (delta.action === 'remove' && ts !== selectedTabstop) { + const parentActive = ts.parents && ts.parents[selectedTabstop.index]; + let startIndex = ts.rangeList.pointIndex(delta.start, parentActive); + startIndex = startIndex < 0 ? -startIndex - 1 : startIndex + 1; + let endIndex = ts.rangeList.pointIndex(delta.end, parentActive); + endIndex = endIndex < 0 ? -endIndex - 1 : endIndex - 1; + const toRemove = ts.rangeList.ranges.slice(startIndex, endIndex); + for (let j = 0; j < toRemove.length; j++) + this.removeRange(toRemove[j]); + } + ts.rangeList.$onChange(delta); + } + const session = this.editor.session; + if (!this.$inChange && isRemove && session.getLength() === 1 && !session.getValue()) + this.detach(); + }; + this.updateLinkedFields = function () { + const ts = this.selectedTabstop; + if (!ts || !ts.hasLinkedRanges || !ts.firstNonLinked) + return; + this.$inChange = true; + const session = this.editor.session; + const text = session.getTextRange(ts.firstNonLinked); + for (let i = 0; i < ts.length; i++) { + const range = ts[i]; + if (!range.linked) + continue; + const original = range.original; + const fmt = exports.snippetManager.tmStrFormat(text, original, this.editor); + session.replace(range, fmt); + } + this.$inChange = false; + }; + this.onAfterExec = function (e) { + if (e.command && !e.command.readOnly) + this.updateLinkedFields(); + }; + this.onChangeSelection = function () { + if (!this.editor) + return; + const lead = this.editor.selection.lead; + const anchor = this.editor.selection.anchor; + const isEmpty = this.editor.selection.isEmpty(); + for (let i = 0; i < this.ranges.length; i++) { + if (this.ranges[i].linked) + continue; + const containsLead = this.ranges[i].contains(lead.row, lead.column); + const containsAnchor = isEmpty || this.ranges[i].contains(anchor.row, anchor.column); + if (containsLead && containsAnchor) + return; + } + this.detach(); + }; + this.onChangeSession = function () { + this.detach(); + }; + this.tabNext = function (dir) { + const max = this.tabstops.length; + let index = this.index + (dir || 1); + index = Math.min(Math.max(index, 1), max); + if (index === max) + index = 0; + this.selectTabstop(index); + if (index === 0) + this.detach(); + }; + this.selectTabstop = function (index) { + this.$openTabstops = null; + let ts = this.tabstops[this.index]; + if (ts) + this.addTabstopMarkers(ts); + this.index = index; + ts = this.tabstops[this.index]; + if (!ts || !ts.length) + return; + + this.selectedTabstop = ts; + const range = ts.firstNonLinked || ts; + if (ts.choices) range.cursor = range.start; + if (!this.editor.inVirtualSelectionMode) { + const sel = this.editor.multiSelect; + sel.toSingleRange(range); + for (let i = 0; i < ts.length; i++) { + if (ts.hasLinkedRanges && ts[i].linked) + continue; + sel.addRange(ts[i].clone(), true); + } + } + else + this.editor.selection.fromOrientedRange(range); + + this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler); + if (this.selectedTabstop && this.selectedTabstop.choices) + this.editor.execCommand('startAutocomplete', { matches: this.selectedTabstop.choices }); + }; + this.addTabstops = function (tabstops, start, end) { + const useLink = this.useLink || !this.editor.getOption('enableMultiselect'); + + if (!this.$openTabstops) + this.$openTabstops = []; + if (!tabstops[0]) { + const p = Range.fromPoints(end, end); + moveRelative(p.start, start); + moveRelative(p.end, start); + tabstops[0] = [p]; + tabstops[0].index = 0; + } + + const i = this.index; + const arg = [i + 1, 0]; + const ranges = this.ranges; + tabstops.forEach(function (ts, index) { + const dest = this.$openTabstops[index] || ts; + + for (let i = 0; i < ts.length; i++) { + const p = ts[i]; + const range = Range.fromPoints(p.start, p.end || p.start); + movePoint(range.start, start); + movePoint(range.end, start); + range.original = p; + range.tabstop = dest; + ranges.push(range); + if (dest !== ts) + dest.unshift(range); + else + dest[i] = range; + if (p.fmtString || (dest.firstNonLinked && useLink)) { + range.linked = true; + dest.hasLinkedRanges = true; + } + else if (!dest.firstNonLinked) + dest.firstNonLinked = range; + } + if (!dest.firstNonLinked) + dest.hasLinkedRanges = false; + if (dest === ts) { + arg.push(dest); + this.$openTabstops[index] = dest; + } + this.addTabstopMarkers(dest); + dest.rangeList = dest.rangeList || new RangeList(); + dest.rangeList.$bias = 0; + dest.rangeList.addList(dest); + }, this); + + if (arg.length > 2) { + if (this.tabstops.length) + arg.push(arg.splice(2, 1)[0]); + this.tabstops.splice.apply(this.tabstops, arg); + } + }; + + this.addTabstopMarkers = function (ts) { + const session = this.editor.session; + ts.forEach(function (range) { + if (!range.markerId) + range.markerId = session.addMarker(range, 'ace_snippet-marker', 'text'); + }); + }; + this.removeTabstopMarkers = function (ts) { + const session = this.editor.session; + ts.forEach(function (range) { + session.removeMarker(range.markerId); + range.markerId = null; + }); + }; + this.removeRange = function (range) { + let i = range.tabstop.indexOf(range); + if (i !== -1) range.tabstop.splice(i, 1); + i = this.ranges.indexOf(range); + if (i !== -1) this.ranges.splice(i, 1); + i = range.tabstop.rangeList.ranges.indexOf(range); + if (i !== -1) range.tabstop.splice(i, 1); + this.editor.session.removeMarker(range.markerId); + if (!range.tabstop.length) { + i = this.tabstops.indexOf(range.tabstop); + if (i !== -1) + this.tabstops.splice(i, 1); + if (!this.tabstops.length) + this.detach(); + } + }; + + this.keyboardHandler = new HashHandler(); + this.keyboardHandler.bindKeys({ + Tab: function (editor) { + if (exports.snippetManager && exports.snippetManager.expandWithTab(editor)) + return; + editor.tabstopManager.tabNext(1); + editor.renderer.scrollCursorIntoView(); + }, + 'Shift-Tab': function (editor) { + editor.tabstopManager.tabNext(-1); + editor.renderer.scrollCursorIntoView(); + }, + Esc: function (editor) { + editor.tabstopManager.detach(); + } + }); + }).call(TabstopManager.prototype); + + const movePoint = function (point, diff) { + if (point.row === 0) + point.column += diff.column; + point.row += diff.row; + }; + + const moveRelative = function (point, start) { + if (point.row === start.row) + point.column -= start.column; + point.row -= start.row; + }; + + require('./lib/dom').importCssString(` + .ace_snippet-marker { + -moz-box-sizing: border-box; + box-sizing: border-box; + background: rgba(194, 193, 208, 0.09); + border: 1px dotted rgba(211, 208, 235, 0.62); + position: absolute; + }`); + + exports.snippetManager = new SnippetManager(); + + const Editor = require('./editor').Editor; + (function () { + this.insertSnippet = function (content, options) { + return exports.snippetManager.insertSnippet(this, content, options); + }; + this.expandSnippet = function (options) { + return exports.snippetManager.expandWithTab(this, options); + }; + }).call(Editor.prototype); +}); + +ace.define('ace/autocomplete/popup', ['require', 'exports', 'module', 'ace/virtual_renderer', 'ace/editor', 'ace/range', 'ace/lib/event', 'ace/lib/lang', 'ace/lib/dom'], function (require, exports, module) { + 'use strict'; + + const Renderer = require('../virtual_renderer').VirtualRenderer; + const Editor = require('../editor').Editor; + const Range = require('../range').Range; + const event = require('../lib/event'); + const lang = require('../lib/lang'); + const dom = require('../lib/dom'); + + const $singleLineEditor = function (el) { + const renderer = new Renderer(el); + + renderer.$maxLines = 4; + + const editor = new Editor(renderer); + + editor.setHighlightActiveLine(false); + editor.setShowPrintMargin(false); + editor.renderer.setShowGutter(false); + editor.renderer.setHighlightGutterLine(false); + + editor.$mouseHandler.$focusTimeout = 0; + editor.$highlightTagPending = true; + + return editor; + }; + + const AcePopup = function (parentNode) { + const el = dom.createElement('div'); + const popup = new $singleLineEditor(el); + + if (parentNode) + parentNode.appendChild(el); + el.style.display = 'none'; + popup.renderer.content.style.cursor = 'default'; + popup.renderer.setStyle('ace_autocomplete'); + + popup.setOption('displayIndentGuides', false); + popup.setOption('dragDelay', 150); + + const noop = function () {}; + + popup.focus = noop; + popup.$isFocused = true; + + popup.renderer.$cursorLayer.restartTimer = noop; + popup.renderer.$cursorLayer.element.style.opacity = 0; + + popup.renderer.$maxLines = 8; + popup.renderer.$keepTextAreaAtCursor = false; + + popup.setHighlightActiveLine(false); + popup.session.highlight(''); + popup.session.$searchHighlight.clazz = 'ace_highlight-marker'; + + popup.on('mousedown', function (e) { + const pos = e.getDocumentPosition(); + popup.selection.moveToPosition(pos); + selectionMarker.start.row = selectionMarker.end.row = pos.row; + e.stop(); + }); + + let lastMouseEvent; + const hoverMarker = new Range(-1, 0, -1, Infinity); + const selectionMarker = new Range(-1, 0, -1, Infinity); + selectionMarker.id = popup.session.addMarker(selectionMarker, 'ace_active-line', 'fullLine'); + popup.setSelectOnHover = function (val) { + if (!val) + hoverMarker.id = popup.session.addMarker(hoverMarker, 'ace_line-hover', 'fullLine'); + else if (hoverMarker.id) { + popup.session.removeMarker(hoverMarker.id); + hoverMarker.id = null; + } + }; + popup.setSelectOnHover(false); + popup.on('mousemove', function (e) { + if (!lastMouseEvent) { + lastMouseEvent = e; + return; + } + if (lastMouseEvent.x === e.x && lastMouseEvent.y === e.y) + return; + + lastMouseEvent = e; + lastMouseEvent.scrollTop = popup.renderer.scrollTop; + const row = lastMouseEvent.getDocumentPosition().row; + if (hoverMarker.start.row !== row) { + if (!hoverMarker.id) + popup.setRow(row); + setHoverMarker(row); + } + }); + popup.renderer.on('beforeRender', function () { + if (lastMouseEvent && hoverMarker.start.row !== -1) { + lastMouseEvent.$pos = null; + const row = lastMouseEvent.getDocumentPosition().row; + if (!hoverMarker.id) + popup.setRow(row); + setHoverMarker(row, true); + } + }); + popup.renderer.on('afterRender', function () { + const row = popup.getRow(); + const t = popup.renderer.$textLayer; + const selected = t.element.childNodes[row - t.config.firstRow]; + if (selected !== t.selectedNode && t.selectedNode) + dom.removeCssClass(t.selectedNode, 'ace_selected'); + t.selectedNode = selected; + if (selected) + dom.addCssClass(selected, 'ace_selected'); + }); + const hideHoverMarker = function () { + setHoverMarker(-1); + }; + const setHoverMarker = function (row, suppressRedraw) { + if (row !== hoverMarker.start.row) { + hoverMarker.start.row = hoverMarker.end.row = row; + if (!suppressRedraw) + popup.session._emit('changeBackMarker'); + popup._emit('changeHoverMarker'); + } + }; + popup.getHoveredRow = function () { + return hoverMarker.start.row; + }; + + event.addListener(popup.container, 'mouseout', hideHoverMarker); + popup.on('hide', hideHoverMarker); + popup.on('changeSelection', hideHoverMarker); + + popup.session.doc.getLength = function () { + return popup.data.length; + }; + popup.session.doc.getLine = function (i) { + const data = popup.data[i]; + if (typeof data === 'string') + return data; + return (data && data.value) || ''; + }; + + const bgTokenizer = popup.session.bgTokenizer; + bgTokenizer.$tokenizeRow = function (row) { + let data = popup.data[row]; + const tokens = []; + if (!data) + return tokens; + if (typeof data === 'string') + data = { value: data }; + const caption = data.caption || data.value || data.name; + + function addToken (value, className) { + value && tokens.push({ + type: (data.className || '') + (className || ''), + value: value + }); + } + + // Antares additions + function addIconToken (meta) { + let iconClass; + + switch (meta) { + case 'table': + iconClass = 'mdi-table'; + break; + case 'column': + iconClass = 'mdi-rhombus-split-outline'; + break; + case 'view': + iconClass = 'mdi-table-eye'; + break; + case 'trigger': + iconClass = 'mdi-table-cog'; + break; + case 'routine': + iconClass = 'mdi-sync-circle'; + break; + case 'function': + iconClass = 'mdi-arrow-right-bold-box'; + break; + case 'scheduler': + iconClass = 'mdi-calendar-clock'; + break; + case 'keyword': + iconClass = 'mdi-cube'; + break; + case 'snippet': + iconClass = 'mdi-code-braces'; + break; + case 'local': + iconClass = 'mdi-alphabetical-variant'; + break; + default: + iconClass = 'mdi-circle'; + break; + } + + iconClass && tokens.push({ + type: ` mdi ${iconClass}`, + value: ' ' + }); + } + // + + const lower = caption.toLowerCase(); + const filterText = (popup.filterText || '').toLowerCase(); + let lastIndex = 0; + let lastI = 0; + + addIconToken(data.meta); + + for (let i = 0; i <= filterText.length; i++) { + if (i !== lastI && (data.matchMask & (1 << i) || i === filterText.length)) { + const sub = filterText.slice(lastI, i); + lastI = i; + const index = lower.indexOf(sub, lastIndex); + if (index === -1) continue; + addToken(caption.slice(lastIndex, index), ''); + lastIndex = index + sub.length; + addToken(caption.slice(index, lastIndex), 'completion-highlight'); + } + } + addToken(caption.slice(lastIndex, caption.length), ''); + + if (data.meta) + tokens.push({ type: 'completion-meta', value: data.meta }); + if (data.message) + tokens.push({ type: 'completion-message', value: data.message }); + + return tokens; + }; + bgTokenizer.$updateOnChange = noop; + bgTokenizer.start = noop; + + popup.session.$computeWidth = function () { + return this.screenWidth = 0; + }; + popup.isOpen = false; + popup.isTopdown = false; + popup.autoSelect = true; + popup.filterText = ''; + + popup.data = []; + popup.setData = function (list, filterText) { + popup.filterText = filterText || ''; + popup.setValue(lang.stringRepeat('\n', list.length), -1); + popup.data = list || []; + popup.setRow(0); + }; + popup.getData = function (row) { + return popup.data[row]; + }; + + popup.getRow = function () { + return selectionMarker.start.row; + }; + popup.setRow = function (line) { + line = Math.max(this.autoSelect ? 0 : -1, Math.min(this.data.length, line)); + if (selectionMarker.start.row !== line) { + popup.selection.clearSelection(); + selectionMarker.start.row = selectionMarker.end.row = line || 0; + popup.session._emit('changeBackMarker'); + popup.moveCursorTo(line || 0, 0); + if (popup.isOpen) + popup._signal('select'); + } + }; + + popup.on('changeSelection', function () { + if (popup.isOpen) + popup.setRow(popup.selection.lead.row); + popup.renderer.scrollCursorIntoView(); + }); + + popup.hide = function () { + this.container.style.display = 'none'; + this._signal('hide'); + popup.isOpen = false; + }; + popup.show = function (pos, lineHeight, topdownOnly) { + const el = this.container; + const screenHeight = window.innerHeight; + const screenWidth = window.innerWidth; + const renderer = this.renderer; + const maxH = renderer.$maxLines * lineHeight * 1.4; + let top = pos.top + this.$borderSize; + const allowTopdown = top > screenHeight / 2 && !topdownOnly; + if (allowTopdown && top + lineHeight + maxH > screenHeight) { + renderer.$maxPixelHeight = top - 2 * this.$borderSize; + el.style.top = ''; + el.style.bottom = screenHeight - top + 'px'; + popup.isTopdown = false; + } + else { + top += lineHeight; + renderer.$maxPixelHeight = screenHeight - top - 0.2 * lineHeight; + el.style.top = top + 'px'; + el.style.bottom = ''; + popup.isTopdown = true; + } + + el.style.display = ''; + + let left = pos.left; + if (left + el.offsetWidth > screenWidth) + left = screenWidth - el.offsetWidth; + + el.style.left = left + 'px'; + + this._signal('show'); + lastMouseEvent = null; + popup.isOpen = true; + }; + + popup.goTo = function (where) { + let row = this.getRow(); + const max = this.session.getLength() - 1; + + switch (where) { + case 'up': row = row <= 0 ? max : row - 1; break; + case 'down': row = row >= max ? -1 : row + 1; break; + case 'start': row = 0; break; + case 'end': row = max; break; + } + + this.setRow(row); + }; + + popup.getTextLeftOffset = function () { + return this.$borderSize + this.renderer.$padding + this.$imageSize; + }; + + popup.$imageSize = 0; + popup.$borderSize = 1; + + return popup; + }; + + dom.importCssString(` + .ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line { + background-color: #CAD6FA; + z-index: 1; + } + .ace_dark.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line { + background-color: #3a674e; + } + .ace_editor.ace_autocomplete .ace_line-hover { + border: 1px solid #abbffe; + margin-top: -1px; + background: rgba(233,233,253,0.4); + position: absolute; + z-index: 2; + } + .ace_dark.ace_editor.ace_autocomplete .ace_line-hover { + border: 1px solid rgba(109, 150, 13, 0.8); + background: rgba(58, 103, 78, 0.62); + } + .ace_completion-meta { + opacity: 0.5; + margin: 0.9em; + } + .ace_completion-message { + color: blue; + } + .ace_editor.ace_autocomplete .ace_completion-highlight{ + color: #2d69c7; + } + .ace_dark.ace_editor.ace_autocomplete .ace_completion-highlight{ + color: #93ca12; + } + .ace_editor.ace_autocomplete { + width: 300px; + z-index: 200000; + border: 1px lightgray solid; + position: fixed; + box-shadow: 2px 3px 5px rgba(0,0,0,.2); + line-height: 1.4; + background: #fefefe; + color: #111; + } + .ace_dark.ace_editor.ace_autocomplete { + border: 1px #484747 solid; + box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51); + line-height: 1.4; + background: #25282c; + color: #c1c1c1; + }`, 'autocompletion.css'); + + exports.AcePopup = AcePopup; + exports.$singleLineEditor = $singleLineEditor; +}); + +ace.define('ace/autocomplete/util', ['require', 'exports', 'module'], function (require, exports, module) { + 'use strict'; + + exports.parForEach = function (array, fn, callback) { + let completed = 0; + const arLength = array.length; + if (arLength === 0) + callback(); + for (let i = 0; i < arLength; i++) { + fn(array[i], function (result, err) { + completed++; + if (completed === arLength) + callback(result, err); + }); + } + }; + + const ID_REGEX = /[a-zA-Z_0-9\\$\-\u00A2-\u2000\u2070-\uFFFF]/; + + exports.retrievePrecedingIdentifier = function (text, pos, regex) { + regex = regex || ID_REGEX; + const buf = []; + for (let i = pos - 1; i >= 0; i--) { + if (regex.test(text[i])) + buf.push(text[i]); + else + break; + } + return buf.reverse().join(''); + }; + + exports.retrieveFollowingIdentifier = function (text, pos, regex) { + regex = regex || ID_REGEX; + const buf = []; + for (let i = pos; i < text.length; i++) { + if (regex.test(text[i])) + buf.push(text[i]); + else + break; + } + return buf; + }; + + exports.getCompletionPrefix = function (editor) { + const pos = editor.getCursorPosition(); + const line = editor.session.getLine(pos.row); + let prefix; + editor.completers.forEach(function (completer) { + if (completer.identifierRegexps) { + completer.identifierRegexps.forEach(function (identifierRegex) { + if (!prefix && identifierRegex) + prefix = this.retrievePrecedingIdentifier(line, pos.column, identifierRegex); + }.bind(this)); + } + }.bind(this)); + return prefix || this.retrievePrecedingIdentifier(line, pos.column); + }; +}); + +ace.define('ace/autocomplete', ['require', 'exports', 'module', 'ace/keyboard/hash_handler', 'ace/autocomplete/popup', 'ace/autocomplete/util', 'ace/lib/lang', 'ace/lib/dom', 'ace/snippets', 'ace/config'], function (require, exports, module) { + 'use strict'; + + const HashHandler = require('./keyboard/hash_handler').HashHandler; + const AcePopup = require('./autocomplete/popup').AcePopup; + const util = require('./autocomplete/util'); + const lang = require('./lib/lang'); + const dom = require('./lib/dom'); + const snippetManager = require('./snippets').snippetManager; + const config = require('./config'); + + const Autocomplete = function () { + this.autoInsert = false; + this.autoSelect = true; + this.exactMatch = false; + this.gatherCompletionsId = 0; + this.keyboardHandler = new HashHandler(); + this.keyboardHandler.bindKeys(this.commands); + + this.blurListener = this.blurListener.bind(this); + this.changeListener = this.changeListener.bind(this); + this.mousedownListener = this.mousedownListener.bind(this); + this.mousewheelListener = this.mousewheelListener.bind(this); + + this.changeTimer = lang.delayedCall(function () { + this.updateCompletions(true); + }.bind(this)); + + this.tooltipTimer = lang.delayedCall(this.updateDocTooltip.bind(this), 50); + }; + + (function () { + this.$init = function () { + this.popup = new AcePopup(document.body || document.documentElement); + this.popup.on('click', function (e) { + this.insertMatch(); + e.stop(); + }.bind(this)); + this.popup.focus = this.editor.focus.bind(this.editor); + this.popup.on('show', this.tooltipTimer.bind(null, null)); + this.popup.on('select', this.tooltipTimer.bind(null, null)); + this.popup.on('changeHoverMarker', this.tooltipTimer.bind(null, null)); + return this.popup; + }; + + this.getPopup = function () { + return this.popup || this.$init(); + }; + + this.openPopup = function (editor, prefix, keepPopupPosition) { + if (!this.popup) + this.$init(); + + this.popup.autoSelect = this.autoSelect; + + this.popup.setData(this.completions.filtered, this.completions.filterText); + + editor.keyBinding.addKeyboardHandler(this.keyboardHandler); + + const renderer = editor.renderer; + this.popup.setRow(this.autoSelect ? 0 : -1); + if (!keepPopupPosition) { + this.popup.setTheme(editor.getTheme()); + this.popup.setFontSize(editor.getFontSize()); + + const lineHeight = renderer.layerConfig.lineHeight; + + const pos = renderer.$cursorLayer.getPixelPosition(this.base, true); + pos.left -= this.popup.getTextLeftOffset(); + + const rect = editor.container.getBoundingClientRect(); + pos.top += rect.top - renderer.layerConfig.offset; + pos.left += rect.left - editor.renderer.scrollLeft; + pos.left += renderer.gutterWidth; + + this.popup.show(pos, lineHeight); + } + else if (keepPopupPosition && !prefix) + this.detach(); + + this.changeTimer.cancel(); + }; + + this.detach = function () { + this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler); + this.editor.off('changeSelection', this.changeListener); + this.editor.off('blur', this.blurListener); + this.editor.off('mousedown', this.mousedownListener); + this.editor.off('mousewheel', this.mousewheelListener); + this.changeTimer.cancel(); + this.hideDocTooltip(); + + this.gatherCompletionsId += 1; + if (this.popup && this.popup.isOpen) + this.popup.hide(); + + if (this.base) + this.base.detach(); + this.activated = false; + this.completions = this.base = null; + }; + + this.changeListener = function (e) { + const cursor = this.editor.selection.lead; + if (cursor.row !== this.base.row || cursor.column < this.base.column) + this.detach(); + + if (this.activated) + this.changeTimer.schedule(); + else + this.detach(); + }; + + this.blurListener = function (e) { + const el = document.activeElement; + const text = this.editor.textInput.getElement(); + const fromTooltip = e.relatedTarget && this.tooltipNode && this.tooltipNode.contains(e.relatedTarget); + const container = this.popup && this.popup.container; + if (el !== text && el.parentNode !== container && !fromTooltip && + el !== this.tooltipNode && e.relatedTarget !== text + ) + this.detach(); + }; + + this.mousedownListener = function (e) { + this.detach(); + }; + + this.mousewheelListener = function (e) { + this.detach(); + }; + + this.goTo = function (where) { + this.popup.goTo(where); + }; + + this.insertMatch = function (data, options) { + if (!data) + data = this.popup.getData(this.popup.getRow()); + if (!data) + return false; + + const completions = this.completions; + this.editor.startOperation({ command: { name: 'insertMatch' } }); + if (data.completer && data.completer.insertMatch) + data.completer.insertMatch(this.editor, data); + else { + if (completions.filterText) { + const ranges = this.editor.selection.getAllRanges(); + for (let i = 0, range; range = ranges[i]; i++) { + range.start.column -= completions.filterText.length; + this.editor.session.remove(range); + } + } + if (data.snippet) + snippetManager.insertSnippet(this.editor, data.snippet); + else + this.editor.execCommand('insertstring', data.value || data); + } + if (this.completions === completions) + this.detach(); + this.editor.endOperation(); + }; + + this.commands = { + Up: function (editor) { + editor.completer.goTo('up'); + }, + Down: function (editor) { + editor.completer.goTo('down'); + }, + 'Ctrl-Up|Ctrl-Home': function (editor) { + editor.completer.goTo('start'); + }, + 'Ctrl-Down|Ctrl-End': function (editor) { + editor.completer.goTo('end'); + }, + + Esc: function (editor) { + editor.completer.detach(); + }, + Return: function (editor) { + return editor.completer.insertMatch(); + }, + 'Shift-Return': function (editor) { + editor.completer.insertMatch(null, { deleteSuffix: true }); + }, + Tab: function (editor) { + const result = editor.completer.insertMatch(); + if (!result && !editor.tabstopManager) + editor.completer.goTo('down'); + else + return result; + }, + + PageUp: function (editor) { + editor.completer.popup.gotoPageUp(); + }, + PageDown: function (editor) { + editor.completer.popup.gotoPageDown(); + } + }; + + this.gatherCompletions = function (editor, callback) { + const session = editor.getSession(); + const pos = editor.getCursorPosition(); + + const prefix = util.getCompletionPrefix(editor); + + this.base = session.doc.createAnchor(pos.row, pos.column - prefix.length); + this.base.$insertRight = true; + + let matches = []; + let total = editor.completers.length; + editor.completers.forEach(function (completer, i) { + completer.getCompletions(editor, session, pos, prefix, function (err, results) { + if (!err && results) + matches = matches.concat(results); + callback(null, { + prefix: util.getCompletionPrefix(editor), + matches: matches, + finished: (--total === 0) + }); + }); + }); + return true; + }; + + this.showPopup = function (editor, options) { + if (this.editor) + this.detach(); + + this.activated = true; + + this.editor = editor; + if (editor.completer !== this) { + if (editor.completer) + editor.completer.detach(); + editor.completer = this; + } + + editor.on('changeSelection', this.changeListener); + editor.on('blur', this.blurListener); + editor.on('mousedown', this.mousedownListener); + editor.on('mousewheel', this.mousewheelListener); + + this.updateCompletions(false, options); + }; + + this.updateCompletions = function (keepPopupPosition, options) { + if (keepPopupPosition && this.base && this.completions) { + const pos = this.editor.getCursorPosition(); + const prefix = this.editor.session.getTextRange({ start: this.base, end: pos }); + if (prefix === this.completions.filterText) + return; + this.completions.setFilter(prefix); + if (!this.completions.filtered.length) + return this.detach(); + if (this.completions.filtered.length === 1 && + this.completions.filtered[0].value === prefix && + !this.completions.filtered[0].snippet) + return this.detach(); + this.openPopup(this.editor, prefix, keepPopupPosition); + return; + } + + if (options && options.matches) { + const pos = this.editor.getSelectionRange().start; + this.base = this.editor.session.doc.createAnchor(pos.row, pos.column); + this.base.$insertRight = true; + this.completions = new FilteredList(options.matches); + return this.openPopup(this.editor, '', keepPopupPosition); + } + const _id = this.gatherCompletionsId; + this.gatherCompletions(this.editor, function (err, results) { + if (err) console.log(err); + const detachIfFinished = function () { + if (!results.finished) return; + return this.detach(); + }.bind(this); + + const prefix = results.prefix; + const matches = results && results.matches; + + if (!matches || !matches.length) + return detachIfFinished(); + if (prefix.indexOf(results.prefix) !== 0 || _id !== this.gatherCompletionsId) + return; + + this.completions = new FilteredList(matches); + + if (this.exactMatch) + this.completions.exactMatch = true; + + this.completions.setFilter(prefix); + const filtered = this.completions.filtered; + if (!filtered.length) + return detachIfFinished(); + if (filtered.length === 1 && filtered[0].value === prefix && !filtered[0].snippet) + return detachIfFinished(); + if (this.autoInsert && filtered.length === 1 && results.finished) + return this.insertMatch(filtered[0]); + + this.openPopup(this.editor, prefix, keepPopupPosition); + }.bind(this)); + }; + + this.cancelContextMenu = function () { + this.editor.$mouseHandler.cancelContextMenu(); + }; + + this.updateDocTooltip = function () { + const popup = this.popup; + const all = popup.data; + const selected = all && (all[popup.getHoveredRow()] || all[popup.getRow()]); + let doc = null; + if (!selected || !this.editor || !this.popup.isOpen) + return this.hideDocTooltip(); + this.editor.completers.some(function (completer) { + if (completer.getDocTooltip) + doc = completer.getDocTooltip(selected); + return doc; + }); + if (!doc && typeof selected !== 'string') + doc = selected; + + if (typeof doc === 'string') + doc = { docText: doc }; + if (!doc || !(doc.docHTML || doc.docText)) + return this.hideDocTooltip(); + this.showDocTooltip(doc); + }; + + this.showDocTooltip = function (item) { + if (!this.tooltipNode) { + this.tooltipNode = dom.createElement('div'); + this.tooltipNode.className = 'ace_tooltip ace_doc-tooltip'; + this.tooltipNode.style.margin = 0; + this.tooltipNode.style.pointerEvents = 'auto'; + this.tooltipNode.tabIndex = -1; + this.tooltipNode.onblur = this.blurListener.bind(this); + this.tooltipNode.onclick = this.onTooltipClick.bind(this); + } + + const tooltipNode = this.tooltipNode; + if (item.docHTML) + tooltipNode.innerHTML = item.docHTML; + else if (item.docText) + tooltipNode.textContent = item.docText; + + if (!tooltipNode.parentNode) + document.body.appendChild(tooltipNode); + const popup = this.popup; + const rect = popup.container.getBoundingClientRect(); + tooltipNode.style.top = popup.container.style.top; + tooltipNode.style.bottom = popup.container.style.bottom; + + tooltipNode.style.display = 'block'; + if (window.innerWidth - rect.right < 320) { + if (rect.left < 320) { + if (popup.isTopdown) { + tooltipNode.style.top = rect.bottom + 'px'; + tooltipNode.style.left = rect.left + 'px'; + tooltipNode.style.right = ''; + tooltipNode.style.bottom = ''; + } + else { + tooltipNode.style.top = popup.container.offsetTop - tooltipNode.offsetHeight + 'px'; + tooltipNode.style.left = rect.left + 'px'; + tooltipNode.style.right = ''; + tooltipNode.style.bottom = ''; + } + } + else { + tooltipNode.style.right = window.innerWidth - rect.left + 'px'; + tooltipNode.style.left = ''; + } + } + else { + tooltipNode.style.left = (rect.right + 1) + 'px'; + tooltipNode.style.right = ''; + } + }; + + this.hideDocTooltip = function () { + this.tooltipTimer.cancel(); + if (!this.tooltipNode) return; + const el = this.tooltipNode; + if (!this.editor.isFocused() && document.activeElement === el) + this.editor.focus(); + this.tooltipNode = null; + if (el.parentNode) + el.parentNode.removeChild(el); + }; + + this.onTooltipClick = function (e) { + let a = e.target; + while (a && a !== this.tooltipNode) { + if (a.nodeName === 'A' && a.href) { + a.rel = 'noreferrer'; + a.target = '_blank'; + break; + } + a = a.parentNode; + } + }; + + this.destroy = function () { + this.detach(); + if (this.popup) { + this.popup.destroy(); + const el = this.popup.container; + if (el && el.parentNode) + el.parentNode.removeChild(el); + } + if (this.editor && this.editor.completer === this) + this.editor.completer = null; + this.popup = null; + }; + }).call(Autocomplete.prototype); + + Autocomplete.for = function (editor) { + if (editor.completer) + return editor.completer; + + if (config.get('sharedPopups')) { + if (!Autocomplete.$shared) + Autocomplete.$sharedInstance = new Autocomplete(); + editor.completer = Autocomplete.$sharedInstance; + } + else { + editor.completer = new Autocomplete(); + editor.once('destroy', function (e, editor) { + editor.completer.destroy(); + }); + } + return editor.completer; + }; + + Autocomplete.startCommand = { + name: 'startAutocomplete', + exec: function (editor, options) { + const completer = Autocomplete.for(editor); + completer.autoInsert = false; + completer.autoSelect = true; + completer.showPopup(editor, options); + completer.cancelContextMenu(); + }, + bindKey: 'Ctrl-Space|Ctrl-Shift-Space|Alt-Space' + }; + + const FilteredList = function (array, filterText) { + this.all = array; + this.filtered = array; + this.filterText = filterText || ''; + this.exactMatch = false; + }; + (function () { + this.setFilter = function (str) { + let matches; + if (str.length > this.filterText && str.lastIndexOf(this.filterText, 0) === 0) + matches = this.filtered; + else + matches = this.all; + + this.filterText = str; + matches = this.filterCompletions(matches, this.filterText); + matches = matches.sort(function (a, b) { + return b.exactMatch - a.exactMatch || b.$score - a.$score || + (a.caption || a.value).localeCompare(b.caption || b.value); + }); + let prev = null; + matches = matches.filter(function (item) { + const caption = item.snippet || item.caption || item.value; + if (caption === prev) return false; + prev = caption; + return true; + }); + + this.filtered = matches; + }; + this.filterCompletions = function (items, needle) { + const results = []; + const upper = needle.toUpperCase(); + const lower = needle.toLowerCase(); + loop: for (let i = 0, item; item = items[i]; i++) { + const caption = item.caption || item.value || item.snippet; + if (!caption) continue; + let lastIndex = -1; + let matchMask = 0; + let penalty = 0; + let index, distance; + + if (this.exactMatch) { + if (needle !== caption.substr(0, needle.length)) + continue loop; + } + else { + const fullMatchIndex = caption.toLowerCase().indexOf(lower); + if (fullMatchIndex > -1) + penalty = fullMatchIndex; + else { + for (let j = 0; j < needle.length; j++) { + const i1 = caption.indexOf(lower[j], lastIndex + 1); + const i2 = caption.indexOf(upper[j], lastIndex + 1); + index = (i1 >= 0) ? ((i2 < 0 || i1 < i2) ? i1 : i2) : i2; + if (index < 0) + continue loop; + distance = index - lastIndex - 1; + if (distance > 0) { + if (lastIndex === -1) + penalty += 10; + penalty += distance; + matchMask = matchMask | (1 << j); + } + lastIndex = index; + } + } + } + item.matchMask = matchMask; + item.exactMatch = penalty ? 0 : 1; + item.$score = (item.score || 0) - penalty; + results.push(item); + } + return results; + }; + }).call(FilteredList.prototype); + + exports.Autocomplete = Autocomplete; + exports.FilteredList = FilteredList; +}); + +ace.define('ace/autocomplete/text_completer', ['require', 'exports', 'module', 'ace/range'], function (require, exports, module) { + const Range = require('../range').Range; + + const splitRegex = /[^a-zA-Z_0-9\\$\-\u00C0-\u1FFF\u2C00-\uD7FF\w]+/; + + function getWordIndex (doc, pos) { + const textBefore = doc.getTextRange(Range.fromPoints({ row: 0, column: 0 }, pos)); + return textBefore.split(splitRegex).length - 1; + } + function wordDistance (doc, pos) { + const prefixPos = getWordIndex(doc, pos); + const words = doc.getValue().split(splitRegex); + const wordScores = Object.create(null); + + const currentWord = words[prefixPos]; + + words.forEach(function (word, idx) { + if (!word || word === currentWord) return; + + const distance = Math.abs(prefixPos - idx); + const score = words.length - distance; + if (wordScores[word]) + wordScores[word] = Math.max(score, wordScores[word]); + else + wordScores[word] = score; + }); + return wordScores; + } + + exports.getCompletions = function (editor, session, pos, prefix, callback) { + const wordScore = wordDistance(session, pos); + const wordList = Object.keys(wordScore); + callback(null, wordList.map(function (word) { + return { + caption: word, + value: word, + score: wordScore[word], + meta: 'local' + }; + })); + }; +}); + +ace.define('ace/ext/language_tools', ['require', 'exports', 'module', 'ace/snippets', 'ace/autocomplete', 'ace/config', 'ace/lib/lang', 'ace/autocomplete/util', 'ace/autocomplete/text_completer', 'ace/editor', 'ace/config'], function (require, exports, module) { + 'use strict'; + + const snippetManager = require('../snippets').snippetManager; + const Autocomplete = require('../autocomplete').Autocomplete; + const config = require('../config'); + const lang = require('../lib/lang'); + const util = require('../autocomplete/util'); + + const textCompleter = require('../autocomplete/text_completer'); + const keyWordCompleter = { + getCompletions: function (editor, session, pos, prefix, callback) { + if (session.$mode.completer) + return session.$mode.completer.getCompletions(editor, session, pos, prefix, callback); + + const state = editor.session.getState(pos.row); + const completions = session.$mode.getCompletions(state, session, pos, prefix); + callback(null, completions); + } + }; + + const snippetCompleter = { + getCompletions: function (editor, session, pos, prefix, callback) { + let scopes = []; + const token = session.getTokenAt(pos.row, pos.column); + if (token && token.type.match(/(tag-name|tag-open|tag-whitespace|attribute-name|attribute-value)\.xml$/)) + scopes.push('html-tag'); + else + scopes = snippetManager.getActiveScopes(editor); + + const snippetMap = snippetManager.snippetMap; + const completions = []; + scopes.forEach(function (scope) { + const snippets = snippetMap[scope] || []; + for (let i = snippets.length; i--;) { + const s = snippets[i]; + const caption = s.name || s.tabTrigger; + if (!caption) + continue; + completions.push({ + caption: caption, + snippet: s.content, + meta: s.tabTrigger && !s.name ? s.tabTrigger + '\u21E5 ' : 'snippet', + type: 'snippet' + }); + } + }, this); + callback(null, completions); + }, + getDocTooltip: function (item) { + if (item.type === 'snippet' && !item.docHTML) { + item.docHTML = [ + '', lang.escapeHTML(item.caption), '', '
', + lang.escapeHTML(item.snippet) + ].join(''); + } + } + }; + + const completers = [snippetCompleter, textCompleter, keyWordCompleter]; + exports.setCompleters = function (val) { + completers.length = 0; + if (val) completers.push.apply(completers, val); + }; + exports.addCompleter = function (completer) { + completers.push(completer); + }; + exports.textCompleter = textCompleter; + exports.keyWordCompleter = keyWordCompleter; + exports.snippetCompleter = snippetCompleter; + + const expandSnippet = { + name: 'expandSnippet', + exec: function (editor) { + return snippetManager.expandWithTab(editor); + }, + bindKey: 'Tab' + }; + + const onChangeMode = function (e, editor) { + loadSnippetsForMode(editor.session.$mode); + }; + + const loadSnippetsForMode = function (mode) { + if (typeof mode === 'string') + mode = config.$modes[mode]; + if (!mode) + return; + if (!snippetManager.files) + snippetManager.files = {}; + + loadSnippetFile(mode.$id, mode.snippetFileId); + if (mode.modes) + mode.modes.forEach(loadSnippetsForMode); + }; + + const loadSnippetFile = function (id, snippetFilePath) { + if (!snippetFilePath || !id || snippetManager.files[id]) + return; + snippetManager.files[id] = {}; + config.loadModule(snippetFilePath, function (m) { + if (!m) return; + snippetManager.files[id] = m; + if (!m.snippets && m.snippetText) + m.snippets = snippetManager.parseSnippetFile(m.snippetText); + snippetManager.register(m.snippets || [], m.scope); + if (m.includeScopes) { + snippetManager.snippetMap[m.scope].includeScopes = m.includeScopes; + m.includeScopes.forEach(function (x) { + loadSnippetsForMode('ace/mode/' + x); + }); + } + }); + }; + + const doLiveAutocomplete = function (e) { + const editor = e.editor; + const hasCompleter = editor.completer && editor.completer.activated; + if (e.command.name === 'backspace') { + if (hasCompleter && !util.getCompletionPrefix(editor)) + editor.completer.detach(); + } + else if (e.command.name === 'insertstring') { + const prefix = util.getCompletionPrefix(editor); + if (prefix && !hasCompleter) { + const completer = Autocomplete.for(editor); + completer.autoInsert = false; + completer.showPopup(editor); + } + } + }; + + const Editor = require('../editor').Editor; + require('../config').defineOptions(Editor.prototype, 'editor', { + enableBasicAutocompletion: { + set: function (val) { + if (val) { + if (!this.completers) + this.completers = Array.isArray(val) ? val : completers; + this.commands.addCommand(Autocomplete.startCommand); + } + else + this.commands.removeCommand(Autocomplete.startCommand); + }, + value: false + }, + enableLiveAutocompletion: { + set: function (val) { + if (val) { + if (!this.completers) + this.completers = Array.isArray(val) ? val : completers; + this.commands.on('afterExec', doLiveAutocomplete); + } + else + this.commands.removeListener('afterExec', doLiveAutocomplete); + }, + value: false + }, + enableSnippets: { + set: function (val) { + if (val) { + this.commands.addCommand(expandSnippet); + this.on('changeMode', onChangeMode); + onChangeMode(null, this); + } + else { + this.commands.removeCommand(expandSnippet); + this.off('changeMode', onChangeMode); + } + }, + value: false + } + }); +}); (function () { + ace.require(['ace/ext/language_tools'], function (m) { + if (typeof module === 'object' && typeof exports === 'object' && module) + module.exports = m; + }); +})(); diff --git a/src/renderer/libs/getContrast.ts b/src/renderer/libs/getContrast.ts new file mode 100644 index 0000000..a78f411 --- /dev/null +++ b/src/renderer/libs/getContrast.ts @@ -0,0 +1,4 @@ +export const getContrast = (hexcolor: string) => { + if (!hexcolor) return ''; + return (parseInt(hexcolor.replace('#', ''), 16) > 0xffffff / 2) ? 'dark' : 'light'; +}; diff --git a/src/renderer/libs/unproxify.ts b/src/renderer/libs/unproxify.ts new file mode 100644 index 0000000..538cbcb --- /dev/null +++ b/src/renderer/libs/unproxify.ts @@ -0,0 +1,22 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import { toRaw } from 'vue'; + +/** + * @param {*} val + * @param {Boolean} json converts the value in JSON object (default true) + */ +export function unproxify (val: any, json = true): any { + if (json)// JSON conversion + return JSON.parse(JSON.stringify(val)); + else if (Array.isArray(val))// If array + return toRaw(val); + else if (typeof val === 'object') { // If object + const result: any = {}; + for (const key in val) + result[key] = toRaw(val[key]); + + return result; + } + else + return toRaw(val); +} diff --git a/src/renderer/scss/_mdi-additions.scss b/src/renderer/scss/_mdi-additions.scss new file mode 100644 index 0000000..80c9ef1 --- /dev/null +++ b/src/renderer/scss/_mdi-additions.scss @@ -0,0 +1,9 @@ +.mdi { + display: flex; + align-items: center; + justify-content: center; + + &::before { + line-height: 1; + } +} diff --git a/src/renderer/scss/_transitions.scss b/src/renderer/scss/_transitions.scss new file mode 100644 index 0000000..a641e6e --- /dev/null +++ b/src/renderer/scss/_transitions.scss @@ -0,0 +1,82 @@ +.fade-slide-down-enter-active, +.fade-slide-down-leave-active { + transition: opacity 0.15s ease, transform 0.15s ease; + opacity: 1; + transform: translateY(0); +} + +.fade-slide-down-enter-from, +.fade-slide-down-leave-to { + opacity: 0; + transform: translateY(-1.8rem); +} + +.slide-fade-enter-active { + transition: all 0.3s ease; +} + +.slide-fade-leave-active { + transition: all 0.3s cubic-bezier(1, 0.5, 0.8, 1); +} + +.slide-fade-enter-from, +.slide-fade-leave-to { + transform: translateX(10px); + opacity: 0; +} + +.fade-enter-active, +.fade-leave-active { + transition: opacity 0.5s; +} + +.fade-enter-from, +.fade-leave-to { + opacity: 0; +} + +.jump-down-enter-active { + animation: jump-down-in 0.2s; +} + +.jump-down-leave-active { + animation: jump-down-in 0.2s reverse; +} + +.flip-list-move { + transition: transform 0.5s; +} + +.no-move { + transition: transform 0s; +} + +.pulse { + animation-name: pulse; + animation-duration: 2s; + animation-iteration-count: infinite; +} + +@keyframes jump-down-in { + 0% { + transform: scale(0); + } + + 100% { + transform: scale(1); + } +} + +@keyframes pulse { + 0% { + opacity: 0; + } + + 50% { + opacity: 1; + } + + 100% { + opacity: 0; + } +} diff --git a/src/renderer/scss/_variables.scss b/src/renderer/scss/_variables.scss new file mode 100644 index 0000000..32946aa --- /dev/null +++ b/src/renderer/scss/_variables.scss @@ -0,0 +1,33 @@ +/* Colors */ +$body-bg: #fdfdfd; +$body-bg-dark: #1d1d1d; +$body-font-color-dark: #fff; +$bg-color-dark: #1d1d1d; +$bg-color-light-dark: #3f3f3f; +$bg-color-gray: #272727; +$bg-color-light-gray: #f1f1f1; +$light-color: #fdfdfd; +$primary-color: #e36929; +$success-color: #32b643; +$error-color: #de3b28; +$warning-color: #e0a40c; + +/* Sizes */ +$border-radius: 0.3rem; +$titlebar-height: 1.5rem; +$settingbar-width: 3.5rem; +$explorebar-width: 14rem; +$footer-height: 1.5rem; + +@function get-excluding-size() { + @if $platform == linux { + @return $footer-height; + } + + @else { + @return $footer-height + $titlebar-height; + } +} + +/* stylelint-disable-next-line function-no-unknown */ +$excluding-size: get-excluding-size(); diff --git a/src/renderer/scss/main.scss b/src/renderer/scss/main.scss new file mode 100644 index 0000000..e8aa4c9 --- /dev/null +++ b/src/renderer/scss/main.scss @@ -0,0 +1,425 @@ +/* stylelint-disable selector-class-pattern */ +@import "~spectre.css/src/variables"; +@import "variables"; +@import "transitions"; +@import "data-types"; +@import "table-keys"; +@import "fake-tables"; +@import "mdi-additions"; +@import "db-icons"; +@import "themes/dark-theme"; +@import "themes/light-theme"; +@import "~spectre.css/src/spectre"; +@import "~spectre.css/src/spectre-exp"; + +body { + user-select: none; +} + +::selection, +option:hover, +option:focus, +option:active, +option:checked { + background-color: $primary-color; + color: $light-color; +} + +/* Additions */ +@include margin-variant(3, $unit-3); +@include margin-variant(4, $unit-4); +@include padding-variant(3, $unit-3); +@include padding-variant(4, $unit-4); + +.p-vcentered { + display: flex !important; + align-items: center; +} + +.c-help { + cursor: help; +} + +.no-outline { + outline: none !important; +} + +.no-radius { + border-radius: 0 !important; +} + +.no-border { + outline: none !important; + border: none !important; + box-shadow: none !important; +} + +.cut-text { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.cancellable { + color: transparent !important; + min-height: 0.8rem; + position: relative; + + > .mdi, + > .span { + visibility: hidden; + } + + &::after { + content: "\2715"; + color: $light-color; + font-weight: 700; + top: 36%; + display: block; + height: 0.8rem; + left: 50%; + margin-left: -0.4rem; + margin-top: -0.4rem; + opacity: 1; + padding: 0; + position: absolute; + width: 0.8rem; + z-index: 1; + } +} + +.workspace-query-results { + overflow: auto; + white-space: nowrap; + + .table { + width: auto; + border-collapse: separate; + + .th { + position: sticky; + top: 0; + border: 2px solid; + border-left: none; + border-bottom-width: 2px; + padding: 0; + font-weight: 700; + font-size: 0.7rem; + z-index: 1; + + > div { + padding: 0.1rem 0.2rem; + /* stylelint-disable-next-line value-no-vendor-prefix */ + min-width: -webkit-fill-available; + } + } + + .td { + border-right: 2px solid; + border-bottom: 2px solid; + padding: 0 0.2rem; + text-overflow: ellipsis; + max-width: 200px; + white-space: nowrap; + overflow: hidden; + font-size: 0.7rem; + position: relative; + + &:focus { + outline: none; + } + } + } +} + +.workspace-tabs { + align-content: baseline; + + .workspace-query-runner { + .workspace-query-runner-footer { + display: flex; + justify-content: space-between; + padding: 0.3rem 0.6rem 0.4rem; + align-items: center; + + .workspace-query-buttons { + display: flex; + + .btn { + display: flex; + align-self: center; + margin-right: 0.4rem; + } + } + + .workspace-query-info { + display: flex; + overflow: hidden; + white-space: nowrap; + + > div + div { + padding-left: 0.6rem; + } + } + } + } +} + +.process-row .td:last-child { + width: 100%; +} + +/* Scrollbars */ +::-webkit-scrollbar { + width: 10px; + height: 10px; +} + +/* Animations */ +@keyframes rotation { + from { + transform: rotate(0deg); + } + + to { + transform: rotate(359deg); + } +} + +.rotate { + animation: rotation 0.8s infinite linear; +} + +/* Override */ +.modal { + .modal-container, + .modal-sm .modal-container { + padding: 0; + border-radius: $border-radius; + + .modal-header { + padding: 0.4rem 0.8rem; + text-transform: uppercase; + display: flex; + justify-content: space-between; + align-items: center; + border-radius: $border-radius $border-radius 0 0; + + .modal-title { + overflow: hidden; + } + } + } + + .modal-overlay { + background: rgb(255 255 255 / 10%); + box-shadow: 0 8px 32px 0 rgb(31 38 135 / 37%); + } +} + +#wrapper:not(.no-blur) { + .modal-overlay { + backdrop-filter: blur(4px); + } +} + +.tab { + .tab-item { + position: relative; + display: flex; + justify-content: center; + + .tab-link { + min-width: 0; + transition: color 0.2s; + } + + &.active { + .tab-link { + border-color: transparent; + } + + &::after { + width: 100%; + } + } + + &::after { + content: ""; + height: 2px; + width: 0; + transition: width 0.2s; + background-color: $primary-color; + position: absolute; + bottom: 0; + } + + .btn-clear { + margin-top: -0.1rem; + font-size: 0.6rem; + } + } +} + +.panel { + border: none; +} + +.tooltip:hover { + &::after { + opacity: 1; + } +} + +.badge { + &[data-badge], + &:not([data-badge]) { + &::after { + box-shadow: none; + } + } + + &.badge-connected::after { + background: $success-color; + } + + &.badge-connecting::after { + background: $warning-color; + animation-name: pulse; + animation-duration: 2s; + animation-iteration-count: infinite; + } + + &.badge-failed::after { + background: $error-color; + } +} + +.form-select { + cursor: pointer; + + &.small-select { + height: 21px; + font-size: 0.7rem; + padding: 1px 0.4rem 0; + } + + &.select { + &.select--open { + border-color: $primary-color !important; + + @include control-shadow(); + } + } +} + +.select__list { + margin: 0; + + li { + margin: 0; + padding: 0.3rem 0.8rem; + + .select-sm &, + .small-select & { + padding: 0.05rem 0.3rem; + } + } +} + +.select__list-wrapper { + z-index: 401 !important; + border: 1px solid transparent; + border-radius: $border-radius; + box-shadow: 0 8px 17px 0 rgb(0 0 0 / 20%), 0 6px 20px 0 rgb(0 0 0 / 19%); +} + +.select__option--selected { + background: rgba($primary-color, 0.25); +} + +.select__option--highlight { + background: $primary-color; +} + +.form-input[type="file"] { + overflow: hidden; +} + +.input-group .input-group-addon { + z-index: 1; +} + +.menu { + font-size: 0.7rem; + + .menu-item { + + .menu-item { + margin-top: 0; + } + } +} + +.accordion-body { + max-height: 5000rem !important; +} + +.btn { + &:focus { + box-shadow: 0 0 3px 1px rgba($primary-color, 90%); + } + + &.btn-success:focus { + border-color: $primary-color; + box-shadow: 0 0 3px 1px rgba($primary-color, 90%); + } +} + +.btn-group { + flex-wrap: nowrap; +} + +.btn.loading { + > .mdi, + > span { + visibility: hidden; + } +} + +.divider { + margin: 0.15rem 0.3rem; +} + +.table-dropdown { + .menu { + min-width: 100%; + padding: 0; + + .menu-item { + padding: 0; + + > a { + margin: 0.2rem; + padding: 0.1rem 0.3rem; + + &:hover { + color: inherit; + } + } + } + } +} + +/* Ace Editor */ +.ace_editor { + &.ace_autocomplete { + border-radius: $border-radius; + + .ace_marker-layer { + .ace_active-line, + .ace_line-hover { + border-radius: $border-radius; + } + } + } +} diff --git a/src/renderer/scss/themes/dark-theme.scss b/src/renderer/scss/themes/dark-theme.scss new file mode 100644 index 0000000..bfbdcc8 --- /dev/null +++ b/src/renderer/scss/themes/dark-theme.scss @@ -0,0 +1,484 @@ +/* stylelint-disable selector-class-pattern */ +/* stylelint-disable function-no-unknown */ +.theme-dark { + color: $body-font-color-dark; + background: $body-bg-dark; + + ::-webkit-scrollbar-track { + background: $bg-color-light-dark; + } + + ::-webkit-scrollbar-thumb { + background: rgba($color: #fff, $alpha: 50%); + + &:hover { + background: rgba($color: #fff, $alpha: 100%); + } + } + + :disabled { + .file-uploader { + background-color: #151515; + } + } + + option, + optgroup { + background-color: $bg-color-gray; + } + + /* Override Spectre.css */ + .menu { + background: $bg-color-light-dark; + + .menu-item a { + &:hover { + color: $primary-color; + background: $bg-color-gray; + } + } + } + + .btn { + &.btn-link { + color: rgba($body-font-color-dark, 0.8); + + &:hover { + color: $body-font-color-dark; + } + } + + &.btn-gray { + color: #fff; + background: $bg-color-gray; + + &:hover { + background: $bg-color-dark; + } + } + + &.btn-dark { + color: #fff; + background: $bg-color-light-dark; + border-color: $bg-color-light-dark; + + &:hover { + background: $bg-color-gray; + } + + &.active { + background-color: $primary-color; + } + } + + &.btn-clear { + &:hover { + background: rgba($light-color, 20%); + } + } + } + + .modal { + .modal-overlay, + &.active .modal-overlay { + background: rgb(255 255 255 / 15%); + } + + .modal-container, + .modal-sm .modal-container { + box-shadow: 0 0 1px 0 #000; + background: $bg-color-dark; + + .modal-header { + background: $bg-color-gray; + color: #fff; + } + } + } + + .tab { + border-color: #272727; + } + + .form-select, + .form-input, + .form-select:not([multiple], [size]), + .form-checkbox .form-icon, + .form-radio .form-icon { + border-color: $bg-color-light-dark; + background-color: $bg-color-gray; + color: $body-font-color-dark; + } + + .form-select:not([multiple], [size]) { + background-color: $bg-color-gray !important; + } + + .form-input.is-error, + .form-select.is-error { + background-color: $bg-color-gray; + } + + .form-input:not(:placeholder-shown):invalid:focus { + background: $bg-color-gray; + } + + .form-select:not([multiple], [size]):focus { + border-color: $primary-color; + } + + .select { + &__list-wrapper { + border-color: $bg-color-gray; + background-color: $bg-color-light-dark; + } + + &__group { + background: rgba($bg-color-gray, 0.65); + color: rgba($bg-color-light-gray, 0.7); + } + } + + .form-input[readonly] { + background-color: $bg-color-dark; + cursor: default; + } + + .input-group .input-group-addon { + border-color: #3f3f3f; + background: $bg-color-dark; + } + + .empty { + color: $body-font-color-dark; + background: transparent; + } + + .divider { + border-top: 0.05rem solid rgba($body-font-color-dark, 0.1); + } + + .form-switch .form-icon::before { + background: $bg-color-light-dark; + } + + code { + background-color: #111; + border: 1px solid #444; + color: rgba($body-font-color-dark, 0.7); + } + + /* Antares */ + .workspace { + .workspace-explorebar { + background: $bg-color-gray; + box-shadow: 0 0 1px 0 #000; + + .workspace-explorebar-database { + .database-name { + background: $bg-color-gray; + } + + .database-name, + .misc-name { + &:hover { + color: $body-font-color-dark; + background: $bg-color-light-dark; + } + } + + a.table-name { + &:hover { + color: inherit; + background: inherit; + } + } + + .menu-item { + &:hover, + &.selected { + color: $body-font-color-dark; + background: rgba($color: #fff, $alpha: 5%); + } + } + } + } + + .workspace-tabs { + .tab-block { + background: $bg-color-light-dark; + + .tab-item { + background: $bg-color-light-dark; + + > a { + color: $body-font-color-dark; + } + + &.tools-dropdown { + background-color: $bg-color-light-dark; + } + } + + .workspace-query-runner .workspace-query-runner-footer .workspace-query-buttons .btn { + color: $body-font-color-dark; + } + } + } + } + + .workspace-query-results { + .table { + .th { + border-color: darken($bg-color-light-gray, 80%); + background-color: $body-bg-dark; + } + + .tr { + background-color: darken($bg-color-light-gray, 80%); + + .td:first-child { + border-left: 2px solid $body-bg-dark; + } + + .td { + border-color: $body-bg-dark; + + &:focus, + &.selected { + box-shadow: inset 0 0 0 2px darken($body-font-color-dark, 40%); + background-color: rgba($color: #000, $alpha: 30%); + } + + .editable-field { + box-shadow: inset 0 0 0 2px darken($body-font-color-dark, 40%); + background-color: rgba($color: #000, $alpha: 30%); + } + } + } + } + } + + .connection-panel { + .panel { + background: rgba($bg-color-light-dark, 50%); + } + } + + .connection-block { + &:hover { + background: $bg-color-light-dark; + } + } + + .bg-checkered { + background-image: + linear-gradient(to right, rgb(192 192 192 / 75%), rgb(192 192 192 / 75%)), + linear-gradient(to right, black 50%, white 50%), + linear-gradient(to bottom, black 50%, white 50%); + background-blend-mode: normal, difference, normal; + background-size: 2em 2em; + } + + .context { + color: $body-font-color-dark; + + .context-container { + box-shadow: 0 0 2px 0 #000; + background: #1d1d1d; + + .context-element { + .context-submenu { + background: #1d1d1d; + box-shadow: 0 0 2px 0 #000; + } + + &:hover { + background: rgba($light-color, 15%); + } + } + } + } + + .editor-wrapper { + border-bottom: 1px solid #444; + } + + .file-uploader { + border: 0.05rem solid $bg-color-light-dark; + background-color: $bg-color-gray; + + .file-uploader-message { + border-right: 0.05rem solid $bg-color-light-dark; + background-color: $bg-color-dark; + } + } + + .query-console { + border-top: 1px solid #444; + background-color: $bg-color-dark; + + .query-console-log { + &:hover, + &:focus { + background: $bg-color-gray; + } + } + } + + .tile { + transition: background 0.2s; + + &:focus { + background: rgba($bg-color-light-dark, 60%); + } + + &:hover { + background: $bg-color-light-dark; + } + + &.selected-element { + background: $bg-color-light-dark; + } + } + + .editor-col { + border-left: 0.05rem solid rgba($bg-color-light-dark, 60%); + } + + .table { + .td, + .th { + border-bottom: $border-width solid $border-color; + } + + &, + &.table-striped { + .tbody { + .tr { + &.selected { + background: #333 !important; + } + + &.active { + background: $bg-color-dark; + } + } + } + } + + &.table-hover { + .tbody { + .tr { + &:hover { + background: #151515; + } + } + } + } + + &.table-striped { + .tbody { + .tr:nth-of-type(odd) { + background: $bg-color; + } + } + } + } + + #titlebar { + background: $bg-color-light-dark; + box-shadow: 0 0 1px 0 #000; + + .titlebar-elements { + .titlebar-element { + &:hover { + opacity: 1; + background: rgba($color: #fff, $alpha: 10%); + } + + &.close-button:hover { + background: red; + } + } + } + } + + #settingbar { + width: $settingbar-width; + height: calc(100vh - #{$excluding-size}); + display: flex; + flex-direction: column; + justify-content: space-between; + align-items: center; + background: $bg-color-light-dark; + padding: 0; + box-shadow: 0 0 1px 0 #000; + z-index: 9; + + .settingbar-top-elements { + overflow-x: hidden; + overflow-y: overlay; + max-height: calc((100vh - 3.5rem) - #{$excluding-size}); + + &::-webkit-scrollbar { + width: 3px; + } + } + + .settingbar-bottom-elements { + background: $bg-color-light-dark; + } + + .settingbar-elements { + list-style: none; + text-align: center; + width: $settingbar-width; + padding: 0; + margin: 0; + + .settingbar-element { + .settingbar-element-icon { + &.badge-update::after { + background: $primary-color; + } + } + } + } + } + + .ex-tooltip { + .ex-tooltip-content { + background: rgb(48 55 66 / 95%); + color: #fff; + } + } + + #footer { + background: $primary-color; + box-shadow: 0 0 1px 0 #000; + + .footer-elements { + .footer-element { + &.footer-link { + &:hover { + background: rgba($color: #fff, $alpha: 10%); + } + } + } + } + } +} + +.ace_dark.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line { + background-color: #c9561a99; +} + +.ace_dark.ace_editor.ace_autocomplete .ace_marker-layer .ace_line-hover { + background-color: #c9571a33; + border: none; +} + +.ace_dark.ace_editor.ace_autocomplete .ace_completion-highlight { + color: #e0d00c; +} diff --git a/src/renderer/scss/themes/light-theme.scss b/src/renderer/scss/themes/light-theme.scss new file mode 100644 index 0000000..078f732 --- /dev/null +++ b/src/renderer/scss/themes/light-theme.scss @@ -0,0 +1,373 @@ +/* stylelint-disable function-no-unknown */ +.theme-light { + ::-webkit-scrollbar-track { + background: #fff; + } + + ::-webkit-scrollbar-thumb { + background: rgba($color: $bg-color-light-dark, $alpha: 50%); + + &:hover { + background: rgba($color: $bg-color-light-dark, $alpha: 100%); + } + } + + .form-input:disabled, + .form-input.disabled, + .form-select:disabled, + .form-select.disabled { + background: #ababab; + } + + .select { + &__list-wrapper { + border: #bcc3ce; + background-color: $body-bg; + } + + &__group { + background: $bg-color-light-gray; + color: $unknown-color; + } + + &__option--highlight { + color: $light-color; + } + } + + .menu { + .menu-item a { + &:hover { + color: $body-font-color; + background: rgba($color: #000, $alpha: 10%); + } + } + } + + .btn { + &.btn-link { + color: rgba($body-font-color, 0.8); + + &:hover { + color: $body-font-color; + } + } + + &.btn-gray { + color: #fff; + background: $bg-color-gray; + + &:hover { + background: $bg-color-dark; + } + } + + &.btn-dark { + color: #fff; + background: lighten($bg-color-light-dark, 20%); + border-color: lighten($bg-color-light-dark, 20%); + + &:hover { + background: $bg-color-gray; + } + + &.active { + background-color: $primary-color; + } + } + } + + .modal { + color: $body-font-color; + + &:target .modal-overlay, + &.active .modal-overlay { + background: rgba($bg-color-dark, 0.75); + } + + .modal-container .modal-header { + background: $bg-color-light-dark; + color: #fff; + } + } + + .empty { + background: transparent; + } + + .divider { + border-top: 0.05rem solid rgba($body-font-color-dark, 0.1); + } + + .tile { + transition: background 0.2s; + + &:focus { + background: rgba($bg-color-light-gray, 70%); + } + + &:hover { + background: $bg-color-light-gray; + } + + &.selected-element { + background: $bg-color-light-gray; + } + } + + .editor-col { + border-left: 0.05rem solid darken($bg-color-light-gray, 15%); + } + + .file-uploader { + border: 0.05rem solid $border-color-dark; + background-color: $bg-color-light; + + .file-uploader-message { + border-right: 0.05rem solid $border-color-dark; + background-color: $bg-color-light; + } + } + + .query-console { + border-top: 1px solid darken($bg-color-light-gray, 15%); + background-color: $bg-color-light; + + .query-console-log { + &:hover, + &:focus { + background: $bg-color-light-gray; + } + } + } + + #titlebar { + background: $bg-color-light; + box-shadow: 0 0 1px 0 #000; + + .titlebar-elements { + .titlebar-element { + &:hover { + opacity: 1; + background: rgba($color: rgb(172 172 172), $alpha: 30%); + } + + &.close-button:hover { + background: red; + } + } + } + } + + #settingbar { + width: $settingbar-width; + height: calc(100vh - #{$excluding-size}); + display: flex; + flex-direction: column; + justify-content: space-between; + align-items: center; + background: $bg-color-light-dark; + padding: 0; + box-shadow: 0 0 1px 0 #000; + z-index: 9; + + .settingbar-top-elements { + overflow-x: hidden; + overflow-y: overlay; + max-height: calc((100vh - 3.5rem) - #{$excluding-size}); + + &::-webkit-scrollbar { + width: 3px; + } + } + + .settingbar-bottom-elements { + background: $bg-color-light-dark; + } + + .settingbar-elements { + list-style: none; + text-align: center; + width: $settingbar-width; + padding: 0; + margin: 0; + + .settingbar-element { + .settingbar-element-icon { + &.badge-update::after { + background: $primary-color; + } + } + } + } + } + + .ex-tooltip { + .ex-tooltip-content { + background: rgb(48 55 66 / 95%); + color: #fff; + } + } + + code { + background-color: #eee; + border: 1px solid #ddd; + } + + .workspace { + .workspace-explorebar { + background: $bg-color-light-gray; + box-shadow: 0 0 1px 0 #000; + + .workspace-explorebar-database { + .database-name { + background: $bg-color-light-gray; + } + + .menu-item { + &:hover, + &.selected { + background: rgba($color: #000, $alpha: 5%); + } + } + + .table-size { + opacity: 0.4; + + &:hover { + opacity: 1; + } + } + } + } + + .workspace-tabs { + .tab-block { + .tab-item { + &.tools-dropdown { + background-color: $body-bg; + } + } + } + } + } + + .workspace-query-results { + .table { + .th { + background: $body-bg; + border-color: lighten($bg-color-light-gray, 2%); + } + + .tr { + background-color: lighten($bg-color-light-gray, 2%); + + .td:first-child { + border-left: 2px solid $body-bg; + } + + .td { + border-color: $body-bg; + + &:focus, + &.selected { + box-shadow: inset 0 0 0 2px lighten($body-font-color, 10%); + background-color: $body-font-color-dark; + } + + .editable-field { + box-shadow: inset 0 0 0 2px lighten($body-font-color, 10%); + background-color: $body-font-color-dark; + } + } + } + } + } + + .connection-panel { + .panel { + background: rgba($bg-color-light-gray, 100%); + } + } + + .connection-block { + &:hover { + background: $bg-color-light-gray; + } + } + + .context { + color: $body-font-color-dark; + + .context-container { + box-shadow: 0 0 2px 0 #000; + background: #1d1d1d; + + .context-element { + .context-submenu { + background: #1d1d1d; + box-shadow: 0 0 2px 0 #000; + } + + &:hover { + background: rgba($light-color, 15%); + } + } + } + } + + .table { + .td, + .th { + border-bottom: $border-width solid $border-color; + } + + &, + &.table-striped { + .tbody { + .tr { + &.selected { + background: rgba($bg-color-gray, 0.2) !important; + } + + &.active { + background: $bg-color; + } + } + } + } + + &.table-hover { + .tbody { + .tr { + &:hover { + background: $bg-color-light-gray; + } + } + } + } + + &.table-striped { + .tbody { + .tr:nth-of-type(odd) { + background: $bg-color; + } + } + } + } + + #footer { + background: $primary-color; + box-shadow: 0 0 1px 0 #000; + + .footer-elements { + .footer-element { + &.footer-link { + &:hover { + background: rgba($color: #fff, $alpha: 10%); + } + } + } + } + } +} diff --git a/src/renderer/stores/application.ts b/src/renderer/stores/application.ts new file mode 100644 index 0000000..3d05bc0 --- /dev/null +++ b/src/renderer/stores/application.ts @@ -0,0 +1,61 @@ +import { defineStore } from 'pinia'; +import * as Store from 'electron-store'; +import { Ace } from 'ace-builds'; +const persistentStore = new Store({ name: 'settings' }); + +export const useApplicationStore = defineStore('application', { + state: () => ({ + appName: 'Antares - SQL Client', + appVersion: process.env.PACKAGE_VERSION || '0', + cachedVersion: persistentStore.get('cached_version', '0') as string, + isLoading: false, + isNewModal: false, + isSettingModal: false, + isScratchpad: false, + selectedSettingTab: 'general', + selectedConection: {}, + updateStatus: 'noupdate', // 'noupdate' | 'available' | 'checking' | 'nocheck' | 'downloading' | 'downloaded' | 'disabled' + downloadProgress: 0, + baseCompleter: [] as Ace.Completer[] // Needed to reset ace editor, due global-only ace completer + }), + getters: { + getBaseCompleter: state => state.baseCompleter, + getSelectedConnection: state => state.selectedConection, + getDownloadProgress: state => Number(state.downloadProgress.toFixed(1)) + }, + actions: { + checkVersionUpdate () { + if (this.appVersion !== this.cachedVersion) { + this.showSettingModal('changelog'); + this.cachedVersion = this.appVersion; + persistentStore.set('cached_version', this.cachedVersion); + } + }, + setLoadingStatus (payload: boolean) { + this.isLoading = payload; + }, + setBaseCompleters (payload: Ace.Completer[]) { + this.baseCompleter = payload; + }, + // Modals + showNewConnModal () { + this.isNewModal = true; + }, + hideNewConnModal () { + this.isNewModal = false; + }, + showSettingModal (tab: string) { + this.selectedSettingTab = tab; + this.isSettingModal = true; + }, + hideSettingModal () { + this.isSettingModal = false; + }, + showScratchpad () { + this.isScratchpad = true; + }, + hideScratchpad () { + this.isScratchpad = false; + } + } +}); diff --git a/src/renderer/stores/connections.ts b/src/renderer/stores/connections.ts new file mode 100644 index 0000000..2e88817 --- /dev/null +++ b/src/renderer/stores/connections.ts @@ -0,0 +1,224 @@ +import { defineStore } from 'pinia'; +import * as Store from 'electron-store'; +import * as crypto from 'crypto'; +import { ConnectionParams } from 'common/interfaces/antares'; +import { uidGen } from 'common/libs/uidGen'; +const key = localStorage.getItem('key'); + +export interface SidebarElement { + isFolder: boolean; + uid: string; + client?: string; + connections?: string[]; + color?: string; + name?: string; + icon?: null | string; +} + +if (!key) + localStorage.setItem('key', crypto.randomBytes(16).toString('hex')); +else + localStorage.setItem('key', key); + +const persistentStore = new Store({ + name: 'connections', + encryptionKey: key, + clearInvalidConfig: true +}); + +export const useConnectionsStore = defineStore('connections', { + state: () => ({ + connections: persistentStore.get('connections', []) as ConnectionParams[], + lastConnections: persistentStore.get('lastConnections', []) as {uid: string; time: number}[], + connectionsOrder: persistentStore.get('connectionsOrder', []) as SidebarElement[] + }), + getters: { + getConnectionByUid: state => (uid:string) => state.connections.find(connection => connection.uid === uid), + getConnectionName: state => (uid: string) => { + const connection = state.connections.find(connection => connection.uid === uid); + let connectionName = ''; + if (connection) { + if (connection.name) + connectionName = connection.name; + else if (connection.ask) + connectionName = `${connection.host}:${connection.port}`; + else if (connection.databasePath) { + let string = connection.databasePath.split(/[/\\]+/).pop(); + + if (string.length >= 30) + string = `...${string.slice(-30)}`; + + connectionName = string; + } + else + connectionName = `${connection.user + '@'}${connection.host}:${connection.port}`; + } + + return connectionName; + }, + getConnectionOrderByUid: state => (uid:string) => state.connectionsOrder + .find(connection => connection.uid === uid), + getFolders: state => state.connectionsOrder.filter(conn => conn.isFolder), + getConnectionFolder: state => (uid:string) => state.connectionsOrder + .find(folder => folder.isFolder && folder.connections.includes(uid)) + }, + actions: { + addConnection (connection: ConnectionParams) { + this.connections.push(connection); + persistentStore.set('connections', this.connections); + + this.connectionsOrder.push({ + isFolder: false, + uid: connection.uid, + client: connection.client, + icon: null, + name: null + }); + persistentStore.set('connectionsOrder', this.connectionsOrder); + }, + addFolder (params: {after: string; connections: [string, string]}) { + const index = this.connectionsOrder.findIndex((conn: SidebarElement) => conn.uid === params.after); + + this.connectionsOrder.splice(index, 0, { + isFolder: true, + uid: uidGen('F'), + name: '', + color: '#E36929', + connections: params.connections + }); + persistentStore.set('connectionsOrder', this.connectionsOrder); + }, + addToFolder (params: {folder: string; connection: string}) { + this.connectionsOrder = this.connectionsOrder.map((conn: SidebarElement) => { + if (conn.uid === params.folder) + conn.connections.push(params.connection); + + return conn; + }); + persistentStore.set('connectionsOrder', this.connectionsOrder); + this.clearEmptyFolders(); + }, + deleteConnection (connection: SidebarElement | ConnectionParams) { + this.connectionsOrder = (this.connectionsOrder as SidebarElement[]).map(el => { // Removes connection from folders + if (el.isFolder && el.connections.includes(connection.uid)) + el.connections = el.connections.filter(uid => uid !== connection.uid); + return el; + }); + this.connectionsOrder = (this.connectionsOrder as SidebarElement[]).filter(el => el.uid !== connection.uid); + + this.connections = (this.connections as SidebarElement[]).filter(el => el.uid !== connection.uid); + persistentStore.set('connections', this.connections); + this.clearEmptyFolders(); + }, + editConnection (connection: ConnectionParams) { + const editedConnections = (this.connections as ConnectionParams[]).map(conn => { + if (conn.uid === connection.uid) return connection; + return conn; + }); + + this.connections = editedConnections; + persistentStore.set('connections', this.connections); + + const editedConnectionsOrder = (this.connectionsOrder as SidebarElement[]).map(conn => { + if (conn.uid === connection.uid) { + return { + isFolder: false, + uid: connection.uid, + client: connection.client, + icon: conn.icon, + name: conn.name + }; + } + return conn; + }); + + this.connectionsOrder = editedConnectionsOrder; + persistentStore.set('connectionsOrder', this.connectionsOrder); + }, + updateConnections (connections: ConnectionParams[]) { + this.connections = connections; + persistentStore.set('connections', this.connections); + }, + initConnectionsOrder () { + this.connectionsOrder = (this.connections as ConnectionParams[]).map(conn => { + return { + isFolder: false, + uid: conn.uid, + client: conn.client, + icon: null, + name: null + }; + }); + persistentStore.set('connectionsOrder', this.connectionsOrder); + }, + updateConnectionsOrder (connections: SidebarElement[]) { + const invalidElements = connections.reduce<{index: number; uid: string}[]>((acc, curr, i) => { + if (typeof curr === 'string') + acc.push({ index: i, uid: curr }); + + return acc; + }, []); + + if (invalidElements.length) { + invalidElements.forEach(el => { + let connIndex = connections.findIndex(conn => conn.uid === el.uid); + const conn = connections[connIndex]; + + if (connIndex === -1) return; + + connections.splice(el.index, 1, { // Move to new position + isFolder: false, + client: conn.client, + uid: conn.uid, + icon: conn.icon, + name: conn.name + }); + + connIndex = connections.findIndex((conn, i) => conn.uid === el.uid && i !== el.index); + connections.splice(connIndex, 1);// Delete old object + }); + } + + // Clear empty folders + const emptyFolders = connections.reduce((acc, curr) => { + if (curr.connections && curr.connections.length === 0) + acc.push(curr.uid); + return acc; + }, []); + + connections = connections.filter(el => !emptyFolders.includes(el.uid)); + + this.connectionsOrder = connections; + persistentStore.set('connectionsOrder', this.connectionsOrder); + }, + updateConnectionOrder (element: SidebarElement) { + this.connectionsOrder = (this.connectionsOrder as SidebarElement[]).map(el => { + if (el.uid === element.uid) + el = element; + return el; + }); + persistentStore.set('connectionsOrder', this.connectionsOrder); + }, + updateLastConnection (uid: string) { + const cIndex = (this.lastConnections as {uid: string; time: number}[]).findIndex((c) => c.uid === uid); + + if (cIndex >= 0) + this.lastConnections[cIndex].time = new Date().getTime(); + else + this.lastConnections.push({ uid, time: new Date().getTime() }); + + persistentStore.set('lastConnections', this.lastConnections); + }, + clearEmptyFolders () { + // Clear empty folders + const emptyFolders = (this.connectionsOrder as SidebarElement[]).reduce((acc, curr) => { + if (curr.connections && curr.connections.length === 0) + acc.push(curr.uid); + return acc; + }, []); + + this.connectionsOrder = (this.connectionsOrder as SidebarElement[]).filter(el => !emptyFolders.includes(el.uid)); + persistentStore.set('connectionsOrder', this.connectionsOrder); + } + } +}); diff --git a/src/renderer/stores/console.ts b/src/renderer/stores/console.ts new file mode 100644 index 0000000..6d0b016 --- /dev/null +++ b/src/renderer/stores/console.ts @@ -0,0 +1,58 @@ +import { defineStore } from 'pinia'; +import { useWorkspacesStore } from './workspaces'; +const logsSize = 1000; + +export interface ConsoleRecord { + cUid: string; + sql: string; + date: Date; +} + +export const useConsoleStore = defineStore('console', { + state: () => ({ + records: [] as ConsoleRecord[], + consolesHeight: new Map(), + consolesOpened: new Set([]) + }), + getters: { + getLogsByWorkspace: state => (uid: string) => state.records.filter(r => r.cUid === uid), + isConsoleOpen: state => (uid: string) => state.consolesOpened.has(uid), + consoleHeight: state => { + const uid = useWorkspacesStore().getSelected; + return state.consolesHeight.get(uid) || 0; + } + }, + actions: { + putLog (record: ConsoleRecord) { + this.records.push(record); + + if (this.records.length > logsSize) + this.records = this.records.slice(0, logsSize); + }, + openConsole () { + const uid = useWorkspacesStore().getSelected; + this.consolesOpened.add(uid); + this.consolesHeight.set(uid, 250); + }, + closeConsole () { + const uid = useWorkspacesStore().getSelected; + this.consolesOpened.delete(uid); + this.consolesHeight.set(uid, 0); + }, + resizeConsole (height: number) { + const uid = useWorkspacesStore().getSelected; + if (height < 30) + this.closeConsole(); + else + this.consolesHeight.set(uid, height); + }, + toggleConsole () { + const uid = useWorkspacesStore().getSelected; + + if (this.consolesOpened.has(uid)) + this.closeConsole(); + else + this.openConsole(); + } + } +}); diff --git a/src/renderer/stores/history.ts b/src/renderer/stores/history.ts new file mode 100644 index 0000000..c654e47 --- /dev/null +++ b/src/renderer/stores/history.ts @@ -0,0 +1,52 @@ +import { defineStore } from 'pinia'; +import * as Store from 'electron-store'; +import { uidGen } from 'common/libs/uidGen'; +const persistentStore = new Store({ name: 'history' }); +const historySize = 1000; + +export interface HistoryRecord { + uid: string; + sql: string; + date: Date; + schema?: string; +} + +export const useHistoryStore = defineStore('history', { + state: () => ({ + history: persistentStore.get('history', {}) as {[key: string]: HistoryRecord[]}, + favorites: persistentStore.get('favorites', {}) + }), + getters: { + getHistoryByWorkspace: state => (uid: string) => state.history[uid] + }, + actions: { + saveHistory (args: { uid: string; query: string; schema: string; tabUid: string }) { + if (this.getHistoryByWorkspace(args.uid) && + this.getHistoryByWorkspace(args.uid).length && + this.getHistoryByWorkspace(args.uid)[0].sql === args.query + ) return; + + if (!(args.uid in this.history)) + this.history[args.uid] = []; + + this.history[args.uid] = [ + { + uid: uidGen('H'), + sql: args.query, + date: new Date(), + schema: args.schema + }, + ...this.history[args.uid] + ]; + + if (this.history[args.uid].length > historySize) + this.history[args.uid] = this.history[args.uid].slice(0, historySize); + + persistentStore.set('history', this.history); + }, + deleteQueryFromHistory (query: Partial & { workspace: string}) { + this.history[query.workspace] = (this.history[query.workspace] as HistoryRecord[]).filter(q => q.uid !== query.uid); + persistentStore.set('history', this.history); + } + } +}); diff --git a/src/renderer/stores/notifications.ts b/src/renderer/stores/notifications.ts new file mode 100644 index 0000000..00a5995 --- /dev/null +++ b/src/renderer/stores/notifications.ts @@ -0,0 +1,23 @@ +import { defineStore } from 'pinia'; +import { uidGen } from 'common/libs/uidGen'; + +export interface Notification { + uid: string; + status: string; + message: string; +} + +export const useNotificationsStore = defineStore('notifications', { + state: () => ({ + notifications: [] as Notification[] + }), + actions: { + addNotification (payload: { status: string; message: string }) { + const notification: Notification = { uid: uidGen('N'), ...payload }; + this.notifications.unshift(notification); + }, + removeNotification (uid: string) { + this.notifications = (this.notifications as Notification[]).filter(item => item.uid !== uid); + } + } +}); diff --git a/src/renderer/stores/scratchpad.ts b/src/renderer/stores/scratchpad.ts new file mode 100644 index 0000000..594d7de --- /dev/null +++ b/src/renderer/stores/scratchpad.ts @@ -0,0 +1,15 @@ +import { defineStore } from 'pinia'; +import * as Store from 'electron-store'; +const persistentStore = new Store({ name: 'notes' }); + +export const useScratchpadStore = defineStore('scratchpad', { + state: () => ({ + notes: persistentStore.get('notes', '# HOW TO SUPPORT ANTARES\n\n- [ ] Leave a star to Antares [GitHub repo](https://github.com/antares-sql/antares)\n- [ ] Send feedbacks and advices\n- [ ] Report for bugs\n- [ ] If you enjoy, share Antares with friends\n\n# ABOUT SCRATCHPAD\n\nThis is a scratchpad where you can save your **personal notes**. It supports `markdown` format, but you are free to use plain text.\nThis content is just a placeholder, feel free to clear it to make space for your notes.\n') as string + }), + actions: { + changeNotes (notes: string) { + this.notes = notes; + persistentStore.set('notes', this.notes); + } + } +}); diff --git a/src/renderer/stores/settings.ts b/src/renderer/stores/settings.ts new file mode 100644 index 0000000..5f51f1d --- /dev/null +++ b/src/renderer/stores/settings.ts @@ -0,0 +1,107 @@ +import { defineStore } from 'pinia'; +import { ipcRenderer } from 'electron'; +import { i18n, AvailableLocale } from '@/i18n'; +import * as Store from 'electron-store'; +import { ShortcutRecord } from 'common/shortcuts'; + +const settingsStore = new Store({ name: 'settings' }); +const shortcutsStore = new Store({ name: 'shortcuts' }); +const isDarkTheme = window.matchMedia('(prefers-color-scheme: dark)'); +const defaultAppTheme = isDarkTheme.matches ? 'dark' : 'light'; +const defaultEditorTheme = isDarkTheme.matches ? 'twilight' : 'sqlserver'; + +export type EditorFontSize = 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge' | 'xxlarge'; +export type ApplicationTheme = 'light' | 'dark'; + +export const useSettingsStore = defineStore('settings', { + state: () => ({ + locale: settingsStore.get('locale', 'en-US') as AvailableLocale, + allowPrerelease: settingsStore.get('allow_prerelease', true) as boolean, + explorebarSize: settingsStore.get('explorebar_size', null) as number, + notificationsTimeout: settingsStore.get('notifications_timeout', 5) as number, + showTableSize: settingsStore.get('show_table_size', false) as boolean, + dataTabLimit: settingsStore.get('data_tab_limit', 1000) as number, + autoComplete: settingsStore.get('auto_complete', true) as boolean, + lineWrap: settingsStore.get('line_wrap', true) as boolean, + executeSelected: settingsStore.get('execute_selected', true) as boolean, + applicationTheme: settingsStore.get('application_theme', defaultAppTheme) as ApplicationTheme, + editorTheme: settingsStore.get('editor_theme', defaultEditorTheme) as string, + editorFontSize: settingsStore.get('editor_font_size', 'medium') as EditorFontSize, + restoreTabs: settingsStore.get('restore_tabs', true) as boolean, + disableBlur: settingsStore.get('disable_blur', false) as boolean, + disableScratchpad: settingsStore.get('disable_scratchpad', false) as boolean, + shortcuts: shortcutsStore.get('shortcuts', []) as ShortcutRecord[], + defaultCopyType: settingsStore.get('default_copy_type', 'cell') as string + }), + actions: { + changeLocale (locale: AvailableLocale) { + this.locale = locale; + i18n.global.locale = locale; + settingsStore.set('locale', this.locale); + }, + changePageSize (limit: number) { + this.dataTabLimit = limit; + settingsStore.set('data_tab_limit', this.dataTabLimit); + }, + changeAllowPrerelease (allow: boolean) { + this.allowPrerelease = allow; + settingsStore.set('allow_prerelease', this.allowPrerelease); + }, + updateNotificationsTimeout (timeout: number) { + this.notificationsTimeout = timeout; + settingsStore.set('notifications_timeout', this.notificationsTimeout); + }, + changeShowTableSize (show: boolean) { + this.showTableSize = show; + settingsStore.set('show_table_size', this.showTableSize); + }, + changeExplorebarSize (size: number) { + this.explorebarSize = size; + settingsStore.set('explorebar_size', this.explorebarSize); + }, + changeAutoComplete (val: boolean) { + this.autoComplete = val; + settingsStore.set('auto_complete', this.autoComplete); + }, + changeLineWrap (val: boolean) { + this.lineWrap = val; + settingsStore.set('line_wrap', this.lineWrap); + }, + changeExecuteSelected (val: boolean) { + this.executeSelected = val; + settingsStore.set('execute_selected', this.executeSelected); + }, + changeApplicationTheme (theme: string) { + this.applicationTheme = theme; + settingsStore.set('application_theme', this.applicationTheme); + ipcRenderer.send('refresh-theme-settings'); + }, + changeEditorTheme (theme: string) { + this.editorTheme = theme; + settingsStore.set('editor_theme', this.editorTheme); + }, + changeEditorFontSize (size: EditorFontSize) { + this.editorFontSize = size; + settingsStore.set('editor_font_size', this.editorFontSize); + }, + changeRestoreTabs (val: boolean) { + this.restoreTabs = val; + settingsStore.set('restore_tabs', this.restoreTabs); + }, + changeDisableBlur (val: boolean) { + this.disableBlur = val; + settingsStore.set('disable_blur', this.disableBlur); + }, + changeDisableScratchpad (val: boolean) { + this.disableScratchpad = val; + settingsStore.set('disable_scratchpad', this.disableScratchpad); + }, + updateShortcuts (shortcuts: ShortcutRecord[]) { + this.shortcuts = shortcuts; + }, + changeDefaultCopyType (type: string) { + this.defaultCopyType = type; + settingsStore.set('default_copy_type', this.defaultCopyType); + } + } +}); diff --git a/src/renderer/stores/workspaces.ts b/src/renderer/stores/workspaces.ts new file mode 100644 index 0000000..e5fd568 --- /dev/null +++ b/src/renderer/stores/workspaces.ts @@ -0,0 +1,745 @@ +import { defineStore } from 'pinia'; +import * as Store from 'electron-store'; +import Connection from '@/ipc-api/Connection'; +import Schema from '@/ipc-api/Schema'; +import Users from '@/ipc-api/Users'; +import { uidGen } from 'common/libs/uidGen'; + +import customizations from 'common/customizations'; + +import { useConnectionsStore } from '@/stores/connections'; +import { useNotificationsStore } from '@/stores/notifications'; +import { useSettingsStore } from '@/stores/settings'; +import { + ClientCode, + CollationInfos, + ConnectionParams, + EventInfos, + FunctionInfos, + RoutineInfos, + TableInfos, + TriggerFunctionInfos, + TriggerInfos, + TypesGroup +} from 'common/interfaces/antares'; +import { Customizations } from 'common/interfaces/customizations'; + +export interface WorkspaceTab { + uid: string; + tab?: string; + index?: number; + selected?: boolean; + type?: string; + schema?: string; + elementName?: string; + elementNewName?: string; + elementType?: string; + isChanged?: boolean; + content?: string; + autorun?: boolean; +} + +export interface WorkspaceStructure { + name: string; + functions: FunctionInfos[]; + procedures: RoutineInfos[]; + schedulers: EventInfos[]; + tables: TableInfos[]; + triggers: TriggerInfos[]; + triggerFunctions: TriggerFunctionInfos[]; + size: number; +} + +export interface Breadcrumb { + function?: string; + routine?: string; + query?: string; + scheduler?: string; + schema?: string; + table?: string; + trigger?: string; + triggerFunction?: string; + view?: string; +} + +export interface Workspace { + uid: string; + client?: ClientCode; + connectionStatus: string; + selectedTab: string | number; + searchTerm: string; + tabs: WorkspaceTab[]; + structure: WorkspaceStructure[]; + variables: { name: string; value: string }[]; + collations: CollationInfos[]; + users: { host: string; name: string; password?: string }[]; + breadcrumbs: Breadcrumb; + loadingElements: { name: string; schema: string; type: string }[]; + loadedSchemas: Set; + dataTypes?: { [key: string]: TypesGroup[] }; + indexTypes?: string[]; + customizations?: Customizations; + version?: { + number: string; + name: string; + arch: string; + os: string; + }; + engines?: {[key: string]: string | boolean | number}[]; +} + +const persistentStore = new Store({ name: 'tabs' }); +const tabIndex: {[key: string]: number} = {}; + +export const useWorkspacesStore = defineStore('workspaces', { + state: () => ({ + workspaces: [] as Workspace[], + selectedWorkspace: null as string + }), + getters: { + getSelected: state => { + if (!state.workspaces.length) return 'NEW'; + if (state.selectedWorkspace) return state.selectedWorkspace; + const connectionsStore = useConnectionsStore(); + if (connectionsStore.lastConnections.length) { + return connectionsStore.lastConnections.sort((a, b) => { + if (a.time < b.time) return 1; + else if (a.time > b.time) return -1; + return 0; + })[0].uid; + } + + return state.workspaces[0].uid; + }, + getWorkspace: state => (uid: string) => { + return state.workspaces.find(workspace => workspace.uid === uid); + }, + getDatabaseVariable: state => (uid: string, name: string) => { + return state.workspaces.find(workspace => workspace.uid === uid).variables.find(variable => variable.name === name); + }, + getWorkspaceTab (state) { + return (tUid: string) => { + if (!this.getSelected) return; + const workspace = state.workspaces.find(workspace => workspace.uid === this.getSelected); + if ('tabs' in workspace) + return workspace.tabs.find(tab => tab.uid === tUid); + return {}; + }; + }, + getConnected: state => { + return state.workspaces + .filter(workspace => workspace.connectionStatus === 'connected') + .map(workspace => workspace.uid); + }, + getLoadedSchemas: state => (uid: string) => { + return state.workspaces.find(workspace => workspace.uid === uid).loadedSchemas; + }, + getSearchTerm: state => (uid: string) => { + return state.workspaces.find(workspace => workspace.uid === uid).searchTerm; + } + }, + actions: { + selectWorkspace (uid: string) { + if (!uid) + this.selectedWorkspace = this.workspaces.length ? this.workspaces[0].uid : 'NEW'; + else + this.selectedWorkspace = uid; + }, + async connectWorkspace (connection: ConnectionParams & { pgConnString?: string }) { + this.workspaces = (this.workspaces as Workspace[]).map(workspace => workspace.uid === connection.uid + ? { + ...workspace, + structure: {}, + breadcrumbs: {}, + loadedSchemas: new Set(), + connectionStatus: 'connecting' + } + : workspace); + + const connectionsStore = useConnectionsStore(); + const notificationsStore = useNotificationsStore(); + const settingsStore = useSettingsStore(); + + try { + const { status, response } = await Connection.connect(connection); + + if (status === 'error') { + notificationsStore.addNotification({ status, message: response }); + this.workspaces = (this.workspaces as Workspace[]).map(workspace => workspace.uid === connection.uid + ? { + ...workspace, + structure: {}, + breadcrumbs: {}, + loadedSchemas: new Set(), + connectionStatus: 'failed' + } + : workspace); + } + else { + let clientCustomizations: Customizations; + const { updateLastConnection } = connectionsStore; + + updateLastConnection(connection.uid); + + switch (connection.client) { + case 'mysql': + case 'maria': + clientCustomizations = customizations.mysql; + break; + case 'pg': + clientCustomizations = customizations.pg; + break; + case 'sqlite': + clientCustomizations = customizations.sqlite; + break; + case 'firebird': + clientCustomizations = customizations.firebird; + break; + } + const dataTypes = clientCustomizations.dataTypes; + const indexTypes = clientCustomizations.indexTypes; + + const { status, response: version } = await Schema.getVersion(connection.uid); + + if (status === 'error') + notificationsStore.addNotification({ status, message: version }); + + // Check if Maria or MySQL + const isMySQL = version.name.includes('MySQL'); + const isMaria = version.name.includes('Maria'); + + if (isMySQL && connection.client !== 'mysql') { + const connProxy = Object.assign({}, connection); + connProxy.client = 'mysql'; + connectionsStore.editConnection(connProxy); + } + else if (isMaria && connection.client === 'mysql') { + const connProxy = Object.assign({}, connection); + connProxy.client = 'maria'; + connectionsStore.editConnection(connProxy); + } + + const cachedTabs: WorkspaceTab[] = settingsStore.restoreTabs ? persistentStore.get(connection.uid, []) as WorkspaceTab[] : []; + + if (cachedTabs.length) { + tabIndex[connection.uid] = cachedTabs.reduce((acc: number, curr) => { + if (curr.index > acc) acc = curr.index; + return acc; + }, null); + } + + this.workspaces = (this.workspaces as Workspace[]).map(workspace => workspace.uid === connection.uid + ? { + ...workspace, + client: connection.client, + dataTypes, + indexTypes, + customizations: clientCustomizations, + structure: response, + connectionStatus: 'connected', + tabs: cachedTabs, + selectedTab: cachedTabs.length ? cachedTabs[0].uid : null, + version + } + : workspace); + + this.refreshCollations(connection.uid); + this.refreshVariables(connection.uid); + this.refreshEngines(connection.uid); + this.refreshUsers(connection.uid); + } + } + catch (err) { + notificationsStore.addNotification({ status: 'error', message: err.stack }); + } + }, + async refreshStructure (uid: string) { + const notificationsStore = useNotificationsStore(); + + try { + const { status, response } = await Schema.getStructure({ uid, schemas: this.getLoadedSchemas(uid) }); + + if (status === 'error') + notificationsStore.addNotification({ status, message: response }); + else { + this.workspaces = (this.workspaces as Workspace[]).map(workspace => workspace.uid === uid + ? { + ...workspace, + structure: response + } + : workspace); + } + } + catch (err) { + notificationsStore.addNotification({ status: 'error', message: err.stack }); + } + }, + async refreshSchema ({ uid, schema }: {uid: string; schema: string}) { + const notificationsStore = useNotificationsStore(); + + try { + const { status, response } = await Schema.getStructure({ uid, schemas: new Set([schema]) }); + if (status === 'error') + notificationsStore.addNotification({ status, message: response }); + else { + const schemaElements = (response as WorkspaceStructure[]).find(_schema => _schema.name === schema); + this.workspaces = (this.workspaces as Workspace[]).map(workspace => { + if (workspace.uid === uid) { + const schemaIndex = workspace.structure.findIndex(s => s.name === schema); + + if (schemaIndex !== -1) + workspace.structure[schemaIndex] = schemaElements; + else + workspace.structure.push(schemaElements); + } + return workspace; + }); + } + } + catch (err) { + notificationsStore.addNotification({ status: 'error', message: err.stack }); + } + }, + async refreshCollations (uid: string) { + const notificationsStore = useNotificationsStore(); + + try { + const { status, response } = await Schema.getCollations(uid); + if (status === 'error') + notificationsStore.addNotification({ status, message: response }); + else { + this.workspaces = (this.workspaces as Workspace[]).map(workspace => workspace.uid === uid + ? { + ...workspace, + collations: response + } + : workspace); + } + } + catch (err) { + notificationsStore.addNotification({ status: 'error', message: err.stack }); + } + }, + async refreshVariables (uid: string) { + const notificationsStore = useNotificationsStore(); + + try { + const { status, response } = await Schema.getVariables(uid); + if (status === 'error') + notificationsStore.addNotification({ status, message: response }); + else { + this.workspaces = (this.workspaces as Workspace[]).map(workspace => workspace.uid === uid + ? { + ...workspace, + variables: response + } + : workspace); + } + } + catch (err) { + notificationsStore.addNotification({ status: 'error', message: err.stack }); + } + }, + async refreshEngines (uid: string) { + const notificationsStore = useNotificationsStore(); + + try { + const { status, response } = await Schema.getEngines(uid); + if (status === 'error') + notificationsStore.addNotification({ status, message: response }); + else { + this.workspaces = (this.workspaces as Workspace[]).map(workspace => workspace.uid === uid + ? { + ...workspace, + engines: response + } + : workspace); + } + } + catch (err) { + notificationsStore.addNotification({ status: 'error', message: err.stack }); + } + }, + async refreshUsers (uid: string) { + const notificationsStore = useNotificationsStore(); + + try { + const { status, response } = await Users.getUsers(uid); + if (status === 'error') + notificationsStore.addNotification({ status, message: response }); + else { + this.workspaces = (this.workspaces as Workspace[]).map(workspace => workspace.uid === uid + ? { + ...workspace, + users: response + } + : workspace); + } + } + catch (err) { + notificationsStore.addNotification({ status: 'error', message: err.stack }); + } + }, + removeConnected (uid: string) { + Connection.disconnect(uid); + this.workspaces = (this.workspaces as Workspace[]).map(workspace => workspace.uid === uid + ? { + ...workspace, + structure: {}, + breadcrumbs: {}, + loadedSchemas: new Set(), + connectionStatus: 'disconnected' + } + : workspace); + + this.selectTab({ uid, tab: 0 }); + }, + addWorkspace (uid: string) { + const workspace: Workspace = { + uid, + connectionStatus: 'disconnected', + selectedTab: 0, + searchTerm: '', + tabs: [], + structure: [], + variables: [], + collations: [], + users: [], + breadcrumbs: {}, + loadingElements: [], + loadedSchemas: new Set() + }; + + this.workspaces.push(workspace); + }, + changeBreadcrumbs (payload: Breadcrumb) { + const breadcrumbsObj: Breadcrumb = { + schema: null, + table: null, + trigger: null, + triggerFunction: null, + routine: null, + function: null, + scheduler: null, + view: null, + query: null + }; + + this.workspaces = (this.workspaces as Workspace[]).map(workspace => workspace.uid === this.getSelected + ? { + ...workspace, + breadcrumbs: { ...breadcrumbsObj, ...payload } + } + : workspace); + }, + addLoadedSchema (schema: string) { + this.workspaces = (this.workspaces as Workspace[]).map(workspace => { + if (workspace.uid === this.getSelected) + workspace.loadedSchemas.add(schema); + return workspace; + }); + }, + addLoadingElement (element: { name: string; schema: string; type: string }) { + this.workspaces = (this.workspaces as Workspace[]).map(workspace => { + if (workspace.uid === this.getSelected) + workspace.loadingElements.push(element); + return workspace; + }); + }, + removeLoadingElement (element: { name: string; schema: string; type: string }) { + this.workspaces = (this.workspaces as Workspace[]).map(workspace => { + if (workspace.uid === this.getSelected) { + const loadingElements = workspace.loadingElements.filter(el => + el.schema !== element.schema && + el.name !== element.name && + el.type !== element.type + ); + + workspace = { ...workspace, loadingElements }; + } + return workspace; + }); + }, + setSearchTerm (term: string) { + this.workspaces = (this.workspaces as Workspace[]).map(workspace => workspace.uid === this.getSelected + ? { + ...workspace, + searchTerm: term + } + : workspace); + }, + _addTab ({ uid, tab, content, type, autorun, schema, elementName, elementType }: WorkspaceTab) { + if (type === 'query') + tabIndex[uid] = tabIndex[uid] ? ++tabIndex[uid] : 1; + + const newTab: WorkspaceTab = { + uid: tab, + index: type === 'query' ? tabIndex[uid] : null, + selected: false, + type, + schema, + elementName, + elementType, + content: content || '', + autorun: !!autorun + }; + + this.workspaces = (this.workspaces as Workspace[]).map(workspace => { + if (workspace.uid === uid) { + return { + ...workspace, + tabs: [...workspace.tabs, newTab] + }; + } + else + return workspace; + }); + + persistentStore.set(uid, (this.workspaces as Workspace[]).find(workspace => workspace.uid === uid).tabs); + }, + _replaceTab ({ uid, tab: tUid, type, schema, content, elementName, elementType }: WorkspaceTab) { + this.workspaces = (this.workspaces as Workspace[]).map(workspace => { + if (workspace.uid === uid) { + return { + ...workspace, + tabs: workspace.tabs.map(tab => { + if (tab.uid === tUid) + return { ...tab, type, schema, content, elementName, elementType }; + + return tab; + }) + }; + } + else + return workspace; + }); + + persistentStore.set(uid, (this.workspaces as Workspace[]).find(workspace => workspace.uid === uid).tabs); + }, + newTab ({ uid, content, type, autorun, schema, elementName, elementType }: WorkspaceTab) { + let tabUid; + const workspaceTabs = (this.workspaces as Workspace[]).find(workspace => workspace.uid === uid); + + switch (type) { + case 'new-table': + case 'new-trigger': + case 'new-trigger-function': + case 'new-function': + case 'new-routine': + case 'new-scheduler': + tabUid = uidGen('T'); + this._addTab({ + uid, + tab: tabUid, + content, + type, + autorun, + schema, + elementName, + elementType + }); + break; + case 'temp-data': + case 'temp-trigger-props': + case 'temp-trigger-function-props': + case 'temp-function-props': + case 'temp-routine-props': + case 'temp-scheduler-props': { + const existentTab = workspaceTabs + ? workspaceTabs.tabs.find(tab => + tab.schema === schema && + tab.elementName === elementName && + tab.elementType === elementType && + [type, type.replace('temp-', '')].includes(tab.type)) + : false; + + if (existentTab) { // if tab exists + tabUid = existentTab.uid; + } + else { + const tempTabs = workspaceTabs ? workspaceTabs.tabs.filter(tab => tab.type.includes('temp-')) : false; + + if (tempTabs && tempTabs.length) { // if temp tab already opened + for (const tab of tempTabs) { + if (tab.isChanged) { + this._replaceTab({ // make permanent a temp table with unsaved changes + uid, + tab: tab.uid, + type: tab.type.replace('temp-', ''), + schema: tab.schema, + elementName: tab.elementName, + elementType: tab.elementType + }); + + tabUid = uidGen('T'); + this._addTab({ uid, tab: tabUid, content, type, autorun, schema, elementName, elementType }); + } + else { + this._replaceTab({ uid, tab: tab.uid, type, schema, elementName, elementType }); + tabUid = tab.uid; + } + } + } + else { + tabUid = uidGen('T'); + this._addTab({ uid, tab: tabUid, content, type, autorun, schema, elementName, elementType }); + } + } + } + break; + case 'data': + case 'table-props': + case 'trigger-props': + case 'trigger-function-props': + case 'function-props': + case 'routine-props': + case 'scheduler-props': { + const existentTab = workspaceTabs + ? workspaceTabs.tabs.find(tab => + tab.schema === schema && + tab.elementName === elementName && + tab.elementType === elementType && + [`temp-${type}`, type].includes(tab.type)) + : false; + + if (existentTab) { + this._replaceTab({ uid, tab: existentTab.uid, type, schema, elementName, elementType }); + tabUid = existentTab.uid; + } + else { + tabUid = uidGen('T'); + this._addTab({ uid, tab: tabUid, content, type, autorun, schema, elementName, elementType }); + } + } + break; + default: + tabUid = uidGen('T'); + this._addTab({ uid, tab: tabUid, content, type, autorun, schema, elementName, elementType }); + break; + } + + this.selectTab({ uid, tab: tabUid }); + }, + checkSelectedTabExists (uid: string) { + const workspace = (this.workspaces as Workspace[]).find(workspace => workspace.uid === uid); + const isSelectedExistent = workspace + ? workspace.tabs.some(tab => tab.uid === workspace.selectedTab) + : false; + + if (!isSelectedExistent && workspace.tabs.length) + this.selectTab({ uid, tab: workspace.tabs[workspace.tabs.length - 1].uid }); + }, + updateTabContent ({ uid, tab, type, schema, content }: WorkspaceTab) { + this._replaceTab({ uid, tab, type, schema, content }); + }, + renameTabs ({ uid, schema, elementName, elementNewName }: WorkspaceTab) { + this.workspaces = (this.workspaces as Workspace[]).map(workspace => { + if (workspace.uid === uid) { + return { + ...workspace, + tabs: workspace.tabs.map(tab => { + if (tab.elementName === elementName && tab.schema === schema) { + return { + ...tab, + elementName: elementNewName + }; + } + + return tab; + }) + }; + } + else + return workspace; + }); + + persistentStore.set(uid, (this.workspaces as Workspace[]).find(workspace => workspace.uid === uid).tabs); + }, + removeTab ({ uid, tab: tUid }: {uid: string; tab: string}) { + this.workspaces = (this.workspaces as Workspace[]).map(workspace => { + if (workspace.uid === uid) { + return { + ...workspace, + tabs: workspace.tabs.filter(tab => tab.uid !== tUid) + }; + } + else + return workspace; + }); + + persistentStore.set(uid, (this.workspaces as Workspace[]).find(workspace => workspace.uid === uid).tabs); + this.checkSelectedTabExists(uid); + }, + removeTabs ({ uid, schema, elementName, elementType }: WorkspaceTab) { // Multiple tabs based on schema and element name + if (elementType === 'procedure') elementType = 'routine'; // TODO: pass directly "routine" + + this.workspaces = (this.workspaces as Workspace[]).map(workspace => { + if (workspace.uid === uid) { + return { + ...workspace, + tabs: workspace.tabs.filter(tab => + tab.schema !== schema || + tab.elementName !== elementName || + tab.elementType !== elementType + ) + }; + } + else + return workspace; + }); + + persistentStore.set(uid, (this.workspaces as Workspace[]).find(workspace => workspace.uid === uid).tabs); + this.checkSelectedTabExists(uid); + }, + selectTab ({ uid, tab }: {uid: string; tab: string}) { + this.workspaces = (this.workspaces as Workspace[]).map(workspace => workspace.uid === uid + ? { ...workspace, selectedTab: tab } + : workspace + ); + }, + selectNextTab ({ uid }: {uid: string }) { + const workspace = (this.workspaces as Workspace[]).find(workspace => workspace.uid === uid); + + let newIndex = workspace.tabs.findIndex(tab => tab.selected || tab.uid === workspace.selectedTab) + 1; + + if (newIndex > workspace.tabs.length -1) + newIndex = 0; + + this.selectTab({ uid, tab: workspace.tabs[newIndex].uid }); + }, + selectPrevTab ({ uid }: {uid: string }) { + const workspace = (this.workspaces as Workspace[]).find(workspace => workspace.uid === uid); + + let newIndex = workspace.tabs.findIndex(tab => tab.selected || tab.uid === workspace.selectedTab) - 1; + + if (newIndex < 0) + newIndex = workspace.tabs.length -1; + + this.selectTab({ uid, tab: workspace.tabs[newIndex].uid }); + }, + updateTabs ({ uid, tabs }: {uid: string; tabs: WorkspaceTab[]}) { + this.workspaces = (this.workspaces as Workspace[]).map(workspace => workspace.uid === uid + ? { ...workspace, tabs } + : workspace + ); + persistentStore.set(uid, (this.workspaces as Workspace[]).find(workspace => workspace.uid === uid).tabs); + }, + setUnsavedChanges ({ uid, tUid, isChanged }: { uid: string; tUid: string; isChanged: boolean }) { + this.workspaces = (this.workspaces as Workspace[]).map(workspace => { + if (workspace.uid === uid) { + return { + ...workspace, + tabs: workspace.tabs.map(tab => { + if (tab.uid === tUid) + return { ...tab, isChanged }; + + return tab; + }) + }; + } + else + return workspace; + }); + } + } +}); diff --git a/src/renderer/untyped.d.ts b/src/renderer/untyped.d.ts new file mode 100644 index 0000000..b134a28 --- /dev/null +++ b/src/renderer/untyped.d.ts @@ -0,0 +1,80 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +/* eslint-disable @typescript-eslint/ban-types */ +declare module '@/App.vue'; +declare module 'v-mask'; +declare module 'vuedraggable' {// <- to export as default + const draggableComponent: import('vue').DefineComponent<{ + list: { + type: ArrayConstructor; + required: boolean; + default: any; + }; + modelValue: { + type: ArrayConstructor; + required: boolean; + default: any; + }; + itemKey: { + type: (FunctionConstructor | StringConstructor)[]; + required: boolean; + }; + clone: { + type: FunctionConstructor; + default: (original: any) => any; + }; + tag: { + type: StringConstructor; + default: string; + }; + move: { + type: FunctionConstructor; + default: any; + }; + componentData: { + type: ObjectConstructor; + required: boolean; + default: any; + }; + }, unknown, { + error: boolean; + }, { + realList(): any; + getKey(): any; + }, { + getUnderlyingVm(domElement: any): any; + getUnderlyingPotencialDraggableComponent(htmElement: any): any; + emitChanges(evt: any): void; + alterList(onList: any): void; + spliceList(): void; + updatePosition(oldIndex: any, newIndex: any): void; + getRelatedContextFromMoveEvent({ to, related }: { + to: any; + related: any; + }): any; + getVmIndexFromDomIndex(domIndex: any): any; + onDragStart(evt: any): void; + onDragAdd(evt: any): void; + onDragRemove(evt: any): void; + onDragUpdate(evt: any): void; + computeFutureIndex(relatedContext: any, evt: any): any; + onDragMove(evt: any, originalEvent: any): any; + onDragEnd(): void; + }, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, any[], any, import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps, Readonly<{ + move: Function; + tag: string; + clone: Function; + list: unknown[]; + modelValue: unknown[]; + componentData: Record; + } & { + itemKey?: string | Function; + }>, { + move: Function; + tag: string; + clone: Function; + list: unknown[]; + modelValue: unknown[]; + componentData: Record; + }>; + export = draggableComponent; +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..284b0b1 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,28 @@ +{ + "include": [ + "./tests/**/*", + "./src/main/**/*", + "./src/renderer/**/*", + "./src/common/**/*", + ], + "exclude": ["./src/renderer/libs/ext-language_tools.js"], + "compilerOptions": { + "baseUrl": "./", + "target": "es2021", + "allowJs": true, + "module": "CommonJS", + "noImplicitAny": true, + "jsx": "preserve", + "types": [ + "node" + ], + "sourceMap": true, + "allowSyntheticDefaultImports": true, + "resolveJsonModule": true, + "removeComments": true, + "paths": { + "common/*": ["./src/common/*"], + "@/*": ["./src/renderer/*"], + } + } +} \ No newline at end of file diff --git a/webpack.main.config.js b/webpack.main.config.js new file mode 100644 index 0000000..54546f4 --- /dev/null +++ b/webpack.main.config.js @@ -0,0 +1,76 @@ +const path = require('path'); +const webpack = require('webpack'); +const ProgressPlugin = require('progress-webpack-plugin'); + +const { dependencies, devDependencies, version } = require('./package.json'); + +const externals = Object.keys(dependencies).concat(Object.keys(devDependencies)); +const isDevMode = process.env.NODE_ENV === 'development'; +const whiteListedModules = []; + +module.exports = { // Main + name: 'main', + mode: process.env.NODE_ENV, + devtool: isDevMode ? 'eval-source-map' : false, + entry: { + main: path.join(__dirname, './src/main/main.ts') + }, + target: 'electron-main', + output: { + libraryTarget: 'commonjs2', + path: path.join(__dirname, 'dist'), + filename: '[name].js' + }, + node: { + global: true, + __dirname: isDevMode, + __filename: isDevMode + }, + externals: externals.filter((d) => !whiteListedModules.includes(d)), + resolve: { + extensions: ['.js', '.json', '.ts'], + alias: { + src: path.join(__dirname, 'src/') + }, + fallback: { + 'pg-native': false, + 'cpu-features': false, + cardinal: false + } + }, + plugins: [ + new ProgressPlugin(true), + new webpack.DefinePlugin({ + 'process.env': { + PACKAGE_VERSION: `"${version}"` + } + }) + ], + module: { + rules: [ + { + test: /\.node$/, + loader: 'node-loader', + options: { + name: '[path][name].[ext]' + } + }, + { + test: /\.ts$/, + exclude: /node_modules/, + loader: 'ts-loader' + }, + { + test: /\.js$/, + exclude: /node_modules/, + loader: 'babel-loader' + }, + { + test: /\.(png|jpg|gif)$/, + use: [{ + loader: 'file-loader' + }] + } + ] + } +}; diff --git a/webpack.renderer.config.js b/webpack.renderer.config.js new file mode 100644 index 0000000..b92b225 --- /dev/null +++ b/webpack.renderer.config.js @@ -0,0 +1,170 @@ +const fs = require('fs'); +const path = require('path'); +const webpack = require('webpack'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); +const { VueLoaderPlugin } = require('vue-loader'); +const MiniCssExtractPlugin = require('mini-css-extract-plugin'); +const ProgressPlugin = require('progress-webpack-plugin'); + +const { version } = require('./package.json'); +const { contributors } = JSON.parse(fs.readFileSync('./.all-contributorsrc', 'utf-8')); +const parsedContributors = contributors.reduce((acc, c) => { + acc.push(c.name); + return acc; +}, []).join(','); + +const isDevMode = process.env.NODE_ENV !== 'production'; +const whiteListedModules = ['.bin']; +const externals = {}; + +fs.readdirSync('node_modules') + .filter(x => whiteListedModules.indexOf(x) === -1) + .forEach(mod => { + externals[mod] = `commonjs ${mod}`; + }); + +const config = { + name: 'renderer', + mode: process.env.NODE_ENV, + devtool: isDevMode ? 'eval-source-map' : false, + entry: path.join(__dirname, './src/renderer/index.ts'), + target: 'electron-renderer', + output: { + path: path.resolve(__dirname, 'dist'), + filename: 'renderer.js' + }, + node: { + global: true, + __dirname: isDevMode, + __filename: isDevMode + }, + externals: externals, + resolve: { + alias: { + '@': path.resolve(__dirname, 'src/renderer') + }, + extensions: ['', '.js', '.vue', '.ts', '.json'], + fallback: { + fs: false, + path: false, + util: false, + crypto: false, + assert: false, + os: false + } + }, + plugins: [ + new ProgressPlugin(true), + new HtmlWebpackPlugin({ + excludeChunks: ['processTaskWorker'], + filename: 'index.html', + template: path.resolve(__dirname, 'src/renderer/index.ejs'), + nodeModules: isDevMode + ? path.resolve(__dirname, '../node_modules') + : false + }), + new MiniCssExtractPlugin({ + filename: '[name].css', + chunkFilename: '[id].css' + }), + new VueLoaderPlugin(), + new webpack.DefinePlugin({ + __VUE_OPTIONS_API__: true, + __VUE_PROD_DEVTOOLS__: isDevMode, + __VUE_I18N_LEGACY_API__: true, + __VUE_I18N_FULL_INSTALL__: true, + __INTLIFY_PROD_DEVTOOLS__: isDevMode, + 'process.env': { + PACKAGE_VERSION: `"${version}"`, + APP_CONTRIBUTORS: `"${parsedContributors}"` + } + }) + ], + module: { + rules: [ + { + test: /\.js$/, + use: 'babel-loader', + exclude: /node_modules/ + }, + { + test: /\.vue$/, + loader: 'vue-loader' + }, + { + test: /\.node$/, + use: 'node-loader' + }, + { + test: /\.ts$/, + exclude: /node_modules/, + loader: 'ts-loader', + options: { + appendTsSuffixTo: [/.vue$/], + transpileOnly: true + } + }, + { + test: /\.s(c|a)ss$/, + use: [ + { loader: MiniCssExtractPlugin.loader }, + { loader: 'css-loader' }, + { + loader: 'sass-loader', + options: { + additionalData: ` + $platform: ${process.platform}; + @import "@/scss/_variables.scss";`, + sassOptions: { quietDeps: true } + } + } + ] + }, + { + test: /\.css$/, + use: [ + { + loader: MiniCssExtractPlugin.loader, + options: { + publicPath: '' + } + }, + { + loader: 'css-loader', + options: { + url: true + } + } + ] + }, + { + test: /\.(png|jpe?g|gif|tif?f|bmp|webp|svg)(\?.*)?$/, + type: 'asset/resource', + generator: { + filename: 'images/[hash][ext][query]' + } + }, + { + test: /\.(woff|woff2|ttf|eot)$/, + type: 'asset', + parser: { + dataUrlCondition: { + maxSize: 8 * 1024 + } + }, + generator: { + filename: 'fonts/[hash][ext][query]' + } + } + ] + } +}; + +if (isDevMode) { + // any dev only config + config.plugins.push( + new webpack.HotModuleReplacementPlugin() + ); +} + +module.exports = config; diff --git a/webpack.workers.config.js b/webpack.workers.config.js new file mode 100644 index 0000000..c410072 --- /dev/null +++ b/webpack.workers.config.js @@ -0,0 +1,86 @@ +const path = require('path'); +const webpack = require('webpack'); +const ProgressPlugin = require('progress-webpack-plugin'); + +const { dependencies, devDependencies, version } = require('./package.json'); + +const externals = Object.keys(dependencies).concat(Object.keys(devDependencies)); +const isDevMode = process.env.NODE_ENV === 'development'; +const whiteListedModules = []; + +const config = { + name: 'workers', + mode: process.env.NODE_ENV, + devtool: isDevMode ? 'eval-source-map' : false, + entry: { + exporter: path.join(__dirname, './src/main/workers/exporter.ts'), + importer: path.join(__dirname, './src/main/workers/importer.ts') + }, + target: 'node', + output: { + libraryTarget: 'commonjs2', + path: path.join(__dirname, 'dist'), + filename: '[name].js' + }, + node: { + global: true, + __dirname: isDevMode, + __filename: isDevMode + }, + externals: externals.filter((d) => !whiteListedModules.includes(d)), + module: { + rules: [ + { + test: /\.ts$/, + exclude: /node_modules/, + loader: 'ts-loader' + }, + { + test: /\.js$/, + use: 'babel-loader', + exclude: /node_modules/ + }, + { + test: /\.node$/, + use: 'node-loader' + } + ] + }, + resolve: { + extensions: ['.js', '.json', '.ts'], + alias: { + src: path.join(__dirname, 'src/'), + common: path.resolve(__dirname, 'src/common') + }, + fallback: { + 'pg-native': false, + 'cpu-features': false, + cardinal: false + } + }, + plugins: [ + new ProgressPlugin(true), + new webpack.DefinePlugin({ + 'process.env': { + PACKAGE_VERSION: `"${version}"` + } + }) + ] +}; + +/** + * Adjust rendererConfig for production settings + */ +if (isDevMode) { + // any dev only config + config.plugins.push(new webpack.HotModuleReplacementPlugin()); +} +else { + config.plugins.push( + new webpack.LoaderOptionsPlugin({ + minimize: true + }) + ); +} + +module.exports = config;