diff --git a/nextcloud_backup/backend/src/app.ts b/nextcloud_backup/backend/src/app.ts index 1b692bd..4c1a0df 100644 --- a/nextcloud_backup/backend/src/app.ts +++ b/nextcloud_backup/backend/src/app.ts @@ -13,7 +13,7 @@ const __dirname = path.dirname(__filename); const app = express(); app.use(cors({ - origin: "http://localhost:5173" + origin: true })) app.set("port", process.env.PORT || 3000); diff --git a/nextcloud_backup/backend/src/routes/homeAssistant.ts b/nextcloud_backup/backend/src/routes/homeAssistant.ts index 60b8af3..1abb9ff 100644 --- a/nextcloud_backup/backend/src/routes/homeAssistant.ts +++ b/nextcloud_backup/backend/src/routes/homeAssistant.ts @@ -1,17 +1,34 @@ import express from "express"; -import * as haOsService from "../services/homeAssistantService.js" +import * as haOsService from "../services/homeAssistantService.js"; const homeAssistantRouter = express.Router(); homeAssistantRouter.get("/backups/", (req, res, next) => { - haOsService.getBackups() - .then((value)=>{ + haOsService + .getBackups() + .then((value) => { res.json(value.body.data.backups); - }).catch((reason)=>{ + }) + .catch((reason) => { res.status(500); res.json(reason); - }) + }); }); +homeAssistantRouter.get("/addons", (req, res, next) => { + haOsService + .getAddonList() + .then((value) => { + res.json(value.body.data); + }) + .catch((reason) => { + res.status(500); + res.json(reason); + }); +}); -export default homeAssistantRouter; \ No newline at end of file +homeAssistantRouter.get("/folders", (req, res, next) => { + res.json(haOsService.getFolderList()); +}) + +export default homeAssistantRouter; diff --git a/nextcloud_backup/backend/src/services/homeAssistantService.ts b/nextcloud_backup/backend/src/services/homeAssistantService.ts index e6ea32d..43d6ca7 100644 --- a/nextcloud_backup/backend/src/services/homeAssistantService.ts +++ b/nextcloud_backup/backend/src/services/homeAssistantService.ts @@ -86,30 +86,6 @@ function getAddonToBackup(addons: AddonModel[]) { return slugs; } -function getFolderList() { - return [ - { - name: "Home Assistant configuration", - slug: "homeassistant", - }, - { - name: "SSL", - slug: "ssl", - }, - { - name: "Share", - slug: "share", - }, - { - name: "Media", - slug: "media", - }, - { - name: "Local add-ons", - slug: "addons/local", - }, - ]; -} function getFolderToBackup() { const excluded_folder = settingsTools.getSettings().exclude_folder; @@ -434,6 +410,32 @@ function startAddons(addonSlugs: string[]) { }); } +export function getFolderList() { + return [ + { + name: "Home Assistant configuration", + slug: "homeassistant", + }, + { + name: "SSL", + slug: "ssl", + }, + { + name: "Share", + slug: "share", + }, + { + name: "Media", + slug: "media", + }, + { + name: "Local add-ons", + slug: "addons/local", + }, + ]; +} + + function publish_state(state: Status) { // let data_error_sensor = { // state: state.status == "error" ? "on" : "off", @@ -501,7 +503,6 @@ function publish_state(state: Status) { export { getVersion, getAddonList, - getFolderList, getBackups, downloadSnapshot, createNewBackup, diff --git a/nextcloud_backup/backend/src/services/webdavConfigService.ts b/nextcloud_backup/backend/src/services/webdavConfigService.ts index 4050a81..fb9f568 100644 --- a/nextcloud_backup/backend/src/services/webdavConfigService.ts +++ b/nextcloud_backup/backend/src/services/webdavConfigService.ts @@ -59,6 +59,7 @@ export function getWebdavDefaultConfig(): WebdavConfig { password: "", backupDir: default_root, allowSelfSignedCerts: false, + chunckedUpload: false, webdavEndpoint: { type: WebdavEndpointType.NEXTCLOUD, }, diff --git a/nextcloud_backup/backend/src/types/services/backupConfigValidation.ts b/nextcloud_backup/backend/src/types/services/backupConfigValidation.ts index a835e60..b0ed4d0 100644 --- a/nextcloud_backup/backend/src/types/services/backupConfigValidation.ts +++ b/nextcloud_backup/backend/src/types/services/backupConfigValidation.ts @@ -47,8 +47,8 @@ const backupConfigValidation = { webdav: Joi.object(AutoCleanConfig).required(), }).required(), exclude: Joi.object({ - addon: Joi.array().items(Joi.string().not().empty()), - folder: Joi.array().items(Joi.string().not().empty()), + addon: Joi.array().items(Joi.string().not().empty()).required(), + folder: Joi.array().items(Joi.string().not().empty()).required(), }).required(), autoStopAddon: Joi.array().items(Joi.string().not().empty()), password: Joi.object({ diff --git a/nextcloud_backup/backend/src/types/services/webdavConfig.ts b/nextcloud_backup/backend/src/types/services/webdavConfig.ts index 3b28fed..18d1d1e 100644 --- a/nextcloud_backup/backend/src/types/services/webdavConfig.ts +++ b/nextcloud_backup/backend/src/types/services/webdavConfig.ts @@ -10,6 +10,7 @@ export interface WebdavConfig { password: string; backupDir: string; allowSelfSignedCerts: boolean + chunckedUpload: boolean webdavEndpoint: { type: WebdavEndpointType; customEndpoint?: string; diff --git a/nextcloud_backup/backend/src/types/services/webdavConfigValidation.ts b/nextcloud_backup/backend/src/types/services/webdavConfigValidation.ts index f4946a7..36cb314 100644 --- a/nextcloud_backup/backend/src/types/services/webdavConfigValidation.ts +++ b/nextcloud_backup/backend/src/types/services/webdavConfigValidation.ts @@ -3,11 +3,12 @@ import { WebdavEndpointType } from "./webdavConfig.js"; const WebdavConfigValidation = { - url: Joi.string().not().empty().uri().required(), - username: Joi.string().not().empty().required(), - password: Joi.string().not().empty().required(), - backupDir: Joi.string().required(), - allowSelfSignedCerts: Joi.boolean().required(), + url: Joi.string().not().empty().uri().required().label("Url"), + username: Joi.string().not().empty().label("Username"), + password: Joi.string().not().empty().label("Password"), + backupDir: Joi.string().required().label("Backup directory"), + allowSelfSignedCerts: Joi.boolean().label("Allow self signed certificate"), + chunckedUpload: Joi.boolean().required().label("Chuncked upload"), webdavEndpoint: Joi.object({ type: Joi.string().valid(WebdavEndpointType.CUSTOM, WebdavEndpointType.NEXTCLOUD).required(), customEndpoint: Joi.alternatives().conditional("type", { @@ -15,7 +16,7 @@ const WebdavConfigValidation = { then: Joi.string().not().empty().required, otherwise: Joi.disallow() }) - }).required() + }).required().label("Webdav endpoint"), } export default WebdavConfigValidation; \ No newline at end of file diff --git a/nextcloud_backup/frontend/package.json b/nextcloud_backup/frontend/package.json index 491c978..5d313d0 100644 --- a/nextcloud_backup/frontend/package.json +++ b/nextcloud_backup/frontend/package.json @@ -11,33 +11,35 @@ "type-check": "vue-tsc --noEmit" }, "dependencies": { - "@mdi/font": "5.9.55", - "@mdi/js": "^7.0.96", - "@types/luxon": "^3.0.1", + "@mdi/font": "7.1.96", + "@mdi/js": "^7.1.96", + "@types/luxon": "^3.2.0", + "@types/uuid": "^9.0.0", "ky": "^0.31.4", - "luxon": "^3.0.4", - "pinia": "^2.0.23", + "luxon": "^3.2.1", + "pinia": "^2.0.28", "pretty-bytes": "^6.0.0", "roboto-fontface": "*", - "vue": "^3.2.40", - "vuetify": "3.0.1", - "webfontloader": "^1.0.0" + "uuid": "^9.0.0", + "vue": "^3.2.45", + "vuetify": "3.1.1", + "webfontloader": "^1.6.28" }, "devDependencies": { "@rushstack/eslint-patch": "^1.2.0", - "@types/node": "^16.11.65", - "@types/webfontloader": "^1.0.0", - "@vitejs/plugin-vue": "^3.1.2", + "@types/node": "^16.18.11", + "@types/webfontloader": "^1.6.35", + "@vitejs/plugin-vue": "^3.2.0", "@vue/eslint-config-prettier": "^7.0.0", "@vue/eslint-config-typescript": "^11.0.2", "@vue/tsconfig": "^0.1.3", - "eslint": "^8.25.0", - "eslint-plugin-vue": "^9.6.0", + "eslint": "^8.31.0", + "eslint-plugin-vue": "^9.8.0", "npm-run-all": "^4.1.5", - "prettier": "^2.7.1", + "prettier": "^2.8.2", "typescript": "~4.7.4", - "vite": "^3.1.7", - "vite-plugin-vuetify": "^1.0.0-alpha.12", + "vite": "^3.2.5", + "vite-plugin-vuetify": "^1.0.1", "vue-tsc": "1.0.7" }, "packageManager": "pnpm@7.12.1" diff --git a/nextcloud_backup/frontend/pnpm-lock.yaml b/nextcloud_backup/frontend/pnpm-lock.yaml index 434c90b..e6d930d 100644 --- a/nextcloud_backup/frontend/pnpm-lock.yaml +++ b/nextcloud_backup/frontend/pnpm-lock.yaml @@ -1,61 +1,65 @@ lockfileVersion: 5.4 specifiers: - '@mdi/font': 5.9.55 - '@mdi/js': ^7.0.96 + '@mdi/font': 7.1.96 + '@mdi/js': ^7.1.96 '@rushstack/eslint-patch': ^1.2.0 - '@types/luxon': ^3.0.1 - '@types/node': ^16.11.65 - '@types/webfontloader': ^1.0.0 - '@vitejs/plugin-vue': ^3.1.2 + '@types/luxon': ^3.2.0 + '@types/node': ^16.18.11 + '@types/uuid': ^9.0.0 + '@types/webfontloader': ^1.6.35 + '@vitejs/plugin-vue': ^3.2.0 '@vue/eslint-config-prettier': ^7.0.0 '@vue/eslint-config-typescript': ^11.0.2 '@vue/tsconfig': ^0.1.3 - eslint: ^8.25.0 - eslint-plugin-vue: ^9.6.0 + eslint: ^8.31.0 + eslint-plugin-vue: ^9.8.0 ky: ^0.31.4 - luxon: ^3.0.4 + luxon: ^3.2.1 npm-run-all: ^4.1.5 - pinia: ^2.0.23 - prettier: ^2.7.1 + pinia: ^2.0.28 + prettier: ^2.8.2 pretty-bytes: ^6.0.0 roboto-fontface: '*' typescript: ~4.7.4 - vite: ^3.1.7 - vite-plugin-vuetify: ^1.0.0-alpha.12 - vue: ^3.2.40 + uuid: ^9.0.0 + vite: ^3.2.5 + vite-plugin-vuetify: ^1.0.1 + vue: ^3.2.45 vue-tsc: 1.0.7 - vuetify: 3.0.1 - webfontloader: ^1.0.0 + vuetify: 3.1.1 + webfontloader: ^1.6.28 dependencies: - '@mdi/font': 5.9.55 - '@mdi/js': 7.0.96 - '@types/luxon': 3.0.1 + '@mdi/font': 7.1.96 + '@mdi/js': 7.1.96 + '@types/luxon': 3.2.0 + '@types/uuid': 9.0.0 ky: 0.31.4 - luxon: 3.0.4 - pinia: 2.0.23_rg374xhldfcyvjtaj3qktyfz5y + luxon: 3.2.1 + pinia: 2.0.28_e7lp6ggkpgyi5vqd44m2kxvk6i pretty-bytes: 6.0.0 roboto-fontface: 0.10.0 - vue: 3.2.40 - vuetify: 3.0.1_vdkwhj2kz5kpysy3rwb432nm3y + uuid: 9.0.0 + vue: 3.2.45 + vuetify: 3.1.1_ihnv4ujwy6q3qcyepcitbzrajy webfontloader: 1.6.28 devDependencies: '@rushstack/eslint-patch': 1.2.0 - '@types/node': 16.11.65 + '@types/node': 16.18.11 '@types/webfontloader': 1.6.35 - '@vitejs/plugin-vue': 3.1.2_vite@3.1.7+vue@3.2.40 - '@vue/eslint-config-prettier': 7.0.0_znq2sm4m5bonjw4qqm6mwhbe2q - '@vue/eslint-config-typescript': 11.0.2_bdxbbxtuayd4lgflbnh77t3rcm - '@vue/tsconfig': 0.1.3_@types+node@16.11.65 - eslint: 8.25.0 - eslint-plugin-vue: 9.6.0_eslint@8.25.0 + '@vitejs/plugin-vue': 3.2.0_vite@3.2.5+vue@3.2.45 + '@vue/eslint-config-prettier': 7.0.0_k3hr3m6agcryggk5vamhhr56wi + '@vue/eslint-config-typescript': 11.0.2_ubjihbtswo3dfrh73mhv3owlna + '@vue/tsconfig': 0.1.3_@types+node@16.18.11 + eslint: 8.31.0 + eslint-plugin-vue: 9.8.0_eslint@8.31.0 npm-run-all: 4.1.5 - prettier: 2.7.1 + prettier: 2.8.2 typescript: 4.7.4 - vite: 3.1.7 - vite-plugin-vuetify: 1.0.0-alpha.17_3jvrp5vztr3d3x64xppq7ybday + vite: 3.2.5_@types+node@16.18.11 + vite-plugin-vuetify: 1.0.1_mc6ujyzexjrcgjeph6am73m5wu vue-tsc: 1.0.7_typescript@4.7.4 packages: @@ -68,46 +72,46 @@ packages: resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} engines: {node: '>=6.9.0'} - /@babel/parser/7.19.4: - resolution: {integrity: sha512-qpVT7gtuOLjWeDTKLkJ6sryqLliBaFpAtGeqw5cs5giLldvh+Ch0plqnUMKoVAUS6ZEueQQiZV+p5pxtPitEsA==} + /@babel/parser/7.20.7: + resolution: {integrity: sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.19.4 + '@babel/types': 7.20.7 - /@babel/types/7.19.4: - resolution: {integrity: sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==} + /@babel/types/7.20.7: + resolution: {integrity: sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-string-parser': 7.19.4 '@babel/helper-validator-identifier': 7.19.1 to-fast-properties: 2.0.0 - /@esbuild/android-arm/0.15.10: - resolution: {integrity: sha512-FNONeQPy/ox+5NBkcSbYJxoXj9GWu8gVGJTVmUyoOCKQFDTrHVKgNSzChdNt0I8Aj/iKcsDf2r9BFwv+FSNUXg==} + /@esbuild/android-arm/0.15.18: + resolution: {integrity: sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==} engines: {node: '>=12'} cpu: [arm] os: [android] requiresBuild: true optional: true - /@esbuild/linux-loong64/0.15.10: - resolution: {integrity: sha512-w0Ou3Z83LOYEkwaui2M8VwIp+nLi/NA60lBLMvaJ+vXVMcsARYdEzLNE7RSm4+lSg4zq4d7fAVuzk7PNQ5JFgg==} + /@esbuild/linux-loong64/0.15.18: + resolution: {integrity: sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==} engines: {node: '>=12'} cpu: [loong64] os: [linux] requiresBuild: true optional: true - /@eslint/eslintrc/1.3.3: - resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} + /@eslint/eslintrc/1.4.1: + resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 debug: 4.3.4 - espree: 9.4.0 - globals: 13.17.0 - ignore: 5.2.0 + espree: 9.4.1 + globals: 13.19.0 + ignore: 5.2.4 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -116,8 +120,8 @@ packages: - supports-color dev: true - /@humanwhocodes/config-array/0.10.7: - resolution: {integrity: sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==} + /@humanwhocodes/config-array/0.11.8: + resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==} engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 1.2.1 @@ -136,12 +140,12 @@ packages: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true - /@mdi/font/5.9.55: - resolution: {integrity: sha512-jswRF6q3eq8NWpWiqct6q+6Fg/I7nUhrxYJfiEM8JJpap0wVJLQdbKtyS65GdlK7S7Ytnx3TTi/bmw+tBhkGmg==} + /@mdi/font/7.1.96: + resolution: {integrity: sha512-Imag6npmfkBDi2Ze2jiZVAPTDIKLxhz2Sx82xJ2zctyAU5LYJejLI5ChnDwiD9bMkQfVuzEsI98Q8toHyC+HCg==} dev: false - /@mdi/js/7.0.96: - resolution: {integrity: sha512-lNqhkV3cpPfYb/Avh+vXLFukUTbHbyHoFo4Jdc7Oc9UvURGVhamFIpgOVvEf2bNA78zvjXTZeVWExUTR+DLBfQ==} + /@mdi/js/7.1.96: + resolution: {integrity: sha512-wlrJs6Ryhaa5CqhK3FjTfMRnb/s7HeLkKMFqwQySkK86cdN1TGdzpSM3O4tsmzCA1dYBeTbXvOwSE/Y42cUrvA==} dev: false /@nodelib/fs.scandir/2.1.5: @@ -162,7 +166,7 @@ packages: engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.13.0 + fastq: 1.15.0 dev: true /@rushstack/eslint-patch/1.2.0: @@ -173,20 +177,27 @@ packages: resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} dev: true - /@types/luxon/3.0.1: - resolution: {integrity: sha512-/LAvk1cMOJt0ghzMFrZEvByUhsiEfeeT2IF53Le+Ki3A538yEL9pRZ7a6MuCxdrYK+YNqNIDmrKU/r2nnw04zQ==} + /@types/luxon/3.2.0: + resolution: {integrity: sha512-lGmaGFoaXHuOLXFvuju2bfvZRqxAqkHPx9Y9IQdQABrinJJshJwfNCKV+u7rR3kJbiqfTF/NhOkcxxAFrObyaA==} dev: false - /@types/node/16.11.65: - resolution: {integrity: sha512-Vfz7wGMOr4jbQGiQHVJm8VjeQwM9Ya7mHe9LtQ264/Epf5n1KiZShOFqk++nBzw6a/ubgYdB9Od7P+MH/LjoWw==} + /@types/node/16.18.11: + resolution: {integrity: sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==} + + /@types/semver/7.3.13: + resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} dev: true + /@types/uuid/9.0.0: + resolution: {integrity: sha512-kr90f+ERiQtKWMz5rP32ltJ/BtULDI5RVO0uavn1HQUOwjx0R1h0rnDYNL0CepF1zL5bSY6FISAfd9tOdDhU5Q==} + dev: false + /@types/webfontloader/1.6.35: resolution: {integrity: sha512-IJlrsiDWq6KghQ7tPlL5tcwSUyOxLDceT+AFUY7Ylj0Fcv3/h3QkANqQxZ0B5mEpEKxhTw76vDmvrruSMV9n9Q==} dev: true - /@typescript-eslint/eslint-plugin/5.40.0_ik43yucnjuzsopqc3tao6tk3x4: - resolution: {integrity: sha512-FIBZgS3DVJgqPwJzvZTuH4HNsZhHMa9SjxTKAZTlMsPw/UzpEjcf9f4dfgDJEHjK+HboUJo123Eshl6niwEm/Q==} + /@typescript-eslint/eslint-plugin/5.48.1_facq7yyfjkgieeqiwm3vbxi5rq: + resolution: {integrity: sha512-9nY5K1Rp2ppmpb9s9S2aBiF3xo5uExCehMDmYmmFqqyxgenbHJ3qbarcLt4ITgaD6r/2ypdlcFRdcuVPnks+fQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 @@ -196,13 +207,14 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/parser': 5.40.0_l76llshcx5hpzqzl7lfng4kpb4 - '@typescript-eslint/scope-manager': 5.40.0 - '@typescript-eslint/type-utils': 5.40.0_l76llshcx5hpzqzl7lfng4kpb4 - '@typescript-eslint/utils': 5.40.0_l76llshcx5hpzqzl7lfng4kpb4 + '@typescript-eslint/parser': 5.48.1_wogtpudmlxya2leoxia5qf2rl4 + '@typescript-eslint/scope-manager': 5.48.1 + '@typescript-eslint/type-utils': 5.48.1_wogtpudmlxya2leoxia5qf2rl4 + '@typescript-eslint/utils': 5.48.1_wogtpudmlxya2leoxia5qf2rl4 debug: 4.3.4 - eslint: 8.25.0 - ignore: 5.2.0 + eslint: 8.31.0 + ignore: 5.2.4 + natural-compare-lite: 1.4.0 regexpp: 3.2.0 semver: 7.3.8 tsutils: 3.21.0_typescript@4.7.4 @@ -211,8 +223,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser/5.40.0_l76llshcx5hpzqzl7lfng4kpb4: - resolution: {integrity: sha512-Ah5gqyX2ySkiuYeOIDg7ap51/b63QgWZA7w6AHtFrag7aH0lRQPbLzUjk0c9o5/KZ6JRkTTDKShL4AUrQa6/hw==} + /@typescript-eslint/parser/5.48.1_wogtpudmlxya2leoxia5qf2rl4: + resolution: {integrity: sha512-4yg+FJR/V1M9Xoq56SF9Iygqm+r5LMXvheo6DQ7/yUWynQ4YfCRnsKuRgqH4EQ5Ya76rVwlEpw4Xu+TgWQUcdA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -221,26 +233,26 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.40.0 - '@typescript-eslint/types': 5.40.0 - '@typescript-eslint/typescript-estree': 5.40.0_typescript@4.7.4 + '@typescript-eslint/scope-manager': 5.48.1 + '@typescript-eslint/types': 5.48.1 + '@typescript-eslint/typescript-estree': 5.48.1_typescript@4.7.4 debug: 4.3.4 - eslint: 8.25.0 + eslint: 8.31.0 typescript: 4.7.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager/5.40.0: - resolution: {integrity: sha512-d3nPmjUeZtEWRvyReMI4I1MwPGC63E8pDoHy0BnrYjnJgilBD3hv7XOiETKLY/zTwI7kCnBDf2vWTRUVpYw0Uw==} + /@typescript-eslint/scope-manager/5.48.1: + resolution: {integrity: sha512-S035ueRrbxRMKvSTv9vJKIWgr86BD8s3RqoRZmsSh/s8HhIs90g6UlK8ZabUSjUZQkhVxt7nmZ63VJ9dcZhtDQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.40.0 - '@typescript-eslint/visitor-keys': 5.40.0 + '@typescript-eslint/types': 5.48.1 + '@typescript-eslint/visitor-keys': 5.48.1 dev: true - /@typescript-eslint/type-utils/5.40.0_l76llshcx5hpzqzl7lfng4kpb4: - resolution: {integrity: sha512-nfuSdKEZY2TpnPz5covjJqav+g5qeBqwSHKBvz7Vm1SAfy93SwKk/JeSTymruDGItTwNijSsno5LhOHRS1pcfw==} + /@typescript-eslint/type-utils/5.48.1_wogtpudmlxya2leoxia5qf2rl4: + resolution: {integrity: sha512-Hyr8HU8Alcuva1ppmqSYtM/Gp0q4JOp1F+/JH5D1IZm/bUBrV0edoewQZiEc1r6I8L4JL21broddxK8HAcZiqQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -249,23 +261,23 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.40.0_typescript@4.7.4 - '@typescript-eslint/utils': 5.40.0_l76llshcx5hpzqzl7lfng4kpb4 + '@typescript-eslint/typescript-estree': 5.48.1_typescript@4.7.4 + '@typescript-eslint/utils': 5.48.1_wogtpudmlxya2leoxia5qf2rl4 debug: 4.3.4 - eslint: 8.25.0 + eslint: 8.31.0 tsutils: 3.21.0_typescript@4.7.4 typescript: 4.7.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types/5.40.0: - resolution: {integrity: sha512-V1KdQRTXsYpf1Y1fXCeZ+uhjW48Niiw0VGt4V8yzuaDTU8Z1Xl7yQDyQNqyAFcVhpYXIVCEuxSIWTsLDpHgTbw==} + /@typescript-eslint/types/5.48.1: + resolution: {integrity: sha512-xHyDLU6MSuEEdIlzrrAerCGS3T7AA/L8Hggd0RCYBi0w3JMvGYxlLlXHeg50JI9Tfg5MrtsfuNxbS/3zF1/ATg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree/5.40.0_typescript@4.7.4: - resolution: {integrity: sha512-b0GYlDj8TLTOqwX7EGbw2gL5EXS2CPEWhF9nGJiGmEcmlpNBjyHsTwbqpyIEPVpl6br4UcBOYlcI2FJVtJkYhg==} + /@typescript-eslint/typescript-estree/5.48.1_typescript@4.7.4: + resolution: {integrity: sha512-Hut+Osk5FYr+sgFh8J/FHjqX6HFcDzTlWLrFqGoK5kVUN3VBHF/QzZmAsIXCQ8T/W9nQNBTqalxi1P3LSqWnRA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -273,8 +285,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.40.0 - '@typescript-eslint/visitor-keys': 5.40.0 + '@typescript-eslint/types': 5.48.1 + '@typescript-eslint/visitor-keys': 5.48.1 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -285,49 +297,50 @@ packages: - supports-color dev: true - /@typescript-eslint/utils/5.40.0_l76llshcx5hpzqzl7lfng4kpb4: - resolution: {integrity: sha512-MO0y3T5BQ5+tkkuYZJBjePewsY+cQnfkYeRqS6tPh28niiIwPnQ1t59CSRcs1ZwJJNOdWw7rv9pF8aP58IMihA==} + /@typescript-eslint/utils/5.48.1_wogtpudmlxya2leoxia5qf2rl4: + resolution: {integrity: sha512-SmQuSrCGUOdmGMwivW14Z0Lj8dxG1mOFZ7soeJ0TQZEJcs3n5Ndgkg0A4bcMFzBELqLJ6GTHnEU+iIoaD6hFGA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@types/json-schema': 7.0.11 - '@typescript-eslint/scope-manager': 5.40.0 - '@typescript-eslint/types': 5.40.0 - '@typescript-eslint/typescript-estree': 5.40.0_typescript@4.7.4 - eslint: 8.25.0 + '@types/semver': 7.3.13 + '@typescript-eslint/scope-manager': 5.48.1 + '@typescript-eslint/types': 5.48.1 + '@typescript-eslint/typescript-estree': 5.48.1_typescript@4.7.4 + eslint: 8.31.0 eslint-scope: 5.1.1 - eslint-utils: 3.0.0_eslint@8.25.0 + eslint-utils: 3.0.0_eslint@8.31.0 semver: 7.3.8 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys/5.40.0: - resolution: {integrity: sha512-ijJ+6yig+x9XplEpG2K6FUdJeQGGj/15U3S56W9IqXKJqleuD7zJ2AX/miLezwxpd7ZxDAqO87zWufKg+RPZyQ==} + /@typescript-eslint/visitor-keys/5.48.1: + resolution: {integrity: sha512-Ns0XBwmfuX7ZknznfXozgnydyR8F6ev/KEGePP4i74uL3ArsKbEhJ7raeKr1JSa997DBDwol/4a0Y+At82c9dA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.40.0 + '@typescript-eslint/types': 5.48.1 eslint-visitor-keys: 3.3.0 dev: true - /@vitejs/plugin-vue/3.1.2_vite@3.1.7+vue@3.2.40: - resolution: {integrity: sha512-3zxKNlvA3oNaKDYX0NBclgxTQ1xaFdL7PzwF6zj9tGFziKwmBa3Q/6XcJQxudlT81WxDjEhHmevvIC4Orc1LhQ==} + /@vitejs/plugin-vue/3.2.0_vite@3.2.5+vue@3.2.45: + resolution: {integrity: sha512-E0tnaL4fr+qkdCNxJ+Xd0yM31UwMkQje76fsDVBBUCoGOUPexu2VDUYHL8P4CwV+zMvWw6nlRw19OnRKmYAJpw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: ^3.0.0 vue: ^3.2.25 dependencies: - vite: 3.1.7 - vue: 3.2.40 + vite: 3.2.5_@types+node@16.18.11 + vue: 3.2.45 dev: true /@volar/language-core/1.0.7: resolution: {integrity: sha512-T3iJ7Ej5Ywrsn1nEfvOQ98LdFZu3TtoXD8UELHto/u5QyQk4U2GfPl+0ZjuS39ZPocU9l/5CMhrxHsgv/hFWVA==} dependencies: '@volar/source-map': 1.0.7 - '@vue/reactivity': 3.2.40 + '@vue/reactivity': 3.2.45 muggle-string: 0.1.0 dev: true @@ -348,12 +361,12 @@ packages: dependencies: '@volar/language-core': 1.0.7 '@volar/source-map': 1.0.7 - '@vue/compiler-dom': 3.2.40 - '@vue/compiler-sfc': 3.2.40 - '@vue/reactivity': 3.2.40 - '@vue/shared': 3.2.40 - minimatch: 5.1.0 - vue-template-compiler: 2.7.11 + '@vue/compiler-dom': 3.2.45 + '@vue/compiler-sfc': 3.2.45 + '@vue/reactivity': 3.2.45 + '@vue/shared': 3.2.45 + minimatch: 5.1.2 + vue-template-compiler: 2.7.14 dev: true /@volar/vue-typescript/1.0.7: @@ -363,57 +376,57 @@ packages: '@volar/vue-language-core': 1.0.7 dev: true - /@vue/compiler-core/3.2.40: - resolution: {integrity: sha512-2Dc3Stk0J/VyQ4OUr2yEC53kU28614lZS+bnrCbFSAIftBJ40g/2yQzf4mPBiFuqguMB7hyHaujdgZAQ67kZYA==} + /@vue/compiler-core/3.2.45: + resolution: {integrity: sha512-rcMj7H+PYe5wBV3iYeUgbCglC+pbpN8hBLTJvRiK2eKQiWqu+fG9F+8sW99JdL4LQi7Re178UOxn09puSXvn4A==} dependencies: - '@babel/parser': 7.19.4 - '@vue/shared': 3.2.40 + '@babel/parser': 7.20.7 + '@vue/shared': 3.2.45 estree-walker: 2.0.2 source-map: 0.6.1 - /@vue/compiler-dom/3.2.40: - resolution: {integrity: sha512-OZCNyYVC2LQJy4H7h0o28rtk+4v+HMQygRTpmibGoG9wZyomQiS5otU7qo3Wlq5UfHDw2RFwxb9BJgKjVpjrQw==} + /@vue/compiler-dom/3.2.45: + resolution: {integrity: sha512-tyYeUEuKqqZO137WrZkpwfPCdiiIeXYCcJ8L4gWz9vqaxzIQRccTSwSWZ/Axx5YR2z+LvpUbmPNXxuBU45lyRw==} dependencies: - '@vue/compiler-core': 3.2.40 - '@vue/shared': 3.2.40 + '@vue/compiler-core': 3.2.45 + '@vue/shared': 3.2.45 - /@vue/compiler-sfc/3.2.40: - resolution: {integrity: sha512-tzqwniIN1fu1PDHC3CpqY/dPCfN/RN1thpBC+g69kJcrl7mbGiHKNwbA6kJ3XKKy8R6JLKqcpVugqN4HkeBFFg==} + /@vue/compiler-sfc/3.2.45: + resolution: {integrity: sha512-1jXDuWah1ggsnSAOGsec8cFjT/K6TMZ0sPL3o3d84Ft2AYZi2jWJgRMjw4iaK0rBfA89L5gw427H4n1RZQBu6Q==} dependencies: - '@babel/parser': 7.19.4 - '@vue/compiler-core': 3.2.40 - '@vue/compiler-dom': 3.2.40 - '@vue/compiler-ssr': 3.2.40 - '@vue/reactivity-transform': 3.2.40 - '@vue/shared': 3.2.40 + '@babel/parser': 7.20.7 + '@vue/compiler-core': 3.2.45 + '@vue/compiler-dom': 3.2.45 + '@vue/compiler-ssr': 3.2.45 + '@vue/reactivity-transform': 3.2.45 + '@vue/shared': 3.2.45 estree-walker: 2.0.2 magic-string: 0.25.9 - postcss: 8.4.17 + postcss: 8.4.21 source-map: 0.6.1 - /@vue/compiler-ssr/3.2.40: - resolution: {integrity: sha512-80cQcgasKjrPPuKcxwuCx7feq+wC6oFl5YaKSee9pV3DNq+6fmCVwEEC3vvkf/E2aI76rIJSOYHsWSEIxK74oQ==} + /@vue/compiler-ssr/3.2.45: + resolution: {integrity: sha512-6BRaggEGqhWht3lt24CrIbQSRD5O07MTmd+LjAn5fJj568+R9eUD2F7wMQJjX859seSlrYog7sUtrZSd7feqrQ==} dependencies: - '@vue/compiler-dom': 3.2.40 - '@vue/shared': 3.2.40 + '@vue/compiler-dom': 3.2.45 + '@vue/shared': 3.2.45 - /@vue/devtools-api/6.4.4: - resolution: {integrity: sha512-Ku31WzpOV/8cruFaXaEZKF81WkNnvCSlBY4eOGtz5WMSdJvX1v1WWlSMGZeqUwPtQ27ZZz7B62erEMq8JDjcXw==} + /@vue/devtools-api/6.4.5: + resolution: {integrity: sha512-JD5fcdIuFxU4fQyXUu3w2KpAJHzTVdN+p4iOX2lMWSHMOoQdMAcpFLZzm9Z/2nmsoZ1a96QEhZ26e50xLBsgOQ==} dev: false - /@vue/eslint-config-prettier/7.0.0_znq2sm4m5bonjw4qqm6mwhbe2q: + /@vue/eslint-config-prettier/7.0.0_k3hr3m6agcryggk5vamhhr56wi: resolution: {integrity: sha512-/CTc6ML3Wta1tCe1gUeO0EYnVXfo3nJXsIhZ8WJr3sov+cGASr6yuiibJTL6lmIBm7GobopToOuB3B6AWyV0Iw==} peerDependencies: eslint: '>= 7.28.0' prettier: '>= 2.0.0' dependencies: - eslint: 8.25.0 - eslint-config-prettier: 8.5.0_eslint@8.25.0 - eslint-plugin-prettier: 4.2.1_hvbqyfstm4urdpm6ffpwfka4e4 - prettier: 2.7.1 + eslint: 8.31.0 + eslint-config-prettier: 8.6.0_eslint@8.31.0 + eslint-plugin-prettier: 4.2.1_iu5s7nk6dw7o3tajefwfiqfmge + prettier: 2.8.2 dev: true - /@vue/eslint-config-typescript/11.0.2_bdxbbxtuayd4lgflbnh77t3rcm: + /@vue/eslint-config-typescript/11.0.2_ubjihbtswo3dfrh73mhv3owlna: resolution: {integrity: sha512-EiKud1NqlWmSapBFkeSrE994qpKx7/27uCGnhdqzllYDpQZroyX/O6bwjEpeuyKamvLbsGdO6PMR2faIf+zFnw==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: @@ -424,56 +437,56 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.40.0_ik43yucnjuzsopqc3tao6tk3x4 - '@typescript-eslint/parser': 5.40.0_l76llshcx5hpzqzl7lfng4kpb4 - eslint: 8.25.0 - eslint-plugin-vue: 9.6.0_eslint@8.25.0 + '@typescript-eslint/eslint-plugin': 5.48.1_facq7yyfjkgieeqiwm3vbxi5rq + '@typescript-eslint/parser': 5.48.1_wogtpudmlxya2leoxia5qf2rl4 + eslint: 8.31.0 + eslint-plugin-vue: 9.8.0_eslint@8.31.0 typescript: 4.7.4 - vue-eslint-parser: 9.1.0_eslint@8.25.0 + vue-eslint-parser: 9.1.0_eslint@8.31.0 transitivePeerDependencies: - supports-color dev: true - /@vue/reactivity-transform/3.2.40: - resolution: {integrity: sha512-HQUCVwEaacq6fGEsg2NUuGKIhUveMCjOk8jGHqLXPI2w6zFoPrlQhwWEaINTv5kkZDXKEnCijAp+4gNEHG03yw==} + /@vue/reactivity-transform/3.2.45: + resolution: {integrity: sha512-BHVmzYAvM7vcU5WmuYqXpwaBHjsS8T63jlKGWVtHxAHIoMIlmaMyurUSEs1Zcg46M4AYT5MtB1U274/2aNzjJQ==} dependencies: - '@babel/parser': 7.19.4 - '@vue/compiler-core': 3.2.40 - '@vue/shared': 3.2.40 + '@babel/parser': 7.20.7 + '@vue/compiler-core': 3.2.45 + '@vue/shared': 3.2.45 estree-walker: 2.0.2 magic-string: 0.25.9 - /@vue/reactivity/3.2.40: - resolution: {integrity: sha512-N9qgGLlZmtUBMHF9xDT4EkD9RdXde1Xbveb+niWMXuHVWQP5BzgRmE3SFyUBBcyayG4y1lhoz+lphGRRxxK4RA==} + /@vue/reactivity/3.2.45: + resolution: {integrity: sha512-PRvhCcQcyEVohW0P8iQ7HDcIOXRjZfAsOds3N99X/Dzewy8TVhTCT4uXpAHfoKjVTJRA0O0K+6QNkDIZAxNi3A==} dependencies: - '@vue/shared': 3.2.40 + '@vue/shared': 3.2.45 - /@vue/runtime-core/3.2.40: - resolution: {integrity: sha512-U1+rWf0H8xK8aBUZhnrN97yoZfHbjgw/bGUzfgKPJl69/mXDuSg8CbdBYBn6VVQdR947vWneQBFzdhasyzMUKg==} + /@vue/runtime-core/3.2.45: + resolution: {integrity: sha512-gzJiTA3f74cgARptqzYswmoQx0fIA+gGYBfokYVhF8YSXjWTUA2SngRzZRku2HbGbjzB6LBYSbKGIaK8IW+s0A==} dependencies: - '@vue/reactivity': 3.2.40 - '@vue/shared': 3.2.40 + '@vue/reactivity': 3.2.45 + '@vue/shared': 3.2.45 - /@vue/runtime-dom/3.2.40: - resolution: {integrity: sha512-AO2HMQ+0s2+MCec8hXAhxMgWhFhOPJ/CyRXnmTJ6XIOnJFLrH5Iq3TNwvVcODGR295jy77I6dWPj+wvFoSYaww==} + /@vue/runtime-dom/3.2.45: + resolution: {integrity: sha512-cy88YpfP5Ue2bDBbj75Cb4bIEZUMM/mAkDMfqDTpUYVgTf/kuQ2VQ8LebuZ8k6EudgH8pYhsGWHlY0lcxlvTwA==} dependencies: - '@vue/runtime-core': 3.2.40 - '@vue/shared': 3.2.40 + '@vue/runtime-core': 3.2.45 + '@vue/shared': 3.2.45 csstype: 2.6.21 - /@vue/server-renderer/3.2.40_vue@3.2.40: - resolution: {integrity: sha512-gtUcpRwrXOJPJ4qyBpU3EyxQa4EkV8I4f8VrDePcGCPe4O/hd0BPS7v9OgjIQob6Ap8VDz9G+mGTKazE45/95w==} + /@vue/server-renderer/3.2.45_vue@3.2.45: + resolution: {integrity: sha512-ebiMq7q24WBU1D6uhPK//2OTR1iRIyxjF5iVq/1a5I1SDMDyDu4Ts6fJaMnjrvD3MqnaiFkKQj+LKAgz5WIK3g==} peerDependencies: - vue: 3.2.40 + vue: 3.2.45 dependencies: - '@vue/compiler-ssr': 3.2.40 - '@vue/shared': 3.2.40 - vue: 3.2.40 + '@vue/compiler-ssr': 3.2.45 + '@vue/shared': 3.2.45 + vue: 3.2.45 - /@vue/shared/3.2.40: - resolution: {integrity: sha512-0PLQ6RUtZM0vO3teRfzGi4ltLUO5aO+kLgwh4Um3THSR03rpQWLTuRCkuO5A41ITzwdWeKdPHtSARuPkoo5pCQ==} + /@vue/shared/3.2.45: + resolution: {integrity: sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg==} - /@vue/tsconfig/0.1.3_@types+node@16.11.65: + /@vue/tsconfig/0.1.3_@types+node@16.18.11: resolution: {integrity: sha512-kQVsh8yyWPvHpb8gIc9l/HIDiiVUy1amynLNpCy8p+FoCiZXCo6fQos5/097MmnNZc9AtseDsCrfkhqCrJ8Olg==} peerDependencies: '@types/node': '*' @@ -481,30 +494,30 @@ packages: '@types/node': optional: true dependencies: - '@types/node': 16.11.65 + '@types/node': 16.18.11 dev: true - /@vuetify/loader-shared/1.6.0_vue@3.2.40+vuetify@3.0.1: - resolution: {integrity: sha512-mRvswe5SIecagmKkL1c0UQx5V9ACKLyEGegOOe5vC3ccFH8rMbyI4AVZaAKm/EnGXKirWJ1umL8RQFcGd+C0tw==} + /@vuetify/loader-shared/1.7.0_vue@3.2.45+vuetify@3.1.1: + resolution: {integrity: sha512-Db4K67wMhduDsbvdRBYkrYuomti+j0E/1vlz1lnDng5F9LYYBcXa60qypIazVGI6GX/CuY1vshN6XGtGQI4FKg==} peerDependencies: vue: ^3.0.0 vuetify: ^3.0.0-beta.4 dependencies: find-cache-dir: 3.3.2 upath: 2.0.1 - vue: 3.2.40 - vuetify: 3.0.1_vdkwhj2kz5kpysy3rwb432nm3y + vue: 3.2.45 + vuetify: 3.1.1_ihnv4ujwy6q3qcyepcitbzrajy - /acorn-jsx/5.3.2_acorn@8.8.0: + /acorn-jsx/5.3.2_acorn@8.8.1: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.8.0 + acorn: 8.8.1 dev: true - /acorn/8.8.0: - resolution: {integrity: sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==} + /acorn/8.8.1: + resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==} engines: {node: '>=0.4.0'} hasBin: true dev: true @@ -546,6 +559,11 @@ packages: engines: {node: '>=8'} dev: true + /available-typed-arrays/1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} + dev: true + /balanced-match/1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true @@ -707,34 +725,52 @@ packages: is-arrayish: 0.2.1 dev: true - /es-abstract/1.20.4: - resolution: {integrity: sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==} + /es-abstract/1.21.1: + resolution: {integrity: sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==} engines: {node: '>= 0.4'} dependencies: + available-typed-arrays: 1.0.5 call-bind: 1.0.2 + es-set-tostringtag: 2.0.1 es-to-primitive: 1.2.1 function-bind: 1.1.1 function.prototype.name: 1.1.5 get-intrinsic: 1.1.3 get-symbol-description: 1.0.0 + globalthis: 1.0.3 + gopd: 1.0.1 has: 1.0.3 has-property-descriptors: 1.0.0 + has-proto: 1.0.1 has-symbols: 1.0.3 - internal-slot: 1.0.3 + internal-slot: 1.0.4 + is-array-buffer: 3.0.1 is-callable: 1.2.7 is-negative-zero: 2.0.2 is-regex: 1.1.4 is-shared-array-buffer: 1.0.2 is-string: 1.0.7 + is-typed-array: 1.1.10 is-weakref: 1.0.2 object-inspect: 1.12.2 object-keys: 1.1.1 object.assign: 4.1.4 regexp.prototype.flags: 1.4.3 safe-regex-test: 1.0.0 - string.prototype.trimend: 1.0.5 - string.prototype.trimstart: 1.0.5 + string.prototype.trimend: 1.0.6 + string.prototype.trimstart: 1.0.6 + typed-array-length: 1.0.4 unbox-primitive: 1.0.2 + which-typed-array: 1.1.9 + dev: true + + /es-set-tostringtag/2.0.1: + resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.1.3 + has: 1.0.3 + has-tostringtag: 1.0.0 dev: true /es-to-primitive/1.2.1: @@ -746,194 +782,194 @@ packages: is-symbol: 1.0.4 dev: true - /esbuild-android-64/0.15.10: - resolution: {integrity: sha512-UI7krF8OYO1N7JYTgLT9ML5j4+45ra3amLZKx7LO3lmLt1Ibn8t3aZbX5Pu4BjWiqDuJ3m/hsvhPhK/5Y/YpnA==} + /esbuild-android-64/0.15.18: + resolution: {integrity: sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==} engines: {node: '>=12'} cpu: [x64] os: [android] requiresBuild: true optional: true - /esbuild-android-arm64/0.15.10: - resolution: {integrity: sha512-EOt55D6xBk5O05AK8brXUbZmoFj4chM8u3riGflLa6ziEoVvNjRdD7Cnp82NHQGfSHgYR06XsPI8/sMuA/cUwg==} + /esbuild-android-arm64/0.15.18: + resolution: {integrity: sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==} engines: {node: '>=12'} cpu: [arm64] os: [android] requiresBuild: true optional: true - /esbuild-darwin-64/0.15.10: - resolution: {integrity: sha512-hbDJugTicqIm+WKZgp208d7FcXcaK8j2c0l+fqSJ3d2AzQAfjEYDRM3Z2oMeqSJ9uFxyj/muSACLdix7oTstRA==} + /esbuild-darwin-64/0.15.18: + resolution: {integrity: sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==} engines: {node: '>=12'} cpu: [x64] os: [darwin] requiresBuild: true optional: true - /esbuild-darwin-arm64/0.15.10: - resolution: {integrity: sha512-M1t5+Kj4IgSbYmunf2BB6EKLkWUq+XlqaFRiGOk8bmBapu9bCDrxjf4kUnWn59Dka3I27EiuHBKd1rSO4osLFQ==} + /esbuild-darwin-arm64/0.15.18: + resolution: {integrity: sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] requiresBuild: true optional: true - /esbuild-freebsd-64/0.15.10: - resolution: {integrity: sha512-KMBFMa7C8oc97nqDdoZwtDBX7gfpolkk6Bcmj6YFMrtCMVgoU/x2DI1p74DmYl7CSS6Ppa3xgemrLrr5IjIn0w==} + /esbuild-freebsd-64/0.15.18: + resolution: {integrity: sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] requiresBuild: true optional: true - /esbuild-freebsd-arm64/0.15.10: - resolution: {integrity: sha512-m2KNbuCX13yQqLlbSojFMHpewbn8wW5uDS6DxRpmaZKzyq8Dbsku6hHvh2U+BcLwWY4mpgXzFUoENEf7IcioGg==} + /esbuild-freebsd-arm64/0.15.18: + resolution: {integrity: sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] requiresBuild: true optional: true - /esbuild-linux-32/0.15.10: - resolution: {integrity: sha512-guXrwSYFAvNkuQ39FNeV4sNkNms1bLlA5vF1H0cazZBOLdLFIny6BhT+TUbK/hdByMQhtWQ5jI9VAmPKbVPu1w==} + /esbuild-linux-32/0.15.18: + resolution: {integrity: sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==} engines: {node: '>=12'} cpu: [ia32] os: [linux] requiresBuild: true optional: true - /esbuild-linux-64/0.15.10: - resolution: {integrity: sha512-jd8XfaSJeucMpD63YNMO1JCrdJhckHWcMv6O233bL4l6ogQKQOxBYSRP/XLWP+6kVTu0obXovuckJDcA0DKtQA==} + /esbuild-linux-64/0.15.18: + resolution: {integrity: sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==} engines: {node: '>=12'} cpu: [x64] os: [linux] requiresBuild: true optional: true - /esbuild-linux-arm/0.15.10: - resolution: {integrity: sha512-6N8vThLL/Lysy9y4Ex8XoLQAlbZKUyExCWyayGi2KgTBelKpPgj6RZnUaKri0dHNPGgReJriKVU6+KDGQwn10A==} + /esbuild-linux-arm/0.15.18: + resolution: {integrity: sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==} engines: {node: '>=12'} cpu: [arm] os: [linux] requiresBuild: true optional: true - /esbuild-linux-arm64/0.15.10: - resolution: {integrity: sha512-GByBi4fgkvZFTHFDYNftu1DQ1GzR23jws0oWyCfhnI7eMOe+wgwWrc78dbNk709Ivdr/evefm2PJiUBMiusS1A==} + /esbuild-linux-arm64/0.15.18: + resolution: {integrity: sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==} engines: {node: '>=12'} cpu: [arm64] os: [linux] requiresBuild: true optional: true - /esbuild-linux-mips64le/0.15.10: - resolution: {integrity: sha512-BxP+LbaGVGIdQNJUNF7qpYjEGWb0YyHVSKqYKrn+pTwH/SiHUxFyJYSP3pqkku61olQiSBnSmWZ+YUpj78Tw7Q==} + /esbuild-linux-mips64le/0.15.18: + resolution: {integrity: sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] requiresBuild: true optional: true - /esbuild-linux-ppc64le/0.15.10: - resolution: {integrity: sha512-LoSQCd6498PmninNgqd/BR7z3Bsk/mabImBWuQ4wQgmQEeanzWd5BQU2aNi9mBURCLgyheuZS6Xhrw5luw3OkQ==} + /esbuild-linux-ppc64le/0.15.18: + resolution: {integrity: sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] requiresBuild: true optional: true - /esbuild-linux-riscv64/0.15.10: - resolution: {integrity: sha512-Lrl9Cr2YROvPV4wmZ1/g48httE8z/5SCiXIyebiB5N8VT7pX3t6meI7TQVHw/wQpqP/AF4SksDuFImPTM7Z32Q==} + /esbuild-linux-riscv64/0.15.18: + resolution: {integrity: sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] requiresBuild: true optional: true - /esbuild-linux-s390x/0.15.10: - resolution: {integrity: sha512-ReP+6q3eLVVP2lpRrvl5EodKX7EZ1bS1/z5j6hsluAlZP5aHhk6ghT6Cq3IANvvDdscMMCB4QEbI+AjtvoOFpA==} + /esbuild-linux-s390x/0.15.18: + resolution: {integrity: sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==} engines: {node: '>=12'} cpu: [s390x] os: [linux] requiresBuild: true optional: true - /esbuild-netbsd-64/0.15.10: - resolution: {integrity: sha512-iGDYtJCMCqldMskQ4eIV+QSS/CuT7xyy9i2/FjpKvxAuCzrESZXiA1L64YNj6/afuzfBe9i8m/uDkFHy257hTw==} + /esbuild-netbsd-64/0.15.18: + resolution: {integrity: sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] requiresBuild: true optional: true - /esbuild-openbsd-64/0.15.10: - resolution: {integrity: sha512-ftMMIwHWrnrYnvuJQRJs/Smlcb28F9ICGde/P3FUTCgDDM0N7WA0o9uOR38f5Xe2/OhNCgkjNeb7QeaE3cyWkQ==} + /esbuild-openbsd-64/0.15.18: + resolution: {integrity: sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] requiresBuild: true optional: true - /esbuild-sunos-64/0.15.10: - resolution: {integrity: sha512-mf7hBL9Uo2gcy2r3rUFMjVpTaGpFJJE5QTDDqUFf1632FxteYANffDZmKbqX0PfeQ2XjUDE604IcE7OJeoHiyg==} + /esbuild-sunos-64/0.15.18: + resolution: {integrity: sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==} engines: {node: '>=12'} cpu: [x64] os: [sunos] requiresBuild: true optional: true - /esbuild-windows-32/0.15.10: - resolution: {integrity: sha512-ttFVo+Cg8b5+qHmZHbEc8Vl17kCleHhLzgT8X04y8zudEApo0PxPg9Mz8Z2cKH1bCYlve1XL8LkyXGFjtUYeGg==} + /esbuild-windows-32/0.15.18: + resolution: {integrity: sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==} engines: {node: '>=12'} cpu: [ia32] os: [win32] requiresBuild: true optional: true - /esbuild-windows-64/0.15.10: - resolution: {integrity: sha512-2H0gdsyHi5x+8lbng3hLbxDWR7mKHWh5BXZGKVG830KUmXOOWFE2YKJ4tHRkejRduOGDrBvHBriYsGtmTv3ntA==} + /esbuild-windows-64/0.15.18: + resolution: {integrity: sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==} engines: {node: '>=12'} cpu: [x64] os: [win32] requiresBuild: true optional: true - /esbuild-windows-arm64/0.15.10: - resolution: {integrity: sha512-S+th4F+F8VLsHLR0zrUcG+Et4hx0RKgK1eyHc08kztmLOES8BWwMiaGdoW9hiXuzznXQ0I/Fg904MNbr11Nktw==} + /esbuild-windows-arm64/0.15.18: + resolution: {integrity: sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==} engines: {node: '>=12'} cpu: [arm64] os: [win32] requiresBuild: true optional: true - /esbuild/0.15.10: - resolution: {integrity: sha512-N7wBhfJ/E5fzn/SpNgX+oW2RLRjwaL8Y0ezqNqhjD6w0H2p0rDuEz2FKZqpqLnO8DCaWumKe8dsC/ljvVSSxng==} + /esbuild/0.15.18: + resolution: {integrity: sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': 0.15.10 - '@esbuild/linux-loong64': 0.15.10 - esbuild-android-64: 0.15.10 - esbuild-android-arm64: 0.15.10 - esbuild-darwin-64: 0.15.10 - esbuild-darwin-arm64: 0.15.10 - esbuild-freebsd-64: 0.15.10 - esbuild-freebsd-arm64: 0.15.10 - esbuild-linux-32: 0.15.10 - esbuild-linux-64: 0.15.10 - esbuild-linux-arm: 0.15.10 - esbuild-linux-arm64: 0.15.10 - esbuild-linux-mips64le: 0.15.10 - esbuild-linux-ppc64le: 0.15.10 - esbuild-linux-riscv64: 0.15.10 - esbuild-linux-s390x: 0.15.10 - esbuild-netbsd-64: 0.15.10 - esbuild-openbsd-64: 0.15.10 - esbuild-sunos-64: 0.15.10 - esbuild-windows-32: 0.15.10 - esbuild-windows-64: 0.15.10 - esbuild-windows-arm64: 0.15.10 + '@esbuild/android-arm': 0.15.18 + '@esbuild/linux-loong64': 0.15.18 + esbuild-android-64: 0.15.18 + esbuild-android-arm64: 0.15.18 + esbuild-darwin-64: 0.15.18 + esbuild-darwin-arm64: 0.15.18 + esbuild-freebsd-64: 0.15.18 + esbuild-freebsd-arm64: 0.15.18 + esbuild-linux-32: 0.15.18 + esbuild-linux-64: 0.15.18 + esbuild-linux-arm: 0.15.18 + esbuild-linux-arm64: 0.15.18 + esbuild-linux-mips64le: 0.15.18 + esbuild-linux-ppc64le: 0.15.18 + esbuild-linux-riscv64: 0.15.18 + esbuild-linux-s390x: 0.15.18 + esbuild-netbsd-64: 0.15.18 + esbuild-openbsd-64: 0.15.18 + esbuild-sunos-64: 0.15.18 + esbuild-windows-32: 0.15.18 + esbuild-windows-64: 0.15.18 + esbuild-windows-arm64: 0.15.18 /escape-string-regexp/1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} @@ -945,16 +981,16 @@ packages: engines: {node: '>=10'} dev: true - /eslint-config-prettier/8.5.0_eslint@8.25.0: - resolution: {integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==} + /eslint-config-prettier/8.6.0_eslint@8.31.0: + resolution: {integrity: sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.25.0 + eslint: 8.31.0 dev: true - /eslint-plugin-prettier/4.2.1_hvbqyfstm4urdpm6ffpwfka4e4: + /eslint-plugin-prettier/4.2.1_iu5s7nk6dw7o3tajefwfiqfmge: resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} engines: {node: '>=12.0.0'} peerDependencies: @@ -965,25 +1001,25 @@ packages: eslint-config-prettier: optional: true dependencies: - eslint: 8.25.0 - eslint-config-prettier: 8.5.0_eslint@8.25.0 - prettier: 2.7.1 + eslint: 8.31.0 + eslint-config-prettier: 8.6.0_eslint@8.31.0 + prettier: 2.8.2 prettier-linter-helpers: 1.0.0 dev: true - /eslint-plugin-vue/9.6.0_eslint@8.25.0: - resolution: {integrity: sha512-zzySkJgVbFCylnG2+9MDF7N+2Rjze2y0bF8GyUNpFOnT8mCMfqqtLDJkHBuYu9N/psW1A6DVbQhPkP92E+qakA==} + /eslint-plugin-vue/9.8.0_eslint@8.31.0: + resolution: {integrity: sha512-E/AXwcTzunyzM83C2QqDHxepMzvI2y6x+mmeYHbVDQlKFqmKYvRrhaVixEeeG27uI44p9oKDFiyCRw4XxgtfHA==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 dependencies: - eslint: 8.25.0 - eslint-utils: 3.0.0_eslint@8.25.0 + eslint: 8.31.0 + eslint-utils: 3.0.0_eslint@8.31.0 natural-compare: 1.4.0 nth-check: 2.1.1 - postcss-selector-parser: 6.0.10 + postcss-selector-parser: 6.0.11 semver: 7.3.8 - vue-eslint-parser: 9.1.0_eslint@8.25.0 + vue-eslint-parser: 9.1.0_eslint@8.31.0 xml-name-validator: 4.0.0 transitivePeerDependencies: - supports-color @@ -1005,13 +1041,13 @@ packages: estraverse: 5.3.0 dev: true - /eslint-utils/3.0.0_eslint@8.25.0: + /eslint-utils/3.0.0_eslint@8.31.0: resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} peerDependencies: eslint: '>=5' dependencies: - eslint: 8.25.0 + eslint: 8.31.0 eslint-visitor-keys: 2.1.0 dev: true @@ -1025,14 +1061,15 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint/8.25.0: - resolution: {integrity: sha512-DVlJOZ4Pn50zcKW5bYH7GQK/9MsoQG2d5eDH0ebEkE8PbgzTTmtt/VTH9GGJ4BfeZCpBLqFfvsjX35UacUL83A==} + /eslint/8.31.0: + resolution: {integrity: sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint/eslintrc': 1.3.3 - '@humanwhocodes/config-array': 0.10.7 + '@eslint/eslintrc': 1.4.1 + '@humanwhocodes/config-array': 0.11.8 '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 @@ -1040,23 +1077,23 @@ packages: doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.1.1 - eslint-utils: 3.0.0_eslint@8.25.0 + eslint-utils: 3.0.0_eslint@8.31.0 eslint-visitor-keys: 3.3.0 - espree: 9.4.0 + espree: 9.4.1 esquery: 1.4.0 esutils: 2.0.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.17.0 - globby: 11.1.0 + globals: 13.19.0 grapheme-splitter: 1.0.4 - ignore: 5.2.0 + ignore: 5.2.4 import-fresh: 3.3.0 imurmurhash: 0.1.4 is-glob: 4.0.3 - js-sdsl: 4.1.5 + is-path-inside: 3.0.3 + js-sdsl: 4.2.0 js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 @@ -1072,12 +1109,12 @@ packages: - supports-color dev: true - /espree/9.4.0: - resolution: {integrity: sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==} + /espree/9.4.1: + resolution: {integrity: sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.8.0 - acorn-jsx: 5.3.2_acorn@8.8.0 + acorn: 8.8.1 + acorn-jsx: 5.3.2_acorn@8.8.1 eslint-visitor-keys: 3.3.0 dev: true @@ -1140,8 +1177,8 @@ packages: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true - /fastq/1.13.0: - resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} + /fastq/1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: reusify: 1.0.4 dev: true @@ -1195,6 +1232,12 @@ packages: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} dev: true + /for-each/0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + dev: true + /fs.realpath/1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true @@ -1215,7 +1258,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.1.4 - es-abstract: 1.20.4 + es-abstract: 1.21.1 functions-have-names: 1.2.3 dev: true @@ -1264,13 +1307,20 @@ packages: path-is-absolute: 1.0.1 dev: true - /globals/13.17.0: - resolution: {integrity: sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==} + /globals/13.19.0: + resolution: {integrity: sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 dev: true + /globalthis/1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.1.4 + dev: true + /globby/11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} @@ -1278,11 +1328,17 @@ packages: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.2.12 - ignore: 5.2.0 + ignore: 5.2.4 merge2: 1.4.1 slash: 3.0.0 dev: true + /gopd/1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.1.3 + dev: true + /graceful-fs/4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} dev: true @@ -1311,6 +1367,11 @@ packages: get-intrinsic: 1.1.3 dev: true + /has-proto/1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + dev: true + /has-symbols/1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} @@ -1338,8 +1399,8 @@ packages: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true - /ignore/5.2.0: - resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} + /ignore/5.2.4: + resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} engines: {node: '>= 4'} dev: true @@ -1367,8 +1428,8 @@ packages: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} dev: true - /internal-slot/1.0.3: - resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==} + /internal-slot/1.0.4: + resolution: {integrity: sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==} engines: {node: '>= 0.4'} dependencies: get-intrinsic: 1.1.3 @@ -1376,6 +1437,14 @@ packages: side-channel: 1.0.4 dev: true + /is-array-buffer/3.0.1: + resolution: {integrity: sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.1.3 + is-typed-array: 1.1.10 + dev: true + /is-arrayish/0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} dev: true @@ -1399,8 +1468,8 @@ packages: engines: {node: '>= 0.4'} dev: true - /is-core-module/2.10.0: - resolution: {integrity: sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==} + /is-core-module/2.11.0: + resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} dependencies: has: 1.0.3 @@ -1440,6 +1509,11 @@ packages: engines: {node: '>=0.12.0'} dev: true + /is-path-inside/3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: true + /is-regex/1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} @@ -1468,6 +1542,17 @@ packages: has-symbols: 1.0.3 dev: true + /is-typed-array/1.1.10: + resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + dev: true + /is-weakref/1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: @@ -1478,8 +1563,8 @@ packages: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true - /js-sdsl/4.1.5: - resolution: {integrity: sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==} + /js-sdsl/4.2.0: + resolution: {integrity: sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==} dev: true /js-yaml/4.1.0: @@ -1552,8 +1637,8 @@ packages: yallist: 4.0.0 dev: true - /luxon/3.0.4: - resolution: {integrity: sha512-aV48rGUwP/Vydn8HT+5cdr26YYQiUZ42NM6ToMoaGKwYfWbfLeRkEu1wXWMHBZT6+KyLfcbbtVcoQFCbbPjKlw==} + /luxon/3.2.1: + resolution: {integrity: sha512-QrwPArQCNLAKGO/C+ZIilgIuDnEnKx5QYODdDtbFaxzsbZcc/a7WFq7MhsVYgRlwawLtvOUESTlfJ+hc/USqPg==} engines: {node: '>=12'} dev: false @@ -1592,8 +1677,8 @@ packages: brace-expansion: 1.1.11 dev: true - /minimatch/5.1.0: - resolution: {integrity: sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==} + /minimatch/5.1.2: + resolution: {integrity: sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==} engines: {node: '>=10'} dependencies: brace-expansion: 2.0.1 @@ -1611,6 +1696,10 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + /natural-compare-lite/1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + dev: true + /natural-compare/1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true @@ -1640,8 +1729,8 @@ packages: minimatch: 3.1.2 pidtree: 0.3.1 read-pkg: 3.0.0 - shell-quote: 1.7.3 - string.prototype.padend: 3.1.3 + shell-quote: 1.7.4 + string.prototype.padend: 3.1.4 dev: true /nth-check/2.1.1: @@ -1785,8 +1874,8 @@ packages: engines: {node: '>=4'} dev: true - /pinia/2.0.23_rg374xhldfcyvjtaj3qktyfz5y: - resolution: {integrity: sha512-N15hFf4o5STrxpNrib1IEb1GOArvPYf1zPvQVRGOO1G1d74Ak0J0lVyalX/SmrzdT4Q0nlEFjbURsmBmIGUR5Q==} + /pinia/2.0.28_e7lp6ggkpgyi5vqd44m2kxvk6i: + resolution: {integrity: sha512-YClq9DkqCblq9rlyUual7ezMu/iICWdBtfJrDt4oWU9Zxpijyz7xB2xTwx57DaBQ96UGvvTMORzALr+iO5PVMw==} peerDependencies: '@vue/composition-api': ^1.4.0 typescript: '>=4.4.4' @@ -1797,10 +1886,10 @@ packages: typescript: optional: true dependencies: - '@vue/devtools-api': 6.4.4 + '@vue/devtools-api': 6.4.5 typescript: 4.7.4 - vue: 3.2.40 - vue-demi: 0.13.11_vue@3.2.40 + vue: 3.2.45 + vue-demi: 0.13.11_vue@3.2.45 dev: false /pkg-dir/4.2.0: @@ -1809,16 +1898,16 @@ packages: dependencies: find-up: 4.1.0 - /postcss-selector-parser/6.0.10: - resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} + /postcss-selector-parser/6.0.11: + resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==} engines: {node: '>=4'} dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 dev: true - /postcss/8.4.17: - resolution: {integrity: sha512-UNxNOLQydcOFi41yHNMcKRZ39NeXlr8AxGuZJsdub8vIb12fHzcq37DTU/QtbI6WLxNg2gF9Z+8qtRwTj1UI1Q==} + /postcss/8.4.21: + resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.4 @@ -1837,8 +1926,8 @@ packages: fast-diff: 1.2.0 dev: true - /prettier/2.7.1: - resolution: {integrity: sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==} + /prettier/2.8.2: + resolution: {integrity: sha512-BtRV9BcncDyI2tsuS19zzhzoxD8Dh8LiCx7j7tHzrkz8GFXAexeWFdi22mjE1d16dftH2qNaytVxqiRTGlMfpw==} engines: {node: '>=10.13.0'} hasBin: true dev: true @@ -1848,8 +1937,8 @@ packages: engines: {node: ^14.13.1 || >=16.0.0} dev: false - /punycode/2.1.1: - resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} + /punycode/2.2.0: + resolution: {integrity: sha512-LN6QV1IJ9ZhxWTNdktaPClrNfp8xdSAYS0Zk2ddX7XsXZAxckMHPCBcHRo0cTcEIgYPRiGEkmji3Idkh2yFtYw==} engines: {node: '>=6'} dev: true @@ -1889,7 +1978,7 @@ packages: resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} hasBin: true dependencies: - is-core-module: 2.10.0 + is-core-module: 2.11.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -1909,8 +1998,8 @@ packages: resolution: {integrity: sha512-OlwfYEgA2RdboZohpldlvJ1xngOins5d7ejqnIBWr9KaMxsnBqotpptRXTyfNRLnFpqzX6sTDt+X+a+6udnU8g==} dev: false - /rollup/2.78.1: - resolution: {integrity: sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==} + /rollup/2.79.1: + resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: @@ -1971,8 +2060,8 @@ packages: engines: {node: '>=8'} dev: true - /shell-quote/1.7.3: - resolution: {integrity: sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==} + /shell-quote/1.7.4: + resolution: {integrity: sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==} dev: true /side-channel/1.0.4: @@ -1998,6 +2087,7 @@ packages: /sourcemap-codec/1.4.8: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead /spdx-correct/3.1.1: resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==} @@ -2021,29 +2111,29 @@ packages: resolution: {integrity: sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==} dev: true - /string.prototype.padend/3.1.3: - resolution: {integrity: sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==} + /string.prototype.padend/3.1.4: + resolution: {integrity: sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.1.4 - es-abstract: 1.20.4 + es-abstract: 1.21.1 dev: true - /string.prototype.trimend/1.0.5: - resolution: {integrity: sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==} + /string.prototype.trimend/1.0.6: + resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} dependencies: call-bind: 1.0.2 define-properties: 1.1.4 - es-abstract: 1.20.4 + es-abstract: 1.21.1 dev: true - /string.prototype.trimstart/1.0.5: - resolution: {integrity: sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==} + /string.prototype.trimstart/1.0.6: + resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} dependencies: call-bind: 1.0.2 define-properties: 1.1.4 - es-abstract: 1.20.4 + es-abstract: 1.21.1 dev: true /strip-ansi/6.0.1: @@ -2122,6 +2212,14 @@ packages: engines: {node: '>=10'} dev: true + /typed-array-length/1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + dependencies: + call-bind: 1.0.2 + for-each: 0.3.3 + is-typed-array: 1.1.10 + dev: true + /typescript/4.7.4: resolution: {integrity: sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==} engines: {node: '>=4.2.0'} @@ -2143,13 +2241,18 @@ packages: /uri-js/4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: - punycode: 2.1.1 + punycode: 2.2.0 dev: true /util-deprecate/1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: true + /uuid/9.0.0: + resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} + hasBin: true + dev: false + /validate-npm-package-license/3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: @@ -2157,49 +2260,56 @@ packages: spdx-expression-parse: 3.0.1 dev: true - /vite-plugin-vuetify/1.0.0-alpha.17_3jvrp5vztr3d3x64xppq7ybday: - resolution: {integrity: sha512-lP4vG+Z3LnIEjI8nSE8/MJwDRQK5OnS2i4zHDu36yyD4E7wmPKyIkWJdkfBIsx/O+PU7dGc/3MeLARgr+RErEQ==} + /vite-plugin-vuetify/1.0.1_mc6ujyzexjrcgjeph6am73m5wu: + resolution: {integrity: sha512-/xHsIDuHxq7f6fDqCBYxNascLhDi+X8dV3RzTwmo4mGPrSnGq9pHv8wJsXBIQIT3nY8s16V0lmd6sXMjm0F8wg==} engines: {node: '>=12'} peerDependencies: - vite: ^2.7.0 || ^3.0.0 + vite: ^2.7.0 || ^3.0.0 || ^4.0.0 vuetify: ^3.0.0-beta.4 dependencies: - '@vuetify/loader-shared': 1.6.0_vue@3.2.40+vuetify@3.0.1 + '@vuetify/loader-shared': 1.7.0_vue@3.2.45+vuetify@3.1.1 debug: 4.3.4 upath: 2.0.1 - vite: 3.1.7 - vuetify: 3.0.1_vdkwhj2kz5kpysy3rwb432nm3y + vite: 3.2.5_@types+node@16.18.11 + vuetify: 3.1.1_ihnv4ujwy6q3qcyepcitbzrajy transitivePeerDependencies: - supports-color - vue - /vite/3.1.7: - resolution: {integrity: sha512-5vCAmU4S8lyVdFCInu9M54f/g8qbOMakVw5xJ4pjoaDy5wgy9sLLZkGdSLN52dlsBqh0tBqxjaqqa8LgPqwRAA==} + /vite/3.2.5_@types+node@16.18.11: + resolution: {integrity: sha512-4mVEpXpSOgrssFZAOmGIr85wPHKvaDAcXqxVxVRZhljkJOMZi1ibLibzjLHzJvcok8BMguLc7g1W6W/GqZbLdQ==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: + '@types/node': '>= 14' less: '*' sass: '*' stylus: '*' + sugarss: '*' terser: ^5.4.0 peerDependenciesMeta: + '@types/node': + optional: true less: optional: true sass: optional: true stylus: optional: true + sugarss: + optional: true terser: optional: true dependencies: - esbuild: 0.15.10 - postcss: 8.4.17 + '@types/node': 16.18.11 + esbuild: 0.15.18 + postcss: 8.4.21 resolve: 1.22.1 - rollup: 2.78.1 + rollup: 2.79.1 optionalDependencies: fsevents: 2.3.2 - /vue-demi/0.13.11_vue@3.2.40: + /vue-demi/0.13.11_vue@3.2.45: resolution: {integrity: sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==} engines: {node: '>=12'} hasBin: true @@ -2211,20 +2321,20 @@ packages: '@vue/composition-api': optional: true dependencies: - vue: 3.2.40 + vue: 3.2.45 dev: false - /vue-eslint-parser/9.1.0_eslint@8.25.0: + /vue-eslint-parser/9.1.0_eslint@8.31.0: resolution: {integrity: sha512-NGn/iQy8/Wb7RrRa4aRkokyCZfOUWk19OP5HP6JEozQFX5AoS/t+Z0ZN7FY4LlmWc4FNI922V7cvX28zctN8dQ==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: '>=6.0.0' dependencies: debug: 4.3.4 - eslint: 8.25.0 + eslint: 8.31.0 eslint-scope: 7.1.1 eslint-visitor-keys: 3.3.0 - espree: 9.4.0 + espree: 9.4.1 esquery: 1.4.0 lodash: 4.17.21 semver: 7.3.8 @@ -2232,8 +2342,8 @@ packages: - supports-color dev: true - /vue-template-compiler/2.7.11: - resolution: {integrity: sha512-17QnXkFiBLOH3gGCA3nWAWpmdlTjOWLyP/2eg5ptgY1OvDBuIDGOW9FZ7ZSKmF1UFyf56mLR3/E1SlCTml1LWQ==} + /vue-template-compiler/2.7.14: + resolution: {integrity: sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==} dependencies: de-indent: 1.0.2 he: 1.2.0 @@ -2250,17 +2360,17 @@ packages: typescript: 4.7.4 dev: true - /vue/3.2.40: - resolution: {integrity: sha512-1mGHulzUbl2Nk3pfvI5aXYYyJUs1nm4kyvuz38u4xlQkLUn1i2R7nDbI4TufECmY8v1qNBHYy62bCaM+3cHP2A==} + /vue/3.2.45: + resolution: {integrity: sha512-9Nx/Mg2b2xWlXykmCwiTUCWHbWIj53bnkizBxKai1g61f2Xit700A1ljowpTIM11e3uipOeiPcSqnmBg6gyiaA==} dependencies: - '@vue/compiler-dom': 3.2.40 - '@vue/compiler-sfc': 3.2.40 - '@vue/runtime-dom': 3.2.40 - '@vue/server-renderer': 3.2.40_vue@3.2.40 - '@vue/shared': 3.2.40 + '@vue/compiler-dom': 3.2.45 + '@vue/compiler-sfc': 3.2.45 + '@vue/runtime-dom': 3.2.45 + '@vue/server-renderer': 3.2.45_vue@3.2.45 + '@vue/shared': 3.2.45 - /vuetify/3.0.1_vdkwhj2kz5kpysy3rwb432nm3y: - resolution: {integrity: sha512-Vl4wYB4mCm6GFK6Q9KZDK+HM3YKI7md7BoUPwbgqZj4bkofjQ/8NVSRQQpTcwk0YoQrgw6qj0QaOtP5zitkS1Q==} + /vuetify/3.1.1_ihnv4ujwy6q3qcyepcitbzrajy: + resolution: {integrity: sha512-BkfRQZ406xQORpgrcUjuPaT/woO96ef/+2zHCfL3an+CrUhjG/sIAptEybHruq3xwFM0uJibDFqGiridsXc99w==} engines: {node: ^12.20 || >=14.13} peerDependencies: vite-plugin-vuetify: ^1.0.0-alpha.12 @@ -2275,8 +2385,8 @@ packages: webpack-plugin-vuetify: optional: true dependencies: - vite-plugin-vuetify: 1.0.0-alpha.17_3jvrp5vztr3d3x64xppq7ybday - vue: 3.2.40 + vite-plugin-vuetify: 1.0.1_mc6ujyzexjrcgjeph6am73m5wu + vue: 3.2.45 /webfontloader/1.6.28: resolution: {integrity: sha512-Egb0oFEga6f+nSgasH3E0M405Pzn6y3/9tOVanv/DLfa1YBIgcv90L18YyWnvXkRbIM17v5Kv6IT2N6g1x5tvQ==} @@ -2292,6 +2402,18 @@ packages: is-symbol: 1.0.4 dev: true + /which-typed-array/1.1.9: + resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + is-typed-array: 1.1.10 + dev: true + /which/1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true diff --git a/nextcloud_backup/frontend/src/App.vue b/nextcloud_backup/frontend/src/App.vue index b701a38..08c03a3 100644 --- a/nextcloud_backup/frontend/src/App.vue +++ b/nextcloud_backup/frontend/src/App.vue @@ -3,7 +3,8 @@ - + + @@ -18,6 +19,7 @@ import NavbarComponent from "./components/NavbarComponent.vue"; import MessageBar from "./components/MessageBar.vue"; import WebdavSettingsMenu from "./components/settings/WebdavConfigMenu.vue"; import CloudList from "./components/cloud/CloudList.vue"; +import BackupConfigMenu from "./components/settings/BackupConfigMenu.vue"; diff --git a/nextcloud_backup/frontend/src/components/cloud/CloudList.vue b/nextcloud_backup/frontend/src/components/cloud/CloudList.vue index 2381e8c..30a0c55 100644 --- a/nextcloud_backup/frontend/src/components/cloud/CloudList.vue +++ b/nextcloud_backup/frontend/src/components/cloud/CloudList.vue @@ -6,11 +6,15 @@ - - Auto + + + Auto + - + - - Manual + + Manual - + - + {{ item.name }} diff --git a/nextcloud_backup/frontend/src/components/settings/BackupConfig/BackupConfigAddon.vue b/nextcloud_backup/frontend/src/components/settings/BackupConfig/BackupConfigAddon.vue new file mode 100644 index 0000000..0c1a717 --- /dev/null +++ b/nextcloud_backup/frontend/src/components/settings/BackupConfig/BackupConfigAddon.vue @@ -0,0 +1,46 @@ + + + + Addons + + + + + + + + + + + + + + diff --git a/nextcloud_backup/frontend/src/components/settings/BackupConfig/BackupConfigAutoBackup.vue b/nextcloud_backup/frontend/src/components/settings/BackupConfig/BackupConfigAutoBackup.vue new file mode 100644 index 0000000..9be64d8 --- /dev/null +++ b/nextcloud_backup/frontend/src/components/settings/BackupConfig/BackupConfigAutoBackup.vue @@ -0,0 +1,194 @@ + + + + + + Auto Backup + + + + mdi-plus + + + + + + + + + + {{ CronModeFriendly[cron.mode] }} + + + + {{ cron.monthDay }} + + + + + {{ weekdayFriendly[cron.weekday] }} + + + + + {{ cron.hour }} + + + + {{ cron.custom }} + + + + + + + + Mode mdi-cog + + + + + + + + + Day of week mdi-calendar + + + + + + + + Day of month mdi-calendar + + + + + + + + Hour mdi-clock + + + + + + + + Custom CRON + mdi-clock-edit + + + + + + + mdi-trash-can + + + + + + + + + + + + diff --git a/nextcloud_backup/frontend/src/components/settings/BackupConfig/BackupConfigFolder.vue b/nextcloud_backup/frontend/src/components/settings/BackupConfig/BackupConfigFolder.vue new file mode 100644 index 0000000..da25dce --- /dev/null +++ b/nextcloud_backup/frontend/src/components/settings/BackupConfig/BackupConfigFolder.vue @@ -0,0 +1,46 @@ + + + + Folders + + + + + + + + + + + + + + diff --git a/nextcloud_backup/frontend/src/components/settings/BackupConfigForm.vue b/nextcloud_backup/frontend/src/components/settings/BackupConfigForm.vue new file mode 100644 index 0000000..01445b4 --- /dev/null +++ b/nextcloud_backup/frontend/src/components/settings/BackupConfigForm.vue @@ -0,0 +1,94 @@ + + + + + Naming template + + + + + + + + + + + + + + + + Automation + + + + + + + + + + + diff --git a/nextcloud_backup/frontend/src/components/settings/BackupConfigMenu.vue b/nextcloud_backup/frontend/src/components/settings/BackupConfigMenu.vue new file mode 100644 index 0000000..df6fdb2 --- /dev/null +++ b/nextcloud_backup/frontend/src/components/settings/BackupConfigMenu.vue @@ -0,0 +1,62 @@ + + + + Backup Settings + + + + + + + Cancel + Save + + + + + + diff --git a/nextcloud_backup/frontend/src/components/settings/WebdavConfigForm.vue b/nextcloud_backup/frontend/src/components/settings/WebdavConfigForm.vue index f1a0c39..6ef6b6b 100644 --- a/nextcloud_backup/frontend/src/components/settings/WebdavConfigForm.vue +++ b/nextcloud_backup/frontend/src/components/settings/WebdavConfigForm.vue @@ -48,7 +48,7 @@ > - + - + + + + + + @@ -133,18 +147,10 @@ diff --git a/nextcloud_backup/frontend/src/components/settings/WebdavConfigMenu.vue b/nextcloud_backup/frontend/src/components/settings/WebdavConfigMenu.vue index 0e839b3..efedae4 100644 --- a/nextcloud_backup/frontend/src/components/settings/WebdavConfigMenu.vue +++ b/nextcloud_backup/frontend/src/components/settings/WebdavConfigMenu.vue @@ -3,7 +3,7 @@ v-model="dialogStatusStore.webdav" persistent :width="width" - :fullscreen="xs" + :fullscreen="isFullScreen" scrollable > @@ -13,7 +13,7 @@ @@ -35,33 +35,28 @@ diff --git a/nextcloud_backup/frontend/src/composable/ConfigForm.ts b/nextcloud_backup/frontend/src/composable/ConfigForm.ts new file mode 100644 index 0000000..598c1cf --- /dev/null +++ b/nextcloud_backup/frontend/src/composable/ConfigForm.ts @@ -0,0 +1,58 @@ +import { HTTPError } from "ky"; +import { ref, type Ref } from "vue"; + +export function useConfigForm( + saveService: (data: any) => Promise, + loadService: () => Promise, + dataRef: Ref, + errorsRef: Ref, + emit: { + (e: "success"): void; + (e: "fail"): void; + (e: "loaded"): void; + (e: "loading"): void; + } +) { + const loading = ref(true); + + function save() { + loading.value = true; + clearErrors(); + saveService(dataRef.value) + .then(() => { + loading.value = false; + emit("success"); + }) + .catch(async (reason) => { + if (reason instanceof HTTPError) { + const response = await reason.response.json(); + if (Array.isArray(response)) { + for (const elem of response) { + errorsRef.value[ + elem.context.key as keyof typeof errorsRef.value + ] = elem.message; + } + } + } + loading.value = false; + emit("fail"); + }); + } + + function clearErrors() { + for (const elem in errorsRef.value) { + errorsRef.value[elem as keyof typeof errorsRef.value] = []; + } + } + + function loadData() { + emit("loading"); + loadService().then(() => { + loading.value = false; + emit("loaded"); + }); + } + + loadData(); + return { save, loading }; +} diff --git a/nextcloud_backup/frontend/src/composable/menuSize.ts b/nextcloud_backup/frontend/src/composable/menuSize.ts new file mode 100644 index 0000000..8d47b26 --- /dev/null +++ b/nextcloud_backup/frontend/src/composable/menuSize.ts @@ -0,0 +1,17 @@ +import { computed } from "vue"; +import { useDisplay } from "vuetify/lib/framework.mjs"; + +export function useMenuSize() { + const { xs, mdAndDown } = useDisplay(); + const width = computed(() => { + if (xs.value) { + return undefined; + } else if (mdAndDown.value) { + return "80%"; + } else { + return "50%"; + } + }); + const isFullScreen = xs; + return { width, isFullScreen }; +} diff --git a/nextcloud_backup/frontend/src/services/ConfigService.ts b/nextcloud_backup/frontend/src/services/configService.ts similarity index 52% rename from nextcloud_backup/frontend/src/services/ConfigService.ts rename to nextcloud_backup/frontend/src/services/configService.ts index b19187c..b81598f 100644 --- a/nextcloud_backup/frontend/src/services/ConfigService.ts +++ b/nextcloud_backup/frontend/src/services/configService.ts @@ -1,3 +1,4 @@ +import type { BackupConfig } from "@/types/backupConfig"; import type { WebdavConfig } from "@/types/webdavConfig"; import kyClient from "./kyClient"; @@ -12,3 +13,15 @@ export function saveWebdavConfig(config: WebdavConfig) { }) .json(); } + +export function getBackupConfig() { + return kyClient.get("config/backup").json(); +} + +export function saveBackupConfig(config: BackupConfig) { + return kyClient + .put("config/backup", { + json: config, + }) + .json(); +} diff --git a/nextcloud_backup/frontend/src/services/homeAssistantService.ts b/nextcloud_backup/frontend/src/services/homeAssistantService.ts new file mode 100644 index 0000000..7369e17 --- /dev/null +++ b/nextcloud_backup/frontend/src/services/homeAssistantService.ts @@ -0,0 +1,10 @@ +import type { AddonData, Folder } from "@/types/homeAssistant"; +import kyClient from "./kyClient"; + +export function getFolders() { + return kyClient.get("homeAssistant/folders").json(); +} + +export function getAddons() { + return kyClient.get("homeAssistant/addons").json(); +} diff --git a/nextcloud_backup/frontend/src/stores/backupConfig.ts b/nextcloud_backup/frontend/src/stores/backupConfig.ts new file mode 100644 index 0000000..0c500e8 --- /dev/null +++ b/nextcloud_backup/frontend/src/stores/backupConfig.ts @@ -0,0 +1,60 @@ +import { getBackupConfig } from "@/services/configService"; +import { getAddons, getFolders } from "@/services/homeAssistantService"; +import { CronMode, type BackupConfig } from "@/types/backupConfig"; +import type { Folder, AddonModel } from "@/types/homeAssistant"; +import { defineStore } from "pinia"; +import { ref } from "vue"; +import { v4 as uuidv4 } from "uuid"; + +export const useBackupConfigStore = defineStore("backupConfig", () => { + const data = ref({} as BackupConfig); + const addons = ref([]); + const folders = ref([]); + + // This represent the oposite of excluded => if prensent on this list, backup it + const invertedFolders = ref([]); + const invertedAddons = ref([]); + + function loadAll() { + const conf = getBackupConfig(); + const foldersProm = getFolders(); + const addonsProm = getAddons(); + return Promise.all([conf, foldersProm, addonsProm]).then((value) => { + for (const folder of value[1]) { + if (!value[0].exclude.folder.includes(folder.slug)) { + invertedFolders.value.push(folder.slug); + } + } + for (const addon of value[2].addons) { + if (!value[0].exclude.addon.includes(addon.slug)) { + invertedAddons.value.push(addon.slug); + } + } + data.value = value[0]; + folders.value = value[1]; + addons.value = value[2].addons; + }); + } + + function addEmptyCron() { + data.value.cron.push({ + id: uuidv4(), + mode: CronMode.Daily, + }); + } + + function removeCron(id: string) { + data.value.cron = data.value.cron.filter((value) => value.id != id); + } + + return { + data, + addons, + folders, + invertedFolders, + invertedAddons, + loadAll, + addEmptyCron, + removeCron, + }; +}); diff --git a/nextcloud_backup/frontend/src/types/backupConfig.ts b/nextcloud_backup/frontend/src/types/backupConfig.ts new file mode 100644 index 0000000..def9f49 --- /dev/null +++ b/nextcloud_backup/frontend/src/types/backupConfig.ts @@ -0,0 +1,65 @@ +export enum CronMode { + Daily = "DAILY", + Weekly = "WEEKLY", + Monthly = "MONTHLY", + Custom = "CUSTOM", +} + +export enum CronModeFriendly { + DAILY = "Daily", + WEEKLY = "Weekly", + MONTHLY = "Monthly", + CUSTOM = "Custom", +} + +export enum Weekday { + SUNDAY, + MONDAY, + TUESDAY, + WEDNESDAY, + THURSDAY, + FRIDAY, + SATURDAY, +} + +export const weekdayFriendly = [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday", +]; + +export interface BackupConfig { + nameTemplate: string; + cron: CronConfig[]; + autoClean: { + homeAssistant: AutoCleanConfig; + webdav: AutoCleanConfig; + }; + exclude: { + addon: string[]; + folder: string[]; + }; + autoStopAddon: string[]; + password: { + enabled: boolean; + value?: string; + }; +} + +export interface CronConfig { + id: string; + mode: CronMode; + hour?: string; + weekday?: Weekday; + monthDay?: string; + custom?: string; +} + +export interface AutoCleanConfig { + enabled: boolean; + nbrToKeep?: number; +} diff --git a/nextcloud_backup/frontend/src/types/homeAssistant.ts b/nextcloud_backup/frontend/src/types/homeAssistant.ts new file mode 100644 index 0000000..6800a4c --- /dev/null +++ b/nextcloud_backup/frontend/src/types/homeAssistant.ts @@ -0,0 +1,24 @@ +export interface Folder { + name: string; + slug: string; +} + +export interface AddonData { + addons: AddonModel[]; +} + +export interface AddonModel { + name: string; + slug: string; + advanced: boolean; + description: string; + repository: string; + version: string; + version_latest: string; + update_available: boolean; + installed: string; + available: boolean; + icon: boolean; + logo: boolean; + state: string; +} diff --git a/nextcloud_backup/frontend/src/types/webdavConfig.ts b/nextcloud_backup/frontend/src/types/webdavConfig.ts index bd98e46..e29aa89 100644 --- a/nextcloud_backup/frontend/src/types/webdavConfig.ts +++ b/nextcloud_backup/frontend/src/types/webdavConfig.ts @@ -9,6 +9,7 @@ export interface WebdavConfig { password: string; backupDir: string; allowSelfSignedCerts: boolean; + chunckedUpload: boolean; webdavEndpoint: { type: WebdavEndpointType; customEndpoint?: string; diff --git a/nextcloud_backup/frontend/tsconfig.json b/nextcloud_backup/frontend/tsconfig.json index 8d23599..eede4f1 100644 --- a/nextcloud_backup/frontend/tsconfig.json +++ b/nextcloud_backup/frontend/tsconfig.json @@ -5,7 +5,8 @@ "baseUrl": ".", "paths": { "@/*": ["./src/*"] - } + }, + "lib": ["ES2017", "DOM", "DOM.Iterable"] }, "references": [ diff --git a/nextcloud_backup/frontend/vite.config.ts b/nextcloud_backup/frontend/vite.config.ts index 8ac9b73..a11996d 100644 --- a/nextcloud_backup/frontend/vite.config.ts +++ b/nextcloud_backup/frontend/vite.config.ts @@ -2,10 +2,14 @@ import { fileURLToPath, URL } from "node:url"; import { defineConfig } from "vite"; import vue from "@vitejs/plugin-vue"; +import dns from "dns"; // https://github.com/vuetifyjs/vuetify-loader/tree/next/packages/vite-plugin import vuetify from "vite-plugin-vuetify"; +// //Print localhost instead of 127.0.0.1 +// dns.setDefaultResultOrder("verbatim"); + // https://vitejs.dev/config/ export default defineConfig({ plugins: [vue(), vuetify({ autoImport: true })],