diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 000000000..a56a7ef43 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,2 @@ +node_modules + diff --git a/.eslintrc.js b/.eslintrc.js index 20034fd22..b1b87779f 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,17 +1,18 @@ module.exports = { root: true, env: { - node: true + node: true, }, - 'extends': [ + parserOptions: { + parser: '@babel/eslint-parser', + }, + extends: [ + 'eslint:recommended', 'plugin:vue/essential', - 'eslint:recommended' + 'plugin:prettier/recommended', ], rules: { 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off', - 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off' + 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', }, - parserOptions: { - parser: 'babel-eslint' - } -} \ No newline at end of file +}; diff --git a/.github/workflows/_meta-build.yaml b/.github/workflows/_meta-build.yaml index 9636d12b4..c31f295d9 100644 --- a/.github/workflows/_meta-build.yaml +++ b/.github/workflows/_meta-build.yaml @@ -14,13 +14,13 @@ on: app-version: type: string required: false - default: "snapshot" - description: "Set the version that should be set/used as tag for the container image" + default: 'snapshot' + description: 'Set the version that should be set/used as tag for the container image' publish-container: type: boolean required: false default: false - description: "Set if the container image gets publish and scan once its build" + description: 'Set if the container image gets publish and scan once its build' secrets: registry-0-usr: required: true diff --git a/.github/workflows/ci-release.yaml b/.github/workflows/ci-release.yaml index 6b1a71740..740ea2e58 100644 --- a/.github/workflows/ci-release.yaml +++ b/.github/workflows/ci-release.yaml @@ -6,7 +6,7 @@ on: version-to-bump: type: choice required: true - description: "Select which part of the version to bump and release" + description: 'Select which part of the version to bump and release' options: - patch - minor @@ -41,7 +41,7 @@ jobs: - name: Create GitHub Release env: GITHUB_TOKEN: ${{ secrets.BOT_RELEASE_TOKEN }} - GH_OPTS: "" + GH_OPTS: '' run: |- VERSION=`jq -r '.version' package.json` diff --git a/.github/workflows/codeql-analysis.yaml b/.github/workflows/codeql-analysis.yaml index 1433cf3af..dd1279d6c 100644 --- a/.github/workflows/codeql-analysis.yaml +++ b/.github/workflows/codeql-analysis.yaml @@ -1,4 +1,4 @@ -name: "CodeQL" +name: 'CodeQL' on: push: @@ -25,34 +25,34 @@ jobs: # https://docs.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#overriding-automatic-language-detection steps: - - name: Checkout repository - uses: actions/checkout@v4.1.1 - - # Initializes the CodeQL tools for scanning. - - name: Initialize CodeQL - uses: github/codeql-action/init@v3 - with: - languages: ${{ matrix.language }} - # If you wish to specify custom queries, you can do so here or in a config file. - # By default, queries listed here will override any specified in a config file. - # Prefix the list here with "+" to use these queries and those in the config file. - # queries: ./path/to/local/query, your-org/your-repo/queries@main - - # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). - # If this step fails, then you should remove it and run the build manually (see below) - - name: Autobuild - uses: github/codeql-action/autobuild@v3 - - # ℹī¸ Command-line programs to run using the OS shell. - # 📚 https://git.io/JvXDl - - # ✏ī¸ If the Autobuild fails above, remove it and uncomment the following three lines - # and modify them (or add more) to build your code if your project - # uses a compiled language - - #- run: | - # make bootstrap - # make release - - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v3 + - name: Checkout repository + uses: actions/checkout@v4.1.1 + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v3 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + # queries: ./path/to/local/query, your-org/your-repo/queries@main + + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@v3 + + # ℹī¸ Command-line programs to run using the OS shell. + # 📚 https://git.io/JvXDl + + # ✏ī¸ If the Autobuild fails above, remove it and uncomment the following three lines + # and modify them (or add more) to build your code if your project + # uses a compiled language + + #- run: | + # make bootstrap + # make release + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v3 diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml new file mode 100644 index 000000000..6dc538f3d --- /dev/null +++ b/.github/workflows/lint.yaml @@ -0,0 +1,34 @@ +name: Lint +on: + pull_request: + +permissions: + contents: read + +env: + NODE_VERSION: 18 + +jobs: + lint: + runs-on: ubuntu-latest + + steps: + - name: Checkout Repository + uses: actions/checkout@v4.1.1 + + - name: Set up NodeJs + uses: actions/setup-node@v4.0.2 + with: + node-version: ${{ env.NODE_VERSION }} + cache: 'npm' + + - name: Install Dependencies + run: npm install + + - name: Lint Prettier + run: npm run prettier + continue-on-error: false + + - name: Lint ESLint + run: npm run eslint + continue-on-error: true diff --git a/.postcssrc.js b/.postcssrc.js index 100cc0124..a47ef4f95 100644 --- a/.postcssrc.js +++ b/.postcssrc.js @@ -1,5 +1,5 @@ module.exports = { plugins: { - autoprefixer: {} - } -} \ No newline at end of file + autoprefixer: {}, + }, +}; diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 000000000..baae6d102 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,6 @@ +{ + "singleQuote": true, + "tabWidth": 2, + "semi": true, + "trailingComma": "all" +} diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 000000000..64ca62244 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,8 @@ +{ + "recommendations": [ + "dbaeumer.vscode-eslint", + "esbenp.prettier-vscode", + "editorconfig.editorconfig", + "github.vscode-github-actions" + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..dd8484ba0 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,11 @@ +{ + "[javascript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[vue]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "editor.codeActionsOnSave": { + "source.fixAll.eslint": "explicit" + } +} diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 2a97dd0df..1147e63ed 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -8,19 +8,19 @@ In the interest of fostering an open and welcoming environment, we as contributo Examples of behavior that contributes to creating a positive environment include: -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members +- Using welcoming and inclusive language +- Being respectful of differing viewpoints and experiences +- Gracefully accepting constructive criticism +- Focusing on what is best for the community +- Showing empathy towards other community members Examples of unacceptable behavior by participants include: -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting +- The use of sexualized language or imagery and unwelcome sexual attention or advances +- Trolling, insulting/derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or electronic address, without explicit permission +- Other conduct which could reasonably be considered inappropriate in a professional setting ## Our Responsibilities diff --git a/README.md b/README.md index 01e716f14..70e2ef73e 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,18 @@ [![Build Status](https://github.com/DependencyTrack/frontend/actions/workflows/ci-build.yaml/badge.svg)](https://github.com/DependencyTrack/frontend/actions?workflow=Build+CI) -[![Codacy Badge](https://app.codacy.com/project/badge/Grade/364443f9f30c4b70b56e5be76c9e079c)](https://www.codacy.com/gh/DependencyTrack/frontend/dashboard?utm_source=github.com&utm_medium=referral&utm_content=DependencyTrack/frontend&utm_campaign=Badge_Grade) +[![Codacy Badge](https://app.codacy.com/project/badge/Grade/364443f9f30c4b70b56e5be76c9e079c)](https://www.codacy.com/gh/DependencyTrack/frontend/dashboard?utm_source=github.com&utm_medium=referral&utm_content=DependencyTrack/frontend&utm_campaign=Badge_Grade) [![License](https://img.shields.io/badge/license-Apache%202.0-brightgreen.svg)][License] [![Latest (including pre-releases)](https://img.shields.io/github/v/release/dependencytrack/frontend?include_prereleases)](https://github.com/DependencyTrack/frontend/releases) -Dependency-Track Front-End -========= +# Dependency-Track Front-End The Front-End is a Single Page Application (SPA) used in Dependency-Track, an open source Component Analysis platform that allows organizations to identify and reduce risk in the software supply chain. The project is built with: -* Vue.js -* Bootstrap Vue -* CoreUI +- Vue.js +- Bootstrap Vue +- CoreUI
@@ -23,28 +22,29 @@ The project is built with: Always use the Front-End version that is compatible with the Dependency-Track API Server in use. -| Dependency-Track API Server | Front-End | -|:-----|:-----| -| v4.2 | v4.2 | -| v4.1 | v1.2 | -| v4.0 | v1.1 | -| v3.8 | v1.0 | -| v1.0 - v3.7.1 | Not supported | +| Dependency-Track API Server | Front-End | +| :-------------------------- | :------------ | +| v4.2 | v4.2 | +| v4.1 | v1.2 | +| v4.0 | v1.1 | +| v3.8 | v1.0 | +| v1.0 - v3.7.1 | Not supported | Starting with Dependency-Track v4.2, the API Server and the Frontend now have the same major and minor (semantic) version. Patch versions however, may continue to be unique. ## Binary Distributions Pre-compiled distributions are available in two variants: -* [Docker container running NGINX](https://hub.docker.com/r/dependencytrack/frontend) -* [GitHub Release (zip archive)](https://github.com/DependencyTrack/frontend/releases) + +- [Docker container running NGINX](https://hub.docker.com/r/dependencytrack/frontend) +- [GitHub Release (zip archive)](https://github.com/DependencyTrack/frontend/releases) The Docker container provides the fastest, most consistent deployment option and is recommended. The Docker container includes NGINX and a pre-deployed Front-End release. ## Build Setup -``` bash +```bash # Install dependencies npm install @@ -85,8 +85,7 @@ This project supports internationalization. Currently, only English language is Note to developers: Textual labels are defined in `src/i18n/locales/{lang}.json`. Ensure that all labels are defined here and that components use i18n, not textual labels directly. -Copyright & License -------------------- +## Copyright & License Dependency-Track is Copyright (c) Steve Springett. All Rights Reserved. diff --git a/RELEASING.md b/RELEASING.md index 2b37e6541..20cc603ae 100644 --- a/RELEASING.md +++ b/RELEASING.md @@ -7,15 +7,15 @@ This document describes the process of releasing a new version of the Dependency ### Release a new major of minor version 1. Ensure the current state in `master` is ready to be released -2. Head over to the *Actions* tab in GitHub -3. Select the *Release CI* entry in the *Workflows* section +2. Head over to the _Actions_ tab in GitHub +3. Select the _Release CI_ entry in the _Workflows_ section 4. The following UI element will have a button to trigger the workflow. Once clicked, the Use workflow from dialog will appear: ![Create a release from `master`](./.github/images/release-master.png) 5. Ensure that `master` is selected in the branch dropdown 6. For the part of the version to bump, select either `major` or `minor` (see [Semantic Versioning](https://semver.org/)) -7. Finally, once all inputs are checked press the *Run Workflow* button +7. Finally, once all inputs are checked press the _Run Workflow_ button 8. **Manually** create a release branch by selecting `master` in the branch dropdown and entering the branch name: ![Create a release branch](./.github/images/release-branch.png) @@ -23,12 +23,12 @@ This document describes the process of releasing a new version of the Dependency ### Release a new bugfix version 1. Ensure the current state in the release branch is ready to be released -2. Head over to the *Actions* tab in GitHub -3. Select the *Release CI* entry in the *Workflows* section +2. Head over to the _Actions_ tab in GitHub +3. Select the _Release CI_ entry in the _Workflows_ section 4. The following UI element will have a button to trigger the workflow. Once clicked, the Use workflow from dialog will appear: ![Create a release from a release branch](./.github/images/release-releasebranch.png) 5. Ensure that a release branch (e.g. `4.6.x`) is selected in the branch dropdown 6. For the part of the version to bump, select `patch` (see [Semantic Versioning](https://semver.org/)) -7. Finally, once all inputs are checked press the *Run Workflow* button +7. Finally, once all inputs are checked press the _Run Workflow_ button diff --git a/babel.config.js b/babel.config.js index 8a159c8c3..bcdde9806 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,9 +1,12 @@ module.exports = { presets: [ ['@vue/babel-preset-jsx'], - ['@babel/preset-env', { - 'useBuiltIns': 'entry', - 'corejs': '3.33' - }] - ] -} + [ + '@babel/preset-env', + { + useBuiltIns: 'entry', + corejs: '3.33', + }, + ], + ], +}; diff --git a/package-lock.json b/package-lock.json index 0ee7031c2..9c2c2fab7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -52,18 +52,23 @@ }, "devDependencies": { "@babel/core": "7.23.2", + "@babel/eslint-parser": "^7.23.10", "@cyclonedx/cyclonedx-npm": "^1.16.1", "@cyclonedx/webpack-plugin": "2.0.0", "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0", "@vue/babel-preset-jsx": "^1.4.0", "@vue/cli-plugin-babel": "5.0.8", - "@vue/cli-plugin-eslint": "3.12.1", "@vue/cli-service": "3.12.1", "@vue/runtime-dom": "^3.4.15", "copy-webpack-plugin": "5.1.2", "cross-env": "^7.0.3", + "eslint": "^8.57.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.1.3", + "eslint-plugin-vue": "^9.22.0", "growl": "1.10.5", "https-proxy-agent": "2.2.4", + "prettier": "^3.2.5", "sass": "1.49.7", "sass-loader": "8.0.2", "uuid": "9.0.1", @@ -74,6 +79,15 @@ "npm": ">= 9" } }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@achrinza/node-ipc": { "version": "9.2.7", "resolved": "https://registry.npmjs.org/@achrinza/node-ipc/-/node-ipc-9.2.7.tgz", @@ -153,6 +167,33 @@ "url": "https://opencollective.com/babel" } }, + "node_modules/@babel/eslint-parser": { + "version": "7.23.10", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.23.10.tgz", + "integrity": "sha512-3wSYDPZVnhseRnxRJH6ZVTNknBz76AEnyC+AYYhasjP3Yy23qz0ERR7Fcd2SHmYuSFJ2kY9gaaDd3vyqU09eSw==", + "dev": true, + "dependencies": { + "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.0", + "eslint": "^7.5.0 || ^8.0.0" + } + }, + "node_modules/@babel/eslint-parser/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/@babel/generator": { "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", @@ -2123,6 +2164,203 @@ "webpack": ">=4.0.0" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@eslint/eslintrc/node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@eslint/eslintrc/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/@hapi/address": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", @@ -2182,6 +2420,39 @@ "@hapi/hoek": "^9.0.0" } }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "dev": true + }, "node_modules/@intervolga/optimize-cssnano-plugin": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/@intervolga/optimize-cssnano-plugin/-/optimize-cssnano-plugin-1.0.6.tgz", @@ -2384,6 +2655,15 @@ "node": ">=4" } }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { + "version": "5.1.1-v1", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", + "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", + "dev": true, + "dependencies": { + "eslint-scope": "5.1.1" + } + }, "node_modules/@node-ipc/js-queue": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@node-ipc/js-queue/-/js-queue-2.0.3.tgz", @@ -2396,6 +2676,28 @@ "node": ">=1.0.0" } }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.scandir/node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, "node_modules/@nodelib/fs.stat": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", @@ -2405,6 +2707,19 @@ "node": ">= 6" } }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/@nuxt/opencollective": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@nuxt/opencollective/-/opencollective-0.3.3.tgz", @@ -2529,6 +2844,18 @@ "node": ">=8.0" } }, + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, "node_modules/@sideway/address": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", @@ -2724,6 +3051,12 @@ "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==", "dev": true }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, "node_modules/@vue/babel-helper-vue-jsx-merge-props": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.4.0.tgz", @@ -3358,65 +3691,6 @@ "node": ">=10.13.0" } }, - "node_modules/@vue/cli-plugin-eslint": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/@vue/cli-plugin-eslint/-/cli-plugin-eslint-3.12.1.tgz", - "integrity": "sha512-tVTZlEZsy3sQbO4LLWFK11yzlWwqVAqaM+IY+BeWHITBzEJKh2KmouG+x6x/reXiU3qROsMJ4Ej3Hs8buSMWyQ==", - "dev": true, - "dependencies": { - "@vue/cli-shared-utils": "^3.12.1", - "babel-eslint": "^10.0.1", - "eslint-loader": "^2.1.2", - "globby": "^9.2.0", - "webpack": "^4.0.0", - "yorkie": "^2.0.0" - }, - "optionalDependencies": { - "eslint": "^4.19.1", - "eslint-plugin-vue": "^4.7.1" - } - }, - "node_modules/@vue/cli-plugin-eslint/node_modules/@vue/cli-shared-utils": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-3.12.1.tgz", - "integrity": "sha512-jFblzRFjutGwu5utOKdVlPlsbA1lBUNNQlAThzNqej+JtTKJjnvjlhjKX0Gq0oOny5FjKWhoyfQ74p9h1qE6JQ==", - "dev": true, - "dependencies": { - "@hapi/joi": "^15.0.1", - "chalk": "^2.4.1", - "execa": "^1.0.0", - "launch-editor": "^2.2.1", - "lru-cache": "^5.1.1", - "node-ipc": "^9.1.1", - "open": "^6.3.0", - "ora": "^3.4.0", - "request": "^2.87.0", - "request-promise-native": "^1.0.7", - "semver": "^6.0.0", - "string.prototype.padstart": "^3.0.0" - } - }, - "node_modules/@vue/cli-plugin-eslint/node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@vue/cli-plugin-eslint/node_modules/open": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", - "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", - "dev": true, - "dependencies": { - "is-wsl": "^1.1.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@vue/cli-service": { "version": "3.12.1", "resolved": "https://registry.npmjs.org/@vue/cli-service/-/cli-service-3.12.1.tgz", @@ -4133,6 +4407,22 @@ "yallist": "^2.1.2" } }, + "node_modules/@vue/component-compiler-utils/node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "optional": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/@vue/component-compiler-utils/node_modules/yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", @@ -4450,27 +4740,6 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha512-AU7pnZkguthwBjKgCg6998ByQNIMjbuDQZ8bb78QAFZwPfmKia8AIzgY/gWgqCjnht8JLdXmB4YxA0KaV60ncQ==", - "dev": true, - "dependencies": { - "acorn": "^3.0.4" - } - }, - "node_modules/acorn-jsx/node_modules/acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha512-OLUyIIZ7mF5oaAUT1w0TFqQS81q3saT46x8t7ukpPjMNk+nbs4ZHhs7ToV8EWnLYLepjETXd4XaCE4uxkMeqUw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/acorn-walk": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", @@ -4608,15 +4877,6 @@ "node": ">=6" } }, - "node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/ansi-html-community": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", @@ -5078,27 +5338,6 @@ "node": ">=0.8.0" } }, - "node_modules/babel-eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", - "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", - "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - }, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "eslint": ">= 4.12.1" - } - }, "node_modules/babel-loader": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", @@ -6047,12 +6286,6 @@ "node": ">=4" } }, - "node_modules/chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha512-j/Toj7f1z98Hh2cYo2BVr85EpIRWqUi7rtRSGxh/cqUjqrnJe9l9UE7IUGd2vQ2p+kSHLkSzObQPZPLUC6TQwg==", - "dev": true - }, "node_modules/chart.js": { "version": "2.9.4", "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.9.4.tgz", @@ -6184,12 +6417,6 @@ "node": ">=6.0" } }, - "node_modules/ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", - "dev": true - }, "node_modules/cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", @@ -6200,13 +6427,6 @@ "safe-buffer": "^5.0.1" } }, - "node_modules/circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "deprecated": "CircularJSON is in maintenance only, flatted is its successor.", - "dev": true - }, "node_modules/class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", @@ -6426,12 +6646,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "dev": true - }, "node_modules/clipboardy": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz", @@ -6536,16 +6750,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, "node_modules/coa": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", @@ -8090,15 +8294,15 @@ } }, "node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "dependencies": { "esutils": "^2.0.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=6.0.0" } }, "node_modules/dom-converter": { @@ -8538,117 +8742,255 @@ } }, "node_modules/eslint": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", - "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", - "dev": true, - "dependencies": { - "ajv": "^5.3.0", - "babel-code-frame": "^6.22.0", - "chalk": "^2.1.0", - "concat-stream": "^1.6.0", - "cross-spawn": "^5.1.0", - "debug": "^3.1.0", - "doctrine": "^2.1.0", - "eslint-scope": "^3.7.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^3.5.4", - "esquery": "^1.0.0", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.0.1", - "ignore": "^3.3.3", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", "imurmurhash": "^0.1.4", - "inquirer": "^3.0.6", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.9.1", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.4", - "minimatch": "^3.0.2", - "mkdirp": "^0.5.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", - "progress": "^2.0.0", - "regexpp": "^1.0.1", - "require-uncached": "^1.0.3", - "semver": "^5.3.0", - "strip-ansi": "^4.0.0", - "strip-json-comments": "~2.0.1", - "table": "4.0.2", - "text-table": "~0.2.0" + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": ">=4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-loader": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.2.1.tgz", - "integrity": "sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg==", - "deprecated": "This loader has been deprecated. Please use eslint-webpack-plugin", + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", + "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==", "dev": true, "dependencies": { - "loader-fs-cache": "^1.0.0", - "loader-utils": "^1.0.2", - "object-assign": "^4.0.1", - "object-hash": "^1.1.4", - "rimraf": "^2.6.1" + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.6" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" }, "peerDependencies": { - "eslint": ">=1.6.0 <7.0.0", - "webpack": ">=2.0.0 <5.0.0" + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": "*", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } } }, - "node_modules/eslint-loader/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "node_modules/eslint-plugin-vue": { + "version": "9.22.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.22.0.tgz", + "integrity": "sha512-7wCXv5zuVnBtZE/74z4yZ0CM8AjH6bk4MQGm7hZjUC2DBppKU5ioeOk5LGSg/s9a1ZJnIsdPLJpXnu1Rc+cVHg==", "dev": true, "dependencies": { - "minimist": "^1.2.0" + "@eslint-community/eslint-utils": "^4.4.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^6.0.15", + "semver": "^7.6.0", + "vue-eslint-parser": "^9.4.2", + "xml-name-validator": "^4.0.0" }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-plugin-vue/node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, "bin": { - "json5": "lib/cli.js" + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" } }, - "node_modules/eslint-loader/node_modules/loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "node_modules/eslint-plugin-vue/node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-plugin-vue/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">=4.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-plugin-vue": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-4.7.1.tgz", - "integrity": "sha512-esETKhVMI7Vdli70Wt4bvAwnZBJeM0pxVX9Yb0wWKxdCJc2EADalVYK/q2FzMw8oKN0wPMdqVCKS8kmR89recA==", + "node_modules/eslint-plugin-vue/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-vue/node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, - "optional": true, "dependencies": { - "vue-eslint-parser": "^2.0.3" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": ">=4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-vue/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint-plugin-vue/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-plugin-vue/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-plugin-vue/node_modules/vue-eslint-parser": { + "version": "9.4.2", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.2.tgz", + "integrity": "sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.6" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" }, "peerDependencies": { - "eslint": "^3.18.0 || ^4.0.0" + "eslint": ">=6.0.0" } }, + "node_modules/eslint-plugin-vue/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -8662,114 +9004,338 @@ "node": ">=8.0.0" } }, - "node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "node_modules/eslint/node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true, + "bin": { + "acorn": "bin/acorn" + }, "engines": { - "node": ">=4" + "node": ">=0.4.0" } }, - "node_modules/eslint/node_modules/ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha512-Ajr4IcMXq/2QmMkEmSvxqfLN5zGmJ92gHXAeOXq1OekoH2rfDNsgdDoL2f7QaRCy7G/E6TpxBVdRuNraMztGHw==", + "node_modules/eslint/node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/eslint/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/eslint/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "ms": "^2.1.1" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint/node_modules/eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "dependencies": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">=4.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha512-fueX787WZKCV0Is4/T2cyAdM4+x1S3MXXOAhavE1ys/W42SHAPacLTQhucja22QBYrfGw50M2sRiXPtTGv9Ymw==", - "dev": true + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } }, - "node_modules/eslint/node_modules/json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha512-4JD/Ivzg7PoW8NzdrBSr3UFwC9mHgvI7Z6z3QGBsSHgKaRTUDmyZAAKJo2UbG1kUVfS9WS8bi36N49U1xw43DA==", - "dev": true + "node_modules/eslint/node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } }, - "node_modules/eslint/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "bin": { - "semver": "bin/semver" + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" } }, - "node_modules/eslint/node_modules/strip-ansi": { + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint/node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "dependencies": { - "ansi-regex": "^3.0.0" + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/espree": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", - "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "dependencies": { - "acorn": "^5.5.0", - "acorn-jsx": "^3.0.0" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" } }, - "node_modules/espree/node_modules/acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, "bin": { - "acorn": "bin/acorn" + "node-which": "bin/node-which" }, "engines": { - "node": ">=0.4.0" + "node": ">= 8" } }, "node_modules/esprima": { @@ -9188,20 +9754,6 @@ "node": ">=0.10.0" } }, - "node_modules/external-editor": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", - "dev": true, - "dependencies": { - "chardet": "^0.4.0", - "iconv-lite": "^0.4.17", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=0.12" - } - }, "node_modules/extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", @@ -9269,6 +9821,12 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, "node_modules/fast-glob": { "version": "2.2.7", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", @@ -9304,6 +9862,15 @@ "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", "dev": true }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, "node_modules/faye-websocket": { "version": "0.11.4", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", @@ -9322,29 +9889,16 @@ "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", "dev": true }, - "node_modules/figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha512-uXP/zGzxxFvFfcZGgBIwotm+Tdc55ddPAzF7iHshP4YGaXMww7rSF9peD9D1sui5ebONg5UobsZv+FfgEpGv/w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "dependencies": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" + "flat-cache": "^3.0.4" }, "engines": { - "node": ">=0.10.0" + "node": "^10.12.0 || >=12.0.0" } }, "node_modules/file-loader": { @@ -9519,32 +10073,55 @@ } }, "node_modules/flat-cache": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", - "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "dependencies": { - "circular-json": "^0.3.1", - "graceful-fs": "^4.1.2", - "rimraf": "~2.6.2", - "write": "^0.2.1" + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" }, "engines": { - "node": ">=0.10.0" + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flat-cache/node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/flat-cache/node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" } }, "node_modules/flat-cache/node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, "node_modules/flexver": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/flexver/-/flexver-1.1.0.tgz", @@ -9736,12 +10313,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, "node_modules/functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", @@ -9994,6 +10565,12 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "devOptional": true }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, "node_modules/growl": { "version": "1.10.5", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", @@ -10802,71 +11379,6 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, - "node_modules/inquirer": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", - "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", - "dev": true, - "dependencies": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^2.0.4", - "figures": "^2.0.0", - "lodash": "^4.3.0", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rx-lite": "^4.0.8", - "rx-lite-aggregates": "^4.0.8", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" - } - }, - "node_modules/inquirer/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/internal-ip": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", @@ -11046,18 +11558,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", - "dev": true, - "dependencies": { - "ci-info": "^1.5.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, "node_modules/is-color-stop": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", @@ -11786,13 +12286,13 @@ } }, "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, "engines": { "node": ">= 0.8.0" @@ -11820,67 +12320,6 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, - "node_modules/loader-fs-cache": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz", - "integrity": "sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==", - "dev": true, - "dependencies": { - "find-cache-dir": "^0.1.1", - "mkdirp": "^0.5.1" - } - }, - "node_modules/loader-fs-cache/node_modules/find-cache-dir": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", - "integrity": "sha512-Z9XSBoNE7xQiV6MSgPuCfyMokH2K7JdpRkOYE1+mu3d4BFJtx3GW+f6Bo4q8IX6rlf5MYbLBKW0pjl2cWdkm2A==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "mkdirp": "^0.5.1", - "pkg-dir": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/loader-fs-cache/node_modules/find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", - "dev": true, - "dependencies": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/loader-fs-cache/node_modules/path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", - "dev": true, - "dependencies": { - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/loader-fs-cache/node_modules/pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha512-c6pv3OE78mcZ92ckebVDqg0aWSoKhOTbwCV6qbCWMk546mAL9pZln0+QsN/yQ7fkucd4+yJPLrCBXNt8Ruk+Eg==", - "dev": true, - "dependencies": { - "find-up": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/loader-runner": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", @@ -11957,6 +12396,12 @@ "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", "dev": true }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "node_modules/lodash.transform": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.transform/-/lodash.transform-4.6.0.tgz", @@ -12466,12 +12911,6 @@ "integrity": "sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ==", "dev": true }, - "node_modules/mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==", - "dev": true - }, "node_modules/mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", @@ -12909,15 +13348,6 @@ "node": ">=0.10.0" } }, - "node_modules/object-hash": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz", - "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==", - "dev": true, - "engines": { - "node": ">= 0.10.0" - } - }, "node_modules/object-inspect": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", @@ -13141,17 +13571,17 @@ } }, "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" }, "engines": { "node": ">= 0.8.0" @@ -13201,15 +13631,6 @@ "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", "dev": true }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", @@ -13330,6 +13751,27 @@ "no-case": "^2.2.0" } }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module/node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/parse-asn1": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", @@ -13566,15 +14008,6 @@ "node": ">=8" } }, - "node_modules/pluralize": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/popper.js": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", @@ -14252,9 +14685,9 @@ "dev": true }, "node_modules/postcss-selector-parser": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", - "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", + "version": "6.0.15", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", + "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -14305,9 +14738,9 @@ "dev": true }, "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "engines": { "node": ">= 0.8.0" @@ -14323,21 +14756,32 @@ } }, "node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", + "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", "dev": true, - "optional": true, "bin": { - "prettier": "bin-prettier.js" + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">=10.13.0" + "node": ">=14" }, "funding": { "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/prettify-xml": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/prettify-xml/-/prettify-xml-1.2.0.tgz", @@ -14369,15 +14813,6 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", @@ -14537,6 +14972,26 @@ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", "dev": true }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/railroad-diagrams": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", @@ -14820,15 +15275,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/regexpp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", - "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/regexpu-core": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", @@ -15070,49 +15516,6 @@ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, - "node_modules/require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha512-Xct+41K3twrbBHdxAgMoOS+cNcoqIjfM2/VxBF4LL2hVph7YsF8VSKyQ3BDFZwEVbok9yeDl2le/qo0S77WG2w==", - "dev": true, - "dependencies": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-uncached/node_modules/caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha512-UJiE1otjXPF5/x+T3zTnSFiTOEmJoGTD9HmBoxnCUwho61a2eSNn/VwtwuIBDAo2SEOv1AJ7ARI5gCmohFLu/g==", - "dev": true, - "dependencies": { - "callsites": "^0.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-uncached/node_modules/callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha512-Zv4Dns9IbXXmPkgRRUjAaJQgfN4xX5p6+RQFhWUqscdvvK2xK/ZL8b3IXIJsj+4sD+f24NwnWy2BY8AJ82JB0A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-uncached/node_modules/resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha512-kT10v4dhrlLNcnO084hEjvXCI1wUG9qZLoz2RogxqDQQYy7IxjI/iMUkOtQTNEh6rzHxvdQWHsJyel1pKOVCxg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -15225,6 +15628,16 @@ "node": ">= 4" } }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, "node_modules/rgb-regex": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", @@ -15259,13 +15672,27 @@ "inherits": "^2.0.1" } }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, - "engines": { - "node": ">=0.12.0" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" } }, "node_modules/run-queue": { @@ -15277,21 +15704,6 @@ "aproba": "^1.1.1" } }, - "node_modules/rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha512-Cun9QucwK6MIrp3mry/Y7hqD1oFqTYLQ4pGxaHTjIdaFDWRGGLikqp6u8LcWJnzpoALg9hap+JGk8sFIUuEGNA==", - "dev": true - }, - "node_modules/rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha512-3xPNZGW93oCjiO7PtKxRK6iOVYBWBvtf9QHDfU23Oc+dLIQmAV//UnyXV/yihv81VS/UqoQPk4NegS8EFi55Hg==", - "dev": true, - "dependencies": { - "rx-lite": "*" - } - }, "node_modules/safe-array-concat": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", @@ -15950,27 +16362,6 @@ "node": ">=6" } }, - "node_modules/slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "dev": true, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/slide": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", @@ -16749,15 +17140,6 @@ "node": ">=6" } }, - "node_modules/strip-indent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", @@ -16912,6 +17294,28 @@ "boolbase": "~1.0.0" } }, + "node_modules/synckit": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz", + "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==", + "dev": true, + "dependencies": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/synckit/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, "node_modules/synp": { "version": "1.9.10", "resolved": "https://registry.npmjs.org/synp/-/synp-1.9.10.tgz", @@ -16974,96 +17378,6 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "node_modules/table": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", - "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", - "dev": true, - "dependencies": { - "ajv": "^5.2.3", - "ajv-keywords": "^2.1.0", - "chalk": "^2.1.0", - "lodash": "^4.17.4", - "slice-ansi": "1.0.0", - "string-width": "^2.1.1" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha512-Ajr4IcMXq/2QmMkEmSvxqfLN5zGmJ92gHXAeOXq1OekoH2rfDNsgdDoL2f7QaRCy7G/E6TpxBVdRuNraMztGHw==", - "dev": true, - "dependencies": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "node_modules/table/node_modules/ajv-keywords": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", - "integrity": "sha512-ZFztHzVRdGLAzJmpUT9LNFLe1YiVOEylcaNpEutM26PVTCtOD919IMfD01CgbRouB42Dd9atjx1HseC15DgOZA==", - "dev": true, - "peerDependencies": { - "ajv": "^5.0.0" - } - }, - "node_modules/table/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/table/node_modules/fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha512-fueX787WZKCV0Is4/T2cyAdM4+x1S3MXXOAhavE1ys/W42SHAPacLTQhucja22QBYrfGw50M2sRiXPtTGv9Ymw==", - "dev": true - }, - "node_modules/table/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha512-4JD/Ivzg7PoW8NzdrBSr3UFwC9mHgvI7Z6z3QGBsSHgKaRTUDmyZAAKJo2UbG1kUVfS9WS8bi36N49U1xw43DA==", - "dev": true - }, - "node_modules/table/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/table/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/tapable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", @@ -17364,12 +17678,6 @@ "node": ">=4.0.0" } }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, "node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -17404,18 +17712,6 @@ "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==", "dev": true }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, "node_modules/to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", @@ -17561,17 +17857,29 @@ "dev": true }, "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "dependencies": { - "prelude-ls": "~1.1.2" + "prelude-ls": "^1.2.1" }, "engines": { "node": ">= 0.8.0" } }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -18197,51 +18505,6 @@ "npm": ">= 3.0.0" } }, - "node_modules/vue-eslint-parser": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz", - "integrity": "sha512-ZezcU71Owm84xVF6gfurBQUGg8WQ+WZGxgDEQu1IHFBZNx7BFZg3L1yHxrCBNNwbwFtE1GuvfJKMtb6Xuwc/Bw==", - "dev": true, - "optional": true, - "dependencies": { - "debug": "^3.1.0", - "eslint-scope": "^3.7.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^3.5.2", - "esquery": "^1.0.0", - "lodash": "^4.17.4" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": ">=3.9.0" - } - }, - "node_modules/vue-eslint-parser/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "optional": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/vue-eslint-parser/node_modules/eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==", - "dev": true, - "optional": true, - "dependencies": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/vue-functional-data-merge": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/vue-functional-data-merge/-/vue-functional-data-merge-3.1.0.tgz", @@ -19175,15 +19438,6 @@ "string-width": "^1.0.2 || 2 || 3 || 4" } }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/worker-farm": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", @@ -19257,18 +19511,6 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, - "node_modules/write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha512-CJ17OoULEKXpA5pef3qLj5AxTJ6mSt7g84he2WIskKwqFO4T97d5V7Tadl0DYDk7qyUOQD5WlUlOMChaYrhxeA==", - "dev": true, - "dependencies": { - "mkdirp": "^0.5.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/ws": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", @@ -19278,6 +19520,15 @@ "async-limiter": "~1.0.0" } }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/xmlbuilder": { "version": "15.1.1", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", @@ -19418,60 +19669,26 @@ "node": ">=10" } }, - "node_modules/yorkie": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yorkie/-/yorkie-2.0.0.tgz", - "integrity": "sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw==", + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, - "hasInstallScript": true, - "dependencies": { - "execa": "^0.8.0", - "is-ci": "^1.0.10", - "normalize-path": "^1.0.0", - "strip-indent": "^2.0.0" - }, "engines": { - "node": ">=4" - } - }, - "node_modules/yorkie/node_modules/execa": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", - "integrity": "sha512-zDWS+Rb1E8BlqqhALSt9kUhss8Qq4nN3iof3gsOdyINksElaPyNBtKUMTR62qhvgVWR0CqCX7sdnKe4MnUbFEA==", - "dev": true, - "dependencies": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "node": ">=10" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/yorkie/node_modules/get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/yorkie/node_modules/normalize-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz", - "integrity": "sha512-7WyT0w8jhpDStXRq5836AMmihQwq2nrUVQrgjvUo/p/NZf9uy/MeJ246lBJVmWuYXMlJuG9BNZHF0hWjfTbQUA==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } } }, "dependencies": { + "@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true + }, "@achrinza/node-ipc": { "version": "9.2.7", "resolved": "https://registry.npmjs.org/@achrinza/node-ipc/-/node-ipc-9.2.7.tgz", @@ -19532,6 +19749,25 @@ "semver": "^6.3.1" } }, + "@babel/eslint-parser": { + "version": "7.23.10", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.23.10.tgz", + "integrity": "sha512-3wSYDPZVnhseRnxRJH6ZVTNknBz76AEnyC+AYYhasjP3Yy23qz0ERR7Fcd2SHmYuSFJ2kY9gaaDd3vyqU09eSw==", + "dev": true, + "requires": { + "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.1" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, "@babel/generator": { "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", @@ -20888,6 +21124,136 @@ "read-pkg-up": "6.0.0" } }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true + } + } + }, + "@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true + }, + "@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true + }, + "espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "requires": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + } + }, + "globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + } + } + }, + "@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true + }, "@hapi/address": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", @@ -20944,6 +21310,29 @@ "@hapi/hoek": "^9.0.0" } }, + "@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "dev": true + }, "@intervolga/optimize-cssnano-plugin": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/@intervolga/optimize-cssnano-plugin/-/optimize-cssnano-plugin-1.0.6.tgz", @@ -21108,6 +21497,15 @@ "glob-to-regexp": "^0.3.0" } }, + "@nicolo-ribaudo/eslint-scope-5-internals": { + "version": "5.1.1-v1", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", + "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", + "dev": true, + "requires": { + "eslint-scope": "5.1.1" + } + }, "@node-ipc/js-queue": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@node-ipc/js-queue/-/js-queue-2.0.3.tgz", @@ -21117,12 +21515,40 @@ "easy-stack": "1.0.1" } }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "dependencies": { + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + } + } + }, "@nodelib/fs.stat": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", "dev": true }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, "@nuxt/opencollective": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@nuxt/opencollective/-/opencollective-0.3.3.tgz", @@ -21209,6 +21635,12 @@ "integrity": "sha512-T8TbSnGsxo6TDBJx/Sgv/BlVJL3tshxZP7Aq5R1mSnM5OcHY2dQaxLMu2+E8u3gN0MLOzdjurqN4ZRVuzQycOQ==", "dev": true }, + "@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true + }, "@sideway/address": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", @@ -21376,6 +21808,12 @@ "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==", "dev": true }, + "@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, "@vue/babel-helper-vue-jsx-merge-props": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.4.0.tgz", @@ -21864,59 +22302,6 @@ } } }, - "@vue/cli-plugin-eslint": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/@vue/cli-plugin-eslint/-/cli-plugin-eslint-3.12.1.tgz", - "integrity": "sha512-tVTZlEZsy3sQbO4LLWFK11yzlWwqVAqaM+IY+BeWHITBzEJKh2KmouG+x6x/reXiU3qROsMJ4Ej3Hs8buSMWyQ==", - "dev": true, - "requires": { - "@vue/cli-shared-utils": "^3.12.1", - "babel-eslint": "^10.0.1", - "eslint": "^4.19.1", - "eslint-loader": "^2.1.2", - "eslint-plugin-vue": "^4.7.1", - "globby": "^9.2.0", - "webpack": "^4.0.0", - "yorkie": "^2.0.0" - }, - "dependencies": { - "@vue/cli-shared-utils": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-3.12.1.tgz", - "integrity": "sha512-jFblzRFjutGwu5utOKdVlPlsbA1lBUNNQlAThzNqej+JtTKJjnvjlhjKX0Gq0oOny5FjKWhoyfQ74p9h1qE6JQ==", - "dev": true, - "requires": { - "@hapi/joi": "^15.0.1", - "chalk": "^2.4.1", - "execa": "^1.0.0", - "launch-editor": "^2.2.1", - "lru-cache": "^5.1.1", - "node-ipc": "^9.1.1", - "open": "^6.3.0", - "ora": "^3.4.0", - "request": "^2.87.0", - "request-promise-native": "^1.0.7", - "semver": "^6.0.0", - "string.prototype.padstart": "^3.0.0" - } - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "dev": true - }, - "open": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", - "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", - "dev": true, - "requires": { - "is-wsl": "^1.1.0" - } - } - } - }, "@vue/cli-service": { "version": "3.12.1", "resolved": "https://registry.npmjs.org/@vue/cli-service/-/cli-service-3.12.1.tgz", @@ -22510,6 +22895,13 @@ "yallist": "^2.1.2" } }, + "prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "optional": true + }, "yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", @@ -22813,23 +23205,6 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" }, - "acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha512-AU7pnZkguthwBjKgCg6998ByQNIMjbuDQZ8bb78QAFZwPfmKia8AIzgY/gWgqCjnht8JLdXmB4YxA0KaV60ncQ==", - "dev": true, - "requires": { - "acorn": "^3.0.4" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha512-OLUyIIZ7mF5oaAUT1w0TFqQS81q3saT46x8t7ukpPjMNk+nbs4ZHhs7ToV8EWnLYLepjETXd4XaCE4uxkMeqUw==", - "dev": true - } - } - }, "acorn-walk": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", @@ -22934,12 +23309,6 @@ "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", "dev": true }, - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, "ansi-html-community": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", @@ -23298,20 +23667,6 @@ } } }, - "babel-eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", - "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - } - }, "babel-loader": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", @@ -24066,12 +24421,6 @@ "supports-color": "^5.3.0" } }, - "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha512-j/Toj7f1z98Hh2cYo2BVr85EpIRWqUi7rtRSGxh/cqUjqrnJe9l9UE7IUGd2vQ2p+kSHLkSzObQPZPLUC6TQwg==", - "dev": true - }, "chart.js": { "version": "2.9.4", "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.9.4.tgz", @@ -24176,12 +24525,6 @@ "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", "dev": true }, - "ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", - "dev": true - }, "cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", @@ -24192,12 +24535,6 @@ "safe-buffer": "^5.0.1" } }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true - }, "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", @@ -24361,12 +24698,6 @@ "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", "dev": true }, - "cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "dev": true - }, "clipboardy": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz", @@ -24449,12 +24780,6 @@ "mimic-response": "^1.0.0" } }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true - }, "coa": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", @@ -25692,9 +26017,9 @@ } }, "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "requires": { "esutils": "^2.0.2" @@ -26064,162 +26389,390 @@ "dev": true }, "eslint": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", - "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", - "dev": true, - "requires": { - "ajv": "^5.3.0", - "babel-code-frame": "^6.22.0", - "chalk": "^2.1.0", - "concat-stream": "^1.6.0", - "cross-spawn": "^5.1.0", - "debug": "^3.1.0", - "doctrine": "^2.1.0", - "eslint-scope": "^3.7.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^3.5.4", - "esquery": "^1.0.0", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.0.1", - "ignore": "^3.3.3", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", "imurmurhash": "^0.1.4", - "inquirer": "^3.0.6", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.9.1", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.4", - "minimatch": "^3.0.2", - "mkdirp": "^0.5.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", - "progress": "^2.0.0", - "regexpp": "^1.0.1", - "require-uncached": "^1.0.3", - "semver": "^5.3.0", - "strip-ansi": "^4.0.0", - "strip-json-comments": "~2.0.1", - "table": "4.0.2", - "text-table": "~0.2.0" + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" }, "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha512-Ajr4IcMXq/2QmMkEmSvxqfLN5zGmJ92gHXAeOXq1OekoH2rfDNsgdDoL2f7QaRCy7G/E6TpxBVdRuNraMztGHw==", + "acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "color-convert": "^2.0.1" } }, - "ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "ms": "^2.1.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "color-name": "~1.1.4" } }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha512-fueX787WZKCV0Is4/T2cyAdM4+x1S3MXXOAhavE1ys/W42SHAPacLTQhucja22QBYrfGw50M2sRiXPtTGv9Ymw==", + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha512-4JD/Ivzg7PoW8NzdrBSr3UFwC9mHgvI7Z6z3QGBsSHgKaRTUDmyZAAKJo2UbG1kUVfS9WS8bi36N49U1xw43DA==", + "eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true }, - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "requires": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, - "strip-ansi": { + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "p-limit": "^3.0.2" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" } } } }, - "eslint-loader": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.2.1.tgz", - "integrity": "sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg==", + "eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "requires": {} + }, + "eslint-plugin-prettier": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", + "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==", "dev": true, "requires": { - "loader-fs-cache": "^1.0.0", - "loader-utils": "^1.0.2", - "object-assign": "^4.0.1", - "object-hash": "^1.1.4", - "rimraf": "^2.6.1" + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.6" + } + }, + "eslint-plugin-vue": { + "version": "9.22.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.22.0.tgz", + "integrity": "sha512-7wCXv5zuVnBtZE/74z4yZ0CM8AjH6bk4MQGm7hZjUC2DBppKU5ioeOk5LGSg/s9a1ZJnIsdPLJpXnu1Rc+cVHg==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.4.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^6.0.15", + "semver": "^7.6.0", + "vue-eslint-parser": "^9.4.2", + "xml-name-validator": "^4.0.0" }, "dependencies": { - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "requires": { - "minimist": "^1.2.0" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" } }, - "loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true + }, + "espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "vue-eslint-parser": { + "version": "9.4.2", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.2.tgz", + "integrity": "sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==", + "dev": true, + "requires": { + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.6" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true } } }, - "eslint-plugin-vue": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-4.7.1.tgz", - "integrity": "sha512-esETKhVMI7Vdli70Wt4bvAwnZBJeM0pxVX9Yb0wWKxdCJc2EADalVYK/q2FzMw8oKN0wPMdqVCKS8kmR89recA==", - "dev": true, - "optional": true, - "requires": { - "vue-eslint-parser": "^2.0.3" - } - }, "eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -26230,30 +26783,6 @@ "estraverse": "^4.1.1" } }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - }, - "espree": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", - "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", - "dev": true, - "requires": { - "acorn": "^5.5.0", - "acorn-jsx": "^3.0.0" - }, - "dependencies": { - "acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", - "dev": true - } - } - }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -26582,17 +27111,6 @@ "is-extendable": "^1.0.1" } }, - "external-editor": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", - "dev": true, - "requires": { - "chardet": "^0.4.0", - "iconv-lite": "^0.4.17", - "tmp": "^0.0.33" - } - }, "extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", @@ -26647,6 +27165,12 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, "fast-glob": { "version": "2.2.7", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", @@ -26679,6 +27203,15 @@ "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", "dev": true }, + "fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, "faye-websocket": { "version": "0.11.4", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", @@ -26694,23 +27227,13 @@ "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", "dev": true }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha512-uXP/zGzxxFvFfcZGgBIwotm+Tdc55ddPAzF7iHshP4YGaXMww7rSF9peD9D1sui5ebONg5UobsZv+FfgEpGv/w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" + "flat-cache": "^3.0.4" } }, "file-loader": { @@ -26852,21 +27375,35 @@ } }, "flat-cache": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", - "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "requires": { - "circular-json": "^0.3.1", - "graceful-fs": "^4.1.2", - "rimraf": "~2.6.2", - "write": "^0.2.1" + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" }, "dependencies": { + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "requires": { + "json-buffer": "3.0.1" + } + }, "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { "glob": "^7.1.3" @@ -26874,6 +27411,12 @@ } } }, + "flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, "flexver": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/flexver/-/flexver-1.1.0.tgz", @@ -27018,12 +27561,6 @@ "functions-have-names": "^1.2.2" } }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, "functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", @@ -27223,6 +27760,12 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "devOptional": true }, + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, "growl": { "version": "1.10.5", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", @@ -27848,61 +28391,6 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, - "inquirer": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", - "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", - "dev": true, - "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^2.0.4", - "figures": "^2.0.0", - "lodash": "^4.3.0", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rx-lite": "^4.0.8", - "rx-lite-aggregates": "^4.0.8", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, "internal-ip": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", @@ -28036,15 +28524,6 @@ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true }, - "is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", - "dev": true, - "requires": { - "ci-info": "^1.5.0" - } - }, "is-color-stop": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", @@ -28602,13 +29081,13 @@ } }, "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" } }, "libxmljs2": { @@ -28629,57 +29108,6 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, - "loader-fs-cache": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz", - "integrity": "sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==", - "dev": true, - "requires": { - "find-cache-dir": "^0.1.1", - "mkdirp": "^0.5.1" - }, - "dependencies": { - "find-cache-dir": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", - "integrity": "sha512-Z9XSBoNE7xQiV6MSgPuCfyMokH2K7JdpRkOYE1+mu3d4BFJtx3GW+f6Bo4q8IX6rlf5MYbLBKW0pjl2cWdkm2A==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "mkdirp": "^0.5.1", - "pkg-dir": "^1.0.0" - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha512-c6pv3OE78mcZ92ckebVDqg0aWSoKhOTbwCV6qbCWMk546mAL9pZln0+QsN/yQ7fkucd4+yJPLrCBXNt8Ruk+Eg==", - "dev": true, - "requires": { - "find-up": "^1.0.0" - } - } - } - }, "loader-runner": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", @@ -28747,6 +29175,12 @@ "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", "dev": true }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "lodash.transform": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.transform/-/lodash.transform-4.6.0.tgz", @@ -29161,12 +29595,6 @@ "integrity": "sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ==", "dev": true }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==", - "dev": true - }, "mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", @@ -29529,12 +29957,6 @@ } } }, - "object-hash": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz", - "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==", - "dev": true - }, "object-inspect": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", @@ -29697,17 +30119,17 @@ } }, "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" } }, "ora": { @@ -29747,12 +30169,6 @@ "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", "dev": true }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true - }, "p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", @@ -29846,6 +30262,23 @@ "no-case": "^2.2.0" } }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + } + } + }, "parse-asn1": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", @@ -30041,12 +30474,6 @@ "find-up": "^4.0.0" } }, - "pluralize": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", - "dev": true - }, "popper.js": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", @@ -30635,9 +31062,9 @@ } }, "postcss-selector-parser": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", - "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", + "version": "6.0.15", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", + "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", "dev": true, "requires": { "cssesc": "^3.0.0", @@ -30681,9 +31108,9 @@ "dev": true }, "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, "prepend-http": { @@ -30693,11 +31120,19 @@ "dev": true }, "prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", + "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", "dev": true, - "optional": true + "requires": { + "fast-diff": "^1.1.2" + } }, "prettify-xml": { "version": "1.2.0", @@ -30727,12 +31162,6 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, "promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", @@ -30873,6 +31302,12 @@ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", "dev": true }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, "railroad-diagrams": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", @@ -31111,12 +31546,6 @@ "functions-have-names": "^1.2.3" } }, - "regexpp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", - "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", - "dev": true - }, "regexpu-core": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", @@ -31304,39 +31733,6 @@ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha512-Xct+41K3twrbBHdxAgMoOS+cNcoqIjfM2/VxBF4LL2hVph7YsF8VSKyQ3BDFZwEVbok9yeDl2le/qo0S77WG2w==", - "dev": true, - "requires": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" - }, - "dependencies": { - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha512-UJiE1otjXPF5/x+T3zTnSFiTOEmJoGTD9HmBoxnCUwho61a2eSNn/VwtwuIBDAo2SEOv1AJ7ARI5gCmohFLu/g==", - "dev": true, - "requires": { - "callsites": "^0.2.0" - } - }, - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha512-Zv4Dns9IbXXmPkgRRUjAaJQgfN4xX5p6+RQFhWUqscdvvK2xK/ZL8b3IXIJsj+4sD+f24NwnWy2BY8AJ82JB0A==", - "dev": true - }, - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha512-kT10v4dhrlLNcnO084hEjvXCI1wUG9qZLoz2RogxqDQQYy7IxjI/iMUkOtQTNEh6rzHxvdQWHsJyel1pKOVCxg==", - "dev": true - } - } - }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -31423,6 +31819,12 @@ "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "dev": true }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, "rgb-regex": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", @@ -31454,11 +31856,14 @@ "inherits": "^2.0.1" } }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } }, "run-queue": { "version": "1.0.3", @@ -31469,21 +31874,6 @@ "aproba": "^1.1.1" } }, - "rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha512-Cun9QucwK6MIrp3mry/Y7hqD1oFqTYLQ4pGxaHTjIdaFDWRGGLikqp6u8LcWJnzpoALg9hap+JGk8sFIUuEGNA==", - "dev": true - }, - "rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha512-3xPNZGW93oCjiO7PtKxRK6iOVYBWBvtf9QHDfU23Oc+dLIQmAV//UnyXV/yihv81VS/UqoQPk4NegS8EFi55Hg==", - "dev": true, - "requires": { - "rx-lite": "*" - } - }, "safe-array-concat": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", @@ -32014,23 +32404,6 @@ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", "dev": true }, - "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true - } - } - }, "slide": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", @@ -32670,12 +33043,6 @@ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true }, - "strip-indent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==", - "dev": true - }, "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", @@ -32805,6 +33172,24 @@ } } }, + "synckit": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz", + "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==", + "dev": true, + "requires": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + } + } + }, "synp": { "version": "1.9.10", "resolved": "https://registry.npmjs.org/synp/-/synp-1.9.10.tgz", @@ -32854,84 +33239,6 @@ } } }, - "table": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", - "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", - "dev": true, - "requires": { - "ajv": "^5.2.3", - "ajv-keywords": "^2.1.0", - "chalk": "^2.1.0", - "lodash": "^4.17.4", - "slice-ansi": "1.0.0", - "string-width": "^2.1.1" - }, - "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha512-Ajr4IcMXq/2QmMkEmSvxqfLN5zGmJ92gHXAeOXq1OekoH2rfDNsgdDoL2f7QaRCy7G/E6TpxBVdRuNraMztGHw==", - "dev": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "ajv-keywords": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", - "integrity": "sha512-ZFztHzVRdGLAzJmpUT9LNFLe1YiVOEylcaNpEutM26PVTCtOD919IMfD01CgbRouB42Dd9atjx1HseC15DgOZA==", - "dev": true, - "requires": {} - }, - "ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha512-fueX787WZKCV0Is4/T2cyAdM4+x1S3MXXOAhavE1ys/W42SHAPacLTQhucja22QBYrfGw50M2sRiXPtTGv9Ymw==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha512-4JD/Ivzg7PoW8NzdrBSr3UFwC9mHgvI7Z6z3QGBsSHgKaRTUDmyZAAKJo2UbG1kUVfS9WS8bi36N49U1xw43DA==", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, "tapable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", @@ -33165,12 +33472,6 @@ } } }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, "through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -33202,15 +33503,6 @@ "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==", "dev": true }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, "to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", @@ -33331,14 +33623,20 @@ "dev": true }, "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "requires": { - "prelude-ls": "~1.1.2" + "prelude-ls": "^1.2.1" } }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -33837,44 +34135,6 @@ "vue": "^2.1.0" } }, - "vue-eslint-parser": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz", - "integrity": "sha512-ZezcU71Owm84xVF6gfurBQUGg8WQ+WZGxgDEQu1IHFBZNx7BFZg3L1yHxrCBNNwbwFtE1GuvfJKMtb6Xuwc/Bw==", - "dev": true, - "optional": true, - "requires": { - "debug": "^3.1.0", - "eslint-scope": "^3.7.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^3.5.2", - "esquery": "^1.0.0", - "lodash": "^4.17.4" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==", - "dev": true, - "optional": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - } - } - }, "vue-functional-data-merge": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/vue-functional-data-merge/-/vue-functional-data-merge-3.1.0.tgz", @@ -34632,12 +34892,6 @@ "string-width": "^1.0.2 || 2 || 3 || 4" } }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, "worker-farm": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", @@ -34698,15 +34952,6 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, - "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha512-CJ17OoULEKXpA5pef3qLj5AxTJ6mSt7g84he2WIskKwqFO4T97d5V7Tadl0DYDk7qyUOQD5WlUlOMChaYrhxeA==", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, "ws": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", @@ -34716,6 +34961,12 @@ "async-limiter": "~1.0.0" } }, + "xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true + }, "xmlbuilder": { "version": "15.1.1", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", @@ -34825,46 +35076,11 @@ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true }, - "yorkie": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yorkie/-/yorkie-2.0.0.tgz", - "integrity": "sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw==", - "dev": true, - "requires": { - "execa": "^0.8.0", - "is-ci": "^1.0.10", - "normalize-path": "^1.0.0", - "strip-indent": "^2.0.0" - }, - "dependencies": { - "execa": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", - "integrity": "sha512-zDWS+Rb1E8BlqqhALSt9kUhss8Qq4nN3iof3gsOdyINksElaPyNBtKUMTR62qhvgVWR0CqCX7sdnKe4MnUbFEA==", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", - "dev": true - }, - "normalize-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz", - "integrity": "sha512-7WyT0w8jhpDStXRq5836AMmihQwq2nrUVQrgjvUo/p/NZf9uy/MeJ246lBJVmWuYXMlJuG9BNZHF0hWjfTbQUA==", - "dev": true - } - } + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true } } } diff --git a/package.json b/package.json index 536897c34..1a1534b77 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,10 @@ "serve": "npm run prebuild && cross-env NODE_OPTIONS=--openssl-legacy-provider vue-cli-service serve", "prebuild": "cross-env NODE_OPTIONS=--openssl-legacy-provider node update-embedded-version.js", "build": "npm run prebuild && cross-env NODE_OPTIONS=--openssl-legacy-provider vue-cli-service build", - "lint": "vue-cli-service lint" + "eslint": "eslint . --ext .js,.vue,.json,.md,.yaml --report-unused-disable-directives", + "eslint-fix": "eslint --ext .js,.vue,.json,.md,.yaml --fix . --report-unused-disable-directives", + "prettier": "prettier --check --cache '**/*.{js,vue,json,md,yaml}'", + "prettier-fix": "prettier --write --cache '**/*.{js,vue,json,md,yaml}'" }, "dependencies": { "@coreui/coreui": "2.1.16", @@ -61,18 +64,23 @@ }, "devDependencies": { "@babel/core": "7.23.2", + "@babel/eslint-parser": "^7.23.10", "@cyclonedx/cyclonedx-npm": "^1.16.1", "@cyclonedx/webpack-plugin": "2.0.0", "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0", "@vue/babel-preset-jsx": "^1.4.0", "@vue/cli-plugin-babel": "5.0.8", - "@vue/cli-plugin-eslint": "3.12.1", "@vue/cli-service": "3.12.1", "@vue/runtime-dom": "^3.4.15", "copy-webpack-plugin": "5.1.2", "cross-env": "^7.0.3", + "eslint": "^8.57.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.1.3", + "eslint-plugin-vue": "^9.22.0", "growl": "1.10.5", "https-proxy-agent": "2.2.4", + "prettier": "^3.2.5", "sass": "1.49.7", "sass-loader": "8.0.2", "uuid": "9.0.1", @@ -92,4 +100,4 @@ "node": ">= 18", "npm": ">= 9" } -} \ No newline at end of file +} diff --git a/public/static/config.json b/public/static/config.json index d1d2d98bd..65372c445 100644 --- a/public/static/config.json +++ b/public/static/config.json @@ -5,5 +5,5 @@ "OIDC_CLIENT_ID": "", "OIDC_SCOPE": "openid email profile", "OIDC_FLOW": "code", - "OIDC_LOGIN_BUTTON_TEXT" : "" + "OIDC_LOGIN_BUTTON_TEXT": "" } diff --git a/src/App.vue b/src/App.vue index d3cd4c4aa..380c56467 100644 --- a/src/App.vue +++ b/src/App.vue @@ -3,136 +3,146 @@ diff --git a/src/containers/DefaultContainer.vue b/src/containers/DefaultContainer.vue index dd7feda0b..acee1809a 100644 --- a/src/containers/DefaultContainer.vue +++ b/src/containers/DefaultContainer.vue @@ -1,63 +1,72 @@ diff --git a/src/containers/DefaultFooter.vue b/src/containers/DefaultFooter.vue index ed868705d..d596dd8ef 100644 --- a/src/containers/DefaultFooter.vue +++ b/src/containers/DefaultFooter.vue @@ -4,29 +4,30 @@
- {{ dtrack.application }}  + {{ dtrack.application }}  v{{ dtrack.version }}
diff --git a/src/containers/DefaultHeader.vue b/src/containers/DefaultHeader.vue index be03e951b..55f47d8f2 100644 --- a/src/containers/DefaultHeader.vue +++ b/src/containers/DefaultHeader.vue @@ -1,24 +1,31 @@ diff --git a/src/containers/DefaultHeaderProfileDropdown.vue b/src/containers/DefaultHeaderProfileDropdown.vue index 368e9c38b..e34b8d2c5 100644 --- a/src/containers/DefaultHeaderProfileDropdown.vue +++ b/src/containers/DefaultHeaderProfileDropdown.vue @@ -1,68 +1,74 @@ diff --git a/src/directives/VuePermission.js b/src/directives/VuePermission.js index 51e4e2a06..fcc24165a 100644 --- a/src/directives/VuePermission.js +++ b/src/directives/VuePermission.js @@ -1,35 +1,35 @@ /* -* Permissions Vue Directive -*/ -import Vue from 'vue' -import {hasPermission, decodeToken, getToken} from '../shared/permissions' + * Permissions Vue Directive + */ +import Vue from 'vue'; +import { hasPermission, decodeToken, getToken } from '../shared/permissions'; -Vue.directive('permission', function(el, binding) { +Vue.directive('permission', function (el, binding) { let decodedToken = decodeToken(getToken()); if (Array.isArray(binding.value)) { let permitted = false; - if (binding.arg === "and") { + if (binding.arg === 'and') { // This is the AND case. If a user has ALL of the specified permissions, permitted will be true permitted = true; binding.value.forEach(function (b) { - if(! hasPermission(b, decodedToken)) { + if (!hasPermission(b, decodedToken)) { permitted = false; } }); - } else if (binding.arg === "or") { + } else if (binding.arg === 'or') { // This is the OR case. If a user has one or more of the specified permissions, permitted will be true binding.value.forEach(function (b) { - if(hasPermission(b, decodedToken)) { + if (hasPermission(b, decodedToken)) { permitted = true; } }); } if (!permitted) { - el.style.display = "none"; + el.style.display = 'none'; } } else { - if (! hasPermission(binding.value, decodedToken)) { - el.style.display = "none"; + if (!hasPermission(binding.value, decodedToken)) { + el.style.display = 'none'; } } }); diff --git a/src/forms/BInputGroupFormDatepicker.vue b/src/forms/BInputGroupFormDatepicker.vue index 2967ce8dd..78be41179 100644 --- a/src/forms/BInputGroupFormDatepicker.vue +++ b/src/forms/BInputGroupFormDatepicker.vue @@ -1,29 +1,48 @@ diff --git a/src/forms/BInputGroupFormInput.vue b/src/forms/BInputGroupFormInput.vue index 26f967b79..885b61c4d 100644 --- a/src/forms/BInputGroupFormInput.vue +++ b/src/forms/BInputGroupFormInput.vue @@ -1,7 +1,14 @@ diff --git a/src/forms/BInputGroupFormSelect.vue b/src/forms/BInputGroupFormSelect.vue index 0e338e423..e732ebb74 100644 --- a/src/forms/BInputGroupFormSelect.vue +++ b/src/forms/BInputGroupFormSelect.vue @@ -1,95 +1,114 @@ diff --git a/src/forms/BValidatedInputGroupFormInput.vue b/src/forms/BValidatedInputGroupFormInput.vue index 71941414f..de17a7917 100644 --- a/src/forms/BValidatedInputGroupFormInput.vue +++ b/src/forms/BValidatedInputGroupFormInput.vue @@ -1,8 +1,16 @@ diff --git a/src/i18n/index.js b/src/i18n/index.js index d8d15f503..1a6082420 100644 --- a/src/i18n/index.js +++ b/src/i18n/index.js @@ -1,12 +1,16 @@ -import Vue from 'vue' -import VueI18n from 'vue-i18n' +import Vue from 'vue'; +import VueI18n from 'vue-i18n'; Vue.use(VueI18n); -function loadLocaleMessages () { - const locales = require.context('./locales', true, /[A-Za-z0-9-_,\s]+\.json$/i); +function loadLocaleMessages() { + const locales = require.context( + './locales', + true, + /[A-Za-z0-9-_,\s]+\.json$/i, + ); const messages = {}; - locales.keys().forEach(key => { + locales.keys().forEach((key) => { const matched = key.match(/([A-Za-z0-9-_]+)\./i); if (matched && matched.length > 1) { const locale = matched[1]; @@ -19,7 +23,7 @@ function loadLocaleMessages () { const i18n = new VueI18n({ locale: process.env.VUE_APP_I18N_LOCALE || 'en', fallbackLocale: process.env.VUE_APP_I18N_FALLBACK_LOCALE || 'en', - messages: loadLocaleMessages() + messages: loadLocaleMessages(), }); export default i18n; diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index 94baacbe0..de974d7e6 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -292,14 +292,14 @@ "component_author": "Author", "coordinates": "Coordinates", "coordinates_version_tooltip": "You can use the comparison operators >, <, >=, <=, == and != to match specific versions or version ranges", - "age_tooltip": "Age in ISO-8601 period format (e.g. P1Y = 1 Year; P2Y3M = 2 Years, 3 Months)", + "age_tooltip": "Age in ISO-8601 period format (e.g. P1Y = 1 Year; P2Y3M = 2 Years, 3 Months)", "package_url_full": "Package URL (PURL)", "swid_tagid": "SWID Tag ID", "cpe": "CPE", "cpe_full": "Common Platform Enumeration (CPE)", "classifier": "Classifier", "search_parent": "Type to search parent", - "inactive_active_children" : "The project cannot be set to inactive if it has active children", + "inactive_active_children": "The project cannot be set to inactive if it has active children", "filename": "Filename", "copyright": "Copyright", "md5": "MD5", @@ -806,7 +806,7 @@ "index_use_cases": "The full-text search feature is principally used for the search API (i.e. all the indexes) and internal analyzer fuzzy matching on CPE (i.e. the vulnerable software index).", "index_issues_description": "The lucene indexes can degrade or drift from Dependency Track database over time. Even though DT does its best to minimize the drift, the administrative features below are provided to check or restore the indexes if need be. It must be used with caution.", "index_consistency_check_description": "You can enable a periodic background task that will check that all indexes exists, are not corrupted and that their difference with Dependency Track database is under a defined threshold percentage. Any check failure will trigger a rebuild of the corresponding index. A restart is required to take cadence modification into account.", - "index_rebuild_description" : "You can selectively trigger an immediate rebuild of some or all indexes. The index rebuild will be perform by an asynchronous tasks. You can check the progress using Dependency Track logs.", + "index_rebuild_description": "You can selectively trigger an immediate rebuild of some or all indexes. The index rebuild will be perform by an asynchronous tasks. You can check the progress using Dependency Track logs.", "enable_index_consistency_check": "Enable periodic consistency check", "index_consistency_check_cadence": "Cadence (in minutes)", "index_consistency_check_threshold": "Delta threshold (in percentage)", @@ -825,7 +825,7 @@ "warn": "Warn", "fail": "Fail" }, - "operator" : { + "operator": { "is": "is", "is_not": "is not", "matches": "matches", @@ -833,7 +833,7 @@ "contains_any": "contains any", "contains_all": "contains all" }, - "hashes" : { + "hashes": { "md5": "MD5", "sha_1": "SHA-1", "sha_256": "SHA-256", diff --git a/src/main.js b/src/main.js index a39b9847d..1fdfa468c 100644 --- a/src/main.js +++ b/src/main.js @@ -2,23 +2,23 @@ // (runtime-only or standalone) has been set in webpack.base.conf with an alias. import 'core-js/stable'; import 'regenerator-runtime/runtime'; -import Vue from 'vue' -import BootstrapVue from 'bootstrap-vue' -import App from './App' -import router from './router' -import i18n from './i18n' -import './validation' -import './plugins/table.js' -import axios from 'axios' -import VueAxios from 'vue-axios' -import vueDebounce from 'vue-debounce' -import VuePageTitle from 'vue-page-title' -import '@/directives/VuePermission' -import VueToastr from "vue-toastr"; -import api from "./shared/api.json"; -import oidc from "./shared/oidc.json"; -import version from "./version"; -import { getContextPath } from "./shared/utils"; +import Vue from 'vue'; +import BootstrapVue from 'bootstrap-vue'; +import App from './App'; +import router from './router'; +import i18n from './i18n'; +import './validation'; +import './plugins/table.js'; +import axios from 'axios'; +import VueAxios from 'vue-axios'; +import vueDebounce from 'vue-debounce'; +import VuePageTitle from 'vue-page-title'; +import '@/directives/VuePermission'; +import VueToastr from 'vue-toastr'; +import api from './shared/api.json'; +import oidc from './shared/oidc.json'; +import version from './version'; +import { getContextPath } from './shared/utils'; Vue.use(BootstrapVue); Vue.use(VueAxios, axios); @@ -26,8 +26,8 @@ Vue.use(VueToastr, { defaultTimeout: 5000, defaultProgressBar: false, defaultProgressBarValue: 0, - defaultPosition: "toast-top-right", - defaultCloseOnHover: false + defaultPosition: 'toast-top-right', + defaultCloseOnHover: false, }); Vue.use(vueDebounce, { defaultTime: '750ms' }); Vue.use(VuePageTitle, { prefix: 'Dependency-Track -', router }); @@ -35,31 +35,39 @@ Vue.use(VuePageTitle, { prefix: 'Dependency-Track -', router }); Vue.prototype.$api = api; Vue.prototype.$oidc = oidc; const contextPath = getContextPath(); -axios.get(contextPath + "/static/config.json").then(response => { - if (response.data.API_BASE_URL && response.data.API_BASE_URL !== "") { - Vue.prototype.$api.BASE_URL = response.data.API_BASE_URL; - } else { - Vue.prototype.$api.BASE_URL = contextPath; - } +axios + .get(contextPath + '/static/config.json') + .then((response) => { + if (response.data.API_BASE_URL && response.data.API_BASE_URL !== '') { + Vue.prototype.$api.BASE_URL = response.data.API_BASE_URL; + } else { + Vue.prototype.$api.BASE_URL = contextPath; + } - // Send XHR cross-site cookie credentials - Vue.prototype.$api.WITH_CREDENTIALS = response.data.API_WITH_CREDENTIALS && response.data.API_WITH_CREDENTIALS.toLowerCase() === "true"; + // Send XHR cross-site cookie credentials + Vue.prototype.$api.WITH_CREDENTIALS = + response.data.API_WITH_CREDENTIALS && + response.data.API_WITH_CREDENTIALS.toLowerCase() === 'true'; - // OpenID Connect - Vue.prototype.$oidc.ISSUER = response.data.OIDC_ISSUER; - Vue.prototype.$oidc.CLIENT_ID = response.data.OIDC_CLIENT_ID; - Vue.prototype.$oidc.SCOPE = response.data.OIDC_SCOPE; - Vue.prototype.$oidc.FLOW = response.data.OIDC_FLOW; - if (response.data.OIDC_LOGIN_BUTTON_TEXT) { - Vue.prototype.$oidc.LOGIN_BUTTON_TEXT = response.data.OIDC_LOGIN_BUTTON_TEXT; - } else { - Vue.prototype.$oidc.LOGIN_BUTTON_TEXT = ""; - } - createVueApp(); -}).catch(function (error) { - console.log("Cannot retrieve static/config.json from host. This is expected behavior in development environments."); - createVueApp(); -}); + // OpenID Connect + Vue.prototype.$oidc.ISSUER = response.data.OIDC_ISSUER; + Vue.prototype.$oidc.CLIENT_ID = response.data.OIDC_CLIENT_ID; + Vue.prototype.$oidc.SCOPE = response.data.OIDC_SCOPE; + Vue.prototype.$oidc.FLOW = response.data.OIDC_FLOW; + if (response.data.OIDC_LOGIN_BUTTON_TEXT) { + Vue.prototype.$oidc.LOGIN_BUTTON_TEXT = + response.data.OIDC_LOGIN_BUTTON_TEXT; + } else { + Vue.prototype.$oidc.LOGIN_BUTTON_TEXT = ''; + } + createVueApp(); + }) + .catch(function (error) { + console.log( + 'Cannot retrieve static/config.json from host. This is expected behavior in development environments.', + ); + createVueApp(); + }); /** * Removed finally block due to: @@ -71,11 +79,11 @@ function createVueApp() { $dtrack can then be used anywhere in the app to get information about the server, the version of dtrack, timestamp, uuid, Alpine version, etc. */ - axios.get(`${Vue.prototype.$api.BASE_URL}/${Vue.prototype.$api.URL_ABOUT}`) + axios + .get(`${Vue.prototype.$api.BASE_URL}/${Vue.prototype.$api.URL_ABOUT}`) .then((result) => { - Vue.prototype.$dtrack = result.data; - } - ); + Vue.prototype.$dtrack = result.data; + }); Vue.prototype.$version = version; @@ -85,7 +93,7 @@ function createVueApp() { template: '', components: { App, - } - ,i18n + }, + i18n, }); } diff --git a/src/mixins/bootstrapTableMixin.js b/src/mixins/bootstrapTableMixin.js index fa9c90d47..5115903e0 100644 --- a/src/mixins/bootstrapTableMixin.js +++ b/src/mixins/bootstrapTableMixin.js @@ -1,22 +1,22 @@ -import Vue from 'vue' +import Vue from 'vue'; export default { - data () { + data() { return { - vueFormatters: [] - } + vueFormatters: [], + }; }, methods: { - vueFormatter (obj) { + vueFormatter(obj) { const key = `_vue_formatter_${this.vueFormatters.length}`; this.vueFormatters.push({ el: `.${key}`, name: key, - ...obj + ...obj, }); return `
`; }, - vueFormatterInit () { + vueFormatterInit() { if (!this.vueFormatters.length) { return; } @@ -27,6 +27,6 @@ export default { this.vueFormatters.splice(i, 1); } } - } - } -} + }, + }, +}; diff --git a/src/mixins/globalVarsMixin.js b/src/mixins/globalVarsMixin.js index d7a31afae..4ea8bd950 100644 --- a/src/mixins/globalVarsMixin.js +++ b/src/mixins/globalVarsMixin.js @@ -1,23 +1,23 @@ -import Vue from 'vue' -import axios from "axios"; -import EventBus from "@/shared/eventbus"; +import Vue from 'vue'; +import axios from 'axios'; +import EventBus from '@/shared/eventbus'; export default { - data () { + data() { return { dtrack: Object, - currentUser: Object - } + currentUser: Object, + }; }, created() { if (this.$dtrack) { this.dtrack = this.$dtrack; } else { - axios.get(`${Vue.prototype.$api.BASE_URL}/${Vue.prototype.$api.URL_ABOUT}`) + axios + .get(`${Vue.prototype.$api.BASE_URL}/${Vue.prototype.$api.URL_ABOUT}`) .then((result) => { - this.dtrack = result.data; - } - ); + this.dtrack = result.data; + }); } if (this.$currentUser) { this.currentUser = this.$currentUser; @@ -27,11 +27,13 @@ export default { }, mounted() { EventBus.$on('profileUpdated', () => { - axios.get(`${Vue.prototype.$api.BASE_URL}/${Vue.prototype.$api.URL_USER_SELF}`) + axios + .get( + `${Vue.prototype.$api.BASE_URL}/${Vue.prototype.$api.URL_USER_SELF}`, + ) .then((result) => { - this.currentUser = result.data; - } - ); + this.currentUser = result.data; + }); }); - } -} + }, +}; diff --git a/src/mixins/permissionsMixin.js b/src/mixins/permissionsMixin.js index a06759c25..415003535 100644 --- a/src/mixins/permissionsMixin.js +++ b/src/mixins/permissionsMixin.js @@ -1,4 +1,4 @@ -import * as permissions from "../shared/permissions"; +import * as permissions from '../shared/permissions'; export default { data() { @@ -14,21 +14,21 @@ export default { VULNERABILITY_MANAGEMENT: permissions.VULNERABILITY_MANAGEMENT, POLICY_VIOLATION_ANALYSIS: permissions.POLICY_VIOLATION_ANALYSIS, SYSTEM_CONFIGURATION: permissions.SYSTEM_CONFIGURATION, - POLICY_MANAGEMENT: permissions.POLICY_MANAGEMENT - } - } + POLICY_MANAGEMENT: permissions.POLICY_MANAGEMENT, + }, + }; }, computed: { - decodedToken () { + decodedToken() { return permissions.decodeToken(permissions.getToken()); - } + }, }, methods: { - isPermitted (permission) { + isPermitted(permission) { return permissions.hasPermission(permission, this.decodedToken); }, - isNotPermitted (permission) { + isNotPermitted(permission) { return !permissions.hasPermission(permission, this.decodedToken); }, - } + }, }; diff --git a/src/mixins/routerMixin.js b/src/mixins/routerMixin.js index 0363c227b..ba0c11a79 100644 --- a/src/mixins/routerMixin.js +++ b/src/mixins/routerMixin.js @@ -1,13 +1,13 @@ export default { methods: { - setSearchTextQuery (searchText) { + setSearchTextQuery(searchText) { let queries = JSON.parse(JSON.stringify(this.$route.query)); if (searchText === '') { delete queries.searchText; } else { queries.searchText = searchText; } - this.$router.replace({query: queries}); - } - } -} + this.$router.replace({ query: queries }); + }, + }, +}; diff --git a/src/plugins/jquery.js b/src/plugins/jquery.js index f6a86562d..597ce96ad 100644 --- a/src/plugins/jquery.js +++ b/src/plugins/jquery.js @@ -1,2 +1,2 @@ -import jQuery from 'jquery' +import jQuery from 'jquery'; window.jQuery = jQuery; diff --git a/src/plugins/table.js b/src/plugins/table.js index 76fbf4b5e..bd3b95274 100644 --- a/src/plugins/table.js +++ b/src/plugins/table.js @@ -1,11 +1,11 @@ -import 'bootstrap-table/dist/bootstrap-table.min.css' +import 'bootstrap-table/dist/bootstrap-table.min.css'; -import './jquery.js' -import Vue from 'vue' -import 'bootstrap' -import 'jquery-treegrid/js/jquery.treegrid.min.js' -import 'bootstrap-table/dist/bootstrap-table.js' -import 'bootstrap-table/dist/extensions/treegrid/bootstrap-table-treegrid.min.js' -import BootstrapTable from 'bootstrap-table/dist/bootstrap-table-vue.esm.js' +import './jquery.js'; +import Vue from 'vue'; +import 'bootstrap'; +import 'jquery-treegrid/js/jquery.treegrid.min.js'; +import 'bootstrap-table/dist/bootstrap-table.js'; +import 'bootstrap-table/dist/extensions/treegrid/bootstrap-table-treegrid.min.js'; +import BootstrapTable from 'bootstrap-table/dist/bootstrap-table-vue.esm.js'; Vue.component('BootstrapTable', BootstrapTable); diff --git a/src/router/index.js b/src/router/index.js index 30e363d07..cb6ad0e04 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -3,7 +3,7 @@ import Router from 'vue-router'; import i18n from '../i18n'; import EventBus from '../shared/eventbus'; import { getToken, hasPermission } from '../shared/permissions'; -import { getContextPath } from "../shared/utils"; +import { getContextPath } from '../shared/utils'; // Containers const DefaultContainer = () => import('@/containers/DefaultContainer'); @@ -11,62 +11,87 @@ const DefaultContainer = () => import('@/containers/DefaultContainer'); // Views const Dashboard = () => import('@/views/Dashboard'); const ProjectList = () => import('@/views/portfolio/projects/ProjectList'); -const ComponentSearch = () => import('@/views/portfolio/components/ComponentSearch'); -const VulnerabilityList = () => import('@/views/portfolio/vulnerabilities/VulnerabilityList'); -const VulnerabilityAudit = () => import('@/views/globalAudit/VulnerabilityAudit'); +const ComponentSearch = () => + import('@/views/portfolio/components/ComponentSearch'); +const VulnerabilityList = () => + import('@/views/portfolio/vulnerabilities/VulnerabilityList'); +const VulnerabilityAudit = () => + import('@/views/globalAudit/VulnerabilityAudit'); const LicenseList = () => import('@/views/portfolio/licenses/LicenseList'); const PolicyManagement = () => import('@/views/policy/PolicyManagement'); const Project = () => import('@/views/portfolio/projects/Project'); const Administration = () => import('@/views/administration/Administration'); -const General = () => import('@/views/administration/configuration/General') -const BomFormats = () => import('@/views/administration/configuration/BomFormats') -const Email = () => import('@/views/administration/configuration/Email') -const Jira = () => import('@/views/administration/configuration/JiraConfig') -const InternalComponents = () => import('@/views/administration/configuration/InternalComponents') -const TaskScheduler = () => import('@/views/administration/configuration/TaskScheduler') -const Search = () => import('@/views/administration/configuration/Search') +const General = () => import('@/views/administration/configuration/General'); +const BomFormats = () => + import('@/views/administration/configuration/BomFormats'); +const Email = () => import('@/views/administration/configuration/Email'); +const Jira = () => import('@/views/administration/configuration/JiraConfig'); +const InternalComponents = () => + import('@/views/administration/configuration/InternalComponents'); +const TaskScheduler = () => + import('@/views/administration/configuration/TaskScheduler'); +const Search = () => import('@/views/administration/configuration/Search'); -const InternalAnalyzer = () => import('@/views/administration/analyzers/InternalAnalyzer') -const OssIndexAnalyzer = () => import('@/views/administration/analyzers/OssIndexAnalyzer') -const VulnDbAnalyzer = () => import('@/views/administration/analyzers/VulnDbAnalyzer') -const SnykAnalyzer = () => import('@/views/administration/analyzers/SnykAnalyzer') -const TrivyAnalyzer = () => import('@/views/administration/analyzers/TrivyAnalyzer') +const InternalAnalyzer = () => + import('@/views/administration/analyzers/InternalAnalyzer'); +const OssIndexAnalyzer = () => + import('@/views/administration/analyzers/OssIndexAnalyzer'); +const VulnDbAnalyzer = () => + import('@/views/administration/analyzers/VulnDbAnalyzer'); +const SnykAnalyzer = () => + import('@/views/administration/analyzers/SnykAnalyzer'); +const TrivyAnalyzer = () => + import('@/views/administration/analyzers/TrivyAnalyzer'); -const VulnSourceNvd = () => import('@/views/administration/vuln-sources/VulnSourceNvd') -const VulnSourceGitHubAdvisories = () => import('@/views/administration/vuln-sources/VulnSourceGitHubAdvisories') -const VulnSourceOSVAdvisories = () => import('@/views/administration/vuln-sources/VulnSourceOSVAdvisories') +const VulnSourceNvd = () => + import('@/views/administration/vuln-sources/VulnSourceNvd'); +const VulnSourceGitHubAdvisories = () => + import('@/views/administration/vuln-sources/VulnSourceGitHubAdvisories'); +const VulnSourceOSVAdvisories = () => + import('@/views/administration/vuln-sources/VulnSourceOSVAdvisories'); -const Cargo = () => import('@/views/administration/repositories/Cargo') -const Composer = () => import('@/views/administration/repositories/Composer') -const Cpan = () => import('@/views/administration/repositories/Cpan') -const Gem = () => import('@/views/administration/repositories/Gem') -const GitHub = () => import('@/views/administration/repositories/GitHub.vue') -const GoModules = () => import('@/views/administration/repositories/GoModules') -const Hex = () => import('@/views/administration/repositories/Hex') -const Maven = () => import('@/views/administration/repositories/Maven') -const Npm = () => import('@/views/administration/repositories/Npm') -const Nuget = () => import('@/views/administration/repositories/Nuget') -const Python = () => import('@/views/administration/repositories/Python') +const Cargo = () => import('@/views/administration/repositories/Cargo'); +const Composer = () => import('@/views/administration/repositories/Composer'); +const Cpan = () => import('@/views/administration/repositories/Cpan'); +const Gem = () => import('@/views/administration/repositories/Gem'); +const GitHub = () => import('@/views/administration/repositories/GitHub.vue'); +const GoModules = () => import('@/views/administration/repositories/GoModules'); +const Hex = () => import('@/views/administration/repositories/Hex'); +const Maven = () => import('@/views/administration/repositories/Maven'); +const Npm = () => import('@/views/administration/repositories/Npm'); +const Nuget = () => import('@/views/administration/repositories/Nuget'); +const Python = () => import('@/views/administration/repositories/Python'); -const Alerts = () => import('@/views/administration/notifications/Alerts') -const Templates = () => import('@/views/administration/notifications/Templates') +const Alerts = () => import('@/views/administration/notifications/Alerts'); +const Templates = () => + import('@/views/administration/notifications/Templates'); -const FortifySsc = () => import('@/views/administration/integrations/FortifySsc') -const DefectDojo = () => import('@/views/administration/integrations/DefectDojo') -const KennaSecurity = () => import('@/views/administration/integrations/KennaSecurity') +const FortifySsc = () => + import('@/views/administration/integrations/FortifySsc'); +const DefectDojo = () => + import('@/views/administration/integrations/DefectDojo'); +const KennaSecurity = () => + import('@/views/administration/integrations/KennaSecurity'); -const LdapUsers = () => import('@/views/administration/accessmanagement/LdapUsers') -const ManagedUsers = () => import('@/views/administration/accessmanagement/ManagedUsers') -const OidcUsers = () => import('@/views/administration/accessmanagement/OidcUsers') -const OidcGroups = () => import('@/views/administration/accessmanagement/OidcGroups') -const Teams = () => import('@/views/administration/accessmanagement/Teams') -const Permissions = () => import('@/views/administration/accessmanagement/Permissions') -const PortfolioAccessControl = () => import('@/views/administration/accessmanagement/PortfolioAccessControl') +const LdapUsers = () => + import('@/views/administration/accessmanagement/LdapUsers'); +const ManagedUsers = () => + import('@/views/administration/accessmanagement/ManagedUsers'); +const OidcUsers = () => + import('@/views/administration/accessmanagement/OidcUsers'); +const OidcGroups = () => + import('@/views/administration/accessmanagement/OidcGroups'); +const Teams = () => import('@/views/administration/accessmanagement/Teams'); +const Permissions = () => + import('@/views/administration/accessmanagement/Permissions'); +const PortfolioAccessControl = () => + import('@/views/administration/accessmanagement/PortfolioAccessControl'); const Component = () => import('@/views/portfolio/projects/Component'); const Service = () => import('@/views/portfolio/projects/Service'); -const Vulnerability = () => import('@/views/portfolio/vulnerabilities/Vulnerability'); +const Vulnerability = () => + import('@/views/portfolio/vulnerabilities/Vulnerability'); const License = () => import('@/views/portfolio/licenses/License'); // Pages @@ -92,8 +117,8 @@ function configRoutes() { title: i18n.t('message.dashboard'), i18n: 'message.dashboard', sectionPath: '/dashboard', - permission: 'VIEW_PORTFOLIO' - } + permission: 'VIEW_PORTFOLIO', + }, }, { path: 'projects', @@ -103,63 +128,71 @@ function configRoutes() { title: i18n.t('message.projects'), i18n: 'message.projects', sectionPath: '/projects', - permission: 'VIEW_PORTFOLIO' - } + permission: 'VIEW_PORTFOLIO', + }, }, { path: 'projects/:uuid', name: 'Project', - alias: ['projects/:uuid/overview', 'projects/:uuid/components', 'projects/:uuid/services', 'projects/:uuid/dependencyGraph', 'projects/:uuid/findings', 'projects/:uuid/epss', 'projects/:uuid/policyViolations'], - props: (route) => ( { uuid: route.params.uuid } ), + alias: [ + 'projects/:uuid/overview', + 'projects/:uuid/components', + 'projects/:uuid/services', + 'projects/:uuid/dependencyGraph', + 'projects/:uuid/findings', + 'projects/:uuid/epss', + 'projects/:uuid/policyViolations', + ], + props: (route) => ({ uuid: route.params.uuid }), component: Project, meta: { i18n: 'message.projects', sectionPath: '/projects', - permission: 'VIEW_PORTFOLIO' - } + permission: 'VIEW_PORTFOLIO', + }, }, { path: 'projects/:uuid/dependencyGraph/:componentUuids', name: 'Dependency Graph Component Lookup', - props: (route) => ( { + props: (route) => ({ uuid: route.params.uuid, - componentUuids: route.params.componentUuids - } ), + componentUuids: route.params.componentUuids, + }), component: Project, meta: { i18n: 'message.projects', sectionPath: '/projects', - permission: 'VIEW_PORTFOLIO' - } + permission: 'VIEW_PORTFOLIO', + }, }, { path: 'projects/:uuid/findings/:vulnerability', name: 'Project Vulnerability Lookup', - props: (route) => ( { + props: (route) => ({ uuid: route.params.uuid, - vulnerability: route.params.vulnerability - } ), + vulnerability: route.params.vulnerability, + }), component: Project, meta: { i18n: 'message.projects', sectionPath: '/projects', - permission: 'VIEW_PORTFOLIO' - } + permission: 'VIEW_PORTFOLIO', + }, }, { path: 'projects/:uuid/findings/:affectedComponent/:vulnerability', name: 'Project Finding Lookup', - props: (route) => ( { + props: (route) => ({ uuid: route.params.uuid, affectedComponent: route.params.componentUuid, - vulnerability: route.params.vulnerability - } ), + vulnerability: route.params.vulnerability, + }), component: Project, meta: { i18n: 'message.projects', sectionPath: '/projects', - permission: 'VIEW_PORTFOLIO' - } + permission: 'VIEW_PORTFOLIO', + }, }, { path: 'components', @@ -169,31 +202,34 @@ function configRoutes() { title: i18n.t('message.component_search'), i18n: 'message.component_search', sectionPath: '/components', - permission: 'VIEW_PORTFOLIO' - } + permission: 'VIEW_PORTFOLIO', + }, }, { path: '/components/:uuid', name: 'Component', - alias: ['/components/:uuid/overview', '/components/:uuid/vulnerabilities'], - props: (route) => ( { uuid: route.params.uuid } ), + alias: [ + '/components/:uuid/overview', + '/components/:uuid/vulnerabilities', + ], + props: (route) => ({ uuid: route.params.uuid }), component: Component, meta: { i18n: 'message.projects', sectionPath: '/projects', - permission: 'VIEW_PORTFOLIO' - } + permission: 'VIEW_PORTFOLIO', + }, }, { path: '/services/:uuid', name: 'Service', - props: (route) => ( { uuid: route.params.uuid } ), + props: (route) => ({ uuid: route.params.uuid }), component: Service, meta: { i18n: 'message.projects', sectionPath: '/projects', - permission: 'VIEW_PORTFOLIO' - } + permission: 'VIEW_PORTFOLIO', + }, }, { path: 'vulnerabilities', @@ -203,23 +239,26 @@ function configRoutes() { title: i18n.t('message.vulnerabilities'), i18n: 'message.vulnerabilities', sectionPath: '/vulnerabilities', - permission: 'VIEW_PORTFOLIO' - } + permission: 'VIEW_PORTFOLIO', + }, }, { path: 'vulnerabilities/:source/:vulnId', name: 'Vulnerability', - alias: ['vulnerabilities/:source/:vulnId/overview', 'vulnerabilities/:source/:vulnId/affectedProjects'], - props: (route) => ( { + alias: [ + 'vulnerabilities/:source/:vulnId/overview', + 'vulnerabilities/:source/:vulnId/affectedProjects', + ], + props: (route) => ({ source: route.params.source, - vulnId: route.params.vulnId - } ), + vulnId: route.params.vulnId, + }), component: Vulnerability, meta: { i18n: 'message.vulnerabilities', sectionPath: '/vulnerabilities', - permission: 'VIEW_PORTFOLIO' - } + permission: 'VIEW_PORTFOLIO', + }, }, { path: 'licenses', @@ -229,20 +268,25 @@ function configRoutes() { title: i18n.t('message.licenses'), i18n: 'message.licenses', sectionPath: '/licenses', - permission: 'VIEW_PORTFOLIO' - } + permission: 'VIEW_PORTFOLIO', + }, }, { path: 'licenses/:licenseId', name: 'License', - alias: ['licenses/:licenseId/overview', 'licenses/:licenseId/licenseText', 'licenses/:licenseId/template', 'licenses/:licenseId/header'], - props: (route) => ( { licenseId: route.params.licenseId } ), + alias: [ + 'licenses/:licenseId/overview', + 'licenses/:licenseId/licenseText', + 'licenses/:licenseId/template', + 'licenses/:licenseId/header', + ], + props: (route) => ({ licenseId: route.params.licenseId }), component: License, meta: { i18n: 'message.licenses', sectionPath: '/licenses', - permission: 'VIEW_PORTFOLIO' - } + permission: 'VIEW_PORTFOLIO', + }, }, { path: 'policy', @@ -253,8 +297,8 @@ function configRoutes() { title: i18n.t('message.policy_management'), i18n: 'message.policy_management', sectionPath: '/policy', - permission: 'POLICY_MANAGEMENT' - } + permission: 'POLICY_MANAGEMENT', + }, }, { path: 'admin', @@ -263,7 +307,7 @@ function configRoutes() { title: i18n.t('message.administration'), i18n: 'message.administration', sectionPath: '/admin', - permission: 'SYSTEM_CONFIGURATION' + permission: 'SYSTEM_CONFIGURATION', }, children: [ { @@ -275,7 +319,7 @@ function configRoutes() { title: i18n.t('message.administration'), i18n: 'message.administration', sectionPath: '/admin', - permission: 'SYSTEM_CONFIGURATION' + permission: 'SYSTEM_CONFIGURATION', }, }, { @@ -285,7 +329,7 @@ function configRoutes() { title: i18n.t('message.administration'), i18n: 'message.administration', sectionPath: '/admin', - permission: 'SYSTEM_CONFIGURATION' + permission: 'SYSTEM_CONFIGURATION', }, }, { @@ -295,7 +339,7 @@ function configRoutes() { title: i18n.t('message.administration'), i18n: 'message.administration', sectionPath: '/admin', - permission: 'SYSTEM_CONFIGURATION' + permission: 'SYSTEM_CONFIGURATION', }, }, { @@ -305,7 +349,7 @@ function configRoutes() { title: i18n.t('message.administration'), i18n: 'message.administration', sectionPath: '/admin', - permission: 'SYSTEM_CONFIGURATION' + permission: 'SYSTEM_CONFIGURATION', }, }, { @@ -315,7 +359,7 @@ function configRoutes() { title: i18n.t('message.administration'), i18n: 'message.administration', sectionPath: '/admin', - permission: 'SYSTEM_CONFIGURATION' + permission: 'SYSTEM_CONFIGURATION', }, }, { @@ -325,7 +369,7 @@ function configRoutes() { title: i18n.t('message.administration'), i18n: 'message.administration', sectionPath: '/admin', - permission: 'SYSTEM_CONFIGURATION' + permission: 'SYSTEM_CONFIGURATION', }, }, { @@ -335,7 +379,7 @@ function configRoutes() { title: i18n.t('message.administration'), i18n: 'message.administration', sectionPath: '/admin', - permission: 'SYSTEM_CONFIGURATION' + permission: 'SYSTEM_CONFIGURATION', }, }, { @@ -346,7 +390,7 @@ function configRoutes() { title: i18n.t('message.administration'), i18n: 'message.administration', sectionPath: '/admin', - permission: 'SYSTEM_CONFIGURATION' + permission: 'SYSTEM_CONFIGURATION', }, }, { @@ -356,7 +400,7 @@ function configRoutes() { title: i18n.t('message.administration'), i18n: 'message.administration', sectionPath: '/admin', - permission: 'SYSTEM_CONFIGURATION' + permission: 'SYSTEM_CONFIGURATION', }, }, { @@ -366,7 +410,7 @@ function configRoutes() { title: i18n.t('message.administration'), i18n: 'message.administration', sectionPath: '/admin', - permission: 'SYSTEM_CONFIGURATION' + permission: 'SYSTEM_CONFIGURATION', }, }, { @@ -376,7 +420,7 @@ function configRoutes() { title: i18n.t('message.administration'), i18n: 'message.administration', sectionPath: '/admin', - permission: 'SYSTEM_CONFIGURATION' + permission: 'SYSTEM_CONFIGURATION', }, }, { @@ -386,7 +430,7 @@ function configRoutes() { title: i18n.t('message.administration'), i18n: 'message.administration', sectionPath: '/admin', - permission: 'SYSTEM_CONFIGURATION' + permission: 'SYSTEM_CONFIGURATION', }, }, { @@ -397,7 +441,7 @@ function configRoutes() { title: i18n.t('message.administration'), i18n: 'message.administration', sectionPath: '/admin', - permission: 'SYSTEM_CONFIGURATION' + permission: 'SYSTEM_CONFIGURATION', }, }, { @@ -407,7 +451,7 @@ function configRoutes() { title: i18n.t('message.administration'), i18n: 'message.administration', sectionPath: '/admin', - permission: 'SYSTEM_CONFIGURATION' + permission: 'SYSTEM_CONFIGURATION', }, }, { @@ -417,7 +461,7 @@ function configRoutes() { title: i18n.t('message.administration'), i18n: 'message.administration', sectionPath: '/admin', - permission: 'SYSTEM_CONFIGURATION' + permission: 'SYSTEM_CONFIGURATION', }, }, { @@ -428,7 +472,7 @@ function configRoutes() { title: i18n.t('message.administration'), i18n: 'message.administration', sectionPath: '/admin', - permission: 'SYSTEM_CONFIGURATION' + permission: 'SYSTEM_CONFIGURATION', }, }, { @@ -438,7 +482,7 @@ function configRoutes() { title: i18n.t('message.administration'), i18n: 'message.administration', sectionPath: '/admin', - permission: 'SYSTEM_CONFIGURATION' + permission: 'SYSTEM_CONFIGURATION', }, }, { @@ -448,7 +492,7 @@ function configRoutes() { title: i18n.t('message.administration'), i18n: 'message.administration', sectionPath: '/admin', - permission: 'SYSTEM_CONFIGURATION' + permission: 'SYSTEM_CONFIGURATION', }, }, { @@ -458,7 +502,7 @@ function configRoutes() { title: i18n.t('message.administration'), i18n: 'message.administration', sectionPath: '/admin', - permission: 'SYSTEM_CONFIGURATION' + permission: 'SYSTEM_CONFIGURATION', }, }, { @@ -468,7 +512,7 @@ function configRoutes() { title: i18n.t('message.administration'), i18n: 'message.administration', sectionPath: '/admin', - permission: 'SYSTEM_CONFIGURATION' + permission: 'SYSTEM_CONFIGURATION', }, }, { @@ -478,7 +522,7 @@ function configRoutes() { title: i18n.t('message.administration'), i18n: 'message.administration', sectionPath: '/admin', - permission: 'SYSTEM_CONFIGURATION' + permission: 'SYSTEM_CONFIGURATION', }, }, { @@ -488,7 +532,7 @@ function configRoutes() { title: i18n.t('message.administration'), i18n: 'message.administration', sectionPath: '/admin', - permission: 'SYSTEM_CONFIGURATION' + permission: 'SYSTEM_CONFIGURATION', }, }, { @@ -498,7 +542,7 @@ function configRoutes() { title: i18n.t('message.administration'), i18n: 'message.administration', sectionPath: '/admin', - permission: 'SYSTEM_CONFIGURATION' + permission: 'SYSTEM_CONFIGURATION', }, }, { @@ -508,7 +552,7 @@ function configRoutes() { title: i18n.t('message.administration'), i18n: 'message.administration', sectionPath: '/admin', - permission: 'SYSTEM_CONFIGURATION' + permission: 'SYSTEM_CONFIGURATION', }, }, { @@ -518,7 +562,7 @@ function configRoutes() { title: i18n.t('message.administration'), i18n: 'message.administration', sectionPath: '/admin', - permission: 'SYSTEM_CONFIGURATION' + permission: 'SYSTEM_CONFIGURATION', }, }, { @@ -528,7 +572,7 @@ function configRoutes() { title: i18n.t('message.administration'), i18n: 'message.administration', sectionPath: '/admin', - permission: 'SYSTEM_CONFIGURATION' + permission: 'SYSTEM_CONFIGURATION', }, }, { @@ -539,7 +583,7 @@ function configRoutes() { title: i18n.t('message.administration'), i18n: 'message.administration', sectionPath: '/admin', - permission: 'SYSTEM_CONFIGURATION' + permission: 'SYSTEM_CONFIGURATION', }, }, { @@ -549,7 +593,7 @@ function configRoutes() { title: i18n.t('message.administration'), i18n: 'message.administration', sectionPath: '/admin', - permission: 'SYSTEM_CONFIGURATION' + permission: 'SYSTEM_CONFIGURATION', }, }, { @@ -560,7 +604,7 @@ function configRoutes() { title: i18n.t('message.administration'), i18n: 'message.administration', sectionPath: '/admin', - permission: 'SYSTEM_CONFIGURATION' + permission: 'SYSTEM_CONFIGURATION', }, }, { @@ -570,7 +614,7 @@ function configRoutes() { title: i18n.t('message.administration'), i18n: 'message.administration', sectionPath: '/admin', - permission: 'SYSTEM_CONFIGURATION' + permission: 'SYSTEM_CONFIGURATION', }, }, { @@ -580,7 +624,7 @@ function configRoutes() { title: i18n.t('message.administration'), i18n: 'message.administration', sectionPath: '/admin', - permission: 'SYSTEM_CONFIGURATION' + permission: 'SYSTEM_CONFIGURATION', }, }, { @@ -591,7 +635,7 @@ function configRoutes() { title: i18n.t('message.administration'), i18n: 'message.administration', sectionPath: '/admin', - permission: 'ACCESS_MANAGEMENT' + permission: 'ACCESS_MANAGEMENT', }, }, { @@ -601,7 +645,7 @@ function configRoutes() { title: i18n.t('message.administration'), i18n: 'message.administration', sectionPath: '/admin', - permission: 'ACCESS_MANAGEMENT' + permission: 'ACCESS_MANAGEMENT', }, }, { @@ -611,7 +655,7 @@ function configRoutes() { title: i18n.t('message.administration'), i18n: 'message.administration', sectionPath: '/admin', - permission: 'ACCESS_MANAGEMENT' + permission: 'ACCESS_MANAGEMENT', }, }, { @@ -621,7 +665,7 @@ function configRoutes() { title: i18n.t('message.administration'), i18n: 'message.administration', sectionPath: '/admin', - permission: 'ACCESS_MANAGEMENT' + permission: 'ACCESS_MANAGEMENT', }, }, { @@ -631,7 +675,7 @@ function configRoutes() { title: i18n.t('message.administration'), i18n: 'message.administration', sectionPath: '/admin', - permission: 'ACCESS_MANAGEMENT' + permission: 'ACCESS_MANAGEMENT', }, }, { @@ -641,7 +685,7 @@ function configRoutes() { title: i18n.t('message.administration'), i18n: 'message.administration', sectionPath: '/admin', - permission: 'ACCESS_MANAGEMENT' + permission: 'ACCESS_MANAGEMENT', }, }, { @@ -651,79 +695,85 @@ function configRoutes() { title: i18n.t('message.administration'), i18n: 'message.administration', sectionPath: '/admin', - permission: 'ACCESS_MANAGEMENT' + permission: 'ACCESS_MANAGEMENT', }, - } - ] + }, + ], }, { path: 'vulnerabilityAudit', name: 'Vulnerability Audit', - alias: ['vulnerabilityAudit/occurrences', 'vulnerabilityAudit/grouped'], + alias: [ + 'vulnerabilityAudit/occurrences', + 'vulnerabilityAudit/grouped', + ], component: VulnerabilityAudit, meta: { title: i18n.t('message.vulnerability_audit'), i18n: 'message.vulnerability_audit', sectionPath: '/globalAudit', - permission: 'VIEW_VULNERABILITY' - } + permission: 'VIEW_VULNERABILITY', + }, }, // The following route redirects URLs from legacy Dependency-Track UI to new URL format. { // Old: http://host/project/?uuid=3a38aedf-e9e9-4e0a-8913-2d99951aa76d // New: http://host/projects/3a38aedf-e9e9-4e0a-8913-2d99951aa76d path: 'project', - props: (route) => ( { uuid: route.query.uuid } ), - redirect: to => { + props: (route) => ({ uuid: route.query.uuid }), + redirect: (to) => { let { hash, params, query } = to; if (query.uuid) { let uuid = query.uuid; - return { path: '/projects/' + uuid, query: null } + return { path: '/projects/' + uuid, query: null }; } - } + }, }, { // Old: http://host/component/?uuid=3a38aedf-e9e9-4e0a-8913-2d99951aa76d // New: http://host/components/3a38aedf-e9e9-4e0a-8913-2d99951aa76d path: 'component', - props: (route) => ( { uuid: route.query.uuid } ), - redirect: to => { + props: (route) => ({ uuid: route.query.uuid }), + redirect: (to) => { let { hash, params, query } = to; if (query.uuid) { let uuid = query.uuid; - return { path: '/components/' + uuid, query: null } + return { path: '/components/' + uuid, query: null }; } - } + }, }, { // Old: http://host/vulnerability/?source=NVD&vulnId=CVE-2019-10966 // New: http://host/vulnerabilities/NVD/CVE-2019-10966 path: 'vulnerability', - props: (route) => ( { + props: (route) => ({ source: route.query.source, vulnId: route.query.vulnId, - } ), - redirect: to => { + }), + redirect: (to) => { let { hash, params, query } = to; if (query.source && query.vulnId) { - return { path: '/vulnerabilities/' + query.source + "/" + query.vulnId, query: null } + return { + path: '/vulnerabilities/' + query.source + '/' + query.vulnId, + query: null, + }; } - } + }, }, { // Old: http://host/license/?licenseId=AFL-2.0 // New: http://host/licenses/AFL-2.0 path: 'license', - props: (route) => ( { licenseId: route.query.licenseId } ), - redirect: to => { + props: (route) => ({ licenseId: route.query.licenseId }), + redirect: (to) => { let { hash, params, query } = to; if (query.licenseId) { let licenseId = query.licenseId; - return { path: '/licenses/' + licenseId, query: null } + return { path: '/licenses/' + licenseId, query: null }; } - } + }, }, - ] + ], }, { path: '/login', @@ -731,7 +781,7 @@ function configRoutes() { component: Login, meta: { title: i18n.t('message.login'), - } + }, }, { path: '/change-password', @@ -739,7 +789,7 @@ function configRoutes() { component: PasswordForceChange, meta: { title: i18n.t('message.change_password'), - } + }, }, { path: '*', @@ -747,9 +797,9 @@ function configRoutes() { component: Page404, meta: { title: i18n.t('404.heading'), - } - } - ] + }, + }, + ]; } const router = new Router({ @@ -757,7 +807,7 @@ const router = new Router({ base: getContextPath(), linkActiveClass: 'open active', scrollBehavior: () => ({ y: 0 }), - routes: configRoutes() + routes: configRoutes(), }); router.beforeEach((to, from, next) => { @@ -771,22 +821,25 @@ router.beforeEach((to, from, next) => { if (jwt) { if (hasPermission(to.meta.permission)) { // let backend verify the token - router.app.axios.get(`${router.app.$api.BASE_URL}/${router.app.$api.URL_USER_SELF}`, { - headers: { 'Authorization': `Bearer ${jwt}` } - }).then((result) => { - Vue.prototype.$currentUser = result.data - // allowed to proceed - next(); - }).catch(() => { - // token is stale - // notify app about this - EventBus.$emit('authenticated', null); - // redirect to login page - redirectToLogin(); - }); + router.app.axios + .get(`${router.app.$api.BASE_URL}/${router.app.$api.URL_USER_SELF}`, { + headers: { Authorization: `Bearer ${jwt}` }, + }) + .then((result) => { + Vue.prototype.$currentUser = result.data; + // allowed to proceed + next(); + }) + .catch(() => { + // token is stale + // notify app about this + EventBus.$emit('authenticated', null); + // redirect to login page + redirectToLogin(); + }); } else { Vue.prototype.$toastr.e(i18n.t('condition.forbidden')); - next({name: 'Dashboard', replace: true}); + next({ name: 'Dashboard', replace: true }); } } else { // no token at all, redirect to login page diff --git a/src/shared/classes.js b/src/shared/classes.js index b8b628280..a370c720f 100644 --- a/src/shared/classes.js +++ b/src/shared/classes.js @@ -3,7 +3,7 @@ export const sidebarCssClasses = [ 'sidebar-sm-show', 'sidebar-md-show', 'sidebar-lg-show', - 'sidebar-xl-show' + 'sidebar-xl-show', ]; export const asideMenuCssClasses = [ @@ -11,11 +11,11 @@ export const asideMenuCssClasses = [ 'aside-menu-sm-show', 'aside-menu-md-show', 'aside-menu-lg-show', - 'aside-menu-xl-show' + 'aside-menu-xl-show', ]; -export const validBreakpoints = [ 'sm', 'md', 'lg', 'xl' ]; +export const validBreakpoints = ['sm', 'md', 'lg', 'xl']; -export function checkBreakpoint (breakpoint, list) { - return list.indexOf(breakpoint) > -1 +export function checkBreakpoint(breakpoint, list) { + return list.indexOf(breakpoint) > -1; } diff --git a/src/shared/common.js b/src/shared/common.js index 5df64b706..988fd5dfc 100644 --- a/src/shared/common.js +++ b/src/shared/common.js @@ -4,31 +4,33 @@ * approach was implemented. */ -"use strict"; +'use strict'; -import xssFilters from "xss-filters"; -const $common = function() { -}; +import xssFilters from 'xss-filters'; +const $common = function () {}; /** * Formats and returns a specialized label for a vulnerability source (NVD, NSP, VulnDB, OSSIndex etc). */ $common.formatSourceLabel = function formatSourceLabel(source) { - if (! source) { + if (!source) { return null; } - let sourceClass = "label-source-" + source.toLowerCase(); + let sourceClass = 'label-source-' + source.toLowerCase(); return `${source}`; }; /** * Formats and returns a specialized label for notifications (fail, warn, info) */ -$common.formatNotificationLabel = function formatNotificationLabel(violationState) { - if (! violationState) { +$common.formatNotificationLabel = function formatNotificationLabel( + violationState, +) { + if (!violationState) { return null; } - let violationStateClass = "label-notification-" + violationState.toLowerCase(); + let violationStateClass = + 'label-notification-' + violationState.toLowerCase(); return `${violationState}`; }; @@ -36,10 +38,10 @@ $common.formatNotificationLabel = function formatNotificationLabel(violationStat * Formats and returns a specialized label for a project tag. */ $common.formatProjectTagLabel = function formatProjectTagLabel(router, tag) { - if (! tag) { - return ""; + if (!tag) { + return ''; } - return `${xssFilters.inHTMLData(tag.name)}` + return `${xssFilters.inHTMLData(tag.name)}`; }; /** @@ -59,10 +61,10 @@ $common.capitalize = function capitalize(string) { */ $common.formatSeverityLabel = function formatSeverityLabel(severity) { if (!severity) { - return ""; + return ''; } let severityLabel = $common.capitalize(severity); - let severityClass = "severity-" + severity.toLowerCase() + "-bg"; + let severityClass = 'severity-' + severity.toLowerCase() + '-bg'; return `
@@ -78,70 +80,93 @@ $common.formatSeverityLabel = function formatSeverityLabel(severity) { /** * Formats and returns a specialized label for the state of policy violations. */ -$common.formatViolationStateLabel = function formatViolationStateLabel(violationState) { - if (! violationState) { +$common.formatViolationStateLabel = function formatViolationStateLabel( + violationState, +) { + if (!violationState) { return null; } - let sourceClass = "label-notification-" + violationState.toLowerCase(); + let sourceClass = 'label-notification-' + violationState.toLowerCase(); return `${violationState}`; }; $common.formatCweLabel = function formatCweLabel(cweId, cweName) { if (cweId && cweName) { - return "
CWE-" + cweId + " " + cweName + "
" + return ( + "
CWE-" + + cweId + + ' ' + + cweName + + '
' + ); } else { - return ""; + return ''; } }; $common.formatCweShortLabel = function formatCweShortLabel(cweId, cweName) { if (cweId && cweName) { - return "CWE-" + cweId + ""; + return ( + "CWE-" + + cweId + + '' + ); } else { - return ""; + return ''; } }; /** * Formats and returns a specialized label for a vulnerability analyzer (OSSINDEX_ANALYZER, INTERNAL_ANALYZER, etc). */ -$common.formatAnalyzerLabel = function formatAnalyzerLabel(analyzer, vulnSource, vulnId, alternateIdentifier, referenceUrl) { - if (! analyzer) { +$common.formatAnalyzerLabel = function formatAnalyzerLabel( + analyzer, + vulnSource, + vulnId, + alternateIdentifier, + referenceUrl, +) { + if (!analyzer) { return null; } - let analyzerLabel = ""; + let analyzerLabel = ''; let analyzerUrl = null; switch (analyzer) { case 'INTERNAL_ANALYZER': analyzerLabel = vulnSource; - if(vulnSource === "GITHUB") { - analyzerUrl = "https://github.com/advisories/" + vulnId; - } else if(vulnSource === "OSV") { - analyzerUrl = "https://osv.dev/vulnerability/" + vulnId; - } else if(vulnSource === "SNYK") { - analyzerUrl = "https://security.snyk.io/vuln/" + vulnId; + if (vulnSource === 'GITHUB') { + analyzerUrl = 'https://github.com/advisories/' + vulnId; + } else if (vulnSource === 'OSV') { + analyzerUrl = 'https://osv.dev/vulnerability/' + vulnId; + } else if (vulnSource === 'SNYK') { + analyzerUrl = 'https://security.snyk.io/vuln/' + vulnId; } break; case 'OSSINDEX_ANALYZER': - analyzerLabel = "OSS Index"; - analyzerUrl = (referenceUrl) ? referenceUrl : "https://ossindex.sonatype.org/vuln/" + vulnId; + analyzerLabel = 'OSS Index'; + analyzerUrl = referenceUrl + ? referenceUrl + : 'https://ossindex.sonatype.org/vuln/' + vulnId; break; case 'VULNDB_ANALYZER': - analyzerLabel = "VulnDB"; - analyzerUrl = "https://vulndb.cyberriskanalytics.com/vulnerabilities/" + vulnId; + analyzerLabel = 'VulnDB'; + analyzerUrl = + 'https://vulndb.cyberriskanalytics.com/vulnerabilities/' + vulnId; break; case 'SNYK_ANALYZER': - analyzerLabel = "Snyk"; - analyzerUrl = "https://security.snyk.io/vuln/" + vulnId; + analyzerLabel = 'Snyk'; + analyzerUrl = 'https://security.snyk.io/vuln/' + vulnId; break; case 'TRIVY_ANALYZER': - analyzerLabel = "Trivy"; + analyzerLabel = 'Trivy'; - analyzerUrl = "https://nvd.nist.gov/vuln/detail/" + vulnId; - if(vulnSource === "GITHUB") { - analyzerUrl = "https://github.com/advisories/" + vulnId; - } - break; + analyzerUrl = 'https://nvd.nist.gov/vuln/detail/' + vulnId; + if (vulnSource === 'GITHUB') { + analyzerUrl = 'https://github.com/advisories/' + vulnId; + } + break; } if (analyzerUrl) { analyzerLabel = `${analyzerLabel} `; @@ -159,96 +184,110 @@ $common.formatAnalyzerLabel = function formatAnalyzerLabel(analyzer, vulnSource, * @param vulnId the unique identifier * @returns a SourceInfo object */ -$common.resolveSourceVulnInfo = function resolveSourceVulnInfo(vulnSource, vulnId) { +$common.resolveSourceVulnInfo = function resolveSourceVulnInfo( + vulnSource, + vulnId, +) { let sourceInfo = {}; sourceInfo.source = vulnSource; sourceInfo.vulnId = vulnId; switch (vulnSource) { - case "INTERNAL": + case 'INTERNAL': // TODO break; - case "NVD": - sourceInfo.name = "National Vulnerability Database"; - sourceInfo.url = "https://nvd.nist.gov/vuln/detail/" + vulnId; + case 'NVD': + sourceInfo.name = 'National Vulnerability Database'; + sourceInfo.url = 'https://nvd.nist.gov/vuln/detail/' + vulnId; break; - case "GITHUB": - sourceInfo.name = "GitHub Advisories"; - sourceInfo.url = "https://github.com/advisories/" + vulnId; + case 'GITHUB': + sourceInfo.name = 'GitHub Advisories'; + sourceInfo.url = 'https://github.com/advisories/' + vulnId; break; - case "OSSINDEX": - sourceInfo.name = "OSS Index"; - sourceInfo.url = "https://ossindex.sonatype.org/vuln/" + vulnId; + case 'OSSINDEX': + sourceInfo.name = 'OSS Index'; + sourceInfo.url = 'https://ossindex.sonatype.org/vuln/' + vulnId; break; - case "SNYK": - sourceInfo.name = "Snyk"; - sourceInfo.url = "https://security.snyk.io/vuln/" + vulnId; + case 'SNYK': + sourceInfo.name = 'Snyk'; + sourceInfo.url = 'https://security.snyk.io/vuln/' + vulnId; break; - case "OSV": - sourceInfo.name = "Open Source Vulnerability Database"; - sourceInfo.url = "https://osv.dev/vulnerability/" + vulnId; + case 'OSV': + sourceInfo.name = 'Open Source Vulnerability Database'; + sourceInfo.url = 'https://osv.dev/vulnerability/' + vulnId; break; - case "GSD": - sourceInfo.name = "Global Security Database"; - sourceInfo.url = "https://github.com/cloudsecurityalliance/gsd-database"; + case 'GSD': + sourceInfo.name = 'Global Security Database'; + sourceInfo.url = 'https://github.com/cloudsecurityalliance/gsd-database'; break; - case "VULNDB": - sourceInfo.name = "VulnDB"; - sourceInfo.url = "https://vulndb.cyberriskanalytics.com/vulnerabilities/" + vulnId; + case 'VULNDB': + sourceInfo.name = 'VulnDB'; + sourceInfo.url = + 'https://vulndb.cyberriskanalytics.com/vulnerabilities/' + vulnId; break; } return sourceInfo; -} +}; $common.resolveVulnAliases = function resolveVulnAliases(vulnSource, aliases) { if (!vulnSource || !aliases) { return []; } - let resolvedAliases = aliases - .flatMap((alias) => { - const _resolvedAliases = []; - if (vulnSource !== "INTERNAL" && alias.internalId) { - _resolvedAliases.push($common.resolveSourceVulnInfo("INTERNAL", alias.internalId)); - } - if (vulnSource !== "NVD" && alias.cveId) { - _resolvedAliases.push($common.resolveSourceVulnInfo("NVD", alias.cveId)); - } - if (vulnSource !== "GITHUB" && alias.ghsaId) { - _resolvedAliases.push($common.resolveSourceVulnInfo("GITHUB", alias.ghsaId)); - } - if (vulnSource !== "OSSINDEX" && alias.sonatypeId) { - _resolvedAliases.push($common.resolveSourceVulnInfo("OSSINDEX", alias.sonatypeId)); - } - if (vulnSource !== "SNYK" && alias.snykId) { - _resolvedAliases.push($common.resolveSourceVulnInfo("SNYK", alias.snykId)); - } - if (vulnSource !== "OSV" && alias.osvId) { - _resolvedAliases.push($common.resolveSourceVulnInfo("OSV", alias.osvId)); - } - if (vulnSource !== "GSD" && alias.gsdId) { - _resolvedAliases.push($common.resolveSourceVulnInfo("GSD", alias.gsdId)); - } - if (vulnSource !== "VULNDB" && alias.vulnDbId) { - _resolvedAliases.push($common.resolveSourceVulnInfo("VULNDB", alias.vulnDbId)); - } - return _resolvedAliases; - }); + let resolvedAliases = aliases.flatMap((alias) => { + const _resolvedAliases = []; + if (vulnSource !== 'INTERNAL' && alias.internalId) { + _resolvedAliases.push( + $common.resolveSourceVulnInfo('INTERNAL', alias.internalId), + ); + } + if (vulnSource !== 'NVD' && alias.cveId) { + _resolvedAliases.push($common.resolveSourceVulnInfo('NVD', alias.cveId)); + } + if (vulnSource !== 'GITHUB' && alias.ghsaId) { + _resolvedAliases.push( + $common.resolveSourceVulnInfo('GITHUB', alias.ghsaId), + ); + } + if (vulnSource !== 'OSSINDEX' && alias.sonatypeId) { + _resolvedAliases.push( + $common.resolveSourceVulnInfo('OSSINDEX', alias.sonatypeId), + ); + } + if (vulnSource !== 'SNYK' && alias.snykId) { + _resolvedAliases.push( + $common.resolveSourceVulnInfo('SNYK', alias.snykId), + ); + } + if (vulnSource !== 'OSV' && alias.osvId) { + _resolvedAliases.push($common.resolveSourceVulnInfo('OSV', alias.osvId)); + } + if (vulnSource !== 'GSD' && alias.gsdId) { + _resolvedAliases.push($common.resolveSourceVulnInfo('GSD', alias.gsdId)); + } + if (vulnSource !== 'VULNDB' && alias.vulnDbId) { + _resolvedAliases.push( + $common.resolveSourceVulnInfo('VULNDB', alias.vulnDbId), + ); + } + return _resolvedAliases; + }); // Deduplicate by vulnerability ID, so we're not showing the same ID more than once. - resolvedAliases = [...new Map(resolvedAliases.map(alias => [alias.vulnId, alias])).values()]; + resolvedAliases = [ + ...new Map(resolvedAliases.map((alias) => [alias.vulnId, alias])).values(), + ]; // Sort aliases by vulnerability ID to achieve consistent output. - return resolvedAliases - .sort((a, b) => { - if (a.vulnId < b.vulnId) { - return -1; - } - if (a.vulnId > b.vulnId) { - return 1; - } - return 0; - }); -} + return resolvedAliases.sort((a, b) => { + if (a.vulnId < b.vulnId) { + return -1; + } + if (a.vulnId > b.vulnId) { + return 1; + } + return 0; + }); +}; /** * @@ -268,11 +307,11 @@ $common.makeAnalysisStateLabelFormatter = (i18n) => { case 'FALSE_POSITIVE': case 'NOT_AFFECTED': case 'RESOLVED': - return i18n.$t(`message.${value.toLowerCase()}`) + return i18n.$t(`message.${value.toLowerCase()}`); default: return null; } - } + }; }; /** @@ -295,11 +334,11 @@ $common.makeAnalysisJustificationLabelFormatter = (i18n) => { case 'PROTECTED_AT_RUNTIME': case 'PROTECTED_AT_PERIMETER': case 'PROTECTED_BY_MITIGATING_CONTROL': - return i18n.$t(`message.${value.toLowerCase()}`) + return i18n.$t(`message.${value.toLowerCase()}`); default: return null; } - } + }; }; /** @@ -318,11 +357,11 @@ $common.makeAnalysisResponseLabelFormatter = (i18n) => { case 'UPDATE': case 'ROLLBACK': case 'WORKAROUND_AVAILABLE': - return i18n.$t(`message.${value.toLowerCase()}`) + return i18n.$t(`message.${value.toLowerCase()}`); default: return null; } - } + }; }; /** @@ -343,11 +382,11 @@ $common.componentClassifierLabelFormatter = (i18n) => { case 'DEVICE': case 'FIRMWARE': case 'FILE': - return i18n.$t(`message.component_${value.toLowerCase()}`) + return i18n.$t(`message.component_${value.toLowerCase()}`); default: return null; } - } + }; }; /** @@ -359,7 +398,7 @@ $common.componentClassifierLabelFormatter = (i18n) => { */ $common.componentClassifierLabelProjectUrlFormatter = (i18n) => { return function (value) { - let url = "../projects/?classifier=" + value; + let url = '../projects/?classifier=' + value; switch (value) { case 'APPLICATION': case 'FRAMEWORK': @@ -369,11 +408,11 @@ $common.componentClassifierLabelProjectUrlFormatter = (i18n) => { case 'DEVICE': case 'FIRMWARE': case 'FILE': - return `${i18n.$t(`message.component_${value.toLowerCase()}`)}` + return `${i18n.$t(`message.component_${value.toLowerCase()}`)}`; default: return null; } - } + }; }; /** @@ -382,24 +421,61 @@ $common.componentClassifierLabelProjectUrlFormatter = (i18n) => { */ $common.formatTimestamp = function formatTimestamp(timestamp, includeTime) { let date = new Date(timestamp); - let months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']; - function pad(num) { return num < 10 ? "0" + num : num; } + let months = [ + 'Jan', + 'Feb', + 'Mar', + 'Apr', + 'May', + 'Jun', + 'Jul', + 'Aug', + 'Sep', + 'Oct', + 'Nov', + 'Dec', + ]; + function pad(num) { + return num < 10 ? '0' + num : num; + } if (includeTime) { - return date.getDate() + " " + months[date.getMonth()] + " " + date.getFullYear() + " at " + pad(date.getHours()) + ":" + pad(date.getMinutes()) + ":" + pad(date.getSeconds()); + return ( + date.getDate() + + ' ' + + months[date.getMonth()] + + ' ' + + date.getFullYear() + + ' at ' + + pad(date.getHours()) + + ':' + + pad(date.getMinutes()) + + ':' + + pad(date.getSeconds()) + ); } else { - return date.getDate() + " " + months[date.getMonth()] + " " + date.getFullYear(); + return ( + date.getDate() + ' ' + months[date.getMonth()] + ' ' + date.getFullYear() + ); } }; /* * Concatenates the group, name, and version of a component. */ -$common.concatenateComponentName = function concatenateComponentName(group, name, version) { +$common.concatenateComponentName = function concatenateComponentName( + group, + name, + version, +) { let g = $common.trimToNull(group); let n = $common.trimToNull(name); let v = $common.trimToNull(version); - return (g != null? g + " " : "") + (n != null? n : "") + (v != null? " " + v: ""); -} + return ( + (g != null ? g + ' ' : '') + + (n != null ? n : '') + + (v != null ? ' ' + v : '') + ); +}; /** * Helper function that returns the variable if it is not null, undefined, NaN, @@ -445,51 +521,59 @@ $common.sleep = function sleep(milliseconds) { /** * Converts a string representation of common boolean values and returns a boolean value. */ -$common.toBoolean = function(string) { +$common.toBoolean = function (string) { if (!string) { return false; } - if (typeof string == "boolean") { + if (typeof string == 'boolean') { return string; } - switch(string.toLowerCase().trim()) { - case "true": case "yes": case "1": return true; - case "false": case "no": case "0": case null: return false; - default: return Boolean(string); + switch (string.toLowerCase().trim()) { + case 'true': + case 'yes': + case '1': + return true; + case 'false': + case 'no': + case '0': + case null: + return false; + default: + return Boolean(string); } }; -$common.trimToNull = function(value) { +$common.trimToNull = function (value) { if (typeof value === 'undefined') { return null; - } else if (typeof value === 'string' && value.trim() === "") { + } else if (typeof value === 'string' && value.trim() === '') { return null; } return value; }; $common.OWASP_RR_LIKELIHOOD_TO_IMPACT_SEVERITY_MATRIX = { - "LOW" : { - "LOW": "INFO", - "MEDIUM": "LOW", - "HIGH": "MEDIUM" + LOW: { + LOW: 'INFO', + MEDIUM: 'LOW', + HIGH: 'MEDIUM', }, - "MEDIUM" : { - "LOW": "LOW", - "MEDIUM": "MEDIUM", - "HIGH": "HIGH" + MEDIUM: { + LOW: 'LOW', + MEDIUM: 'MEDIUM', + HIGH: 'HIGH', }, - "HIGH" : { - "LOW": "MEDIUM", - "MEDIUM": "HIGH", - "HIGH": "CRITICAL" + HIGH: { + LOW: 'MEDIUM', + MEDIUM: 'HIGH', + HIGH: 'CRITICAL', }, - "UNASSIGNED": { - "LOW": "UNASSIGNED", - "MEDIUM": "UNASSIGNED", - "HIGH": "UNASSIGNED" - } -} + UNASSIGNED: { + LOW: 'UNASSIGNED', + MEDIUM: 'UNASSIGNED', + HIGH: 'UNASSIGNED', + }, +}; export default { formatSourceLabel: $common.formatSourceLabel, @@ -504,9 +588,11 @@ export default { resolveSourceVulnInfo: $common.resolveSourceVulnInfo, resolveVulnAliases: $common.resolveVulnAliases, makeAnalysisStateLabelFormatter: $common.makeAnalysisStateLabelFormatter, - makeAnalysisJustificationLabelFormatter: $common.makeAnalysisJustificationLabelFormatter, + makeAnalysisJustificationLabelFormatter: + $common.makeAnalysisJustificationLabelFormatter, componentClassifierLabelFormatter: $common.componentClassifierLabelFormatter, - componentClassifierLabelProjectUrlFormatter: $common.componentClassifierLabelProjectUrlFormatter, + componentClassifierLabelProjectUrlFormatter: + $common.componentClassifierLabelProjectUrlFormatter, formatTimestamp: $common.formatTimestamp, concatenateComponentName: $common.concatenateComponentName, valueWithDefault: $common.valueWithDefault, @@ -514,5 +600,6 @@ export default { sleep: $common.sleep, toBoolean: $common.toBoolean, trimToNull: $common.trimToNull, - OWASP_RR_LIKELIHOOD_TO_IMPACT_SEVERITY_MATRIX: $common.OWASP_RR_LIKELIHOOD_TO_IMPACT_SEVERITY_MATRIX + OWASP_RR_LIKELIHOOD_TO_IMPACT_SEVERITY_MATRIX: + $common.OWASP_RR_LIKELIHOOD_TO_IMPACT_SEVERITY_MATRIX, }; diff --git a/src/shared/oidc.json b/src/shared/oidc.json index 90bfd8930..16d6f4c04 100644 --- a/src/shared/oidc.json +++ b/src/shared/oidc.json @@ -1,7 +1,7 @@ { - "ISSUER": "", - "CLIENT_ID": "", - "SCOPE": "", - "FLOW": "", - "LOGIN_BUTTON_TEXT": "" + "ISSUER": "", + "CLIENT_ID": "", + "SCOPE": "", + "FLOW": "", + "LOGIN_BUTTON_TEXT": "" } diff --git a/src/shared/permissions.js b/src/shared/permissions.js index 54aeeccd4..14016e65f 100644 --- a/src/shared/permissions.js +++ b/src/shared/permissions.js @@ -1,15 +1,15 @@ // API Permissions -export const BOM_UPLOAD = "BOM_UPLOAD"; -export const VIEW_PORTFOLIO = "VIEW_PORTFOLIO"; -export const PORTFOLIO_MANAGEMENT = "PORTFOLIO_MANAGEMENT"; -export const ACCESS_MANAGEMENT = "ACCESS_MANAGEMENT"; -export const VIEW_VULNERABILITY = "VIEW_VULNERABILITY"; -export const VULNERABILITY_ANALYSIS = "VULNERABILITY_ANALYSIS"; -export const VIEW_POLICY_VIOLATION = "VIEW_POLICY_VIOLATION"; -export const VULNERABILITY_MANAGEMENT = "VULNERABILITY_MANAGEMENT"; -export const POLICY_VIOLATION_ANALYSIS = "POLICY_VIOLATION_ANALYSIS"; -export const SYSTEM_CONFIGURATION = "SYSTEM_CONFIGURATION"; -export const POLICY_MANAGEMENT = "POLICY_MANAGEMENT"; +export const BOM_UPLOAD = 'BOM_UPLOAD'; +export const VIEW_PORTFOLIO = 'VIEW_PORTFOLIO'; +export const PORTFOLIO_MANAGEMENT = 'PORTFOLIO_MANAGEMENT'; +export const ACCESS_MANAGEMENT = 'ACCESS_MANAGEMENT'; +export const VIEW_VULNERABILITY = 'VIEW_VULNERABILITY'; +export const VULNERABILITY_ANALYSIS = 'VULNERABILITY_ANALYSIS'; +export const VIEW_POLICY_VIOLATION = 'VIEW_POLICY_VIOLATION'; +export const VULNERABILITY_MANAGEMENT = 'VULNERABILITY_MANAGEMENT'; +export const POLICY_VIOLATION_ANALYSIS = 'POLICY_VIOLATION_ANALYSIS'; +export const SYSTEM_CONFIGURATION = 'SYSTEM_CONFIGURATION'; +export const POLICY_MANAGEMENT = 'POLICY_MANAGEMENT'; /** * Determines if the current logged in user has a specific permission. @@ -35,5 +35,5 @@ export const decodeToken = function decodeToken(token) { * Retrieves the token from session storage. */ export const getToken = function getToken() { - return sessionStorage.getItem("token"); + return sessionStorage.getItem('token'); }; diff --git a/src/shared/toggle-classes.js b/src/shared/toggle-classes.js index 7ee250dd4..51d3caa66 100644 --- a/src/shared/toggle-classes.js +++ b/src/shared/toggle-classes.js @@ -1,4 +1,4 @@ -export default function toggleClasses (toggleClass, classList, force) { +export default function toggleClasses(toggleClass, classList, force) { const level = classList.indexOf(toggleClass); const removeClassList = classList.slice(0, level); removeClassList.map((className) => document.body.classList.remove(className)); diff --git a/src/shared/utils.js b/src/shared/utils.js index e87e0472d..f5c30de06 100644 --- a/src/shared/utils.js +++ b/src/shared/utils.js @@ -1,7 +1,7 @@ -import common from "@/shared/common"; -import flexVerCompare from "flexver/dist/module"; +import common from '@/shared/common'; +import flexVerCompare from 'flexver/dist/module'; -export function random (min, max) { +export function random(min, max) { return Math.floor(Math.random() * (max - min + 1) + min); } @@ -23,7 +23,7 @@ export const shuffleArray = (array) => { * Provides a function to extract a param from the querystring. */ export function getUrlVar(name) { - return (new URLSearchParams(window.location.search)).get(name); + return new URLSearchParams(window.location.search).get(name); } /** @@ -32,13 +32,29 @@ export function getUrlVar(name) { * @returns {string} redirect to url if it save for redirection */ export function getRedirectUrl(router) { - return router.currentRoute.query.redirect && isUrlSaveForRedirect(router.currentRoute.query.redirect) ? router.currentRoute.query.redirect : undefined; + return router.currentRoute.query.redirect && + isUrlSaveForRedirect(router.currentRoute.query.redirect) + ? router.currentRoute.query.redirect + : undefined; } // An array of acceptable root context paths defined in the UI. const acceptableRootContextPaths = [ - '/dashboard', '/projects', '/components', '/services', '/vulnerabilities', '/licenses', '/policy', '/admin', - '/project', '/component', '/vulnerability', '/license', '/vulnerabilityAudit', '/login', '/change-password' + '/dashboard', + '/projects', + '/components', + '/services', + '/vulnerabilities', + '/licenses', + '/policy', + '/admin', + '/project', + '/component', + '/vulnerability', + '/license', + '/vulnerabilityAudit', + '/login', + '/change-password', ]; /** @@ -50,10 +66,14 @@ export function isUrlSaveForRedirect(redirectUrl) { const contextRoot = getContextPath(); try { const resultingUrl = new URL(redirectUrl, window.location.origin); - return resultingUrl.origin === window.location.origin // catches redirectUrls like //foo.bar - && /^https?:$/.test(resultingUrl.protocol) // catches file and blob protocol because for "blob:https://mozilla.org" origin will be returned as "https://mozilla.org". - && acceptableRootContextPaths.map(r => contextRoot + r).some(p => redirectUrl.startsWith(p)); - } catch(invalidUrl) { + return ( + resultingUrl.origin === window.location.origin && // catches redirectUrls like //foo.bar + /^https?:$/.test(resultingUrl.protocol) && // catches file and blob protocol because for "blob:https://mozilla.org" origin will be returned as "https://mozilla.org". + acceptableRootContextPaths + .map((r) => contextRoot + r) + .some((p) => redirectUrl.startsWith(p)) + ); + } catch (invalidUrl) { return false; } } @@ -62,27 +82,41 @@ export function isUrlSaveForRedirect(redirectUrl) { * Returns the context from which the webapp is running. */ export function getContextPath() { - if (acceptableRootContextPaths.some(p => window.location.pathname.startsWith(p))) { + if ( + acceptableRootContextPaths.some((p) => + window.location.pathname.startsWith(p), + ) + ) { // App is deployed in the root context. Return an empty string. - return ""; + return ''; } else { // App is deployed in a non-root context. Return the context. - return window.location.pathname.substring(0, window.location.pathname.indexOf("/",2)); + return window.location.pathname.substring( + 0, + window.location.pathname.indexOf('/', 2), + ); } } export function loadUserPreferencesForBootstrapTable(_this, id, columns) { const table = _this.$refs.table; if (!table) { - console.error("No table defined in the calling component; Can't apply user preferences"); + console.error( + "No table defined in the calling component; Can't apply user preferences", + ); return; } columns.forEach((column) => { const isVisible = column.visible; - const shouldShow = (localStorage && localStorage.getItem(id + "Show" + common.capitalize(column.field)) !== null) - ? (localStorage.getItem(id + "Show" + common.capitalize(column.field)) === "true") - : isVisible; + const shouldShow = + localStorage && + localStorage.getItem(id + 'Show' + common.capitalize(column.field)) !== + null + ? localStorage.getItem( + id + 'Show' + common.capitalize(column.field), + ) === 'true' + : isVisible; if (isVisible !== shouldShow) { if (shouldShow) { table.showColumn(column.field); @@ -90,7 +124,7 @@ export function loadUserPreferencesForBootstrapTable(_this, id, columns) { table.hideColumn(column.field); } } - }) + }); } export function compareVersions(v1, v2) { @@ -108,22 +142,22 @@ export function compareVersions(v1, v2) { } let v1parts = v1.split(':'); let v2parts = v2.split(':'); - if ((v1parts.length > 1) || (v2parts.length > 1)) { + if (v1parts.length > 1 || v2parts.length > 1) { return compareEpochVersions(v1parts, v2parts); } return flexVerCompare(v1, v2); } function compareEpochVersions(v1parts, v2parts) { - // compare epoch - let v1epoch = v1parts.length > 1 ? v1parts[0] : "0"; - let v1version = v1parts.length > 1 ? v1parts[1] : v1parts[0]; - let v2epoch = v2parts.length > 1 ? v2parts[0] : "0"; - let v2version = v2parts.length > 1 ? v2parts[1] : v2parts[0]; - let epochCompare=flexVerCompare(v1epoch, v2epoch); - if (epochCompare == 0) { - return flexVerCompare(v1version, v2version); - } else { - return epochCompare; - } + // compare epoch + let v1epoch = v1parts.length > 1 ? v1parts[0] : '0'; + let v1version = v1parts.length > 1 ? v1parts[1] : v1parts[0]; + let v2epoch = v2parts.length > 1 ? v2parts[0] : '0'; + let v2version = v2parts.length > 1 ? v2parts[1] : v2parts[0]; + let epochCompare = flexVerCompare(v1epoch, v2epoch); + if (epochCompare == 0) { + return flexVerCompare(v1version, v2version); + } else { + return epochCompare; + } } diff --git a/src/validation/index.js b/src/validation/index.js index e389636e2..b4387faa1 100644 --- a/src/validation/index.js +++ b/src/validation/index.js @@ -1,11 +1,16 @@ -import { extend, configure } from 'vee-validate' -import { required, confirmed, min_value, max_value } from 'vee-validate/dist/rules' +import { extend, configure } from 'vee-validate'; +import { + required, + confirmed, + min_value, + max_value, +} from 'vee-validate/dist/rules'; -import i18n from '../i18n' +import i18n from '../i18n'; // Get rule localization based on the rule name configure({ - defaultMessage: (_, values) => i18n.t(`validation.${values._rule_}`, values) + defaultMessage: (_, values) => i18n.t(`validation.${values._rule_}`, values), }); extend('required', required); diff --git a/src/views/Dashboard.vue b/src/views/Dashboard.vue index b1bec51e0..c0f3bedcb 100644 --- a/src/views/Dashboard.vue +++ b/src/views/Dashboard.vue @@ -4,41 +4,80 @@ -

{{ $t('message.portfolio_vulnerabilities') }}

+

+ {{ $t('message.portfolio_vulnerabilities') }} +

- {{$t('message.last_measurement')}}: {{lastMeasurement}} + {{ $t('message.last_measurement') }}: {{ lastMeasurement + }}
- - +
- +
{{ $t('severity.critical') }}
- {{critical}} ({{criticalPercent}}%) - + {{ critical }} ({{ criticalPercent }}%) +
{{ $t('severity.high') }}
- {{high}} ({{highPercent}}%) - + {{ high }} ({{ highPercent }}%) +
{{ $t('severity.medium') }}
- {{medium}} ({{mediumPercent}}%) - + {{ medium }} ({{ mediumPercent }}%) +
{{ $t('severity.low') }}
- {{low}} ({{lowPercent}}%) - + {{ low }} ({{ lowPercent }}%) +
{{ $t('severity.unassigned') }}
- {{unassigned}} ({{unassignedPercent}}%) - + {{ unassigned }} ({{ unassignedPercent }}%) +
@@ -49,28 +88,59 @@ -

{{ $t('message.policy_violations') }}

-
{{$t('message.policy_violations_by_state')}}
-
- +

+ {{ $t('message.policy_violations') }} +

+
+ {{ $t('message.policy_violations_by_state') }} +
+
-
+ +
-
{{ $t("policy_violation.fails") }}
- {{ failViolations }} ({{ failViolationsPercent }}%) - +
{{ $t('policy_violation.fails') }}
+ {{ failViolations }} ({{ failViolationsPercent }}%) +
-
{{ $t("policy_violation.warns") }}
- {{ warnViolations }} ({{ warnViolationsPercent }}%) - +
{{ $t('policy_violation.warns') }}
+ {{ warnViolations }} ({{ warnViolationsPercent }}%) +
-
{{ $t("policy_violation.infos") }}
- {{ infoViolations }} ({{ infoViolationsPercent }}%) - +
{{ $t('policy_violation.infos') }}
+ {{ infoViolations }} ({{ infoViolationsPercent }}%) +
@@ -80,28 +150,74 @@ -

{{ $t('message.policy_violations') }}

-
{{$t('message.policy_violations_by_classification')}}
- +

+ {{ $t('message.policy_violations') }} +

+
+ {{ $t('message.policy_violations_by_classification') }} +
+
- +
-
{{ $t("policy_violation.security") }}
- {{ securityViolations }} ({{ securityViolationsPercent }}%) - +
+ {{ $t('policy_violation.security') }} +
+ {{ securityViolations }} ({{ + securityViolationsPercent + }}%) +
-
{{ $t("policy_violation.operational") }}
- {{ operationalViolations }} ({{ operationalViolationsPercent }}%) - +
+ {{ $t('policy_violation.operational') }} +
+ {{ operationalViolations }} ({{ + operationalViolationsPercent + }}%) +
-
{{ $t("policy_violation.license") }}
- {{ licenseViolations }} ({{ licenseViolationsPercent }}%) - +
+ {{ $t('policy_violation.license') }} +
+ {{ licenseViolations }} ({{ + licenseViolationsPercent + }}%) +
@@ -114,24 +230,51 @@ -

{{ $t('message.auditing_progress') }}

-
{{ $t('message.findings') }}
-
- +

+ {{ $t('message.auditing_progress') }} +

+
{{ $t('message.findings') }}
+
- +
-
{{ $t("message.findings_unaudited") }}
- {{ unauditedFindings }} ({{ unauditedFindingsPercent }}%) - +
+ {{ $t('message.findings_unaudited') }} +
+ {{ unauditedFindings }} ({{ + unauditedFindingsPercent + }}%) +
-
{{ $t("message.findings_audited") }}
- {{ auditedFindings }} ({{ auditedFindingsPercent }}%) - +
+ {{ $t('message.findings_audited') }} +
+ {{ auditedFindings }} ({{ auditedFindingsPercent }}%) +
@@ -141,24 +284,58 @@ -

{{ $t('message.auditing_progress') }}

-
{{$t('message.policy_violations')}}
-
- +

+ {{ $t('message.auditing_progress') }} +

+
+ {{ $t('message.policy_violations') }} +
+
- +
-
{{ $t('message.violations_unaudited') }}
- {{unauditedViolations}} ({{unauditedViolationsPercent}}%) - +
+ {{ $t('message.violations_unaudited') }} +
+ {{ unauditedViolations }} ({{ + unauditedViolationsPercent + }}%) +
-
{{ $t('message.violations_audited') }}
- {{auditedViolations}} ({{auditedViolationsPercent}}%) - +
+ {{ $t('message.violations_audited') }} +
+ {{ auditedViolations }} ({{ + auditedViolationsPercent + }}%) +
@@ -171,23 +348,48 @@ -

{{ $t('message.projects') }}

-
- +

+ {{ $t('message.projects') }} +

+
- +
-
{{ $t("message.non_vulnerable") }}
- {{ nonVulnerableProjects }} ({{ nonVulnerableProjectsPercent }}%) - +
{{ $t('message.non_vulnerable') }}
+ {{ nonVulnerableProjects }} ({{ + nonVulnerableProjectsPercent + }}%) +
-
{{ $t("message.vulnerable") }}
- {{ vulnerableProjects }} ({{ vulnerableProjectsPercent }}%) - +
{{ $t('message.vulnerable') }}
+ {{ vulnerableProjects }} ({{ + vulnerableProjectsPercent + }}%) +
@@ -197,23 +399,48 @@ -

{{ $t('message.components') }}

-
- +

+ {{ $t('message.components') }} +

+
- +
-
{{ $t("message.non_vulnerable") }}
- {{ nonVulnerableComponents }} ({{ nonVulnerableComponentsPercent }}%) - +
{{ $t('message.non_vulnerable') }}
+ {{ nonVulnerableComponents }} ({{ + nonVulnerableComponentsPercent + }}%) +
-
{{ $t("message.vulnerable") }}
- {{ vulnerableComponents }} ({{ vulnerableComponentsPercent }}%) - +
{{ $t('message.vulnerable') }}
+ {{ vulnerableComponents }} ({{ + vulnerableComponentsPercent + }}%) +
@@ -229,14 +456,20 @@ - {{ $t('message.projects') }}
- {{totalProjects}} + {{ + $t('message.projects') + }}
+ {{ totalProjects }}
- {{ $t('message.vulnerable_projects') }}
- {{vulnerableProjects}} + {{ + $t('message.vulnerable_projects') + }}
+ {{ vulnerableProjects }}
@@ -245,14 +478,20 @@ - {{ $t('message.components') }}
- {{totalComponents}} + {{ + $t('message.components') + }}
+ {{ totalComponents }}
- {{ $t('message.vulnerable_components') }}
- {{vulnerableComponents}} + {{ + $t('message.vulnerable_components') + }}
+ {{ vulnerableComponents }}
@@ -261,14 +500,20 @@ - {{ $t('message.portfolio_vulnerabilities') }}
- {{vulnerabilities}} + {{ + $t('message.portfolio_vulnerabilities') + }}
+ {{ vulnerabilities }}
- {{ $t('message.suppressed') }}
- {{suppressed}} + {{ + $t('message.suppressed') + }}
+ {{ suppressed }}
@@ -279,14 +524,20 @@ - {{ $t('message.policy_violations') }}
- {{totalViolations}} + {{ + $t('message.policy_violations') + }}
+ {{ totalViolations }}
- {{ $t('policy_violation.license') }}
- {{licenseViolations}} + {{ + $t('policy_violation.license') + }}
+ {{ licenseViolations }}
@@ -295,14 +546,20 @@ - {{ $t('policy_violation.operational') }}
- {{operationalViolations}} + {{ + $t('policy_violation.operational') + }}
+ {{ operationalViolations }}
- {{ $t('policy_violation.security') }}
- {{securityViolations}} + {{ + $t('policy_violation.security') + }}
+ {{ securityViolations }}
@@ -311,176 +568,276 @@
-
diff --git a/src/views/administration/AdminMenu.vue b/src/views/administration/AdminMenu.vue index 6984c03b6..3afaca14b 100644 --- a/src/views/administration/AdminMenu.vue +++ b/src/views/administration/AdminMenu.vue @@ -1,307 +1,334 @@ diff --git a/src/views/administration/Administration.vue b/src/views/administration/Administration.vue index 203765c83..73ac0f626 100644 --- a/src/views/administration/Administration.vue +++ b/src/views/administration/Administration.vue @@ -15,66 +15,97 @@ diff --git a/src/views/administration/repositories/Cargo.vue b/src/views/administration/repositories/Cargo.vue index 51dfb0b44..8e79c13bd 100644 --- a/src/views/administration/repositories/Cargo.vue +++ b/src/views/administration/repositories/Cargo.vue @@ -3,13 +3,13 @@ diff --git a/src/views/administration/repositories/Composer.vue b/src/views/administration/repositories/Composer.vue index 930fdae95..8ea3e75ba 100644 --- a/src/views/administration/repositories/Composer.vue +++ b/src/views/administration/repositories/Composer.vue @@ -3,13 +3,13 @@ diff --git a/src/views/administration/repositories/Cpan.vue b/src/views/administration/repositories/Cpan.vue index 585b715fb..22a1da8a8 100644 --- a/src/views/administration/repositories/Cpan.vue +++ b/src/views/administration/repositories/Cpan.vue @@ -3,13 +3,13 @@ diff --git a/src/views/administration/repositories/Gem.vue b/src/views/administration/repositories/Gem.vue index a1b7a11b3..3715a41c8 100644 --- a/src/views/administration/repositories/Gem.vue +++ b/src/views/administration/repositories/Gem.vue @@ -3,13 +3,13 @@ diff --git a/src/views/administration/repositories/GitHub.vue b/src/views/administration/repositories/GitHub.vue index 1e2f1c35c..8585f9e9a 100644 --- a/src/views/administration/repositories/GitHub.vue +++ b/src/views/administration/repositories/GitHub.vue @@ -3,13 +3,13 @@ diff --git a/src/views/administration/repositories/GoModules.vue b/src/views/administration/repositories/GoModules.vue index f30f2a30b..36cdb9cb6 100644 --- a/src/views/administration/repositories/GoModules.vue +++ b/src/views/administration/repositories/GoModules.vue @@ -3,13 +3,13 @@ diff --git a/src/views/administration/repositories/Hex.vue b/src/views/administration/repositories/Hex.vue index 91d0082e0..4fb46c088 100644 --- a/src/views/administration/repositories/Hex.vue +++ b/src/views/administration/repositories/Hex.vue @@ -3,13 +3,13 @@ diff --git a/src/views/administration/repositories/Maven.vue b/src/views/administration/repositories/Maven.vue index 024b79aeb..05baa22c4 100644 --- a/src/views/administration/repositories/Maven.vue +++ b/src/views/administration/repositories/Maven.vue @@ -3,13 +3,13 @@ diff --git a/src/views/administration/repositories/Npm.vue b/src/views/administration/repositories/Npm.vue index c2b39540c..e65b263d1 100644 --- a/src/views/administration/repositories/Npm.vue +++ b/src/views/administration/repositories/Npm.vue @@ -3,13 +3,13 @@ diff --git a/src/views/administration/repositories/Nuget.vue b/src/views/administration/repositories/Nuget.vue index 44d98d13c..e3512976b 100644 --- a/src/views/administration/repositories/Nuget.vue +++ b/src/views/administration/repositories/Nuget.vue @@ -3,13 +3,13 @@ diff --git a/src/views/administration/repositories/Python.vue b/src/views/administration/repositories/Python.vue index 4cd7bf4be..2cac02a05 100644 --- a/src/views/administration/repositories/Python.vue +++ b/src/views/administration/repositories/Python.vue @@ -3,13 +3,13 @@ diff --git a/src/views/administration/repositories/Repositories.vue b/src/views/administration/repositories/Repositories.vue index 94e8dc030..7ea296d9f 100644 --- a/src/views/administration/repositories/Repositories.vue +++ b/src/views/administration/repositories/Repositories.vue @@ -2,7 +2,11 @@
- + {{ $t('admin.create_repository') }}
@@ -10,125 +14,129 @@ ref="table" :columns="columns" :data="data" - :options="options"> + :options="options" + >
- +
diff --git a/src/views/administration/repositories/RepositoryCreateRepositoryModal.vue b/src/views/administration/repositories/RepositoryCreateRepositoryModal.vue index e202f26be..23a759e5d 100644 --- a/src/views/administration/repositories/RepositoryCreateRepositoryModal.vue +++ b/src/views/administration/repositories/RepositoryCreateRepositoryModal.vue @@ -1,5 +1,12 @@ diff --git a/src/views/administration/vuln-sources/EcosystemModal.vue b/src/views/administration/vuln-sources/EcosystemModal.vue index 33abc4a81..4d514e928 100644 --- a/src/views/administration/vuln-sources/EcosystemModal.vue +++ b/src/views/administration/vuln-sources/EcosystemModal.vue @@ -1,68 +1,82 @@ \ No newline at end of file + }, + ], + data: [], + options: { + search: true, + showColumns: true, + showRefresh: true, + pagination: true, + silentSort: false, + sidePagination: 'client', + queryParamsType: 'pageSize', + pageList: '[10, 25, 50, 100]', + pageSize: 10, + icons: { + refresh: 'fa-refresh', + }, + responseHandler: function (res, xhr) { + res.total = xhr.getResponseHeader('X-Total-Count'); + return res.map((ecosystem) => ({ + name: ecosystem, + })); + }, + url: `${this.$api.BASE_URL}/${this.$api.URL_OSV_ECOSYSTEM}/inactive`, + }, + }; + }, +}; + diff --git a/src/views/administration/vuln-sources/VulnSourceGitHubAdvisories.vue b/src/views/administration/vuln-sources/VulnSourceGitHubAdvisories.vue index 3c3fa2cb7..852307b68 100644 --- a/src/views/administration/vuln-sources/VulnSourceGitHubAdvisories.vue +++ b/src/views/administration/vuln-sources/VulnSourceGitHubAdvisories.vue @@ -1,8 +1,8 @@ diff --git a/src/views/components/PolicyViolationProgressBar.vue b/src/views/components/PolicyViolationProgressBar.vue index be13a8916..a766fd6e3 100644 --- a/src/views/components/PolicyViolationProgressBar.vue +++ b/src/views/components/PolicyViolationProgressBar.vue @@ -6,29 +6,52 @@ - - - - + + + + - -
-
{{$t('message.type')}}
-

- {{$t('policy_violation.license')}}: {{ metrics.policyViolationsLicenseTotal }}
- {{$t('policy_violation.operational')}}: {{ metrics.policyViolationsOperationalTotal }}
- {{$t('policy_violation.security')}}: {{ metrics.policyViolationsSecurityTotal }}
-

-
{{ $t('message.violation_state') }}
-

- {{$t('policy_violation.infos')}}: {{ metrics.policyViolationsInfo }}
- {{$t('policy_violation.warns')}}: {{ metrics.policyViolationsWarn }}
- {{$t('policy_violation.fails')}}: {{ metrics.policyViolationsFail }}
-

- {{$t('message.total')}}: {{ metrics.policyViolationsTotal }} -
-
+ +
+
{{ $t('message.type') }}
+

+ {{ $t('policy_violation.license') }}: + {{ metrics.policyViolationsLicenseTotal }}
+ {{ $t('policy_violation.operational') }}: + {{ metrics.policyViolationsOperationalTotal }}
+ {{ $t('policy_violation.security') }}: + {{ metrics.policyViolationsSecurityTotal }}
+

+
{{ $t('message.violation_state') }}
+

+ {{ $t('policy_violation.infos') }}: {{ metrics.policyViolationsInfo + }}
+ {{ $t('policy_violation.warns') }}: {{ metrics.policyViolationsWarn + }}
+ {{ $t('policy_violation.fails') }}: {{ metrics.policyViolationsFail + }}
+

+ {{ $t('message.total') }}: {{ metrics.policyViolationsTotal }} +
+
@@ -44,5 +67,5 @@ export default { hoverId: Math.random().toString(36), }; }, -} +}; diff --git a/src/views/components/ProfileEditModal.vue b/src/views/components/ProfileEditModal.vue index 95f63d1a6..088922b0c 100644 --- a/src/views/components/ProfileEditModal.vue +++ b/src/views/components/ProfileEditModal.vue @@ -1,66 +1,96 @@ diff --git a/src/views/components/SeverityProgressBar.vue b/src/views/components/SeverityProgressBar.vue index a2b9af7d3..a991131a5 100644 --- a/src/views/components/SeverityProgressBar.vue +++ b/src/views/components/SeverityProgressBar.vue @@ -7,45 +7,58 @@ - + - + - + - -
-
{{$t('message.severity')}}
+ +
+
{{ $t('message.severity') }}

- {{$t('severity.critical')}}: {{ critical }}
- {{$t('severity.high')}}: {{ high }}
- {{$t('severity.medium')}}: {{ medium }}
- {{$t('severity.low')}}: {{ low }}
- {{$t('severity.unassigned')}}: {{ unassigned }}
+ {{ $t('severity.critical') }}: {{ critical }}
+ {{ $t('severity.high') }}: {{ high }}
+ {{ $t('severity.medium') }}: {{ medium }}
+ {{ $t('severity.low') }}: {{ low }}
+ {{ $t('severity.unassigned') }}: {{ unassigned }}

- {{$t('message.total')}}: {{ vulnerabilities }} + {{ $t('message.total') }}: {{ vulnerabilities }}
diff --git a/src/views/components/Showdown.vue b/src/views/components/Showdown.vue index 7e3ab3cea..7bbf8abb9 100644 --- a/src/views/components/Showdown.vue +++ b/src/views/components/Showdown.vue @@ -3,22 +3,22 @@ diff --git a/src/views/components/SnapshotModal.vue b/src/views/components/SnapshotModal.vue index 02003cc89..3d9c757d2 100644 --- a/src/views/components/SnapshotModal.vue +++ b/src/views/components/SnapshotModal.vue @@ -1,16 +1,22 @@ diff --git a/src/views/dashboard/ChartAuditingFindingsProgress.vue b/src/views/dashboard/ChartAuditingFindingsProgress.vue index d0e17a2cd..969a71dc4 100644 --- a/src/views/dashboard/ChartAuditingFindingsProgress.vue +++ b/src/views/dashboard/ChartAuditingFindingsProgress.vue @@ -1,36 +1,37 @@ diff --git a/src/views/dashboard/ChartAuditingViolationsProgress.vue b/src/views/dashboard/ChartAuditingViolationsProgress.vue index 3f9a1eaf0..b66169ae2 100644 --- a/src/views/dashboard/ChartAuditingViolationsProgress.vue +++ b/src/views/dashboard/ChartAuditingViolationsProgress.vue @@ -1,36 +1,37 @@ diff --git a/src/views/dashboard/ChartComponentVulnerabilities.vue b/src/views/dashboard/ChartComponentVulnerabilities.vue index fbe6a4b99..932b9849c 100644 --- a/src/views/dashboard/ChartComponentVulnerabilities.vue +++ b/src/views/dashboard/ChartComponentVulnerabilities.vue @@ -1,40 +1,45 @@ diff --git a/src/views/dashboard/ChartEpssVsCvss.vue b/src/views/dashboard/ChartEpssVsCvss.vue index 69316cfe8..30e22553c 100644 --- a/src/views/dashboard/ChartEpssVsCvss.vue +++ b/src/views/dashboard/ChartEpssVsCvss.vue @@ -1,108 +1,122 @@ diff --git a/src/views/dashboard/ChartPolicyViolationBreakdown.vue b/src/views/dashboard/ChartPolicyViolationBreakdown.vue index 56579fa9a..0364d28be 100644 --- a/src/views/dashboard/ChartPolicyViolationBreakdown.vue +++ b/src/views/dashboard/ChartPolicyViolationBreakdown.vue @@ -4,40 +4,65 @@
{{ $t('message.security_risk') }} - {{ securityCount }} ({{ securityPercent }}%) + {{ securityCount }} + ({{ securityPercent }}%)
- +
{{ $t('message.license_risk') }} - {{ licenseCount }} ({{ licensePercent }}%) + {{ licenseCount }} + ({{ licensePercent }}%)
- +
{{ $t('message.operational_risk') }} - {{ operationalCount }} ({{ operationalPercent }}%) + {{ operationalCount }} + ({{ operationalPercent }}%)
- +
diff --git a/src/views/dashboard/ChartPolicyViolationsClassification.vue b/src/views/dashboard/ChartPolicyViolationsClassification.vue index 3ccc0f4a2..e56931f99 100644 --- a/src/views/dashboard/ChartPolicyViolationsClassification.vue +++ b/src/views/dashboard/ChartPolicyViolationsClassification.vue @@ -1,15 +1,15 @@ diff --git a/src/views/dashboard/ChartPolicyViolationsState.vue b/src/views/dashboard/ChartPolicyViolationsState.vue index 27c3641e1..20e187028 100644 --- a/src/views/dashboard/ChartPolicyViolationsState.vue +++ b/src/views/dashboard/ChartPolicyViolationsState.vue @@ -1,16 +1,16 @@ diff --git a/src/views/dashboard/ChartPortfolioVulnerabilities.vue b/src/views/dashboard/ChartPortfolioVulnerabilities.vue index c0c9f1e66..1da1ebea0 100644 --- a/src/views/dashboard/ChartPortfolioVulnerabilities.vue +++ b/src/views/dashboard/ChartPortfolioVulnerabilities.vue @@ -1,48 +1,49 @@ diff --git a/src/views/dashboard/ChartProjectVulnerabilities.vue b/src/views/dashboard/ChartProjectVulnerabilities.vue index dffc4d938..ceb4dc118 100644 --- a/src/views/dashboard/ChartProjectVulnerabilities.vue +++ b/src/views/dashboard/ChartProjectVulnerabilities.vue @@ -1,40 +1,45 @@ diff --git a/src/views/dashboard/PortfolioWidgetRow.vue b/src/views/dashboard/PortfolioWidgetRow.vue index cea73e117..96444e4cc 100644 --- a/src/views/dashboard/PortfolioWidgetRow.vue +++ b/src/views/dashboard/PortfolioWidgetRow.vue @@ -6,7 +6,13 @@

{{ portfolioVulnerabilities }}

{{ $t('message.portfolio_vulnerabilities') }}

- + @@ -15,7 +21,13 @@

{{ vulnerableProjects }}

{{ $t('message.projects_at_risk') }}

- +
@@ -24,7 +36,13 @@

{{ vulnerableComponents }}

{{ $t('message.vulnerable_components') }}

- +
@@ -33,60 +51,68 @@

{{ inheritedRiskScore }}

{{ $t('message.inherited_risk_score') }}

- +
diff --git a/src/views/dashboard/SeverityBarChart.vue b/src/views/dashboard/SeverityBarChart.vue index 1fd105814..b7d8e4fe9 100644 --- a/src/views/dashboard/SeverityBarChart.vue +++ b/src/views/dashboard/SeverityBarChart.vue @@ -1,63 +1,73 @@ diff --git a/src/views/dashboard/WidgetInheritedRiskScore.vue b/src/views/dashboard/WidgetInheritedRiskScore.vue index 43ffedba2..1ec938bb3 100644 --- a/src/views/dashboard/WidgetInheritedRiskScore.vue +++ b/src/views/dashboard/WidgetInheritedRiskScore.vue @@ -1,14 +1,14 @@ diff --git a/src/views/dashboard/WidgetPortfolioVulnerabilities.vue b/src/views/dashboard/WidgetPortfolioVulnerabilities.vue index 8ef1a31a9..fb6041369 100644 --- a/src/views/dashboard/WidgetPortfolioVulnerabilities.vue +++ b/src/views/dashboard/WidgetPortfolioVulnerabilities.vue @@ -1,17 +1,17 @@ diff --git a/src/views/dashboard/WidgetProjectsAtRisk.vue b/src/views/dashboard/WidgetProjectsAtRisk.vue index 5bf4f218c..463556a3b 100644 --- a/src/views/dashboard/WidgetProjectsAtRisk.vue +++ b/src/views/dashboard/WidgetProjectsAtRisk.vue @@ -1,14 +1,14 @@ diff --git a/src/views/dashboard/WidgetVulnerableComponents.vue b/src/views/dashboard/WidgetVulnerableComponents.vue index 2fb75c7f8..24a79f6e5 100644 --- a/src/views/dashboard/WidgetVulnerableComponents.vue +++ b/src/views/dashboard/WidgetVulnerableComponents.vue @@ -1,14 +1,14 @@ diff --git a/src/views/globalAudit/VulnerabilityAudit.vue b/src/views/globalAudit/VulnerabilityAudit.vue index e34c2e1d4..8de10af22 100644 --- a/src/views/globalAudit/VulnerabilityAudit.vue +++ b/src/views/globalAudit/VulnerabilityAudit.vue @@ -1,12 +1,37 @@ diff --git a/src/views/globalAudit/VulnerabilityAuditByOccurrence.vue b/src/views/globalAudit/VulnerabilityAuditByOccurrence.vue index e30cb3c45..806e1f351 100644 --- a/src/views/globalAudit/VulnerabilityAuditByOccurrence.vue +++ b/src/views/globalAudit/VulnerabilityAuditByOccurrence.vue @@ -3,79 +3,195 @@
-

{{ this.$t('message.filters') }}

- {{ this.$t('message.clear_all') }} -

- +

{{ this.$t('message.filters') }}

+ + {{ this.$t('message.clear_all') }} +

+ + unchecked-value="false" + > {{ this.$t('message.show_inactive_projects') }} - + + unchecked-value="false" + > {{ this.$t('message.show_suppressed_findings') }} - + + stacked + > - + + stacked + > - + + stacked + > - - - + + + - - - + + + - - + + Search in: + stacked + > - + - - + + - + - - + +
@@ -86,7 +202,8 @@ :columns="columns" :data="data" :options="options" - @on-load-success="onLoadSuccess"> + @on-load-success="onLoadSuccess" + >
@@ -94,404 +211,534 @@ diff --git a/src/views/globalAudit/VulnerabilityAuditGroupedByVulnerability.vue b/src/views/globalAudit/VulnerabilityAuditGroupedByVulnerability.vue index 26edf5897..893045c8e 100644 --- a/src/views/globalAudit/VulnerabilityAuditGroupedByVulnerability.vue +++ b/src/views/globalAudit/VulnerabilityAuditGroupedByVulnerability.vue @@ -2,56 +2,173 @@
-

{{ this.$t('message.filters') }}

- {{ this.$t('message.clear_all') }} -

- +

{{ this.$t('message.filters') }}

+ + {{ this.$t('message.clear_all') }} +

+ + unchecked-value="false" + > {{ this.$t('message.show_inactive_projects') }} - + + stacked + > - - - + + + - - + + Search in: + stacked + > - + - - + + - + - - + + - + - - + +
@@ -61,7 +178,8 @@ :columns="columns" :data="data" :options="options" - @on-load-success="onLoadSuccess"> + @on-load-success="onLoadSuccess" + >
@@ -69,340 +187,449 @@ diff --git a/src/views/modals/InformationalModal.vue b/src/views/modals/InformationalModal.vue index ea59a7758..a91936428 100644 --- a/src/views/modals/InformationalModal.vue +++ b/src/views/modals/InformationalModal.vue @@ -3,7 +3,10 @@
-
+
@@ -12,16 +15,20 @@
diff --git a/src/views/pages/Login.vue b/src/views/pages/Login.vue index 7d013eb1c..4ed9cb25c 100644 --- a/src/views/pages/Login.vue +++ b/src/views/pages/Login.vue @@ -37,33 +37,52 @@ lazy="true" v-show="showLoginForm" /> - + {{ $t('message.login') }} + >{{ $t('message.login') }} - - {{ oidcLoginButtonText() }} - OpenID Logo + + {{ + oidcLoginButtonText() + }} + OpenID Logo {{ $t('message.login_more_options') }} + v-show="oidcAvailable && !showLoginForm" + v-on:click="showLoginForm = true" + >{{ $t('message.login_more_options') }} - +
- +
@@ -76,125 +95,133 @@ diff --git a/src/views/pages/Page404.vue b/src/views/pages/Page404.vue index fee9c2a73..5d8e9005f 100644 --- a/src/views/pages/Page404.vue +++ b/src/views/pages/Page404.vue @@ -8,7 +8,9 @@

{{ $t('404.heading') }}

{{ $t('404.message') }}

- {{ $t('404.action') }} + {{ + $t('404.action') + }}
@@ -16,7 +18,7 @@ diff --git a/src/views/pages/PasswordForceChange.vue b/src/views/pages/PasswordForceChange.vue index 3b6118fa6..f4d987cb5 100644 --- a/src/views/pages/PasswordForceChange.vue +++ b/src/views/pages/PasswordForceChange.vue @@ -9,7 +9,9 @@

{{ $t('message.password_force_change') }}

-

{{ $t('message.password_force_change_desc') }}

+

+ {{ $t('message.password_force_change_desc') }} +

- {{ $t('message.password_change') }} + {{ $t('message.password_change') }}
- +
- +
@@ -70,70 +85,76 @@
- +
diff --git a/src/views/policy/CreateLicenseGroupModal.vue b/src/views/policy/CreateLicenseGroupModal.vue index e6e82936d..c4544c1be 100644 --- a/src/views/policy/CreateLicenseGroupModal.vue +++ b/src/views/policy/CreateLicenseGroupModal.vue @@ -1,51 +1,66 @@ diff --git a/src/views/policy/CreatePolicyModal.vue b/src/views/policy/CreatePolicyModal.vue index 21bc099f2..fbc25778d 100644 --- a/src/views/policy/CreatePolicyModal.vue +++ b/src/views/policy/CreatePolicyModal.vue @@ -1,52 +1,68 @@ diff --git a/src/views/policy/LicenseGroupList.vue b/src/views/policy/LicenseGroupList.vue index 9f16b7ea0..2a26ca2c2 100644 --- a/src/views/policy/LicenseGroupList.vue +++ b/src/views/policy/LicenseGroupList.vue @@ -1,8 +1,14 @@ diff --git a/src/views/policy/PolicyCondition.vue b/src/views/policy/PolicyCondition.vue index e40f377ed..205999aae 100644 --- a/src/views/policy/PolicyCondition.vue +++ b/src/views/policy/PolicyCondition.vue @@ -1,402 +1,541 @@ diff --git a/src/views/policy/PolicyList.vue b/src/views/policy/PolicyList.vue index 2710b31c2..9b430c7b7 100644 --- a/src/views/policy/PolicyList.vue +++ b/src/views/policy/PolicyList.vue @@ -1,7 +1,12 @@ diff --git a/src/views/policy/PolicyManagement.vue b/src/views/policy/PolicyManagement.vue index bfd7c66f1..3cc1cd92b 100644 --- a/src/views/policy/PolicyManagement.vue +++ b/src/views/policy/PolicyManagement.vue @@ -1,12 +1,30 @@ diff --git a/src/views/policy/SelectLicenseModal.vue b/src/views/policy/SelectLicenseModal.vue index 12f787057..a61d9fcf7 100644 --- a/src/views/policy/SelectLicenseModal.vue +++ b/src/views/policy/SelectLicenseModal.vue @@ -1,76 +1,92 @@ diff --git a/src/views/portfolio/components/ComponentSearch.vue b/src/views/portfolio/components/ComponentSearch.vue index ef9ab9e85..984e2f946 100644 --- a/src/views/portfolio/components/ComponentSearch.vue +++ b/src/views/portfolio/components/ComponentSearch.vue @@ -3,20 +3,53 @@
- - - - - - - - - - - - - {{ $t('message.search') }} - + + + + + + + + + + + + + {{ + $t('message.search') + }} +
+ @on-pre-body="onPreBody" + > diff --git a/src/views/portfolio/licenses/License.vue b/src/views/portfolio/licenses/License.vue index 77e8a77d3..854720594 100644 --- a/src/views/portfolio/licenses/License.vue +++ b/src/views/portfolio/licenses/License.vue @@ -1,7 +1,16 @@ diff --git a/src/views/portfolio/licenses/LicenseAddLicenseModal.vue b/src/views/portfolio/licenses/LicenseAddLicenseModal.vue index a1a35866f..4dc4862d5 100644 --- a/src/views/portfolio/licenses/LicenseAddLicenseModal.vue +++ b/src/views/portfolio/licenses/LicenseAddLicenseModal.vue @@ -1,88 +1,172 @@ diff --git a/src/views/portfolio/licenses/LicenseList.vue b/src/views/portfolio/licenses/LicenseList.vue index 50cc949a6..4f2cac108 100644 --- a/src/views/portfolio/licenses/LicenseList.vue +++ b/src/views/portfolio/licenses/LicenseList.vue @@ -2,7 +2,12 @@
- + {{ $t('message.add_license') }}
@@ -11,134 +16,155 @@ :columns="columns" :data="data" :options="options" - @on-load-success="onLoadSuccess"> + @on-load-success="onLoadSuccess" + > - +
diff --git a/src/views/portfolio/projects/Component.vue b/src/views/portfolio/projects/Component.vue index 32c7ecfb5..201f247cd 100644 --- a/src/views/portfolio/projects/Component.vue +++ b/src/views/portfolio/projects/Component.vue @@ -6,70 +6,92 @@
{{ componentLabel }}
- +
- {{ currentCritical }} - {{ currentHigh }} - {{ currentMedium }} - {{ currentLow }} - {{ currentUnassigned }} + {{ currentCritical }} + {{ currentHigh }} + {{ currentMedium }} + {{ currentLow }} + {{ currentUnassigned }} @@ -77,163 +99,224 @@ - - - - + + + + - - + + - + diff --git a/src/views/portfolio/projects/ComponentDashboard.vue b/src/views/portfolio/projects/ComponentDashboard.vue index d279cfc76..f59da26df 100644 --- a/src/views/portfolio/projects/ComponentDashboard.vue +++ b/src/views/portfolio/projects/ComponentDashboard.vue @@ -1,31 +1,47 @@ diff --git a/src/views/portfolio/projects/ComponentDetailsModal.vue b/src/views/portfolio/projects/ComponentDetailsModal.vue index bad34887b..c6906db25 100644 --- a/src/views/portfolio/projects/ComponentDetailsModal.vue +++ b/src/views/portfolio/projects/ComponentDetailsModal.vue @@ -1,320 +1,542 @@ diff --git a/src/views/portfolio/projects/ComponentVulnerabilities.vue b/src/views/portfolio/projects/ComponentVulnerabilities.vue index a38a85e97..f983b5ac0 100644 --- a/src/views/portfolio/projects/ComponentVulnerabilities.vue +++ b/src/views/portfolio/projects/ComponentVulnerabilities.vue @@ -5,189 +5,221 @@ :columns="columns" :data="data" :options="options" - @on-load-success="tableLoaded"> + @on-load-success="tableLoaded" + > diff --git a/src/views/portfolio/projects/FindingAudit.vue b/src/views/portfolio/projects/FindingAudit.vue index b271d8d4d..2668c0780 100644 --- a/src/views/portfolio/projects/FindingAudit.vue +++ b/src/views/portfolio/projects/FindingAudit.vue @@ -1,247 +1,472 @@ \ No newline at end of file + addComment: function () { + if (this.comment != null) { + this.callRestEndpoint( + this.analysisState, + this.analysisJustification, + this.analysisResponse, + this.analysisDetails, + this.comment, + null, + ); + } + this.comment = null; + }, + callRestEndpoint: function ( + analysisState, + analysisJustification, + analysisResponse, + analysisDetails, + comment, + isSuppressed, + ) { + let url = `${this.$api.BASE_URL}/${this.$api.URL_ANALYSIS}`; + this.axios + .put(url, { + project: this.projectUuid, + component: this.finding.component.uuid, + vulnerability: this.finding.vulnerability.uuid, + analysisState: analysisState, + analysisJustification: analysisJustification, + analysisResponse: analysisResponse, + analysisDetails: analysisDetails, + comment: comment, + isSuppressed: isSuppressed, + }) + .then((response) => { + this.$toastr.s(this.$t('message.updated')); + this.updateAnalysisData(response.data); + }) + .catch(() => { + this.$toastr.w(this.$t('condition.unsuccessful_action')); + }); + }, + }, + beforeMount() { + this.finding && this.getAnalysis(); + }, + components: { + BootstrapToggle, + }, +}; + diff --git a/src/views/portfolio/projects/Project.vue b/src/views/portfolio/projects/Project.vue index 1511e72d7..7bceb52d5 100644 --- a/src/views/portfolio/projects/Project.vue +++ b/src/views/portfolio/projects/Project.vue @@ -4,17 +4,49 @@ - +
{{ project.name }} -
    +
      @@ -22,80 +54,104 @@ {{ project.version }} - {{ project.description }} + {{ project.description }}
- {{ tag.name }} + {{ tag.name }}
- {{ currentCritical }} - {{ currentHigh }} - {{ currentMedium }} - {{ currentLow }} - {{ currentUnassigned }} + {{ currentCritical }} + {{ currentHigh }} + {{ currentMedium }} + {{ currentLow }} + {{ currentUnassigned }}
@@ -103,56 +159,167 @@ - - - - + + + + - - + + - - + + - - + + - + - + - - - + + + - - - + + + - + @@ -160,178 +327,219 @@ diff --git a/src/views/portfolio/projects/ProjectAddComponentModal.vue b/src/views/portfolio/projects/ProjectAddComponentModal.vue index 974cc0671..1faf4fb0d 100644 --- a/src/views/portfolio/projects/ProjectAddComponentModal.vue +++ b/src/views/portfolio/projects/ProjectAddComponentModal.vue @@ -1,142 +1,311 @@ diff --git a/src/views/portfolio/projects/ProjectAddVersionModal.vue b/src/views/portfolio/projects/ProjectAddVersionModal.vue index f12d0bd71..b332e1151 100644 --- a/src/views/portfolio/projects/ProjectAddVersionModal.vue +++ b/src/views/portfolio/projects/ProjectAddVersionModal.vue @@ -1,63 +1,132 @@ diff --git a/src/views/portfolio/projects/ProjectComponents.vue b/src/views/portfolio/projects/ProjectComponents.vue index cfc64dcfd..8f14c3f3a 100644 --- a/src/views/portfolio/projects/ProjectComponents.vue +++ b/src/views/portfolio/projects/ProjectComponents.vue @@ -2,37 +2,92 @@
- + {{ $t('message.add_component') }} - + {{ $t('message.remove_component') }} - + {{ $t('message.upload_bom') }} - {{ $t('message.upload_bom_tooltip') }} - + {{ + $t('message.upload_bom_tooltip') + }} + - {{ $t('message.inventory') }} - {{ $t('message.inventory_with_vulnerabilities') }} + {{ + $t('message.inventory') + }} + {{ $t('message.inventory_with_vulnerabilities') }} - - - {{ $t('message.outdated_only') }} - {{ $t('message.only_outdated_tooltip') }} - - - {{ $t('message.direct_only') }} - {{ $t('message.only_direct_tooltip') }} + + + {{ + $t('message.outdated_only') + }} + {{ + $t('message.only_outdated_tooltip') + }} + + + {{ $t('message.direct_only') }} + {{ + $t('message.only_direct_tooltip') + }}
+ @on-load-success="tableLoaded" + > - +
diff --git a/src/views/portfolio/projects/ProjectCreateProjectModal.vue b/src/views/portfolio/projects/ProjectCreateProjectModal.vue index 9a073e7c6..bc9062ac3 100644 --- a/src/views/portfolio/projects/ProjectCreateProjectModal.vue +++ b/src/views/portfolio/projects/ProjectCreateProjectModal.vue @@ -1,64 +1,168 @@ diff --git a/src/views/portfolio/projects/ProjectCreatePropertyModal.vue b/src/views/portfolio/projects/ProjectCreatePropertyModal.vue index dbcbc6488..71780fd4b 100644 --- a/src/views/portfolio/projects/ProjectCreatePropertyModal.vue +++ b/src/views/portfolio/projects/ProjectCreatePropertyModal.vue @@ -1,100 +1,128 @@ diff --git a/src/views/portfolio/projects/ProjectDashboard.vue b/src/views/portfolio/projects/ProjectDashboard.vue index e2d4125cf..f3b25aad1 100644 --- a/src/views/portfolio/projects/ProjectDashboard.vue +++ b/src/views/portfolio/projects/ProjectDashboard.vue @@ -1,43 +1,57 @@ diff --git a/src/views/portfolio/projects/ProjectDependencyGraph.vue b/src/views/portfolio/projects/ProjectDependencyGraph.vue index 38bd87326..73553a16e 100644 --- a/src/views/portfolio/projects/ProjectDependencyGraph.vue +++ b/src/views/portfolio/projects/ProjectDependencyGraph.vue @@ -2,50 +2,93 @@
Loading, please wait...
-
- - +
+ + {{ $t('message.show_complete_graph') }} - - {{$t('message.show_update_information')}}
+ + {{ $t('message.show_update_information') }}
- {{ $t('message.not_found_in_dependency_graph') }}
+ {{ + $t('message.not_found_in_dependency_graph') + }}
diff --git a/src/views/portfolio/projects/ProjectEpss.vue b/src/views/portfolio/projects/ProjectEpss.vue index c037a1507..6c8a6a4d2 100644 --- a/src/views/portfolio/projects/ProjectEpss.vue +++ b/src/views/portfolio/projects/ProjectEpss.vue @@ -1,13 +1,28 @@ diff --git a/src/views/portfolio/projects/ProjectFindings.vue b/src/views/portfolio/projects/ProjectFindings.vue index 3b0165d99..7cabc660a 100644 --- a/src/views/portfolio/projects/ProjectFindings.vue +++ b/src/views/portfolio/projects/ProjectFindings.vue @@ -5,34 +5,67 @@ dropdown for version is changes, the table will not update. For whatever reason, adding the toolbar fixes it. -->
- + {{ $t('message.apply_vex') }} - {{ $t('message.apply_vex_tooltip') }} + {{ + $t('message.apply_vex_tooltip') + }} - + {{ $t('message.export_vex') }} - {{ $t('message.export_vex_tooltip') }} + {{ + $t('message.export_vex_tooltip') + }} - + {{ $t('message.export_vdr') }} - {{ $t('message.export_vdr_tooltip') }} + {{ + $t('message.export_vdr_tooltip') + }} - - {{ $t('message.project_reanalyze') }} + + + {{ $t('message.project_reanalyze') }} - {{ $t('message.project_reanalyze_tooltip') }} - + {{ + $t('message.project_reanalyze_tooltip') + }} - {{ $t('message.show_suppressed_findings') }} + {{ + $t('message.show_suppressed_findings') + }}
+ @on-load-success="tableLoaded" + > @@ -60,263 +103,355 @@ diff --git a/src/views/portfolio/projects/ProjectList.vue b/src/views/portfolio/projects/ProjectList.vue index 255ff29a3..9e8229fdd 100644 --- a/src/views/portfolio/projects/ProjectList.vue +++ b/src/views/portfolio/projects/ProjectList.vue @@ -2,11 +2,36 @@
- + {{ $t('message.create_project') }} - {{ $t('message.show_inactive_projects') }} - {{ $t('message.show_flat_view') }} + {{ + $t('message.show_inactive_projects') + }} + {{ $t('message.show_flat_view') }}
+ @on-post-body="onPostBody" + > - +
diff --git a/src/views/portfolio/projects/ProjectPolicyViolations.vue b/src/views/portfolio/projects/ProjectPolicyViolations.vue index 2f187385f..75295f363 100644 --- a/src/views/portfolio/projects/ProjectPolicyViolations.vue +++ b/src/views/portfolio/projects/ProjectPolicyViolations.vue @@ -5,7 +5,16 @@ dropdown for version is changes, the table will not update. For whatever reason, adding the toolbar fixes it. -->
- {{ $t('message.show_suppressed_violations') }} + {{ + $t('message.show_suppressed_violations') + }}
+ @on-load-success="tableLoaded" + >
diff --git a/src/views/portfolio/projects/ProjectPropertiesModal.vue b/src/views/portfolio/projects/ProjectPropertiesModal.vue index 5d17ee2f9..f5dbeae08 100644 --- a/src/views/portfolio/projects/ProjectPropertiesModal.vue +++ b/src/views/portfolio/projects/ProjectPropertiesModal.vue @@ -1,124 +1,144 @@ diff --git a/src/views/portfolio/projects/ProjectServices.vue b/src/views/portfolio/projects/ProjectServices.vue index 00367939b..7b9d9838f 100644 --- a/src/views/portfolio/projects/ProjectServices.vue +++ b/src/views/portfolio/projects/ProjectServices.vue @@ -5,83 +5,86 @@ :columns="columns" :data="data" :options="options" - @on-load-success="tableLoaded"> + @on-load-success="tableLoaded" + > diff --git a/src/views/portfolio/projects/ProjectUploadBomModal.vue b/src/views/portfolio/projects/ProjectUploadBomModal.vue index c1a7b8f4c..abdb1675c 100644 --- a/src/views/portfolio/projects/ProjectUploadBomModal.vue +++ b/src/views/portfolio/projects/ProjectUploadBomModal.vue @@ -1,50 +1,72 @@ diff --git a/src/views/portfolio/projects/ProjectUploadVexModal.vue b/src/views/portfolio/projects/ProjectUploadVexModal.vue index 9aa224ddd..8066d9e26 100644 --- a/src/views/portfolio/projects/ProjectUploadVexModal.vue +++ b/src/views/portfolio/projects/ProjectUploadVexModal.vue @@ -1,27 +1,47 @@ diff --git a/src/views/portfolio/projects/SelectProjectModal.vue b/src/views/portfolio/projects/SelectProjectModal.vue index 88178a8da..5aa8ae143 100644 --- a/src/views/portfolio/projects/SelectProjectModal.vue +++ b/src/views/portfolio/projects/SelectProjectModal.vue @@ -1,111 +1,125 @@ diff --git a/src/views/portfolio/projects/Service.vue b/src/views/portfolio/projects/Service.vue index 2231b0627..fe536a187 100644 --- a/src/views/portfolio/projects/Service.vue +++ b/src/views/portfolio/projects/Service.vue @@ -4,100 +4,137 @@ - +
{{ serviceLabel }}
- {{ currentCritical }} - {{ currentHigh }} - {{ currentMedium }} - {{ currentLow }} - {{ currentUnassigned }} + {{ currentCritical }} + {{ currentHigh }} + {{ currentMedium }} + {{ currentLow }} + {{ currentUnassigned }}
- - - - + + + + - + @@ -193,6 +238,6 @@ export default { padding: 0; } .badge { - margin-right: .4rem; + margin-right: 0.4rem; } diff --git a/src/views/portfolio/projects/ServiceDashboard.vue b/src/views/portfolio/projects/ServiceDashboard.vue index a71065fef..892df1e82 100644 --- a/src/views/portfolio/projects/ServiceDashboard.vue +++ b/src/views/portfolio/projects/ServiceDashboard.vue @@ -1,31 +1,47 @@ diff --git a/src/views/portfolio/projects/ServiceDetailsModal.vue b/src/views/portfolio/projects/ServiceDetailsModal.vue index 52ac30de4..48c6b538f 100644 --- a/src/views/portfolio/projects/ServiceDetailsModal.vue +++ b/src/views/portfolio/projects/ServiceDetailsModal.vue @@ -1,147 +1,234 @@ diff --git a/src/views/portfolio/tags/SelectTagModal.vue b/src/views/portfolio/tags/SelectTagModal.vue index 24409646d..586098d37 100644 --- a/src/views/portfolio/tags/SelectTagModal.vue +++ b/src/views/portfolio/tags/SelectTagModal.vue @@ -1,91 +1,105 @@ diff --git a/src/views/portfolio/vulnerabilities/AddAffectedComponentModal.vue b/src/views/portfolio/vulnerabilities/AddAffectedComponentModal.vue index 23b9823f7..e053f4900 100644 --- a/src/views/portfolio/vulnerabilities/AddAffectedComponentModal.vue +++ b/src/views/portfolio/vulnerabilities/AddAffectedComponentModal.vue @@ -1,57 +1,105 @@ diff --git a/src/views/portfolio/vulnerabilities/AffectedProjects.vue b/src/views/portfolio/vulnerabilities/AffectedProjects.vue index bc003f738..09b248226 100644 --- a/src/views/portfolio/vulnerabilities/AffectedProjects.vue +++ b/src/views/portfolio/vulnerabilities/AffectedProjects.vue @@ -1,7 +1,16 @@ diff --git a/src/views/portfolio/vulnerabilities/SelectCweModal.vue b/src/views/portfolio/vulnerabilities/SelectCweModal.vue index 2029df51d..e2cbfcaa2 100644 --- a/src/views/portfolio/vulnerabilities/SelectCweModal.vue +++ b/src/views/portfolio/vulnerabilities/SelectCweModal.vue @@ -1,22 +1,35 @@ diff --git a/src/views/portfolio/vulnerabilities/Vulnerability.vue b/src/views/portfolio/vulnerabilities/Vulnerability.vue index 2fa914b0b..c660415fc 100644 --- a/src/views/portfolio/vulnerabilities/Vulnerability.vue +++ b/src/views/portfolio/vulnerabilities/Vulnerability.vue @@ -13,14 +13,23 @@ {{ vulnerability.title }} - + -
-
- +
+
+
-
{{ severityLabel }}
+
+ {{ severityLabel }} +
@@ -28,69 +37,148 @@
- Published: - {{prettyTimestamp}} - + Published: + + {{ prettyTimestamp }} + Aliases: - {{ alias.vulnId }} + {{ alias.vulnId }}
- - - + + +
- +
-
{{ $t('message.cvss_base_score') }}
- {{cvssBaseScore}} - +
+ {{ $t('message.cvss_base_score') }} +
+ {{ cvssBaseScore }} +
-
{{ $t('message.cvss_impact_subscore') }}
- {{cvssImpactScore}} - +
+ {{ $t('message.cvss_impact_subscore') }} +
+ {{ cvssImpactScore }} +
-
{{ $t('message.cvss_exploitability_subscore') }}
- {{cvssExploitScore}} - +
+ {{ $t('message.cvss_exploitability_subscore') }} +
+ {{ cvssExploitScore }} +
-
{{ $t('message.owasp_rr_likelihood_score') }}
- {{owaspRRLikelihoodScore}} - +
+ {{ $t('message.owasp_rr_likelihood_score') }} +
+ {{ owaspRRLikelihoodScore }} +
-
{{ $t('message.owasp_rr_technical_impact_score') }}
- {{owaspRRTechnicalImpactScore}} - +
+ {{ $t('message.owasp_rr_technical_impact_score') }} +
+ {{ owaspRRTechnicalImpactScore }} +
-
{{ $t('message.owasp_rr_business_impact_score') }}
- {{owaspRRBusinessImpactScore}} - +
+ {{ $t('message.owasp_rr_business_impact_score') }} +
+ {{ owaspRRBusinessImpactScore }} +
@@ -136,222 +224,290 @@
-
- - - + + +
- +
diff --git a/src/views/portfolio/vulnerabilities/VulnerabilityCreateVulnerabilityModal.vue b/src/views/portfolio/vulnerabilities/VulnerabilityCreateVulnerabilityModal.vue index 6ec04de25..fd6411350 100644 --- a/src/views/portfolio/vulnerabilities/VulnerabilityCreateVulnerabilityModal.vue +++ b/src/views/portfolio/vulnerabilities/VulnerabilityCreateVulnerabilityModal.vue @@ -1,471 +1,922 @@