From ac4463c229630b3f48c69eaf409bdb4c6aec1da1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Rapha=C3=ABl=20Odini?=
Date: Sat, 25 May 2024 18:39:54 +0200
Subject: [PATCH] test: setup linting with ESLint & fix files (#586)
---
.github/labeler.yml | 6 +-
.github/workflows/lint-and-test.yml | 25 +
.github/workflows/tests.yml | 16 -
CONTRIBUTING.md | 6 +
cypress.config.js | 6 +-
eslint.config.js | 21 +
package.json | 4 +
postcss.config.js | 5 -
src/components/BarcodeManualInputDialog.vue | 11 +-
src/components/BarcodeScannerDialog.vue | 15 +-
src/components/ChangeCurrencyDialog.vue | 10 +-
src/components/FilterMenu.vue | 15 +-
src/components/Footer.vue | 28 +-
src/components/Header.vue | 40 +-
src/components/LocationCard.vue | 7 +-
src/components/LocationSelectorDialog.vue | 63 ++-
src/components/OpenFoodFactsAddMenu.vue | 20 +-
src/components/OrderMenu.vue | 9 +-
src/components/PriceActionMenuButton.vue | 35 +-
src/components/PriceAddButton.vue | 3 +-
src/components/PriceCard.vue | 96 ++--
src/components/PriceCountChip.vue | 12 +-
.../PriceDeleteConfirmationDialog.vue | 27 +-
src/components/PriceEditDialog.vue | 37 +-
src/components/PriceFooterRow.vue | 40 +-
src/components/PriceInputRow.vue | 46 +-
src/components/PriceLabels.vue | 7 +-
src/components/PriceLocationChip.vue | 12 +-
src/components/PriceOrigins.vue | 6 +-
src/components/PriceOwnerChip.vue | 12 +-
src/components/PricePriceRow.vue | 22 +-
src/components/PriceProof.vue | 14 +-
src/components/ProductBarcodeChip.vue | 9 +-
src/components/ProductBrands.vue | 17 +-
src/components/ProductBrandsDialog.vue | 10 +-
src/components/ProductCard.vue | 72 +--
src/components/ProductCategoriesChip.vue | 14 +-
src/components/ProductCategoriesDialog.vue | 10 +-
src/components/ProductLabelsChip.vue | 13 +-
src/components/ProductLabelsDialog.vue | 10 +-
src/components/ProductQuantityChip.vue | 22 +-
src/components/ProofActionMenuButton.vue | 35 +-
src/components/ProofCard.vue | 20 +-
.../ProofDeleteConfirmationDialog.vue | 27 +-
src/components/ProofEditDialog.vue | 19 +-
src/components/ProofFooter.vue | 25 +-
src/components/ProofPrivateChip.vue | 7 +-
src/components/ProofTypeChip.vue | 9 +-
src/components/RelativeDateTimeChip.vue | 11 +-
src/components/ShareButton.vue | 15 +-
src/components/UserCard.vue | 7 +-
src/components/UserRecentProofsDialog.vue | 12 +-
src/i18n/localeManager.js | 2 -
src/store.js | 3 -
src/utils.js | 2 +-
src/views/AddPriceHome.vue | 30 +-
src/views/AddPriceMultiple.vue | 216 ++++----
src/views/AddPriceSingle.vue | 170 +++---
src/views/BrandDetail.vue | 53 +-
src/views/CategoryDetail.vue | 53 +-
src/views/Home.vue | 30 +-
src/views/LocationDetail.vue | 64 +--
src/views/LocationList.vue | 12 +-
src/views/PriceList.vue | 12 +-
src/views/ProductDetail.vue | 84 +--
src/views/ProductList.vue | 34 +-
src/views/ProofDetail.vue | 30 +-
src/views/Search.vue | 39 +-
src/views/SignIn.vue | 17 +-
src/views/Stats.vue | 10 +-
src/views/User.vue | 9 -
src/views/UserDashboard.vue | 8 +-
src/views/UserDashboardPriceList.vue | 18 +-
src/views/UserDashboardProofList.vue | 21 +-
src/views/UserDetail.vue | 52 +-
src/views/UserList.vue | 12 +-
src/views/UserSettings.vue | 68 ++-
yarn.lock | 493 +++++++++++++++++-
78 files changed, 1725 insertions(+), 857 deletions(-)
create mode 100644 .github/workflows/lint-and-test.yml
delete mode 100644 .github/workflows/tests.yml
create mode 100644 eslint.config.js
delete mode 100644 postcss.config.js
delete mode 100644 src/views/User.vue
diff --git a/.github/labeler.yml b/.github/labeler.yml
index eaf6a94fca3..e6c79fcbf69 100644
--- a/.github/labeler.yml
+++ b/.github/labeler.yml
@@ -5,8 +5,7 @@ GitHub Actions:
Price addition:
- 'src/views/AddPriceHome.vue'
-
-Multiple price addition:
+- 'src/views/AddPriceSingle.vue'
- 'src/views/AddPriceMultiple.vue'
Brands:
@@ -21,13 +20,11 @@ Brands:
🔍 Search:
- 'src/views/Search.vue'
-- 'src/views/SignIn.vue'
Stats:
- 'src/views/Stats.vue'
User:
-- 'src/views/User.vue'
- 'src/views/UserList.vue'
- 'src/views/UserDetail.vue'
@@ -36,4 +33,3 @@ User dashboard:
⚙️ Settings:
- 'src/views/UserSettings.vue'
-
diff --git a/.github/workflows/lint-and-test.yml b/.github/workflows/lint-and-test.yml
new file mode 100644
index 00000000000..8786f9ebab1
--- /dev/null
+++ b/.github/workflows/lint-and-test.yml
@@ -0,0 +1,25 @@
+name: Linting & e2e tests
+
+on: push
+
+jobs:
+ lint-and-test:
+ runs-on: ubuntu-22.04
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ # Install npm dependencies, cache them correctly
+ - name: Cypress run
+ uses: cypress-io/github-action@v6
+ with:
+ # just perform install
+ runTests: false
+ - name: Lint with ESLint
+ run: yarn lint
+ - name: Run e2e tests
+ uses: cypress-io/github-action@v6
+ with:
+ # we have already installed all dependencies above
+ install: false
+ # run server in the background
+ start: yarn dev
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
deleted file mode 100644
index 7e842dbf7ff..00000000000
--- a/.github/workflows/tests.yml
+++ /dev/null
@@ -1,16 +0,0 @@
-name: End-to-end tests
-
-on: push
-
-jobs:
- cypress-run:
- runs-on: ubuntu-22.04
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- # Install npm dependencies, cache them correctly
- # and run all Cypress tests
- - name: Cypress run
- uses: cypress-io/github-action@v6
- with:
- start: yarn dev
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 78657dad9ab..a8a1137e834 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -22,6 +22,12 @@ We use the [yarn](https://yarnpkg.com/getting-started/install) for package manag
yarn build
```
+## Lint
+
+```sh
+yarn lint
+```
+
## Tests
```sh
diff --git a/cypress.config.js b/cypress.config.js
index 99389819234..c486708325f 100644
--- a/cypress.config.js
+++ b/cypress.config.js
@@ -1,6 +1,6 @@
-const { defineConfig } = require("cypress");
+import { defineConfig } from 'cypress'
-module.exports = defineConfig({
+export default defineConfig({
e2e: {
specPattern: '**/*.cy.js',
fixturesFolder: 'tests/fixtures',
@@ -13,4 +13,4 @@ module.exports = defineConfig({
},
baseUrl: 'http://localhost:5173',
},
-});
+})
diff --git a/eslint.config.js b/eslint.config.js
new file mode 100644
index 00000000000..55576e4373f
--- /dev/null
+++ b/eslint.config.js
@@ -0,0 +1,21 @@
+import js from '@eslint/js'
+import pluginVue from 'eslint-plugin-vue'
+
+export default [
+ js.configs.recommended,
+ ...pluginVue.configs['flat/recommended'],
+ {
+ ignores: ['dist/**', '*.config.js', 'tests/**'],
+ },
+ {
+ rules: {
+ 'no-unused-vars': 'warn',
+ 'vue/no-mutating-props': ['error', { 'shallowOnly': true }],
+ 'vue/no-reserved-component-names': 'off',
+ 'vue/multi-word-component-names': 'off',
+ 'vue/max-attributes-per-line': 'off',
+ 'vue/attribute-hyphenation': 'off',
+ 'vue/v-on-event-hyphenation': 'off',
+ }
+ },
+]
diff --git a/package.json b/package.json
index ffd9d97a957..dcb732d8aa1 100644
--- a/package.json
+++ b/package.json
@@ -2,12 +2,14 @@
"name": "open-prices",
"version": "0.0.0",
"private": true,
+ "type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"build-staging": "vite build --base=/app/ --mode preprod",
"build-prod": "vite build --base=/app/ --mode prod",
"preview": "vite preview",
+ "lint": "eslint",
"cy:open": "cypress open",
"cy:run": "cypress run",
"test": "start-server-and-test dev http://localhost:5173 cy:run"
@@ -37,6 +39,8 @@
"autoprefixer": "^10.4.16",
"cross-env": "^7.0.3",
"cypress": "^13.8.1",
+ "eslint": "^9.3.0",
+ "eslint-plugin-vue": "^9.26.0",
"postcss": "^8.4.31",
"start-server-and-test": "^2.0.3",
"vite": "^4.5.0"
diff --git a/postcss.config.js b/postcss.config.js
deleted file mode 100644
index 90d9fffcb1f..00000000000
--- a/postcss.config.js
+++ /dev/null
@@ -1,5 +0,0 @@
-module.exports = {
- plugins: {
- autoprefixer: {},
- },
-}
diff --git a/src/components/BarcodeManualInputDialog.vue b/src/components/BarcodeManualInputDialog.vue
index 243db3c575e..203fc6ef2e2 100644
--- a/src/components/BarcodeManualInputDialog.vue
+++ b/src/components/BarcodeManualInputDialog.vue
@@ -2,10 +2,10 @@
- {{ $t('BarcodeManualInput.Title') }}
+ {{ $t('BarcodeManualInput.Title') }}
-
+
@@ -18,13 +18,15 @@
prepend-inner-icon="mdi-barcode"
:hint="barcodeForm.barcode.length.toString()"
persistent-hint
- >
+ />
{{ $t('BarcodeManualInput.Submit') }}
+ >
+ {{ $t('BarcodeManualInput.Submit') }}
+
@@ -33,6 +35,7 @@
diff --git a/src/components/PriceLabels.vue b/src/components/PriceLabels.vue
index a67da31ace1..6f6126ce481 100644
--- a/src/components/PriceLabels.vue
+++ b/src/components/PriceLabels.vue
@@ -2,7 +2,7 @@
{{ label.name }}
-
+
@@ -12,7 +12,10 @@ import LabelTags from '../data/labels-tags.json'
export default {
props: {
- priceLabels: Array
+ priceLabels: {
+ type: Array,
+ default: () => []
+ }
},
computed: {
priceLabelsTagsList() {
diff --git a/src/components/PriceLocationChip.vue b/src/components/PriceLocationChip.vue
index 0d7da2f0da8..aa2c5de624a 100644
--- a/src/components/PriceLocationChip.vue
+++ b/src/components/PriceLocationChip.vue
@@ -1,6 +1,6 @@
-
+
{{ priceLocationTitle }}
{{ priceLocationEmoji }}
@@ -11,8 +11,14 @@ import utils from '../utils.js'
export default {
props: {
- 'price': null,
- 'readonly': false
+ price: {
+ type: Object,
+ default: null
+ },
+ readonly: {
+ type: Boolean,
+ default: false
+ },
},
computed: {
priceLocationTitle() {
diff --git a/src/components/PriceOrigins.vue b/src/components/PriceOrigins.vue
index bc615d87f34..5edb2c6a0ce 100644
--- a/src/components/PriceOrigins.vue
+++ b/src/components/PriceOrigins.vue
@@ -9,7 +9,11 @@ import OriginTags from '../data/origins-tags.json'
export default {
props: {
- priceOrigins: Array
+ priceOrigins: {
+ type: Array,
+ default: () => []
+
+ }
},
computed: {
priceOriginTagName() {
diff --git a/src/components/PriceOwnerChip.vue b/src/components/PriceOwnerChip.vue
index bb4a8cdc28d..2b48f669706 100644
--- a/src/components/PriceOwnerChip.vue
+++ b/src/components/PriceOwnerChip.vue
@@ -1,6 +1,6 @@
-
+
{{ price.owner }}
@@ -8,8 +8,14 @@
diff --git a/src/components/ProductBrands.vue b/src/components/ProductBrands.vue
index 5c657d53b6c..35ee05c2f10 100644
--- a/src/components/ProductBrands.vue
+++ b/src/components/ProductBrands.vue
@@ -10,14 +10,16 @@
-
+ :brands="getProductBrandsList"
+ @close="productBrandsDialog = false"
+ />
{{ $t('ProductCard.BrandLower') }}
- {{ $t('ProductCard.BrandMissing') }}
+
+ {{ $t('ProductCard.BrandMissing') }}
+
@@ -26,10 +28,13 @@ import { defineAsyncComponent } from 'vue'
export default {
components: {
- 'ProductBrandsDialog': defineAsyncComponent(() => import('../components/ProductBrandsDialog.vue')),
+ ProductBrandsDialog: defineAsyncComponent(() => import('../components/ProductBrandsDialog.vue')),
},
props: {
- productBrands: String,
+ productBrands: {
+ type: String,
+ default: null
+ },
readonly: {
type: Boolean,
default: false
diff --git a/src/components/ProductBrandsDialog.vue b/src/components/ProductBrandsDialog.vue
index e7233e73119..45d3e839307 100644
--- a/src/components/ProductBrandsDialog.vue
+++ b/src/components/ProductBrandsDialog.vue
@@ -2,10 +2,10 @@
- {{ $t('ProductCard.Brands') }}
+ {{ $t('ProductCard.Brands') }}
-
+
@@ -19,8 +19,12 @@
diff --git a/src/components/ProofTypeChip.vue b/src/components/ProofTypeChip.vue
index 3aa0d55c818..d42eddcd17f 100644
--- a/src/components/ProofTypeChip.vue
+++ b/src/components/ProofTypeChip.vue
@@ -1,10 +1,10 @@
-
+
{{ proofTypeName }}
-
+
@@ -18,7 +18,10 @@ import constants from '../constants'
export default {
props: {
- 'proof': null,
+ proof: {
+ type: Object,
+ default: null
+ },
},
data() {
return {
diff --git a/src/components/RelativeDateTimeChip.vue b/src/components/RelativeDateTimeChip.vue
index 36bcacfe9c6..ae62116b2c2 100644
--- a/src/components/RelativeDateTimeChip.vue
+++ b/src/components/RelativeDateTimeChip.vue
@@ -1,8 +1,10 @@
-
+
{{ getRelativeDateTimeFormatted(dateTime) }}
- {{ getDateTimeFormatted(dateTime) }}
+
+ {{ getDateTimeFormatted(dateTime) }}
+
@@ -11,7 +13,10 @@ import utils from '../utils.js'
export default {
props: {
- 'dateTime': null
+ dateTime: {
+ type: String,
+ default: null
+ },
},
methods: {
getDateTimeFormatted(dateTimeString) {
diff --git a/src/components/ShareButton.vue b/src/components/ShareButton.vue
index 86845d3fc38..3f3dd649224 100644
--- a/src/components/ShareButton.vue
+++ b/src/components/ShareButton.vue
@@ -7,8 +7,8 @@
color="teal"
icon="mdi-share-variant"
:title="$t('ShareButton.Title')"
- @click="shareViaWebShare">
-
+ @click="shareViaWebShare"
+ />
+ @click="shareViaWebShare"
+ >
{{ $t('ShareButton.Title') }}
+ :timeout="2000"
+ >
{{ $t('ShareButton.LinkCopySuccess') }}
@@ -34,7 +36,10 @@ import constants from '../constants'
export default {
props: {
- 'overrideUrl': null,
+ overrideUrl: {
+ type: String,
+ default: null
+ },
},
data() {
return {
diff --git a/src/components/UserCard.vue b/src/components/UserCard.vue
index d7e53d56f27..1dcd2b4a2d0 100644
--- a/src/components/UserCard.vue
+++ b/src/components/UserCard.vue
@@ -2,9 +2,10 @@
+ @click="goToUser(user)"
+ >
-
+
@@ -14,7 +15,7 @@ import { defineAsyncComponent } from 'vue'
export default {
components: {
- 'PriceCountChip': defineAsyncComponent(() => import('../components/PriceCountChip.vue')),
+ PriceCountChip: defineAsyncComponent(() => import('../components/PriceCountChip.vue')),
},
props: {
user: {
diff --git a/src/components/UserRecentProofsDialog.vue b/src/components/UserRecentProofsDialog.vue
index f63c2381edf..da66841e7a8 100644
--- a/src/components/UserRecentProofsDialog.vue
+++ b/src/components/UserRecentProofsDialog.vue
@@ -2,15 +2,15 @@
- {{ $t('UserRecentProofsDialog.SelectRecentProof') }}
+ {{ $t('UserRecentProofsDialog.SelectRecentProof') }}
-
+
-
-
+
+
@@ -26,8 +26,9 @@ import api from '../services/api'
export default {
components: {
- 'ProofCard': defineAsyncComponent(() => import('../components/ProofCard.vue')),
+ ProofCard: defineAsyncComponent(() => import('../components/ProofCard.vue')),
},
+ emits: ['recentProofSelected', 'close'],
data() {
return {
userProofList: [],
@@ -37,7 +38,6 @@ export default {
selectedProof: null,
}
},
- emits: ['recentProofSelected', 'close'],
computed: {
...mapStores(useAppStore),
username() {
diff --git a/src/i18n/localeManager.js b/src/i18n/localeManager.js
index 32e745d72b9..578a9f1c470 100644
--- a/src/i18n/localeManager.js
+++ b/src/i18n/localeManager.js
@@ -156,8 +156,6 @@ const localeManager = {
const enKeys = Object.keys(enFlat)
const localeKeys = Object.keys(localeFlat)
- const enValues = Object.values(enFlat)
- const localeValues = Object.values(localeFlat)
let identicalValues = 0
let missingKeys = 0
for (let i = 0; i < enKeys.length; i++) {
diff --git a/src/store.js b/src/store.js
index b830eecfaf8..a1823992bbc 100644
--- a/src/store.js
+++ b/src/store.js
@@ -51,9 +51,6 @@ export const useAppStore = defineStore('app', {
this.user.username = null
this.user.token = null
},
- setLastCurrencyUsed(currency) {
- this.user.last_currency_used = currency
- },
addRecentLocation(location) {
this.user.recent_locations = utils.addObjectToArray(this.user.recent_locations, location, true)
},
diff --git a/src/utils.js b/src/utils.js
index ff7a6c7f9da..71edcb149e6 100644
--- a/src/utils.js
+++ b/src/utils.js
@@ -224,7 +224,7 @@ function getMapCenter(results, source='nominatim') {
if (source === 'photon') {
return [results[0].geometry.coordinates[1], results[0].geometry.coordinates[0]]
}
- return [results[0].lat, results[0][lon]]
+ return [results[0].lat, results[0].lon]
}
diff --git a/src/views/AddPriceHome.vue b/src/views/AddPriceHome.vue
index bed6b47af20..9defe5fde91 100644
--- a/src/views/AddPriceHome.vue
+++ b/src/views/AddPriceHome.vue
@@ -9,14 +9,14 @@
:title="$t('AddPriceHome.SingleProductMode.Title')"
:subtitle="$t('AddPriceHome.SingleProductMode.Subtitle')"
prepend-icon="mdi-barcode"
- to="/add/single">
-
+ to="/add/single"
+ />
-
-
-
+
+
+
@@ -24,16 +24,16 @@
:title="$t('AddPriceHome.MultipleProductMode.Title')"
:subtitle="$t('AddPriceHome.MultipleProductMode.Subtitle')"
prepend-icon="mdi-library-shelves"
- to="/add/multiple/price-tag">
-
+ to="/add/multiple/price-tag"
+ />
-
+ to="/add/multiple/receipt"
+ />
@@ -41,17 +41,23 @@
v-model="signinSuccessMessage"
color="success"
:timeout="2000"
- >{{ $t('AddPriceHome.SignedIn') }}
+ >
+ {{ $t('AddPriceHome.SignedIn') }}
+
{{ $t('AddPriceHome.PriceCreated') }}
+ >
+ {{ $t('AddPriceHome.PriceCreated') }}
+
{{ $t('AddPriceHome.Thanks') }}
+ >
+ {{ $t('AddPriceHome.Thanks') }}
+
diff --git a/src/views/AddPriceSingle.vue b/src/views/AddPriceSingle.vue
index cfa5817f92c..48c84bd7f6f 100644
--- a/src/views/AddPriceSingle.vue
+++ b/src/views/AddPriceSingle.vue
@@ -5,24 +5,24 @@
-
-
-
+ :style="productFormFilled ? 'border: 1px solid #4CAF50' : 'border: 1px solid transparent'"
+ >
+
+
-
+
-
-
-
+
+
+
{{ pm.value }}
@@ -39,28 +39,28 @@
-
+ />
+
+ />
+ />
+ />
@@ -96,31 +97,34 @@
:title="$t('AddPriceSingle.PriceDetails.Title')"
prepend-icon="mdi-tag-outline"
height="100%"
- :style="priceProofFormFilled ? 'border: 1px solid #4CAF50' : 'border: 1px solid transparent'">
-
-
+ :style="priceProofFormFilled ? 'border: 1px solid #4CAF50' : 'border: 1px solid transparent'"
+ >
+
+
-
+
-
-
-
+
+
+
{{ cpp.value }}
-
- {{ $t('AddPriceSingle.PriceDetails.Proof') }}
+
+
+ {{ $t('AddPriceSingle.PriceDetails.Proof') }}
+
-
+
{{ $t('AddPriceSingle.PriceDetails.Picture') }}
{{ $t('AddPriceSingle.PriceDetails.TakePicture') }}
-
+
{{ $t('AddPriceSingle.PriceDetails.Gallery') }}
{{ $t('AddPriceSingle.PriceDetails.SelectFromGallery') }}
@@ -129,24 +133,24 @@
{{ $t('AddPriceSingle.PriceDetails.SelectRecentProof') }}
-
+ />
-
+ />
{{ $t('AddPriceSingle.PriceDetails.ProofUploaded') }}
{{ $t('AddPriceSingle.PriceDetails.ProofSelected') }}
@@ -156,7 +160,7 @@
-
+
@@ -169,34 +173,44 @@
:title="$t('AddPriceSingle.WhereWhen.Title')"
prepend-icon="mdi-map-marker-outline"
height="100%"
- :style="locationDateFormFilled ? 'border: 1px solid #4CAF50' : 'border: 1px solid transparent'">
-
-
+ :style="locationDateFormFilled ? 'border: 1px solid #4CAF50' : 'border: 1px solid transparent'"
+ >
+
+
-
+
- {{ $t('AddPriceSingle.WhereWhen.Location') }}
+
+ {{ $t('AddPriceSingle.WhereWhen.Location') }}
+
-
+ class="mb-2"
+ :style="isSelectedLocation(location) ? 'border: 1px solid #4CAF50' : 'border: 1px solid transparent'"
+ @click="setLocationData(location)"
+ >
+
{{ getLocationTitle(location, true, true, true) }}
-
- {{ $t('AddPriceSingle.WhereWhen.Find') }}
- {{ $t('AddPriceSingle.WhereWhen.SelectLocation') }}
+
+
+ {{ $t('AddPriceSingle.WhereWhen.Find') }}
+
+
+ {{ $t('AddPriceSingle.WhereWhen.SelectLocation') }}
+
- {{ $t('AddPriceSingle.WhereWhen.Date') }}
+
+ {{ $t('AddPriceSingle.WhereWhen.Date') }}
+
+ />
@@ -211,7 +225,9 @@
:color="formFilled ? 'success' : ''"
:loading="createPriceLoading"
:disabled="!formFilled"
- >{{ $t('AddPriceSingle.Create') }}
+ >
+ {{ $t('AddPriceSingle.Create') }}
+
@@ -220,42 +236,48 @@
v-model="proofDateSuccessMessage"
color="info"
:timeout="2000"
- >{{ $t('AddPriceSingle.PriceDetails.ProofDateChanged') }}
+ >
+ {{ $t('AddPriceSingle.PriceDetails.ProofDateChanged') }}
+
{{ $t('AddPriceSingle.PriceDetails.ProofUploaded') }}
+ >
+ {{ $t('AddPriceSingle.PriceDetails.ProofUploaded') }}
+
{{ $t('AddPriceSingle.PriceDetails.ProofSelected') }}
+ >
+ {{ $t('AddPriceSingle.PriceDetails.ProofSelected') }}
+
+ />
+ />
+ />
+ />
diff --git a/src/views/BrandDetail.vue b/src/views/BrandDetail.vue
index 31d9ad834d5..651bb1641c1 100644
--- a/src/views/BrandDetail.vue
+++ b/src/views/BrandDetail.vue
@@ -3,10 +3,11 @@
+ prepend-icon="mdi-factory"
+ >
-
+
{{ $t('BrandDetail.BrandProductTotal', { count: brandProductTotal }) }}
@@ -16,31 +17,35 @@
-
-
+
+
-
+
- {{ $t('BrandDetail.TopProducts') }}
-
-
-
+
+ {{ $t('BrandDetail.TopProducts') }}
+
+
+
+
-
-
+
+
- {{ $t('BrandDetail.LoadMore') }}
+
+ {{ $t('BrandDetail.LoadMore') }}
+
@@ -52,11 +57,11 @@ import api from '../services/api'
export default {
components: {
- 'FilterMenu': defineAsyncComponent(() => import('../components/FilterMenu.vue')),
- 'OrderMenu': defineAsyncComponent(() => import('../components/OrderMenu.vue')),
- 'ProductCard': defineAsyncComponent(() => import('../components/ProductCard.vue')),
- 'OpenFoodFactsLink': defineAsyncComponent(() => import('../components/OpenFoodFactsLink.vue')),
- 'ShareButton': defineAsyncComponent(() => import('../components/ShareButton.vue'))
+ FilterMenu: defineAsyncComponent(() => import('../components/FilterMenu.vue')),
+ OrderMenu: defineAsyncComponent(() => import('../components/OrderMenu.vue')),
+ ProductCard: defineAsyncComponent(() => import('../components/ProductCard.vue')),
+ OpenFoodFactsLink: defineAsyncComponent(() => import('../components/OpenFoodFactsLink.vue')),
+ ShareButton: defineAsyncComponent(() => import('../components/ShareButton.vue'))
},
data() {
return {
@@ -80,6 +85,13 @@ export default {
return defaultParams
},
},
+ watch: {
+ $route (newBrand, oldBrand) {
+ if (oldBrand && newBrand && newBrand.name == 'brand-detail' && oldBrand.fullPath != newBrand.fullPath) {
+ this.initBrand()
+ }
+ }
+ },
mounted() {
this.currentFilter = this.$route.query[constants.FILTER_PARAM] || this.currentFilter
this.currentOrder = this.$route.query[constants.ORDER_PARAM] || this.currentOrder
@@ -115,13 +127,6 @@ export default {
// this.initBrand() will be called in watch $route
}
}
- },
- watch: {
- $route (newBrand, oldBrand) {
- if (oldBrand && newBrand && newBrand.name == 'brand-detail' && oldBrand.fullPath != newBrand.fullPath) {
- this.initBrand()
- }
- }
}
}
diff --git a/src/views/CategoryDetail.vue b/src/views/CategoryDetail.vue
index 20cfefc0603..43e949ed0ce 100644
--- a/src/views/CategoryDetail.vue
+++ b/src/views/CategoryDetail.vue
@@ -3,10 +3,11 @@
+ prepend-icon="mdi-list-box-outline"
+ >
-
+
{{ $t('CategoryDetail.CategoryProductTotal', { count: categoryProductTotal }) }}
@@ -16,31 +17,35 @@
-
-
+
+
-
+
- {{ $t('CategoryDetail.TopProducts') }}
-
-
-
+
+ {{ $t('CategoryDetail.TopProducts') }}
+
+
+
+
-
-
+
+
- {{ $t('CategoryDetail.LoadMore') }}
+
+ {{ $t('CategoryDetail.LoadMore') }}
+
@@ -52,11 +57,11 @@ import api from '../services/api'
export default {
components: {
- 'FilterMenu': defineAsyncComponent(() => import('../components/FilterMenu.vue')),
- 'OrderMenu': defineAsyncComponent(() => import('../components/OrderMenu.vue')),
- 'ProductCard': defineAsyncComponent(() => import('../components/ProductCard.vue')),
- 'OpenFoodFactsLink': defineAsyncComponent(() => import('../components/OpenFoodFactsLink.vue')),
- 'ShareButton': defineAsyncComponent(() => import('../components/ShareButton.vue'))
+ FilterMenu: defineAsyncComponent(() => import('../components/FilterMenu.vue')),
+ OrderMenu: defineAsyncComponent(() => import('../components/OrderMenu.vue')),
+ ProductCard: defineAsyncComponent(() => import('../components/ProductCard.vue')),
+ OpenFoodFactsLink: defineAsyncComponent(() => import('../components/OpenFoodFactsLink.vue')),
+ ShareButton: defineAsyncComponent(() => import('../components/ShareButton.vue'))
},
data() {
return {
@@ -80,6 +85,13 @@ export default {
return defaultParams
},
},
+ watch: {
+ $route (newCategory, oldCategory) {
+ if (oldCategory && newCategory && newCategory.name == 'category-detail' && oldCategory.fullPath != newCategory.fullPath) {
+ this.initCategory()
+ }
+ }
+ },
mounted() {
this.currentFilter = this.$route.query[constants.FILTER_PARAM] || this.currentFilter
this.currentOrder = this.$route.query[constants.ORDER_PARAM] || this.currentOrder
@@ -115,13 +127,6 @@ export default {
// this.initCategory() will be called in watch $route
}
}
- },
- watch: {
- $route (newCategory, oldCategory) {
- if (oldCategory && newCategory && newCategory.name == 'category-detail' && oldCategory.fullPath != newCategory.fullPath) {
- this.initCategory()
- }
- }
}
}
diff --git a/src/views/Home.vue b/src/views/Home.vue
index 40548be9c48..36f432f6d01 100644
--- a/src/views/Home.vue
+++ b/src/views/Home.vue
@@ -1,12 +1,14 @@
- {{ APP_NAME }}
+
+ {{ APP_NAME }}
+
{{ $t('Home.Welcome.Subtitle') }}
-
+
@@ -14,8 +16,8 @@
:title="$t('Home.SearchProduct')"
prepend-icon="mdi-magnify"
height="100%"
- to="/search">
-
+ to="/search"
+ />
-
+ to="/add"
+ >
+
-
+
@@ -41,10 +44,11 @@
-
+ to="/prices"
+ >
+
-
+
{{ todayPriceCount }}
@@ -57,7 +61,9 @@
v-model="settingsSuccessMessage"
color="success"
:timeout="2000"
- >{{ $t('Home.SettingsUpdated') }}
+ >
+ {{ $t('Home.SettingsUpdated') }}
+
diff --git a/src/views/LocationList.vue b/src/views/LocationList.vue
index 85b7d2e0531..4df13897ac9 100644
--- a/src/views/LocationList.vue
+++ b/src/views/LocationList.vue
@@ -1,7 +1,7 @@
{{ $t('LocationList.Title') }}
-
+
@@ -13,14 +13,16 @@
-
-
+
+
- {{ $t('LocationList.LoadMore') }}
+
+ {{ $t('LocationList.LoadMore') }}
+
@@ -31,7 +33,7 @@ import api from '../services/api'
export default {
components: {
- 'LocationCard': defineAsyncComponent(() => import('../components/LocationCard.vue')),
+ LocationCard: defineAsyncComponent(() => import('../components/LocationCard.vue')),
},
data() {
return {
diff --git a/src/views/PriceList.vue b/src/views/PriceList.vue
index 87002ae4750..10fc4f1578f 100644
--- a/src/views/PriceList.vue
+++ b/src/views/PriceList.vue
@@ -1,18 +1,20 @@
{{ $t('PriceList.Title') }}
-
+
-
-
+
+
- {{ $t('PriceList.LoadMore') }}
+
+ {{ $t('PriceList.LoadMore') }}
+
@@ -23,7 +25,7 @@ import api from '../services/api'
export default {
components: {
- 'PriceCard': defineAsyncComponent(() => import('../components/PriceCard.vue'))
+ PriceCard: defineAsyncComponent(() => import('../components/PriceCard.vue'))
},
data() {
return {
diff --git a/src/views/ProductDetail.vue b/src/views/ProductDetail.vue
index 3a9076ce7f8..bbc8a3e3029 100644
--- a/src/views/ProductDetail.vue
+++ b/src/views/ProductDetail.vue
@@ -1,16 +1,16 @@
-
+
-
+
-
+
@@ -18,8 +18,8 @@
{{ OFF_NAME }}
-
-
+
+
{{ $t('ProductDetail.CategoryNotFound') }}
@@ -27,35 +27,39 @@
-
+
-
-
-
-
+
+
+
+
-
+
- {{ $t('ProductDetail.LatestPrices') }}
-
-
-
+
+ {{ $t('ProductDetail.LatestPrices') }}
+
+
+
+
-
-
+
+
- {{ $t('ProductDetail.LoadMore') }}
+
+ {{ $t('ProductDetail.LoadMore') }}
+
@@ -70,15 +74,15 @@ import api from '../services/api'
export default {
components: {
- 'ProductCard': defineAsyncComponent(() => import('../components/ProductCard.vue')),
- 'PriceCountChip': defineAsyncComponent(() => import('../components/PriceCountChip.vue')),
- 'PriceAddButton': defineAsyncComponent(() => import('../components/PriceAddButton.vue')),
- 'FilterMenu': defineAsyncComponent(() => import('../components/FilterMenu.vue')),
- 'OrderMenu': defineAsyncComponent(() => import('../components/OrderMenu.vue')),
- 'PriceCard': defineAsyncComponent(() => import('../components/PriceCard.vue')),
- 'OpenFoodFactsLink': defineAsyncComponent(() => import('../components/OpenFoodFactsLink.vue')),
- 'OpenFoodFactsAddMenu': defineAsyncComponent(() => import('../components/OpenFoodFactsAddMenu.vue')),
- 'ShareButton': defineAsyncComponent(() => import('../components/ShareButton.vue'))
+ ProductCard: defineAsyncComponent(() => import('../components/ProductCard.vue')),
+ PriceCountChip: defineAsyncComponent(() => import('../components/PriceCountChip.vue')),
+ PriceAddButton: defineAsyncComponent(() => import('../components/PriceAddButton.vue')),
+ FilterMenu: defineAsyncComponent(() => import('../components/FilterMenu.vue')),
+ OrderMenu: defineAsyncComponent(() => import('../components/OrderMenu.vue')),
+ PriceCard: defineAsyncComponent(() => import('../components/PriceCard.vue')),
+ OpenFoodFactsLink: defineAsyncComponent(() => import('../components/OpenFoodFactsLink.vue')),
+ OpenFoodFactsAddMenu: defineAsyncComponent(() => import('../components/OpenFoodFactsAddMenu.vue')),
+ ShareButton: defineAsyncComponent(() => import('../components/ShareButton.vue'))
},
data() {
return {
@@ -97,12 +101,6 @@ export default {
currentOrder: constants.PRICE_ORDER_LIST[1].key,
}
},
- mounted() {
- this.currentFilter = this.$route.query[constants.FILTER_PARAM] || this.currentFilter
- this.currentOrder = this.$route.query[constants.ORDER_PARAM] || this.currentOrder
- this.getProduct()
- this.initProductPrices()
- },
computed: {
...mapStores(useAppStore),
productIsCategory() {
@@ -127,6 +125,19 @@ export default {
return defaultParams
},
},
+ watch: {
+ $route (newRoute, oldRoute) { // only called when query changes to avoid having an API call when the path changes
+ if (oldRoute.path === newRoute.path && JSON.stringify(oldRoute.query) !== JSON.stringify(newRoute.query)) {
+ this.initProductPrices()
+ }
+ }
+ },
+ mounted() {
+ this.currentFilter = this.$route.query[constants.FILTER_PARAM] || this.currentFilter
+ this.currentOrder = this.$route.query[constants.ORDER_PARAM] || this.currentOrder
+ this.getProduct()
+ this.initProductPrices()
+ },
methods: {
initProductPrices() {
this.productPriceList = []
@@ -172,13 +183,6 @@ export default {
// this.initProductPrices() will be called in watch $route
}
}
- },
- watch: {
- $route (newRoute, oldRoute) { // only called when query changes to avoid having an API call when the path changes
- if (oldRoute.path === newRoute.path && JSON.stringify(oldRoute.query) !== JSON.stringify(newRoute.query)) {
- this.initProductPrices()
- }
- }
}
}
diff --git a/src/views/ProductList.vue b/src/views/ProductList.vue
index ce9d7864ec6..f68716032d6 100644
--- a/src/views/ProductList.vue
+++ b/src/views/ProductList.vue
@@ -1,7 +1,7 @@
{{ $t('ProductList.Title') }}
-
+
@@ -9,20 +9,22 @@
{{ $t('ProductList.ProductTotal', { count: productTotal }) }}
-
-
+
+
-
-
+
+
- {{ $t('ProductList.LoadMore') }}
+
+ {{ $t('ProductList.LoadMore') }}
+
@@ -34,9 +36,9 @@ import api from '../services/api'
export default {
components: {
- 'FilterMenu': defineAsyncComponent(() => import('../components/FilterMenu.vue')),
- 'OrderMenu': defineAsyncComponent(() => import('../components/OrderMenu.vue')),
- 'ProductCard': defineAsyncComponent(() => import('../components/ProductCard.vue')),
+ FilterMenu: defineAsyncComponent(() => import('../components/FilterMenu.vue')),
+ OrderMenu: defineAsyncComponent(() => import('../components/OrderMenu.vue')),
+ ProductCard: defineAsyncComponent(() => import('../components/ProductCard.vue')),
},
data() {
return {
@@ -63,6 +65,13 @@ export default {
return defaultParams
},
},
+ watch: {
+ $route (newRoute, oldRoute) { // only called when query changes to avoid having an API call when the path changes
+ if (oldRoute.path === newRoute.path && JSON.stringify(oldRoute.query) !== JSON.stringify(newRoute.query)) {
+ this.initProductList()
+ }
+ }
+ },
mounted() {
this.currentFilter = this.$route.query[constants.FILTER_PARAM] || this.currentFilter
this.currentSource = this.$route.query[constants.SOURCE_PARAM] || this.currentSource
@@ -103,13 +112,6 @@ export default {
// this.initProductList() will be called in watch $route
}
}
- },
- watch: {
- $route (newRoute, oldRoute) { // only called when query changes to avoid having an API call when the path changes
- if (oldRoute.path === newRoute.path && JSON.stringify(oldRoute.query) !== JSON.stringify(newRoute.query)) {
- this.initProductList()
- }
- }
}
}
diff --git a/src/views/ProofDetail.vue b/src/views/ProofDetail.vue
index ad90394dd18..411dd60c39c 100644
--- a/src/views/ProofDetail.vue
+++ b/src/views/ProofDetail.vue
@@ -1,33 +1,37 @@
-
- {{ $t('ProofDetail.ProofNotFound') }}
+
+
+ {{ $t('ProofDetail.ProofNotFound') }}
+
-
+
-
+
-
+
-
+
{{ $t('ProofDetail.Prices') }}
-
+
-
-
+
+
- {{ $t('ProofDetail.LoadMore') }}
+
+ {{ $t('ProofDetail.LoadMore') }}
+
@@ -38,9 +42,9 @@ import api from '../services/api'
export default {
components: {
- 'PriceAddButton': defineAsyncComponent(() => import('../components/PriceAddButton.vue')),
- 'ProofCard': defineAsyncComponent(() => import('../components/ProofCard.vue')),
- 'PriceCard': defineAsyncComponent(() => import('../components/PriceCard.vue')),
+ PriceAddButton: defineAsyncComponent(() => import('../components/PriceAddButton.vue')),
+ ProofCard: defineAsyncComponent(() => import('../components/ProofCard.vue')),
+ PriceCard: defineAsyncComponent(() => import('../components/PriceCard.vue')),
},
data() {
return {
diff --git a/src/views/Search.vue b/src/views/Search.vue
index 07cbab9976d..678f0ceb8dc 100644
--- a/src/views/Search.vue
+++ b/src/views/Search.vue
@@ -1,7 +1,7 @@
{{ $t('Search.Title') }}
-
+
@@ -16,12 +16,13 @@
:rules="[fieldRequired]"
hide-details="auto"
:loading="loading"
- required>
-
-
+ required
+ >
+
+
-
-
+
+
@@ -33,8 +34,8 @@
-
-
+
+
@@ -43,7 +44,7 @@
v-model="barcodeScannerDialog"
@barcode="setProductCode($event)"
@close="barcodeScannerDialog = false"
- >
+ />
diff --git a/src/views/SignIn.vue b/src/views/SignIn.vue
index 288e3a6c4f9..cbffddb9d92 100644
--- a/src/views/SignIn.vue
+++ b/src/views/SignIn.vue
@@ -8,10 +8,11 @@
+ variant="outlined"
+ >
-
+
@@ -22,18 +23,20 @@
:label="$t('SignIn.UsernameLabel')"
type="text"
class="input-lowercase"
- >
+ />
+ />
{{ $t('SignIn.Button') }}
+ >
+ {{ $t('SignIn.Button') }}
+
@@ -47,7 +50,7 @@ import api from '../services/api'
export default {
components: {
- 'OpenFoodFactsLink': defineAsyncComponent(() => import('../components/OpenFoodFactsLink.vue')),
+ OpenFoodFactsLink: defineAsyncComponent(() => import('../components/OpenFoodFactsLink.vue')),
},
data() {
return {
@@ -78,7 +81,7 @@ export default {
this.loading = false
}
})
- .catch((error) => {
+ .catch((error) => { // eslint-disable-line no-unused-vars
alert(this.$t('SignIn.ServerError'))
this.loading = false
});
diff --git a/src/views/Stats.vue b/src/views/Stats.vue
index d52c5606706..e5a695180b6 100644
--- a/src/views/Stats.vue
+++ b/src/views/Stats.vue
@@ -1,7 +1,7 @@
{{ $t('Stats.Title') }}
-
+
@@ -12,11 +12,15 @@
{{ $t('Stats.Total') }} {{ priceTotal }}
- {{ $t('Stats.WithProduct') }} barcode
+ {{ $t('Stats.WithProduct') }}
+ barcode
+
{{ priceWithProduct }}
- {{ $t('Stats.WithoutProduct') }} category
+ {{ $t('Stats.WithoutProduct') }}
+ category
+
{{ priceWithoutProduct }}
diff --git a/src/views/User.vue b/src/views/User.vue
deleted file mode 100644
index f1307d399e7..00000000000
--- a/src/views/User.vue
+++ /dev/null
@@ -1,9 +0,0 @@
-
- User: {{ id }}
-
-
-
diff --git a/src/views/UserDashboard.vue b/src/views/UserDashboard.vue
index 698a187f2d0..ab3346ea15c 100644
--- a/src/views/UserDashboard.vue
+++ b/src/views/UserDashboard.vue
@@ -21,8 +21,8 @@
:subtitle="userPriceTotal"
prepend-icon="mdi-tag-multiple-outline"
height="100%"
- to="/dashboard/prices">
-
+ to="/dashboard/prices"
+ />
-
+ to="/dashboard/proofs"
+ />
diff --git a/src/views/UserDashboardPriceList.vue b/src/views/UserDashboardPriceList.vue
index cdc835e9948..c190a89d1cc 100644
--- a/src/views/UserDashboardPriceList.vue
+++ b/src/views/UserDashboardPriceList.vue
@@ -11,26 +11,28 @@
{{ $t('UserDashboard.Title') }}
-
+
-
+
{{ $t('UserDashboard.LatestPrices') }}
-
+
-
-
+
+
- {{ $t('UserDashboard.LoadMore') }}
+
+ {{ $t('UserDashboard.LoadMore') }}
+
@@ -43,8 +45,8 @@ import api from '../services/api'
export default {
components: {
- 'ShareButton': defineAsyncComponent(() => import('../components/ShareButton.vue')),
- 'PriceCard': defineAsyncComponent(() => import('../components/PriceCard.vue'))
+ ShareButton: defineAsyncComponent(() => import('../components/ShareButton.vue')),
+ PriceCard: defineAsyncComponent(() => import('../components/PriceCard.vue'))
},
data() {
return {
diff --git a/src/views/UserDashboardProofList.vue b/src/views/UserDashboardProofList.vue
index 532e24c79cb..3dd98f97f84 100644
--- a/src/views/UserDashboardProofList.vue
+++ b/src/views/UserDashboardProofList.vue
@@ -6,7 +6,7 @@
- {{ $t('UserDashboard.UserProofTotal', { count: this.appStore.getUserProofTotal }) }}
+ {{ $t('UserDashboard.UserProofTotal', { count: appStore.getUserProofTotal }) }}
{{ $t('UserDashboard.Title') }}
@@ -14,21 +14,22 @@
-
+
{{ $t('UserDashboard.LatestProofs') }}
-
+
-
-
-
+
+
-
+
- {{ $t('UserDashboard.LoadMore') }}
+
+ {{ $t('UserDashboard.LoadMore') }}
+
@@ -36,7 +37,9 @@
v-model="proofUpdated"
color="success"
:timeout="2000"
- >{{ $t('UserDashboard.ProofUpdated') }}
+ >
+ {{ $t('UserDashboard.ProofUpdated') }}
+
diff --git a/src/views/UserList.vue b/src/views/UserList.vue
index 27cb50e3172..5a09563d3ff 100644
--- a/src/views/UserList.vue
+++ b/src/views/UserList.vue
@@ -1,7 +1,7 @@
{{ $t('UserList.Title') }}
-
+
@@ -13,14 +13,16 @@
-
-
+
+
- {{ $t('UserList.LoadMore') }}
+
+ {{ $t('UserList.LoadMore') }}
+
@@ -31,7 +33,7 @@ import api from '../services/api'
export default {
components: {
- 'UserCard': defineAsyncComponent(() => import('../components/UserCard.vue')),
+ UserCard: defineAsyncComponent(() => import('../components/UserCard.vue')),
},
data() {
return {
diff --git a/src/views/UserSettings.vue b/src/views/UserSettings.vue
index a64a879d2f4..eabbcf8b72f 100644
--- a/src/views/UserSettings.vue
+++ b/src/views/UserSettings.vue
@@ -1,21 +1,27 @@
- {{ $t('UserSettings.Title') }}
+
+ {{ $t('UserSettings.Title') }}
+
-
+
- {{ $t('Common.Country') }}
+
+ {{ $t('Common.Country') }}
+
- {{ $t('Common.Language') }}
+ />
+
+ {{ $t('Common.Language') }}
+
+ />
-
- {{ this.languageTranslationCompletion }}
+
+
+ {{ languageTranslationCompletion }}
+
-
+
{{ $t('UserSettings.TranslationHelp') }}
-
+
- {{ $t('Common.Products') }}
-
+
+ {{ $t('Common.Products') }}
+
+
@@ -44,9 +54,11 @@
-
+
- {{ $t('UserSettings.FavoriteCurrencies') }}
+
+ {{ $t('UserSettings.FavoriteCurrencies') }}
+
+ />
@@ -64,7 +76,9 @@
- {{ $t('UserSettings.Save') }}
+
+ {{ $t('UserSettings.Save') }}
+
@@ -92,6 +106,17 @@ export default {
countryList: countryData, // can be used to further filter the country list if needed
}
},
+ computed: {
+ ...mapStores(useAppStore),
+ formFilled() {
+ return Object.values(this.userSettingsForm).every(x => {
+ if (x && Array.isArray(x)) {
+ return x.length > 0
+ }
+ return !!x
+ })
+ },
+ },
watch: {
'userSettingsForm.selectedLanguage': async function () {
if (this.userSettingsForm.selectedLanguage !== null) {
@@ -133,17 +158,6 @@ export default {
}
}
},
- computed: {
- ...mapStores(useAppStore),
- formFilled() {
- return Object.values(this.userSettingsForm).every(x => {
- if (x && Array.isArray(x)) {
- return x.length > 0
- }
- return !!x
- })
- },
- },
async mounted() {
this.languageListCode = await localeManager.getLocales()
this.languageList = this.languageListCode.map(code => {
diff --git a/yarn.lock b/yarn.lock
index a4322cf6917..f5773021491 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -159,6 +159,38 @@
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.11.tgz#6526c7e1b40d5b9f0a222c6b767c22f6fb97aa57"
integrity sha512-rQI4cjLHd2hGsM1LqgDI7oOCYbQ6IBOVsX9ejuRMSze0GqXUG2ekwiKkiBU1pRGSeCqFFHxTrcEydB2Hyoz9CA==
+"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0":
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59"
+ integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==
+ dependencies:
+ eslint-visitor-keys "^3.3.0"
+
+"@eslint-community/regexpp@^4.6.1":
+ version "4.10.0"
+ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63"
+ integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==
+
+"@eslint/eslintrc@^3.1.0":
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.1.0.tgz#dbd3482bfd91efa663cbe7aa1f506839868207b6"
+ integrity sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==
+ dependencies:
+ ajv "^6.12.4"
+ debug "^4.3.2"
+ espree "^10.0.1"
+ globals "^14.0.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"
+
+"@eslint/js@9.3.0":
+ version "9.3.0"
+ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.3.0.tgz#2e8f65c9c55227abc4845b1513c69c32c679d8fe"
+ integrity sha512-niBqk8iwv96+yuTwjM6bWg8ovzAPF9qkICsGtcoa5/dmqcEMfdwNAX7+/OHcJHc7wj7XqPxH98oAHytFYlw6Sw==
+
"@hapi/hoek@^9.0.0", "@hapi/hoek@^9.3.0":
version "9.3.0"
resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb"
@@ -171,6 +203,30 @@
dependencies:
"@hapi/hoek" "^9.0.0"
+"@humanwhocodes/config-array@^0.13.0":
+ version "0.13.0"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748"
+ integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==
+ dependencies:
+ "@humanwhocodes/object-schema" "^2.0.3"
+ debug "^4.3.1"
+ minimatch "^3.0.5"
+
+"@humanwhocodes/module-importer@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c"
+ integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
+
+"@humanwhocodes/object-schema@^2.0.3":
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3"
+ integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==
+
+"@humanwhocodes/retry@^0.3.0":
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.3.0.tgz#6d86b8cb322660f03d3f0aa94b99bdd8e172d570"
+ integrity sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==
+
"@intlify/bundle-utils@^7.4.0":
version "7.5.0"
resolved "https://registry.yarnpkg.com/@intlify/bundle-utils/-/bundle-utils-7.5.0.tgz#fb50947c4e9997228a8abd5775e57a1202f71b09"
@@ -249,7 +305,7 @@
resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
-"@nodelib/fs.walk@^1.2.3":
+"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8":
version "1.2.8"
resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
@@ -654,7 +710,7 @@ acorn-jsx@^5.3.2:
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
-acorn@^8.10.0, acorn@^8.11.2, acorn@^8.5.0, acorn@^8.8.2, acorn@^8.9.0:
+acorn@^8.10.0, acorn@^8.11.2, acorn@^8.11.3, acorn@^8.5.0, acorn@^8.8.2, acorn@^8.9.0:
version "8.11.3"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a"
integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==
@@ -667,6 +723,16 @@ aggregate-error@^3.0.0:
clean-stack "^2.0.0"
indent-string "^4.0.0"
+ajv@^6.12.4:
+ version "6.12.6"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+ integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
+
ansi-colors@^4.1.1:
version "4.1.3"
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b"
@@ -777,6 +843,11 @@ axios@^1.6.1:
form-data "^4.0.0"
proxy-from-env "^1.1.0"
+balanced-match@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
+ integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
base64-js@^1.3.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
@@ -809,6 +880,19 @@ blueimp-canvas-to-blob@^3.29.0:
resolved "https://registry.yarnpkg.com/blueimp-canvas-to-blob/-/blueimp-canvas-to-blob-3.29.0.tgz#d965f06cb1a67fdae207a2be56683f55ef531466"
integrity sha512-0pcSSGxC0QxT+yVkivxIqW0Y4VlO2XSDPofBAqoJ1qJxgH9eiUDLv50Rixij2cDuEfx4M6DpD9UGZpRhT5Q8qg==
+boolbase@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
+ integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==
+
+brace-expansion@^1.1.7:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
braces@^3.0.2, braces@~3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
@@ -855,6 +939,11 @@ call-bind@^1.0.7:
get-intrinsic "^1.2.4"
set-function-length "^1.2.1"
+callsites@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
+ integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
caniuse-lite@^1.0.30001517:
version "1.0.30001520"
resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001520.tgz"
@@ -870,7 +959,7 @@ caseless@~0.12.0:
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==
-chalk@^4.1.0:
+chalk@^4.0.0, chalk@^4.1.0:
version "4.1.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
@@ -974,6 +1063,11 @@ compressorjs@^1.2.1:
blueimp-canvas-to-blob "^3.29.0"
is-blob "^2.1.0"
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
+
cookie@^0.5.0:
version "0.5.0"
resolved "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz"
@@ -991,7 +1085,7 @@ cross-env@^7.0.3:
dependencies:
cross-spawn "^7.0.1"
-cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.3:
+cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
version "7.0.3"
resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz"
integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
@@ -1000,6 +1094,11 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.3:
shebang-command "^2.0.0"
which "^2.0.1"
+cssesc@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
+ integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
+
csstype@^3.1.3:
version "3.1.3"
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81"
@@ -1065,7 +1164,7 @@ dayjs@^1.10.4:
resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.11.tgz#dfe0e9d54c5f8b68ccf8ca5f72ac603e7e5ed59e"
integrity sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==
-debug@4.3.4, debug@^4.1.1, debug@^4.3.3, debug@^4.3.4:
+debug@4.3.4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4:
version "4.3.4"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
@@ -1079,6 +1178,11 @@ debug@^3.1.0:
dependencies:
ms "^2.1.1"
+deep-is@^0.1.3:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
+ integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
+
define-data-property@^1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e"
@@ -1186,6 +1290,11 @@ escape-string-regexp@^1.0.5:
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
+escape-string-regexp@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
+ integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
+
escodegen@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17"
@@ -1197,12 +1306,96 @@ escodegen@^2.0.0:
optionalDependencies:
source-map "~0.6.1"
-eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.4.1:
+eslint-plugin-vue@^9.26.0:
+ version "9.26.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-9.26.0.tgz#bf7f5cce62c8f878059b91edae44d22974133af5"
+ integrity sha512-eTvlxXgd4ijE1cdur850G6KalZqk65k1JKoOI2d1kT3hr8sPD07j1q98FRFdNnpxBELGPWxZmInxeHGF/GxtqQ==
+ dependencies:
+ "@eslint-community/eslint-utils" "^4.4.0"
+ globals "^13.24.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"
+
+eslint-scope@^7.1.1:
+ version "7.2.2"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f"
+ integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==
+ dependencies:
+ esrecurse "^4.3.0"
+ estraverse "^5.2.0"
+
+eslint-scope@^8.0.1:
+ version "8.0.1"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.0.1.tgz#a9601e4b81a0b9171657c343fb13111688963cfc"
+ integrity sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==
+ dependencies:
+ esrecurse "^4.3.0"
+ estraverse "^5.2.0"
+
+eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1:
version "3.4.3"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
-espree@^9.0.0:
+eslint-visitor-keys@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz#e3adc021aa038a2a8e0b2f8b0ce8f66b9483b1fb"
+ integrity sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==
+
+eslint@^9.3.0:
+ version "9.3.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.3.0.tgz#36a96db84592618d6ed9074d677e92f4e58c08b9"
+ integrity sha512-5Iv4CsZW030lpUqHBapdPo3MJetAPtejVW8B84GIcIIv8+ohFaddXsrn1Gn8uD9ijDb+kcYKFUVmC8qG8B2ORQ==
+ dependencies:
+ "@eslint-community/eslint-utils" "^4.2.0"
+ "@eslint-community/regexpp" "^4.6.1"
+ "@eslint/eslintrc" "^3.1.0"
+ "@eslint/js" "9.3.0"
+ "@humanwhocodes/config-array" "^0.13.0"
+ "@humanwhocodes/module-importer" "^1.0.1"
+ "@humanwhocodes/retry" "^0.3.0"
+ "@nodelib/fs.walk" "^1.2.8"
+ ajv "^6.12.4"
+ chalk "^4.0.0"
+ cross-spawn "^7.0.2"
+ debug "^4.3.2"
+ escape-string-regexp "^4.0.0"
+ eslint-scope "^8.0.1"
+ eslint-visitor-keys "^4.0.0"
+ espree "^10.0.1"
+ esquery "^1.4.2"
+ esutils "^2.0.2"
+ fast-deep-equal "^3.1.3"
+ file-entry-cache "^8.0.0"
+ find-up "^5.0.0"
+ glob-parent "^6.0.2"
+ ignore "^5.2.0"
+ imurmurhash "^0.1.4"
+ is-glob "^4.0.0"
+ is-path-inside "^3.0.3"
+ json-stable-stringify-without-jsonify "^1.0.1"
+ levn "^0.4.1"
+ lodash.merge "^4.6.2"
+ minimatch "^3.1.2"
+ natural-compare "^1.4.0"
+ optionator "^0.9.3"
+ strip-ansi "^6.0.1"
+ text-table "^0.2.0"
+
+espree@^10.0.1:
+ version "10.0.1"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-10.0.1.tgz#600e60404157412751ba4a6f3a2ee1a42433139f"
+ integrity sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==
+ dependencies:
+ acorn "^8.11.3"
+ acorn-jsx "^5.3.2"
+ eslint-visitor-keys "^4.0.0"
+
+espree@^9.0.0, espree@^9.3.1:
version "9.6.1"
resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f"
integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==
@@ -1216,7 +1409,21 @@ esprima@^4.0.1:
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
-estraverse@^5.2.0:
+esquery@^1.4.0, esquery@^1.4.2:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b"
+ integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==
+ dependencies:
+ estraverse "^5.1.0"
+
+esrecurse@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
+ integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
+ dependencies:
+ estraverse "^5.2.0"
+
+estraverse@^5.1.0, estraverse@^5.2.0:
version "5.3.0"
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
@@ -1319,6 +1526,11 @@ extsprintf@^1.2.0:
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07"
integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==
+fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+ integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
fast-glob@^3.2.12:
version "3.3.2"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129"
@@ -1330,6 +1542,16 @@ fast-glob@^3.2.12:
merge2 "^1.3.0"
micromatch "^4.0.4"
+fast-json-stable-stringify@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+ integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
+fast-levenshtein@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+ integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
+
fastq@^1.6.0:
version "1.16.0"
resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.16.0.tgz#83b9a9375692db77a822df081edb6a9cf6839320"
@@ -1351,6 +1573,13 @@ figures@^3.2.0:
dependencies:
escape-string-regexp "^1.0.5"
+file-entry-cache@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f"
+ integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==
+ dependencies:
+ flat-cache "^4.0.0"
+
fill-range@^7.0.1:
version "7.0.1"
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
@@ -1358,6 +1587,27 @@ fill-range@^7.0.1:
dependencies:
to-regex-range "^5.0.1"
+find-up@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
+ integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
+ dependencies:
+ locate-path "^6.0.0"
+ path-exists "^4.0.0"
+
+flat-cache@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c"
+ integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==
+ dependencies:
+ flatted "^3.2.9"
+ keyv "^4.5.4"
+
+flatted@^3.2.9:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a"
+ integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==
+
follow-redirects@^1.15.6:
version "1.15.6"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b"
@@ -1460,6 +1710,13 @@ glob-parent@^5.1.2, glob-parent@~5.1.2:
dependencies:
is-glob "^4.0.1"
+glob-parent@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
+ integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
+ dependencies:
+ is-glob "^4.0.3"
+
global-dirs@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.1.tgz#0c488971f066baceda21447aecb1a8b911d22485"
@@ -1467,6 +1724,18 @@ global-dirs@^3.0.0:
dependencies:
ini "2.0.0"
+globals@^13.24.0:
+ version "13.24.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171"
+ integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==
+ dependencies:
+ type-fest "^0.20.2"
+
+globals@^14.0.0:
+ version "14.0.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e"
+ integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==
+
gopd@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c"
@@ -1537,6 +1806,24 @@ ieee754@^1.1.13:
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
+ignore@^5.2.0:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef"
+ integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==
+
+import-fresh@^3.2.1:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
+ integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
+ dependencies:
+ parent-module "^1.0.0"
+ resolve-from "^4.0.0"
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+ integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
+
indent-string@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
@@ -1576,7 +1863,7 @@ is-fullwidth-code-point@^3.0.0:
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
-is-glob@^4.0.1, is-glob@~4.0.1:
+is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
version "4.0.3"
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
@@ -1596,7 +1883,7 @@ is-number@^7.0.0:
resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
-is-path-inside@^3.0.2:
+is-path-inside@^3.0.2, is-path-inside@^3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
@@ -1649,11 +1936,26 @@ jsbn@~0.1.0:
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==
+json-buffer@3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
+ integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
+
+json-schema-traverse@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+ integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
json-schema@0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5"
integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==
+json-stable-stringify-without-jsonify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
+ integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
+
json-stringify-safe@~5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
@@ -1698,6 +2000,13 @@ jsprim@^2.0.2:
json-schema "0.4.0"
verror "1.10.0"
+keyv@^4.5.4:
+ version "4.5.4"
+ resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
+ integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==
+ dependencies:
+ json-buffer "3.0.1"
+
lazy-ass@1.6.0, lazy-ass@^1.6.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513"
@@ -1708,6 +2017,14 @@ leaflet@^1.9.4:
resolved "https://registry.yarnpkg.com/leaflet/-/leaflet-1.9.4.tgz#23fae724e282fa25745aff82ca4d394748db7d8d"
integrity sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==
+levn@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
+ integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
+ dependencies:
+ prelude-ls "^1.2.1"
+ type-check "~0.4.0"
+
listr2@^3.8.3:
version "3.14.0"
resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.14.0.tgz#23101cc62e1375fd5836b248276d1d2b51fdbe9e"
@@ -1722,6 +2039,18 @@ listr2@^3.8.3:
through "^2.3.8"
wrap-ansi "^7.0.0"
+locate-path@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
+ integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
+ dependencies:
+ p-locate "^5.0.0"
+
+lodash.merge@^4.6.2:
+ version "4.6.2"
+ resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
+ integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
+
lodash.once@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac"
@@ -1811,6 +2140,13 @@ mimic-fn@^2.1.0:
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+minimatch@^3.0.5, minimatch@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
+ integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
+ dependencies:
+ brace-expansion "^1.1.7"
+
minimist@^1.2.8:
version "1.2.8"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
@@ -1841,6 +2177,11 @@ nanoid@^3.3.6:
resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz"
integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==
+natural-compare@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+ integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
+
node-releases@^2.0.13:
version "2.0.13"
resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz"
@@ -1863,6 +2204,13 @@ npm-run-path@^4.0.0, npm-run-path@^4.0.1:
dependencies:
path-key "^3.0.0"
+nth-check@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d"
+ integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==
+ dependencies:
+ boolbase "^1.0.0"
+
object-inspect@^1.13.1:
version "1.13.1"
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2"
@@ -1882,11 +2230,37 @@ onetime@^5.1.0, onetime@^5.1.2:
dependencies:
mimic-fn "^2.1.0"
+optionator@^0.9.3:
+ version "0.9.4"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734"
+ integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==
+ dependencies:
+ deep-is "^0.1.3"
+ fast-levenshtein "^2.0.6"
+ levn "^0.4.1"
+ prelude-ls "^1.2.1"
+ type-check "^0.4.0"
+ word-wrap "^1.2.5"
+
ospath@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b"
integrity sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==
+p-limit@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
+ integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
+ dependencies:
+ yocto-queue "^0.1.0"
+
+p-locate@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
+ integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
+ dependencies:
+ p-limit "^3.0.2"
+
p-map@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b"
@@ -1894,6 +2268,18 @@ p-map@^4.0.0:
dependencies:
aggregate-error "^3.0.0"
+parent-module@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
+ integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+ dependencies:
+ callsites "^3.0.0"
+
+path-exists@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+ integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
path-key@^3.0.0, path-key@^3.1.0:
version "3.1.1"
resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz"
@@ -1958,6 +2344,14 @@ pkg-types@^1.0.3:
mlly "^1.2.0"
pathe "^1.1.0"
+postcss-selector-parser@^6.0.15:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz#49694cb4e7c649299fea510a29fa6577104bcf53"
+ integrity sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==
+ dependencies:
+ cssesc "^3.0.0"
+ util-deprecate "^1.0.2"
+
postcss-value-parser@^4.2.0:
version "4.2.0"
resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz"
@@ -1972,6 +2366,11 @@ postcss@^8.4.27, postcss@^8.4.31, postcss@^8.4.32, postcss@^8.4.33:
picocolors "^1.0.0"
source-map-js "^1.0.2"
+prelude-ls@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
+ integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
+
pretty-bytes@^5.6.0:
version "5.6.0"
resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb"
@@ -2012,7 +2411,7 @@ pump@^3.0.0:
end-of-stream "^1.1.0"
once "^1.3.1"
-punycode@^2.1.1:
+punycode@^2.1.0, punycode@^2.1.1:
version "2.3.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
@@ -2053,6 +2452,11 @@ requires-port@^1.0.0:
resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==
+resolve-from@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+ integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
restore-cursor@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
@@ -2109,6 +2513,11 @@ semver@^7.3.5:
dependencies:
lru-cache "^6.0.0"
+semver@^7.3.6, semver@^7.6.0:
+ version "7.6.2"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13"
+ integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==
+
semver@^7.5.3:
version "7.6.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d"
@@ -2247,6 +2656,11 @@ strip-final-newline@^2.0.0:
resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
+strip-json-comments@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
+ integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+
supports-color@^7.1.0:
version "7.2.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
@@ -2261,6 +2675,11 @@ supports-color@^8.1.1:
dependencies:
has-flag "^4.0.0"
+text-table@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+ integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
+
throttleit@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.1.tgz#304ec51631c3b770c65c6c6f76938b384000f4d5"
@@ -2310,6 +2729,18 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0:
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==
+type-check@^0.4.0, type-check@~0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
+ integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
+ dependencies:
+ prelude-ls "^1.2.1"
+
+type-fest@^0.20.2:
+ version "0.20.2"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
+ integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
+
type-fest@^0.21.3:
version "0.21.3"
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"
@@ -2366,6 +2797,13 @@ update-browserslist-db@^1.0.11:
escalade "^3.1.1"
picocolors "^1.0.0"
+uri-js@^4.2.2:
+ version "4.4.1"
+ resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
+ integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
+ dependencies:
+ punycode "^2.1.0"
+
url-parse@^1.5.3:
version "1.5.10"
resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1"
@@ -2374,6 +2812,11 @@ url-parse@^1.5.3:
querystringify "^2.1.1"
requires-port "^1.0.0"
+util-deprecate@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
+
uuid@^8.3.2:
version "8.3.2"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
@@ -2404,6 +2847,19 @@ vue-demi@>=0.14.5, vue-demi@>=0.14.6:
resolved "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz"
integrity sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==
+vue-eslint-parser@^9.4.2:
+ version "9.4.2"
+ resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-9.4.2.tgz#02ffcce82042b082292f2d1672514615f0d95b6d"
+ integrity sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==
+ 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"
+
vue-i18n@9:
version "9.9.0"
resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-9.9.0.tgz#20d348fa7e37fc88e4c84f69781b2f1215c7769f"
@@ -2480,6 +2936,11 @@ which@^2.0.1:
dependencies:
isexe "^2.0.0"
+word-wrap@^1.2.5:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34"
+ integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==
+
wrap-ansi@^6.2.0:
version "6.2.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
@@ -2503,6 +2964,11 @@ wrappy@1:
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
+xml-name-validator@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835"
+ integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==
+
yallist@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
@@ -2529,3 +2995,8 @@ yauzl@^2.10.0:
dependencies:
buffer-crc32 "~0.2.3"
fd-slicer "~1.1.0"
+
+yocto-queue@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
+ integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==