From 9f35e120d8617d684f72f181d5b49d7a1291ff04 Mon Sep 17 00:00:00 2001 From: Bruno Perel Date: Mon, 4 Dec 2023 21:23:12 +0100 Subject: [PATCH 01/41] Bump submodules --- paddleocr/server.py | 327 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 326 insertions(+), 1 deletion(-) diff --git a/paddleocr/server.py b/paddleocr/server.py index 7f61eb5..48f7c18 100644 --- a/paddleocr/server.py +++ b/paddleocr/server.py @@ -9,7 +9,331 @@ import os import base64 -ocrFr = PaddleOCR(use_angle_cls=True, lang='french', cls_thresh=1) +# select countrycode, GROUP_CONCAT(languagecode ORDER BY entries_with_language DESC) AS languages +# from (select countrycode, coalesce(inducks_entry.languagecode, ip.languagecode) as languagecode, count(*) as entries_with_language +# from inducks_entry +# inner join inducks_issue using (issuecode) +# inner join inducks_publication ip using (publicationcode) +# group by countrycode, coalesce(inducks_entry.languagecode, ip.languagecode) ORDER BY countrycode) as country_and_language +# group by countrycode + +json_string = """ +[ + { + "countrycode": "ae", + "languages": "ar,en" + }, + { + "countrycode": "al", + "languages": "sq" + }, + { + "countrycode": "ar", + "languages": "es-ar" + }, + { + "countrycode": "at", + "languages": "de" + }, + { + "countrycode": "au", + "languages": "en" + }, + { + "countrycode": "be", + "languages": "nl-be,fr-be,fr,nl,af,la,en" + }, + { + "countrycode": "bg", + "languages": "bg" + }, + { + "countrycode": "br", + "languages": "pt-br,en" + }, + { + "countrycode": "by", + "languages": "be" + }, + { + "countrycode": "ca", + "languages": "fr-ca,fr,en" + }, + { + "countrycode": "ch", + "languages": "fr,de" + }, + { + "countrycode": "cl", + "languages": "es-cl,es" + }, + { + "countrycode": "cn", + "languages": "zh-hans,en,it,fr,de,es,zh-hant,sr-cyrl,nl" + }, + { + "countrycode": "co", + "languages": "es-co" + }, + { + "countrycode": "cz", + "languages": "cs,en,zh-hans,ja" + }, + { + "countrycode": "dc", + "languages": "en" + }, + { + "countrycode": "de", + "languages": "de,en,fr,it,es,nl,da,fi,no,la,pt-br,ar,uk,nde,bg,sv,is,sl,pt,sr-cyrl,zh-hans,el,hr,ru,cs,ja,eo,tr,pl" + }, + { + "countrycode": "dk", + "languages": "da,en,sv,de,zh-hans,ja,fi" + }, + { + "countrycode": "dz", + "languages": "fr" + }, + { + "countrycode": "ee", + "languages": "et,en" + }, + { + "countrycode": "eg", + "languages": "ar,en" + }, + { + "countrycode": "es", + "languages": "es,es-co,en,it,fr" + }, + { + "countrycode": "fi", + "languages": "fi,en,sv,de,nl,se-sme,se-sms,it,se-smn,fr,ru,et,pt,es,no,da" + }, + { + "countrycode": "fo", + "languages": "fo,en" + }, + { + "countrycode": "fr", + "languages": "fr,en,es,de,ar,it,la,ru,sr-cyrl,nl,el,hi" + }, + { + "countrycode": "gr", + "languages": "el,en,it,fr,nl" + }, + { + "countrycode": "gy", + "languages": "en" + }, + { + "countrycode": "hk", + "languages": "zh-hant,en,sq" + }, + { + "countrycode": "hr", + "languages": "hr" + }, + { + "countrycode": "hu", + "languages": "hu" + }, + { + "countrycode": "id", + "languages": "id,en" + }, + { + "countrycode": "ie", + "languages": "en,af" + }, + { + "countrycode": "il", + "languages": "he" + }, + { + "countrycode": "in", + "languages": "en,hi,bn,ta,as,ml,kn" + }, + { + "countrycode": "ir", + "languages": "fa" + }, + { + "countrycode": "is", + "languages": "is" + }, + { + "countrycode": "it", + "languages": "it,en,fr,la,de,fi,no,zh-hant,eo,sv" + }, + { + "countrycode": "jp", + "languages": "ja,en" + }, + { + "countrycode": "kr", + "languages": "ko" + }, + { + "countrycode": "kw", + "languages": "ar,ur" + }, + { + "countrycode": "lb", + "languages": "ar" + }, + { + "countrycode": "lt", + "languages": "lt" + }, + { + "countrycode": "lu", + "languages": "ltz" + }, + { + "countrycode": "lv", + "languages": "lv,ru-lv" + }, + { + "countrycode": "ma", + "languages": "fr" + }, + { + "countrycode": "mk", + "languages": "mk" + }, + { + "countrycode": "mn", + "languages": "mn" + }, + { + "countrycode": "mx", + "languages": "es-mx" + }, + { + "countrycode": "my", + "languages": "zh-hans,ms,en" + }, + { + "countrycode": "nl", + "languages": "nl,en,fy,nl-be,lim,it,sv,fr,el,de,ja" + }, + { + "countrycode": "no", + "languages": "no,se-sme,en,nn,da,se-sma,sv,se-smj,fr,fo" + }, + { + "countrycode": "nz", + "languages": "en" + }, + { + "countrycode": "ph", + "languages": "en,tl" + }, + { + "countrycode": "pl", + "languages": "pl,en,de,fi,ja" + }, + { + "countrycode": "pt", + "languages": "pt,pt-br,en" + }, + { + "countrycode": "ro", + "languages": "ro,en" + }, + { + "countrycode": "rs", + "languages": "sr-cyrl,af,sr-latn" + }, + { + "countrycode": "ru", + "languages": "ru,en" + }, + { + "countrycode": "sa", + "languages": "ar" + }, + { + "countrycode": "se", + "languages": "sv,en,it,de,da,no,fi,fr,el,ja,es,zh-hans,hu,nl,tr,hr,lv,he,la,ru,ar,pt-br,pl,is" + }, + { + "countrycode": "sg", + "languages": "en" + }, + { + "countrycode": "si", + "languages": "sl" + }, + { + "countrycode": "sk", + "languages": "sk" + }, + { + "countrycode": "th", + "languages": "th,en" + }, + { + "countrycode": "tn", + "languages": "fr" + }, + { + "countrycode": "tr", + "languages": "tr" + }, + { + "countrycode": "tw", + "languages": "zh-hant" + }, + { + "countrycode": "ua", + "languages": "uk,ru,en" + }, + { + "countrycode": "uk", + "languages": "en,fr" + }, + { + "countrycode": "us", + "languages": "en,it,fr,nl,de,sv,sr-cyrl,pt-br,pt,fi,es,ja,da" + }, + { + "countrycode": "ve", + "languages": "es" + }, + { + "countrycode": "vn", + "languages": "vi" + }, + { + "countrycode": "yu", + "languages": "sr-cyrl,sl,sr-latn,hr,en,it" + }, + { + "countrycode": "za", + "languages": "en,af" + } +] +""" + +data = json.loads(json_string) + +country_languages = {} +for item in data: + country_languages[item['countrycode']] = item['languages'].split(',') + +# https://github.com/PaddlePaddle/PaddleOCR/issues/1048 +ocr_languages = { + "en": PaddleOCR(use_angle_cls=True, lang='en', cls_thresh=1), + "fr": PaddleOCR(use_angle_cls=True, lang='en', cls_thresh=1) +} + +ocr_languages = { + lang: PaddleOCR(use_angle_cls=True, lang=lang, cls_thresh=1) + for lang in ['ch', 'en', 'fr', 'ar', 'es', 'pt', 'ru', 'ge', 'kr', 'jp', 'it', 'hi', 'ug', 'fa', 'ur', 'oc', 'mr', 'ne', 'bg', 'uk', 'be', 'te', 'kn', 'ta'] +} class PaddleOCRRequestHandler(BaseHTTPRequestHandler): def do_POST(self): @@ -34,6 +358,7 @@ def do_POST(self): self.end_headers() self.wfile.write(json.dumps([]).encode()) return + boxes = [line[0] for line in result] texts = [line[1][0] for line in result] scores = [line[1][1] for line in result] From 373e0eee8c4768d39dcac1e574471b4bd609be8f Mon Sep 17 00:00:00 2001 From: Bruno Perel Date: Tue, 6 Feb 2024 23:08:06 +0100 Subject: [PATCH 02/41] WIP --- .env | 3 +- .env.production | 6 +- .eslintrc.js => .eslintrc.json | 38 +- .prettierrc.js | 1 - .prettierrc.json | 1 + api/.eslintrc.json | 23 + api/.prettierrc.json | 1 + api/index.ts | 56 +- api/package.json | 11 +- api/pnpm-lock.yaml | 831 ++++++++-- api/routes/_auth.ts | 39 - .../indexation/:indexation/ai/cover-search.ts | 38 - .../indexation/:indexation/ai/kumiko.ts | 48 - .../indexation/:indexation/ai/ocr/[...url].ts | 47 - .../indexation/:indexation/index.ts | 24 - api/routes/cloudinary/indexation/index.ts | 18 - api/services/_auth.ts | 49 + api/services/cloudinary-indexations/index.ts | 84 + api/services/cloudinary-indexations/kumiko.ts | 19 + api/services/cloudinary-indexations/ocr.ts | 19 + api/services/cloudinary-indexations/types.ts | 22 + api/services/index.ts | 10 + api/{routes => services}/me.ts | 0 api/services/types.ts | 5 + api/tsconfig.json | 10 +- package.json | 41 +- pnpm-lock.yaml | 1466 ++++++++++------- src/App.vue | 38 +- src/api.ts | 23 - src/components/Book.vue | 11 +- src/components/Entry.vue | 4 - src/components/Issue.vue | 6 +- src/components/IssueSelect.vue | 7 +- src/components/IssueSuggestionList.vue | 2 - src/components/IssueSuggestionModal.vue | 50 +- src/components/StorySearch.vue | 20 +- src/components/SuggestionList.vue | 2 - src/components/TextEditor.vue | 2 - src/composables/useAi.ts | 104 +- src/composables/useDumiliSocket.ts | 19 + src/composables/useHint.ts | 15 +- src/main.ts | 4 - src/pages/index.vue | 28 +- src/pages/indexation/[id].vue | 19 +- src/stores/ai.ts | 4 +- src/stores/coa.ts | 383 ----- src/stores/images.ts | 2 - src/stores/suggestions.ts | 4 +- src/stores/tabs.ts | 2 - src/stores/user.ts | 2 - tsconfig.json | 14 +- types/CloudinaryResourceContext.ts | 4 +- types/{KumikoResults.ts => KumikoResult.ts} | 8 +- vite.config.ts | 26 +- 54 files changed, 2047 insertions(+), 1666 deletions(-) rename .eslintrc.js => .eslintrc.json (66%) delete mode 100644 .prettierrc.js create mode 100644 .prettierrc.json create mode 100644 api/.eslintrc.json create mode 100644 api/.prettierrc.json delete mode 100644 api/routes/_auth.ts delete mode 100644 api/routes/cloudinary/indexation/:indexation/ai/cover-search.ts delete mode 100644 api/routes/cloudinary/indexation/:indexation/ai/kumiko.ts delete mode 100644 api/routes/cloudinary/indexation/:indexation/ai/ocr/[...url].ts delete mode 100644 api/routes/cloudinary/indexation/:indexation/index.ts delete mode 100644 api/routes/cloudinary/indexation/index.ts create mode 100644 api/services/_auth.ts create mode 100644 api/services/cloudinary-indexations/index.ts create mode 100644 api/services/cloudinary-indexations/kumiko.ts create mode 100644 api/services/cloudinary-indexations/ocr.ts create mode 100644 api/services/cloudinary-indexations/types.ts create mode 100644 api/services/index.ts rename api/{routes => services}/me.ts (100%) create mode 100644 api/services/types.ts delete mode 100644 src/api.ts create mode 100644 src/composables/useDumiliSocket.ts delete mode 100644 src/stores/coa.ts rename types/{KumikoResults.ts => KumikoResult.ts} (63%) diff --git a/.env b/.env index c2e0ce2..e4c0e53 100644 --- a/.env +++ b/.env @@ -1,7 +1,6 @@ VITE_CLOUDINARY_CLOUDNAME=dl7hskxab VITE_FRONTEND_URL=http://localhost:8004 VITE_DM_URL=http://localhost:8001 -VITE_DM_API_URL=http://localhost:3000 +VITE_SOCKET_URL=http://localhost:3002 VITE_FLAGS_ROOT=https://ducksmanager.net/images/flags/ VITE_IMAGES_ROOT=/images/ -VITE_BACKEND_URL=http://localhost:3002 diff --git a/.env.production b/.env.production index f59d461..7d8d711 100644 --- a/.env.production +++ b/.env.production @@ -1,5 +1,5 @@ VITE_FRONTEND_URL=https://dumili.ducksmanager.net -VITE_DM_URL=https://ducksmanager.net -VITE_DM_API_URL=https://api-2.ducksmanager.net +VITE_DM_URL=https://socket.ducksmanager.net +VITE_SOCKET_URL=https://socket.api.ducksmanager.net VITE_FLAGS_ROOT=https://ducksmanager.net/images/flags/ -VITE_BACKEND_URL=https://dumili-api.ducksmanager.net +VITE_SOCKET_URL=https://dumili-api.ducksmanager.net diff --git a/.eslintrc.js b/.eslintrc.json similarity index 66% rename from .eslintrc.js rename to .eslintrc.json index 1227fc0..595a673 100644 --- a/.eslintrc.js +++ b/.eslintrc.json @@ -1,21 +1,21 @@ -module.exports = { - extends: [ +{ + "extends": [ // add more generic rulesets here, such as: // 'eslint:recommended', "plugin:vue/vue3-recommended", "plugin:prettier-vue/recommended", "prettier", - "plugin:@typescript-eslint/recommended", + "plugin:@typescript-eslint/recommended" ], - parser: "vue-eslint-parser", - parserOptions: { parser: "@typescript-eslint/parser" }, - overrides: [ + "parser": "vue-eslint-parser", + "parserOptions": { "parser": "@typescript-eslint/parser" }, + "overrides": [ { - files: ["*.js", "*.ts", "*.vue"], - }, + "files": ["*.js", "*.ts", "*.vue"] + } ], - root: true, - rules: { + "root": true, + "rules": { "@typescript-eslint/no-non-null-assertion": "off", "simple-import-sort/exports": "error", "simple-import-sort/imports": "error", @@ -32,18 +32,18 @@ module.exports = { "error", "kebab-case", { - registeredComponentsOnly: true, - ignores: [], - }, - ], + "registeredComponentsOnly": true, + "ignores": [] + } + ] }, - plugins: ["simple-import-sort", "@typescript-eslint", "unused-imports"], - ignorePatterns: [ + "plugins": ["simple-import-sort", "@typescript-eslint", "unused-imports"], + "ignorePatterns": [ "**/node_modules", "**/dist", "shims.d.ts", "vendor", "auto-imports.d.ts", - "component.d.ts", - ], -}; + "component.d.ts" + ] +} diff --git a/.prettierrc.js b/.prettierrc.js deleted file mode 100644 index 4cfa418..0000000 --- a/.prettierrc.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { }; \ No newline at end of file diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/api/.eslintrc.json b/api/.eslintrc.json new file mode 100644 index 0000000..4c28dc0 --- /dev/null +++ b/api/.eslintrc.json @@ -0,0 +1,23 @@ +{ + "extends": [ + // add more generic rulesets here, such as: + // 'eslint:recommended', + "prettier", + "plugin:@typescript-eslint/recommended" + ], + "parserOptions": { "parser": "@typescript-eslint/parser" }, + "overrides": [ + { + "files": ["*.js", "*.ts"] + } + ], + "root": true, + "rules": { + "@typescript-eslint/no-non-null-assertion": "off", + "simple-import-sort/exports": "error", + "simple-import-sort/imports": "error", + "unused-imports/no-unused-imports": "error" + }, + "plugins": ["simple-import-sort", "@typescript-eslint", "unused-imports"], + "ignorePatterns": ["**/node_modules", "**/dist"] +} diff --git a/api/.prettierrc.json b/api/.prettierrc.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/api/.prettierrc.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/api/index.ts b/api/index.ts index d621d58..af3580c 100644 --- a/api/index.ts +++ b/api/index.ts @@ -1,11 +1,21 @@ -import * as Sentry from "@sentry/node"; -import busboy from "connect-busboy"; -import cors from "cors"; import dotenv from "dotenv"; -import express from "express"; -import { router } from "express-file-routing"; +import { Namespace, Server } from "socket.io"; +import { EventsMap } from "socket.io/dist/typed-events"; -import { authenticateToken } from "~routes/_auth"; +import { SessionUser } from "~dm-types/SessionUser"; + +import { getIndexationResources } from "./services/cloudinary-indexations"; + +export type SessionDataWithIndexation = { user: SessionUser, indexation: { id: string } & Awaited>} +export type SessionData = Pick & Partial> +export class ServerWithData extends Server< + Record, + Record, + Record, + Data +> { } + +export type NamespaceWithData = Namespace,Record, Data > dotenv.config({ path: ".env", @@ -16,34 +26,10 @@ dotenv.config({ override: true, }); -const port = 3002; - -Sentry.init({ - dsn: process.env.SENTRY_DSN, +const io = new ServerWithData({ + cors: { + origin: '*', + }, }); -const app = express(); -app.use( - Sentry.Handlers.requestHandler({ - user: ["id", "username"], - }) as express.RequestHandler -); -app.use( - cors({ - optionsSuccessStatus: 200, // some legacy browsers (IE11, various SmartTVs) choke on 204 - }) -); -app.use(busboy({ immediate: true })); - -app.all(/^.+$/, authenticateToken); - -app.use(express.json({ limit: "5mb" })); - -router().then((r) => { - app.use("/", r); - app.use(Sentry.Handlers.errorHandler() as express.ErrorRequestHandler); - - app.listen(port, () => { - console.log(`API listening on port ${port}`); - }); -}); +io.listen(3002); diff --git a/api/package.json b/api/package.json index 0420d18..9d2411f 100644 --- a/api/package.json +++ b/api/package.json @@ -7,7 +7,8 @@ "scripts": { "clean": "rm -rf dist", "build": "rm -rf dist/{api,types} && ./node_modules/.bin/tsc && tsc-alias", - "dev": "tsx --watch ." + "dev": "concurrently -n nodemon,tsx \"nodemon\" \"tsx --watch\"", + "lint": "eslint --fix ." }, "dependencies": { "@sentry/node": "^7.86.0", @@ -21,11 +22,11 @@ "express-file-routing": "^3.0.3", "js-cookie": "^3.0.5", "jsonwebtoken": "^9.0.2", + "socket.io": "^4.7.4", "sharp": "^0.33.0", - "~axios-helper": "workspace:*" + "~socket.io-services": "workspace:*" }, "devDependencies": { - "@swc/core": "1.3.82", "@types/body-parser": "^1.19.5", "@types/busboy": "^1.5.3", "@types/connect-busboy": "^1.0.3", @@ -34,6 +35,10 @@ "@types/i18n": "^0.13.10", "@types/jsonwebtoken": "^9.0.5", "@types/node": "^16.18.68", + "eslint": "^8.56.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-simple-import-sort": "^10.0.0", + "eslint-plugin-unused-imports": "^3.0.0", "tsc-alias": "^1.8.8", "tsconfig-paths": "^4.2.0", "tsx": "^4.6.2", diff --git a/api/pnpm-lock.yaml b/api/pnpm-lock.yaml index 69343a2..8f27f1d 100644 --- a/api/pnpm-lock.yaml +++ b/api/pnpm-lock.yaml @@ -41,14 +41,14 @@ dependencies: sharp: specifier: ^0.33.0 version: 0.33.0 - ~axios-helper: + socket.io: + specifier: ^4.7.4 + version: 4.7.4 + ~socket.io-services: specifier: workspace:* - version: link:../../../packages/axios-helper + version: link:../../../packages/socket.io-services devDependencies: - '@swc/core': - specifier: 1.3.82 - version: 1.3.82 '@types/body-parser': specifier: ^1.19.5 version: 1.19.5 @@ -73,6 +73,18 @@ devDependencies: '@types/node': specifier: ^16.18.68 version: 16.18.68 + eslint: + specifier: ^8.56.0 + version: 8.56.0 + eslint-config-prettier: + specifier: ^9.1.0 + version: 9.1.0(eslint@8.56.0) + eslint-plugin-simple-import-sort: + specifier: ^10.0.0 + version: 10.0.0(eslint@8.56.0) + eslint-plugin-unused-imports: + specifier: ^3.0.0 + version: 3.0.0(eslint@8.56.0) tsc-alias: specifier: ^1.8.8 version: 1.8.8 @@ -88,6 +100,11 @@ devDependencies: packages: + /@aashutoshrathi/word-wrap@1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + dev: true + /@emnapi/runtime@0.44.0: resolution: {integrity: sha512-ZX/etZEZw8DR7zAB1eVQT40lNo0jeqpb6dCgOvctB6FIQ5PoXfMuNY8+ayQfu8tNQbAB8gQWSSJupR8NxeiZXw==} requiresBuild: true @@ -294,6 +311,63 @@ packages: dev: true optional: true + /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.56.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@eslint-community/regexpp@4.10.0: + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + + /@eslint/eslintrc@2.1.4: + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.0 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@eslint/js@8.56.0: + resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@humanwhocodes/config-array@0.11.14: + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 2.0.2 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@humanwhocodes/module-importer@1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + dev: true + + /@humanwhocodes/object-schema@2.0.2: + resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} + dev: true + /@img/sharp-darwin-arm64@0.33.0: resolution: {integrity: sha512-070tEheekI1LJWTGPC9WlQEa5UoKTXzzlORBHMX4TbfUxMiL336YHR8vBEUNsjse0RJCX8dZ4ZXwT595aEF1ug==} engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'} @@ -545,123 +619,9 @@ packages: '@sentry/types': 7.86.0 dev: false - /@swc/core-darwin-arm64@1.3.82: - resolution: {integrity: sha512-JfsyDW34gVKD3uE0OUpUqYvAD3yseEaicnFP6pB292THtLJb0IKBBnK50vV/RzEJtc1bR3g1kNfxo2PeurZTrA==} - engines: {node: '>=10'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@swc/core-darwin-x64@1.3.82: - resolution: {integrity: sha512-ogQWgNMq7qTpITjcP3dnzkFNj7bh6SwMr859GvtOTrE75H7L7jDWxESfH4f8foB/LGxBKiDNmxKhitCuAsZK4A==} - engines: {node: '>=10'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@swc/core-linux-arm-gnueabihf@1.3.82: - resolution: {integrity: sha512-7TMXG1lXlNhD0kUiEqs+YlGV4irAdBa2quuy+XI3oJf2fBK6dQfEq4xBy65B3khrorzQS3O0oDGQ+cmdpHExHA==} - engines: {node: '>=10'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@swc/core-linux-arm64-gnu@1.3.82: - resolution: {integrity: sha512-26JkOujbzcItPAmIbD5vHJxQVy5ihcSu3YHTKwope1h28sApZdtE7S3e2G3gsZRTIdsCQkXUtAQeqHxGWWR3pw==} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@swc/core-linux-arm64-musl@1.3.82: - resolution: {integrity: sha512-8Izj9tuuMpoc3cqiPBRtwqpO1BZ/+sfZVsEhLxrbOFlcSb8LnKyMle1g3JMMUwI4EU75RGVIzZMn8A6GOKdJbA==} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@swc/core-linux-x64-gnu@1.3.82: - resolution: {integrity: sha512-0GSrIBScQwTaPv46T2qB7XnDYxndRCpwH4HMjh6FN+I+lfPUhTSJKW8AonqrqT1TbpFIgvzQs7EnTsD7AnSCow==} - engines: {node: '>=10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@swc/core-linux-x64-musl@1.3.82: - resolution: {integrity: sha512-KJUnaaepDKNzrEbwz4jv0iC3/t9x0NSoe06fnkAlhh2+NFKWKKJhVCOBTrpds8n7eylBDIXUlK34XQafjVMUdg==} - engines: {node: '>=10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@swc/core-win32-arm64-msvc@1.3.82: - resolution: {integrity: sha512-TR3MHKhDYIyGyFcyl2d/p1ftceXcubAhX5wRSOdtOyr5+K/v3jbyCCqN7bbqO5o43wQVCwwR/drHleYyDZvg8Q==} - engines: {node: '>=10'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@swc/core-win32-ia32-msvc@1.3.82: - resolution: {integrity: sha512-ZX4HzVVt6hs84YUg70UvyBJnBOIspmQQM0iXSzBvOikk3zRoN7BnDwQH4GScvevCEBuou60+i4I6d5kHLOfh8Q==} - engines: {node: '>=10'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@swc/core-win32-x64-msvc@1.3.82: - resolution: {integrity: sha512-4mJMnex21kbQoaHeAmHnVwQN9/XAfPszJ6n9HI7SVH+aAHnbBIR0M59/b50/CJMjTj5niUGk7EwQ3nhVNOG32g==} - engines: {node: '>=10'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@swc/core@1.3.82: - resolution: {integrity: sha512-jpC1a18HMH67018Ij2jh+hT7JBFu7ZKcQVfrZ8K6JuEY+kjXmbea07P9MbQUZbAe0FB+xi3CqEVCP73MebodJQ==} - engines: {node: '>=10'} - requiresBuild: true - peerDependencies: - '@swc/helpers': ^0.5.0 - peerDependenciesMeta: - '@swc/helpers': - optional: true - dependencies: - '@swc/types': 0.1.5 - optionalDependencies: - '@swc/core-darwin-arm64': 1.3.82 - '@swc/core-darwin-x64': 1.3.82 - '@swc/core-linux-arm-gnueabihf': 1.3.82 - '@swc/core-linux-arm64-gnu': 1.3.82 - '@swc/core-linux-arm64-musl': 1.3.82 - '@swc/core-linux-x64-gnu': 1.3.82 - '@swc/core-linux-x64-musl': 1.3.82 - '@swc/core-win32-arm64-msvc': 1.3.82 - '@swc/core-win32-ia32-msvc': 1.3.82 - '@swc/core-win32-x64-msvc': 1.3.82 - dev: true - - /@swc/types@0.1.5: - resolution: {integrity: sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==} - dev: true + /@socket.io/component-emitter@3.1.0: + resolution: {integrity: sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==} + dev: false /@types/body-parser@1.19.5: resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} @@ -690,11 +650,14 @@ packages: '@types/node': 16.18.68 dev: true + /@types/cookie@0.4.1: + resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} + dev: false + /@types/cors@2.8.17: resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==} dependencies: '@types/node': 16.18.68 - dev: true /@types/express-serve-static-core@4.17.41: resolution: {integrity: sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==} @@ -738,7 +701,6 @@ packages: /@types/node@16.18.68: resolution: {integrity: sha512-sG3hPIQwJLoewrN7cr0dwEy+yF5nD4D/4FxtQpFciRD/xwUzgD+G05uxZHv5mhfXo4F9Jkp13jjn0CC2q325sg==} - dev: true /@types/qs@6.9.10: resolution: {integrity: sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==} @@ -763,6 +725,10 @@ packages: '@types/node': 16.18.68 dev: true + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: true + /accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} @@ -771,6 +737,20 @@ packages: negotiator: 0.6.3 dev: false + /acorn-jsx@5.3.2(acorn@8.11.3): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.11.3 + dev: true + + /acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + /agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} @@ -780,6 +760,27 @@ packages: - supports-color dev: false + /ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true + + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + dev: true + /anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} @@ -788,6 +789,10 @@ packages: picomatch: 2.3.1 dev: true + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true + /array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} dev: false @@ -811,6 +816,15 @@ packages: - debug dev: false + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true + + /base64id@2.0.0: + resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} + engines: {node: ^4.5.0 || >= 5.9} + dev: false + /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} @@ -856,6 +870,13 @@ packages: - supports-color dev: false + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: true + /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} @@ -887,6 +908,19 @@ packages: set-function-length: 1.1.1 dev: false + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true + + /chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + /chokidar@3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} @@ -925,11 +959,9 @@ packages: engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 - dev: false /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: false /color-string@1.9.1: resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} @@ -958,6 +990,10 @@ packages: engines: {node: ^12.20.0 || >=14} dev: true + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: true + /connect-busboy@1.0.0: resolution: {integrity: sha512-dKON178N/CpPSeJ8E+kfOekSUBx0nQo5kyIekry7YpM+qRhgHmSRVUN5D2hpLA8SQBV0ZNMF/aG7njDzE8Gl2A==} engines: {node: '>=10.16.0'} @@ -981,6 +1017,11 @@ packages: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} dev: false + /cookie@0.4.2: + resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} + engines: {node: '>= 0.6'} + dev: false + /cookie@0.5.0: resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} engines: {node: '>= 0.6'} @@ -999,6 +1040,15 @@ packages: vary: 1.1.2 dev: false + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + /debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -1020,7 +1070,10 @@ packages: optional: true dependencies: ms: 2.1.2 - dev: false + + /deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: true /define-data-property@1.1.1: resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} @@ -1058,6 +1111,13 @@ packages: path-type: 4.0.0 dev: true + /doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + dev: true + /dotenv@16.3.1: resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} engines: {node: '>=12'} @@ -1078,6 +1138,31 @@ packages: engines: {node: '>= 0.8'} dev: false + /engine.io-parser@5.2.1: + resolution: {integrity: sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==} + engines: {node: '>=10.0.0'} + dev: false + + /engine.io@6.5.4: + resolution: {integrity: sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg==} + engines: {node: '>=10.2.0'} + dependencies: + '@types/cookie': 0.4.1 + '@types/cors': 2.8.17 + '@types/node': 16.18.68 + accepts: 1.3.8 + base64id: 2.0.0 + cookie: 0.4.2 + cors: 2.8.5 + debug: 4.3.4 + engine.io-parser: 5.2.1 + ws: 8.11.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + /esbuild@0.18.20: resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} engines: {node: '>=12'} @@ -1112,6 +1197,140 @@ packages: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} dev: false + /escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + dev: true + + /eslint-config-prettier@9.1.0(eslint@8.56.0): + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + dependencies: + eslint: 8.56.0 + dev: true + + /eslint-plugin-simple-import-sort@10.0.0(eslint@8.56.0): + resolution: {integrity: sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==} + peerDependencies: + eslint: '>=5.0.0' + dependencies: + eslint: 8.56.0 + dev: true + + /eslint-plugin-unused-imports@3.0.0(eslint@8.56.0): + resolution: {integrity: sha512-sduiswLJfZHeeBJ+MQaG+xYzSWdRXoSw61DpU13mzWumCkR0ufD0HmO4kdNokjrkluMHpj/7PJeN35pgbhW3kw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^6.0.0 + eslint: ^8.0.0 + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + dependencies: + eslint: 8.56.0 + eslint-rule-composer: 0.3.0 + dev: true + + /eslint-rule-composer@0.3.0: + resolution: {integrity: sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==} + engines: {node: '>=4.0.0'} + dev: true + + /eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + + /eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /eslint@8.56.0: + resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@eslint-community/regexpp': 4.10.0 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.56.0 + '@humanwhocodes/config-array': 0.11.14 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.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.24.0 + graphemer: 1.4.0 + ignore: 5.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + 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 + transitivePeerDependencies: + - supports-color + dev: true + + /espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) + eslint-visitor-keys: 3.4.3 + dev: true + + /esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: true + + /esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: true + + /estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: true + + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: true + /etag@1.8.1: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} @@ -1164,6 +1383,10 @@ packages: - supports-color dev: false + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true + /fast-glob@3.3.2: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} @@ -1175,12 +1398,27 @@ packages: micromatch: 4.0.5 dev: true + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true + + /fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + dev: true + /fastq@1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: reusify: 1.0.4 dev: true + /file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.2.0 + dev: true + /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} @@ -1203,6 +1441,27 @@ packages: - supports-color dev: false + /find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: true + + /flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.2.9 + keyv: 4.5.4 + rimraf: 3.0.2 + dev: true + + /flatted@3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + dev: true + /follow-redirects@1.15.3: resolution: {integrity: sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==} engines: {node: '>=4.0'} @@ -1232,6 +1491,10 @@ packages: engines: {node: '>= 0.6'} dev: false + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true + /fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -1266,6 +1529,31 @@ packages: is-glob: 4.0.3 dev: true + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: true + /globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} @@ -1284,6 +1572,15 @@ packages: get-intrinsic: 1.2.2 dev: false + /graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + dev: true + + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true + /has-property-descriptors@1.0.1: resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} dependencies: @@ -1340,9 +1637,28 @@ packages: engines: {node: '>= 4'} dev: true + /import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: true + + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: true + + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: false /ipaddr.js@1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} @@ -1377,11 +1693,39 @@ 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 + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true + /js-cookie@3.0.5: resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==} engines: {node: '>=14'} dev: false + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: true + + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + dev: true + + /json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: true + + /json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: true + /json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} @@ -1419,6 +1763,27 @@ packages: safe-buffer: 5.2.1 dev: false + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + dependencies: + json-buffer: 3.0.1 + dev: true + + /levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + dev: true + /lodash.includes@4.3.0: resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} dev: false @@ -1443,6 +1808,10 @@ packages: resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} dev: false + /lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true + /lodash.once@4.1.1: resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} dev: false @@ -1503,6 +1872,12 @@ packages: hasBin: true dev: false + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: true + /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true @@ -1513,7 +1888,6 @@ packages: /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: false /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -1524,6 +1898,10 @@ packages: engines: {node: '>=12.0.0'} dev: true + /natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: true + /negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} @@ -1550,11 +1928,65 @@ packages: ee-first: 1.1.1 dev: false + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: true + + /optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + dev: true + + /p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + dev: true + + /parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + dev: true + /parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} dev: false + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: true + + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: true + + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true + /path-to-regexp@0.1.7: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} dev: false @@ -1576,6 +2008,11 @@ packages: queue-lit: 1.5.2 dev: true + /prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: true + /proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -1588,6 +2025,11 @@ packages: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} dev: false + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + dev: true + /q@1.5.1: resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} engines: {node: '>=0.6.0', teleport: '>=0.2.0'} @@ -1641,6 +2083,11 @@ packages: picomatch: 2.3.1 dev: true + /resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: true + /resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} dev: true @@ -1650,6 +2097,13 @@ packages: engines: {iojs: '>=1.0.0', node: '>=0.10.0'} dev: true + /rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.2.3 + dev: true + /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: @@ -1749,6 +2203,18 @@ packages: '@img/sharp-win32-x64': 0.33.0 dev: false + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + dev: true + + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: true + /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: @@ -1768,6 +2234,42 @@ packages: engines: {node: '>=8'} dev: true + /socket.io-adapter@2.5.2: + resolution: {integrity: sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==} + dependencies: + ws: 8.11.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /socket.io-parser@4.2.4: + resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} + engines: {node: '>=10.0.0'} + dependencies: + '@socket.io/component-emitter': 3.1.0 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + + /socket.io@4.7.4: + resolution: {integrity: sha512-DcotgfP1Zg9iP/dH9zvAQcWrE0TtbMVwXmlV4T4mqsvY+gw+LqUGPfx2AoVyRk0FLME+GQhufDMyacFmw7ksqw==} + engines: {node: '>=10.2.0'} + dependencies: + accepts: 1.3.8 + base64id: 2.0.0 + cors: 2.8.5 + debug: 4.3.4 + engine.io: 6.5.4 + socket.io-adapter: 2.5.2 + socket.io-parser: 4.2.4 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + /statuses@2.0.1: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} @@ -1778,11 +2280,34 @@ packages: engines: {node: '>=10.0.0'} dev: false + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + dev: true + /strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} dev: true + /strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: true + + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: true + + /text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: true + /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -1833,6 +2358,18 @@ packages: fsevents: 2.3.3 dev: true + /type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + dev: true + + /type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + dev: true + /type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} @@ -1852,6 +2389,12 @@ packages: engines: {node: '>= 0.8'} dev: false + /uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.1 + dev: true + /utils-merge@1.0.1: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} @@ -1862,6 +2405,36 @@ packages: engines: {node: '>= 0.8'} dev: false + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: true + + /ws@8.11.0: + resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: false + + /yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true diff --git a/api/routes/_auth.ts b/api/routes/_auth.ts deleted file mode 100644 index c34d74a..0000000 --- a/api/routes/_auth.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { Request, Response } from "express"; -import jwt from "jsonwebtoken"; - -export interface User { - id: number; - username: string; -} - -declare global { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace Express { - interface Request { - user: User; - } - } -} - -export const authenticateToken = ( - req: Request, - res: Response, - next: CallableFunction -) => { - const authHeader = req.headers["authorization"]; - const token = authHeader?.split(" ")?.[1]; - - if (token == null) return res.status(401).send("No token provided"); - - jwt.verify( - token, - process.env.TOKEN_SECRET as string, - (err: unknown, user: unknown) => { - if (err) { - return res.status(401).send("Invalid token"); - } - req.user = user as User; - next(); - } - ); -}; diff --git a/api/routes/cloudinary/indexation/:indexation/ai/cover-search.ts b/api/routes/cloudinary/indexation/:indexation/ai/cover-search.ts deleted file mode 100644 index 406bac2..0000000 --- a/api/routes/cloudinary/indexation/:indexation/ai/cover-search.ts +++ /dev/null @@ -1,38 +0,0 @@ -import axios from "axios"; -import { Request, Response } from "express"; -import Cookies from "js-cookie"; - -import { - addTokenRequestInterceptor, - addUrlParamsRequestInterceptor, -} from "~axios-helper"; - -import { getIndexationResources } from ".."; - -const defaultApi = addTokenRequestInterceptor( - addUrlParamsRequestInterceptor( - axios.create({ baseURL: process.env.DM_API_URL }) - ), - () => Promise.resolve(Cookies.get("token") as string) -); -export const get = async (req: Request, res: Response) => { - const indexationResources = await getIndexationResources( - req.params.indexation, - req.user.username - ); - const image = await axios.get(indexationResources[0].url, { - responseType: "arraybuffer", - }); - try { - return res.json( - ( - await axios.post(`${defaultApi.defaults.baseURL}/cover-id/search`, { - base64: Buffer.from(image.data).toString("base64"), - }) - ).data - ); - } catch (e) { - console.error(e); - return res.status(500).json({ error: e }); - } -}; diff --git a/api/routes/cloudinary/indexation/:indexation/ai/kumiko.ts b/api/routes/cloudinary/indexation/:indexation/ai/kumiko.ts deleted file mode 100644 index 4755a45..0000000 --- a/api/routes/cloudinary/indexation/:indexation/ai/kumiko.ts +++ /dev/null @@ -1,48 +0,0 @@ -import axios from "axios"; -import { Request, Response } from "express"; - -import { getIndexationResources } from ".."; - -export type KumikoResult = { - filename: string; - size: number[]; - background: string; - gutters: number[]; - panels: { x: number; y: number; width: number; height: number }[]; -}; - -type KumikoResultWithNumberPanels = Omit & { - panels: [number, number, number, number][]; -}; - -export const get = async (req: Request, res: Response) => { - const indexationResources = await getIndexationResources( - req.params.indexation, - req.user.username - ); - const output = await runKumiko( - indexationResources.map(({ secure_url }) => secure_url) - ); - try { - return res.json(output); - } catch (err) { - console.error(err); - console.error(output); - return res.status(500).send({ - message: "Kumiko output could not be parsed", - }); - } -}; - -export const runKumiko = async (urls: string[]): Promise => - (await axios.get(`${process.env.KUMIKO_HOST}?i=${urls.join(",")}`)).data.map( - (result: KumikoResultWithNumberPanels) => ({ - ...result, - panels: result.panels.map(([x, y, width, height]) => ({ - x, - y, - width, - height, - })), - }) - ); diff --git a/api/routes/cloudinary/indexation/:indexation/ai/ocr/[...url].ts b/api/routes/cloudinary/indexation/:indexation/ai/ocr/[...url].ts deleted file mode 100644 index 1d98f72..0000000 --- a/api/routes/cloudinary/indexation/:indexation/ai/ocr/[...url].ts +++ /dev/null @@ -1,47 +0,0 @@ -import axios from "axios"; -import { Request, Response } from "express"; -import sharp from "sharp"; - -import { OcrResult } from "~dumili-types/OcrResults"; - -import { getIndexationResources } from "../.."; -import { KumikoResult, runKumiko } from "../kumiko"; - -/* Adding a bit of extra in case the storycode is just outside the panel */ -const extendBoundaries = ( - { x, y, width, height }: KumikoResult["panels"][0], - extendBy: number -) => ({ - left: x, - top: y, - width: width + extendBy, - height: height + extendBy, -}); - -export const get = async (req: Request, res: Response) => { - const indexationResources = await getIndexationResources( - req.params.indexation, - req.user.username - ); - const pageUrl = req.params[0]; - if (!indexationResources.some(({ secure_url }) => secure_url === pageUrl)) { - return res.status(400).send({ message: "Invalid page URL" }); - } - const kumikoResultsForPage = (await runKumiko([pageUrl]))[0]; - const firstPanel = kumikoResultsForPage.panels[0]; - - const input = ( - await axios({ - url: pageUrl, - responseType: "arraybuffer", - }) - ).data as Buffer; - - const base64 = ( - await sharp(input).extract(extendBoundaries(firstPanel, 20)).toBuffer() - ).toString("base64"); - return res.json(await runOcr(base64)); -}; - -export const runOcr = async (base64: string): Promise => - (await axios.post(process.env.OCR_HOST!, base64)).data; diff --git a/api/routes/cloudinary/indexation/:indexation/index.ts b/api/routes/cloudinary/indexation/:indexation/index.ts deleted file mode 100644 index 0708a7d..0000000 --- a/api/routes/cloudinary/indexation/:indexation/index.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { v2 as cloudinary } from "cloudinary"; -import { Request, Response } from "express"; - -import { CloudinaryResourceContext } from "~dumili-types/CloudinaryResourceContext"; - -export const get = async (req: Request, res: Response) => - res.json( - await getIndexationResources(req.params.indexation, req.user.username) - ); - -export const getIndexationResources = async ( - indexation: string, - username: string -) => - (await cloudinary.api - .resources_by_context("indexation", indexation, { - context: true, - }) - .catch(async (err) => { - console.error(err); - }))!.resources.filter( - ({ context }) => - (context as CloudinaryResourceContext).custom.user === username - ); diff --git a/api/routes/cloudinary/indexation/index.ts b/api/routes/cloudinary/indexation/index.ts deleted file mode 100644 index bfae1fb..0000000 --- a/api/routes/cloudinary/indexation/index.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { v2 as cloudinary } from "cloudinary"; -import { Request, Response } from "express"; - -import { CloudinaryResourceContext } from "~dumili-types/CloudinaryResourceContext"; - -export const get = async (req: Request, res: Response) => - res.json( - (await cloudinary.api - .resources_by_context("first_image", "true", { - context: true, - }) - .catch(async (err) => { - console.error(err); - }))!.resources.filter( - ({ context }) => - (context as CloudinaryResourceContext).custom.user === req.user.username - ) - ); diff --git a/api/services/_auth.ts b/api/services/_auth.ts new file mode 100644 index 0000000..0cc22dd --- /dev/null +++ b/api/services/_auth.ts @@ -0,0 +1,49 @@ +import jwt from "jsonwebtoken"; +import { Socket } from "socket.io"; + +import { SessionUser } from "~dm-types/SessionUser"; + +type SocketWithUser = Socket< + Record, + Record, + Record, + { user: SessionUser } +>; + +const AuthMiddleware = ( + socket: SocketWithUser, + next: (error?: Error) => void, + required: boolean +) => { + const token = socket.handshake.auth.token; + + if (required && token == null) { + next(new Error("No token provided")); + return; + } + + jwt.verify( + token, + process.env.TOKEN_SECRET as string, + (err: unknown, user: unknown) => { + if (required && err) { + next(new Error(`Invalid token: ${err}`)); + } else { + if (user) { + socket.data.user = user as SessionUser; + } + next(); + } + } + ); +}; + +export const RequiredAuthMiddleware = ( + socket: Socket, + next: (error?: Error) => void +) => AuthMiddleware(socket, next, true); + +export const OptionalAuthMiddleware = ( + socket: Socket, + next: (error?: Error) => void +) => AuthMiddleware(socket, next, false); diff --git a/api/services/cloudinary-indexations/index.ts b/api/services/cloudinary-indexations/index.ts new file mode 100644 index 0000000..0b69e61 --- /dev/null +++ b/api/services/cloudinary-indexations/index.ts @@ -0,0 +1,84 @@ +import axios from "axios"; +import { v2 as cloudinary } from "cloudinary"; +import sharp from "sharp"; +import { Socket } from "socket.io"; + +import { NamespaceWithData, ServerWithData, SessionData, SessionDataWithIndexation } from "~/index"; +import { CloudinaryResourceContext } from '~dumili-types/CloudinaryResourceContext' + +import { runKumiko } from "./kumiko"; +import { extendBoundaries, runOcr } from "./ocr"; +import Events, { IndexationEvents, ResourceApiResponseWithCustomUser } from "./types"; + +const GetIndexationResourcesMiddleware = async ( + socket: Socket, + next: (error?: Error) => void) => { + socket.data.resources = await getIndexationResources(socket.data.user!.username, socket.nsp.name.split("/").pop() as string) + + next() +} + +export default (io: ServerWithData) => { + const namespace = io.of(Events.namespaceEndpoint) as NamespaceWithData; + namespace.on("connection", (socket) => { + socket.on("getResources", async (callback) => getIndexationResources(socket.data.user.username).then(data => { + callback(data as ResourceApiResponseWithCustomUser) + for (const indexation of data.resources) { + const indexationId = (indexation.context as CloudinaryResourceContext).custom.indexation + const indexationNamespace = io.of(`${Events.namespaceEndpoint}/${indexationId}`) as NamespaceWithData; + indexationNamespace.use(GetIndexationResourcesMiddleware).on("connection", (indexationSocket) => { + + indexationSocket.on("getIndexationResources", async (callback) => getIndexationResources(socket.data.user.username, indexationId).then(callback).catch((error) => callback({ error: "Cloudinary error", errorDetails: error }))) + + indexationSocket.on('getKumikoResults', async (callback) => { + const output = await runKumiko( + indexationSocket.data.indexation.resources.map(({ secure_url }) => secure_url) + ); + try { + callback({ data: output }); + } catch (err) { + console.error(err); + console.error(output); + callback({ + error: "Kumiko output could not be parsed", + }); + } + }) + + indexationSocket.on('getOcrResults', async (pageUrl, callback) => { + if (!indexationSocket.data.indexation.resources.some(({ secure_url }) => secure_url === pageUrl)) { + callback({ error: "Invalid page URL" }) + } + const kumikoResultsForPage = (await runKumiko([pageUrl]))[0]; + const firstPanel = kumikoResultsForPage.panels[0]; + + const input: Buffer = ( + await axios({ + url: pageUrl, + responseType: "arraybuffer", + }) + ).data; + + const base64 = ( + await sharp(input).extract(extendBoundaries(firstPanel, 20)).toBuffer() + ).toString("base64"); + callback({ data: await runOcr(base64) }); + }); + }) + } + })) + }) +} + +export const getIndexationResources = async ( + username: string, + indexation?: string, +) => +(cloudinary.api + .resources_by_context(indexation ? "indexation" : "first_image", indexation || 'true', { + context: true, + }) + .catch(async (err) => { + console.error(err); + throw err; + })); diff --git a/api/services/cloudinary-indexations/kumiko.ts b/api/services/cloudinary-indexations/kumiko.ts new file mode 100644 index 0000000..2a7fc19 --- /dev/null +++ b/api/services/cloudinary-indexations/kumiko.ts @@ -0,0 +1,19 @@ +import axios from "axios"; + +import { KumikoResult } from "~dumili-types/KumikoResult"; + +type KumikoResultWithNumberPanels = Omit & { + panels: [number, number, number, number][]; +}; +export const runKumiko = async (urls: string[]): Promise => + (await axios.get(`${process.env.KUMIKO_HOST}?i=${urls.join(",")}`)).data.map( + (result: KumikoResultWithNumberPanels) => ({ + ...result, + panels: result.panels.map(([x, y, width, height]) => ({ + x, + y, + width, + height, + })), + }) + ); diff --git a/api/services/cloudinary-indexations/ocr.ts b/api/services/cloudinary-indexations/ocr.ts new file mode 100644 index 0000000..a522159 --- /dev/null +++ b/api/services/cloudinary-indexations/ocr.ts @@ -0,0 +1,19 @@ +import axios from "axios"; + +import { KumikoResult } from "~dumili-types/KumikoResult"; +import { OcrResult } from "~dumili-types/OcrResults"; + + +/* Adding a bit of extra in case the storycode is just outside the panel */ +export const extendBoundaries = ( + { x, y, width, height }: KumikoResult["panels"][0], + extendBy: number +) => ({ + left: x, + top: y, + width: width + extendBy, + height: height + extendBy, +}); + +export const runOcr = async (base64: string): Promise => + (axios.post(process.env.OCR_HOST!, base64)).then(({data}) => data); diff --git a/api/services/cloudinary-indexations/types.ts b/api/services/cloudinary-indexations/types.ts new file mode 100644 index 0000000..a557858 --- /dev/null +++ b/api/services/cloudinary-indexations/types.ts @@ -0,0 +1,22 @@ +import { ResourceApiResponse } from "cloudinary"; + +import { KumikoResult } from "~dumili-types/KumikoResult"; +import { OcrResult } from "~dumili-types/OcrResults"; +import { Errorable } from '~socket.io-services/types'; + +export type ResourceApiResponseWithCustomUser = ResourceApiResponse & { resources: [{ context: {custom: { user: string, indexation: string } }}] }; + + +export default abstract class { + static namespaceEndpoint: string = "/cloudinary-indexations"; + + abstract getResources: (callback: (data: Errorable) => void) => void; +} +export abstract class IndexationEvents { + abstract getIndexationResources: (callback: (data: Errorable) => void) => void; + + abstract getKumikoResults: (callback: (data: Errorable<{data: KumikoResult[]}, "Kumiko output could not be parsed">) => void) => void; + + abstract getOcrResults: (pageUrl: string, callback: (data: Errorable<{data: OcrResult[]}, "Invalid page URL">) => void) => void; + +} \ No newline at end of file diff --git a/api/services/index.ts b/api/services/index.ts new file mode 100644 index 0000000..2548359 --- /dev/null +++ b/api/services/index.ts @@ -0,0 +1,10 @@ +import { Namespace, Server } from "socket.io"; + +import Events from './types' + +export default (io: Server) => { + const namespace = io.of(Events.namespaceEndpoint) as Namespace; + namespace.on("connection", (socket) => { + socket.on("getUser", async (callback) => callback({ username: socket.data.user.username })); + }); +}; diff --git a/api/routes/me.ts b/api/services/me.ts similarity index 100% rename from api/routes/me.ts rename to api/services/me.ts diff --git a/api/services/types.ts b/api/services/types.ts new file mode 100644 index 0000000..0c4681d --- /dev/null +++ b/api/services/types.ts @@ -0,0 +1,5 @@ +export default abstract class { + static namespaceEndpoint: string = "/me"; + + abstract getUser: (callback: (data: { username: string }) => void) => void; +} \ No newline at end of file diff --git a/api/tsconfig.json b/api/tsconfig.json index 9828fb9..c110360 100644 --- a/api/tsconfig.json +++ b/api/tsconfig.json @@ -15,15 +15,11 @@ "allowJs": true, "forceConsistentCasingInFileNames": true, "outDir": "./dist", + "preserveWatchOutput": true, "paths": { "~/*": ["*"], - "~dumili-types/*": ["../types/*"], - "~axios-helper/*": ["../../../packages/axios-helper/*"], - "~routes/*": ["routes/*"] + "~dumili-types/*": ["../types/*"] } }, - "include": ["index.ts", "routes/**/*.ts"], - "ts-node": { - "swc": true - } + "include": ["index.ts", "services/**/*.ts"] } diff --git a/package.json b/package.json index 28eff2b..7c0a978 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,7 @@ { "name": "~dumili", "version": "0.0.0", + "type": "module", "engines": { "node": ">=18.0.0 <19.0.0" }, @@ -13,48 +14,50 @@ "lint": "eslint --cache --fix ." }, "dependencies": { - "@cloudinary/url-gen": "^1.14.0", - "@cloudinary/vue": "^1.11.2", - "@vueuse/integrations": "^10.7.0", + "@cloudinary/url-gen": "^1.16.0", + "@cloudinary/vue": "^1.12.0", + "@vueuse/integrations": "^10.7.2", "async-validator": "^4.2.5", - "axios": "^1.6.2", - "axios-cache-interceptor": "^1.3.2", + "axios-cache-interceptor": "^1.5.1", "bootstrap": "^5.3.2", "bootstrap-vue-next": "^0.15.5", "dayjs": "^1.11.10", "js-cookie": "^3.0.5", "page-flip": "^2.0.7", "pinia": "^2.1.7", - "vue": "^3.3.11", - "vue-i18n": "^9.8.0", + "socket.io-client": "^4.7.4", + "vue": "^3.4.15", + "vue-i18n": "^9.9.1", "vue-router": "^4.2.5", - "~axios-helper": "workspace:*", + "~dm-types": "workspace:*", + "~socket.io-client-services": "workspace:*", + "~socket.io-services": "workspace:*", "~web": "workspace:*" }, "devDependencies": { "@antfu/eslint-config": "^1.2.1", - "@iconify-json/bi": "^1.1.22", - "@intlify/unplugin-vue-i18n": "^1.5.0", + "@iconify-json/bi": "^1.1.23", + "@intlify/unplugin-vue-i18n": "^1.6.0", "@types/js-cookie": "^3.0.6", "@types/page-flip": "^2.0.3", - "@vitejs/plugin-vue": "^4.5.2", + "@vitejs/plugin-vue": "^5.0.3", "concurrently": "^8.2.2", - "eslint": "^8.55.0", + "eslint": "^8.56.0", "eslint-config-prettier": "^8.10.0", "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-prettier-vue": "^4.2.0", "eslint-plugin-simple-import-sort": "^10.0.0", - "eslint-plugin-vue": "^9.19.2", + "eslint-plugin-vue": "^9.21.1", "prettier": "^2.8.8", - "sass": "^1.69.5", + "sass": "^1.70.0", "typescript": "^5.3.3", - "unplugin-auto-import": "^0.17.2", - "unplugin-icons": "^0.18.1", - "unplugin-vue-components": "^0.25.2", - "vite": "^4.5.1", + "unplugin-auto-import": "^0.17.5", + "unplugin-icons": "^0.18.5", + "unplugin-vue-components": "^0.26.0", + "vite": "^5.0.12", "vite-plugin-eslint": "^1.8.1", "vite-plugin-pages": "^0.32.0", - "vue-tsc": "^1.8.25" + "vue-tsc": "^1.8.27" }, "eslintConfig": { "extends": "@antfu" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 118486f..8c2d103 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,29 +6,26 @@ settings: dependencies: '@cloudinary/url-gen': - specifier: ^1.14.0 - version: 1.14.0 + specifier: ^1.16.0 + version: 1.16.0 '@cloudinary/vue': - specifier: ^1.11.2 - version: 1.11.2 + specifier: ^1.12.0 + version: 1.12.0 '@vueuse/integrations': - specifier: ^10.7.0 - version: 10.7.0(async-validator@4.2.5)(axios@1.6.2)(vue@3.3.11) + specifier: ^10.7.2 + version: 10.7.2(async-validator@4.2.5)(axios@1.6.7)(vue@3.4.15) async-validator: specifier: ^4.2.5 version: 4.2.5 - axios: - specifier: ^1.6.2 - version: 1.6.2 axios-cache-interceptor: - specifier: ^1.3.2 - version: 1.3.2(axios@1.6.2) + specifier: ^1.5.1 + version: 1.5.1(axios@1.6.7) bootstrap: specifier: ^5.3.2 version: 5.3.2(@popperjs/core@2.11.8) bootstrap-vue-next: specifier: ^0.15.5 - version: 0.15.5(vue@3.3.11) + version: 0.15.5(vue@3.4.15) dayjs: specifier: ^1.11.10 version: 1.11.10 @@ -40,25 +37,28 @@ dependencies: version: 2.0.7 pinia: specifier: ^2.1.7 - version: 2.1.7(typescript@5.3.3)(vue@3.3.11) + version: 2.1.7(typescript@5.3.3)(vue@3.4.15) + socket.io-client: + specifier: ^4.7.4 + version: 4.7.4 vue: - specifier: ^3.3.11 - version: 3.3.11(typescript@5.3.3) + specifier: ^3.4.15 + version: 3.4.15(typescript@5.3.3) vue-i18n: - specifier: ^9.8.0 - version: 9.8.0(vue@3.3.11) + specifier: ^9.9.1 + version: 9.9.1(vue@3.4.15) vue-router: specifier: ^4.2.5 - version: 4.2.5(vue@3.3.11) - ~api-routes: - specifier: workspace:* - version: link:../../packages/api-routes - ~axios-helper: - specifier: workspace:* - version: link:../../packages/axios-helper + version: 4.2.5(vue@3.4.15) ~dm-types: specifier: workspace:* version: link:../../packages/types + ~socket.io-client-services: + specifier: workspace:* + version: link:../../packages/socket.io-client-services + ~socket.io-services: + specifier: workspace:* + version: link:../../packages/socket.io-services ~web: specifier: workspace:* version: link:../web @@ -66,13 +66,13 @@ dependencies: devDependencies: '@antfu/eslint-config': specifier: ^1.2.1 - version: 1.2.1(eslint@8.55.0)(typescript@5.3.3) + version: 1.2.1(eslint@8.56.0)(typescript@5.3.3) '@iconify-json/bi': - specifier: ^1.1.22 - version: 1.1.22 + specifier: ^1.1.23 + version: 1.1.23 '@intlify/unplugin-vue-i18n': - specifier: ^1.5.0 - version: 1.5.0(vue-i18n@9.8.0) + specifier: ^1.6.0 + version: 1.6.0(vue-i18n@9.9.1) '@types/js-cookie': specifier: ^3.0.6 version: 3.0.6 @@ -80,59 +80,59 @@ devDependencies: specifier: ^2.0.3 version: 2.0.3 '@vitejs/plugin-vue': - specifier: ^4.5.2 - version: 4.5.2(vite@4.5.1)(vue@3.3.11) + specifier: ^5.0.3 + version: 5.0.3(vite@5.0.12)(vue@3.4.15) concurrently: specifier: ^8.2.2 version: 8.2.2 eslint: - specifier: ^8.55.0 - version: 8.55.0 + specifier: ^8.56.0 + version: 8.56.0 eslint-config-prettier: specifier: ^8.10.0 - version: 8.10.0(eslint@8.55.0) + version: 8.10.0(eslint@8.56.0) eslint-plugin-prettier: specifier: ^4.2.1 - version: 4.2.1(eslint-config-prettier@8.10.0)(eslint@8.55.0)(prettier@2.8.8) + version: 4.2.1(eslint-config-prettier@8.10.0)(eslint@8.56.0)(prettier@2.8.8) eslint-plugin-prettier-vue: specifier: ^4.2.0 version: 4.2.0 eslint-plugin-simple-import-sort: specifier: ^10.0.0 - version: 10.0.0(eslint@8.55.0) + version: 10.0.0(eslint@8.56.0) eslint-plugin-vue: - specifier: ^9.19.2 - version: 9.19.2(eslint@8.55.0) + specifier: ^9.21.1 + version: 9.21.1(eslint@8.56.0) prettier: specifier: ^2.8.8 version: 2.8.8 sass: - specifier: ^1.69.5 - version: 1.69.5 + specifier: ^1.70.0 + version: 1.70.0 typescript: specifier: ^5.3.3 version: 5.3.3 unplugin-auto-import: - specifier: ^0.17.2 - version: 0.17.2 + specifier: ^0.17.5 + version: 0.17.5 unplugin-icons: - specifier: ^0.18.1 - version: 0.18.1 + specifier: ^0.18.5 + version: 0.18.5 unplugin-vue-components: - specifier: ^0.25.2 - version: 0.25.2(vue@3.3.11) + specifier: ^0.26.0 + version: 0.26.0(vue@3.4.15) vite: - specifier: ^4.5.1 - version: 4.5.1(sass@1.69.5) + specifier: ^5.0.12 + version: 5.0.12(sass@1.70.0) vite-plugin-eslint: specifier: ^1.8.1 - version: 1.8.1(eslint@8.55.0)(vite@4.5.1) + version: 1.8.1(eslint@8.56.0)(vite@5.0.12) vite-plugin-pages: specifier: ^0.32.0 - version: 0.32.0(vite@4.5.1) + version: 0.32.0(vite@5.0.12) vue-tsc: - specifier: ^1.8.25 - version: 1.8.25(typescript@5.3.3) + specifier: ^1.8.27 + version: 1.8.27(typescript@5.3.3) packages: @@ -141,7 +141,7 @@ packages: engines: {node: '>=0.10.0'} dev: true - /@antfu/eslint-config@1.2.1(eslint@8.55.0)(typescript@5.3.3): + /@antfu/eslint-config@1.2.1(eslint@8.56.0)(typescript@5.3.3): resolution: {integrity: sha512-/B7jSc9RARxGNZUoxkB2EL7pL7v5ubt25Ah3QbQaCalcIOC3YF+60mL4/G8Oi9Rtdng7ytNGg3bi50voKfqINQ==} hasBin: true peerDependencies: @@ -149,27 +149,27 @@ packages: dependencies: '@antfu/eslint-define-config': 1.23.0-2 '@eslint-types/jsdoc': 46.8.2-1 - '@eslint-types/typescript-eslint': 6.12.0 + '@eslint-types/typescript-eslint': 6.19.1 '@eslint-types/unicorn': 49.0.0 - '@stylistic/eslint-plugin': 1.5.1(eslint@8.55.0)(typescript@5.3.3) - '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0)(typescript@5.3.3) - '@typescript-eslint/parser': 6.14.0(eslint@8.55.0)(typescript@5.3.3) - eslint: 8.55.0 + '@stylistic/eslint-plugin': 1.5.4(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/eslint-plugin': 6.20.0(@typescript-eslint/parser@6.20.0)(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.20.0(eslint@8.56.0)(typescript@5.3.3) + eslint: 8.56.0 eslint-config-flat-gitignore: 0.1.2 - eslint-plugin-antfu: 1.0.13(eslint@8.55.0) - eslint-plugin-eslint-comments: 3.2.0(eslint@8.55.0) - eslint-plugin-i: 2.29.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0) - eslint-plugin-jsdoc: 46.9.0(eslint@8.55.0) - eslint-plugin-jsonc: 2.10.0(eslint@8.55.0) - eslint-plugin-markdown: 3.0.1(eslint@8.55.0) - eslint-plugin-n: 16.4.0(eslint@8.55.0) + eslint-plugin-antfu: 1.0.13(eslint@8.56.0) + eslint-plugin-eslint-comments: 3.2.0(eslint@8.56.0) + eslint-plugin-i: 2.29.1(@typescript-eslint/parser@6.20.0)(eslint@8.56.0) + eslint-plugin-jsdoc: 46.10.1(eslint@8.56.0) + eslint-plugin-jsonc: 2.13.0(eslint@8.56.0) + eslint-plugin-markdown: 3.0.1(eslint@8.56.0) + eslint-plugin-n: 16.6.2(eslint@8.56.0) eslint-plugin-no-only-tests: 3.1.0 - eslint-plugin-perfectionist: 2.5.0(eslint@8.55.0)(typescript@5.3.3)(vue-eslint-parser@9.3.2) - eslint-plugin-unicorn: 49.0.0(eslint@8.55.0) - eslint-plugin-unused-imports: 3.0.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.55.0) - eslint-plugin-vitest: 0.3.15(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.55.0)(typescript@5.3.3) - eslint-plugin-vue: 9.19.2(eslint@8.55.0) - eslint-plugin-yml: 1.10.0(eslint@8.55.0) + eslint-plugin-perfectionist: 2.5.0(eslint@8.56.0)(typescript@5.3.3)(vue-eslint-parser@9.4.2) + eslint-plugin-unicorn: 49.0.0(eslint@8.56.0) + eslint-plugin-unused-imports: 3.0.0(@typescript-eslint/eslint-plugin@6.20.0)(eslint@8.56.0) + eslint-plugin-vitest: 0.3.21(@typescript-eslint/eslint-plugin@6.20.0)(eslint@8.56.0)(typescript@5.3.3) + eslint-plugin-vue: 9.21.1(eslint@8.56.0) + eslint-plugin-yml: 1.12.2(eslint@8.56.0) execa: 8.0.1 globals: 13.24.0 jsonc-eslint-parser: 2.4.0 @@ -177,7 +177,7 @@ packages: parse-gitignore: 2.0.0 picocolors: 1.0.0 prompts: 2.4.2 - vue-eslint-parser: 9.3.2(eslint@8.55.0) + vue-eslint-parser: 9.4.2(eslint@8.56.0) yaml-eslint-parser: 1.2.2 yargs: 17.7.2 transitivePeerDependencies: @@ -238,30 +238,30 @@ packages: js-tokens: 4.0.0 dev: true - /@babel/parser@7.23.6: - resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} + /@babel/parser@7.23.9: + resolution: {integrity: sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.23.9 - /@babel/runtime@7.23.6: - resolution: {integrity: sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==} + /@babel/runtime@7.23.9: + resolution: {integrity: sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==} engines: {node: '>=6.9.0'} dependencies: - regenerator-runtime: 0.14.0 + regenerator-runtime: 0.14.1 dev: true - /@babel/types@7.23.6: - resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} + /@babel/types@7.23.9: + resolution: {integrity: sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-string-parser': 7.23.4 '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 - /@cloudinary/html@1.11.2: - resolution: {integrity: sha512-IibBZliI7MOK3dxvz0WlsEyTIsqZhY3SiCBQM0CNwCKxn3N1TO8OgetfU26Now1lJbdoF5JQ8S7Cn6ZWNuU1KA==} + /@cloudinary/html@1.12.0: + resolution: {integrity: sha512-WwmB1de69uLYO3BWZjaNbY94EFE5KMRaNSFBjckC4gL77Je/EoVNGOi7qpUYg0sbnQ4hCEp61//yghDh3JKtIg==} dependencies: '@types/lodash.clonedeep': 4.5.9 '@types/lodash.debounce': 4.0.9 @@ -271,22 +271,22 @@ packages: typescript: 4.9.5 dev: false - /@cloudinary/transformation-builder-sdk@1.9.0: - resolution: {integrity: sha512-19ZV3r2dE2mYMZTN/ytP7p7hmqiD7PC6EoWdQwJByabN4JXtNwgotElHYC509/eD7j5xJajghgHiIXTonrgMhQ==} + /@cloudinary/transformation-builder-sdk@1.10.1: + resolution: {integrity: sha512-UUb1wS/eWCf4YBThGszoBBzH6kP+frdd5JeJkF0/SOwbX3tkcrdzxD+Srn5GXPCqzf6Gw1nrGrv/3U9hiZP55A==} dependencies: - '@cloudinary/url-gen': 1.14.0 + '@cloudinary/url-gen': 1.16.0 dev: false - /@cloudinary/url-gen@1.14.0: - resolution: {integrity: sha512-XbG8QgD5fkTUO/YYUWftfz3sUpKzRZJkXhp6xLSxmK/36iyMy2wA4SF5FLCOnv6fLLUneQzXbc4OAwaDM0EWCQ==} + /@cloudinary/url-gen@1.16.0: + resolution: {integrity: sha512-0hbxLuoTGgd555LLZKf8Ut5ey3lIaRTyvtvqD99rLeKUsbq8vrdFoSSwIP+se8pglO5ZSz6y8x6Iu5ddY3wyMw==} dependencies: - '@cloudinary/transformation-builder-sdk': 1.9.0 + '@cloudinary/transformation-builder-sdk': 1.10.1 dev: false - /@cloudinary/vue@1.11.2: - resolution: {integrity: sha512-zxzpLca0qbpacIb+6rAZ2fKCJapSk5TDIVoewh14E2gH4WrJzI70+r/cNRpKsh1UKHdA3v90pApT1lLh/OAGDQ==} + /@cloudinary/vue@1.12.0: + resolution: {integrity: sha512-lFkXycngFKniyRpQbqLiF/j/RWl+SJGbgz8pPWhq0WkAN6U2rDfUeYHau6f9ob21MGG7QwLnL5BgDwt94mGaqw==} dependencies: - '@cloudinary/html': 1.11.2 + '@cloudinary/html': 1.12.0 dev: false /@es-joy/jsdoccomment@0.41.0: @@ -298,8 +298,17 @@ packages: jsdoc-type-pratt-parser: 4.0.0 dev: true - /@esbuild/android-arm64@0.18.20: - resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + /@esbuild/aix-ppc64@0.19.12: + resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm64@0.19.12: + resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -307,8 +316,8 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.18.20: - resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + /@esbuild/android-arm@0.19.12: + resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -316,8 +325,8 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.18.20: - resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + /@esbuild/android-x64@0.19.12: + resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -325,8 +334,8 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.18.20: - resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + /@esbuild/darwin-arm64@0.19.12: + resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -334,8 +343,8 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.18.20: - resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + /@esbuild/darwin-x64@0.19.12: + resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -343,8 +352,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.18.20: - resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + /@esbuild/freebsd-arm64@0.19.12: + resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -352,8 +361,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.18.20: - resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + /@esbuild/freebsd-x64@0.19.12: + resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -361,8 +370,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.18.20: - resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + /@esbuild/linux-arm64@0.19.12: + resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -370,8 +379,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.18.20: - resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + /@esbuild/linux-arm@0.19.12: + resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -379,8 +388,8 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.18.20: - resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + /@esbuild/linux-ia32@0.19.12: + resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -388,8 +397,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.18.20: - resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} + /@esbuild/linux-loong64@0.19.12: + resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -397,8 +406,8 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.18.20: - resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + /@esbuild/linux-mips64el@0.19.12: + resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -406,8 +415,8 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.18.20: - resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + /@esbuild/linux-ppc64@0.19.12: + resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -415,8 +424,8 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.18.20: - resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + /@esbuild/linux-riscv64@0.19.12: + resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -424,8 +433,8 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.18.20: - resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + /@esbuild/linux-s390x@0.19.12: + resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -433,8 +442,8 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.18.20: - resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + /@esbuild/linux-x64@0.19.12: + resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -442,8 +451,8 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.18.20: - resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + /@esbuild/netbsd-x64@0.19.12: + resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -451,8 +460,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.18.20: - resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + /@esbuild/openbsd-x64@0.19.12: + resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -460,8 +469,8 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.18.20: - resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + /@esbuild/sunos-x64@0.19.12: + resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -469,8 +478,8 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.18.20: - resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + /@esbuild/win32-arm64@0.19.12: + resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -478,8 +487,8 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.18.20: - resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + /@esbuild/win32-ia32@0.19.12: + resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -487,8 +496,8 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.18.20: - resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} + /@esbuild/win32-x64@0.19.12: + resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -496,13 +505,13 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.55.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.55.0 + eslint: 8.56.0 eslint-visitor-keys: 3.4.3 dev: true @@ -515,8 +524,8 @@ packages: resolution: {integrity: sha512-FwD7V0xX0jyaqj8Ul5ZY+TAAPohDfVqtbuXJNHb+OIv1aTIqZi5+Zn3F2UwQ5O3BnQd2mTduyK0+HjGx3/AMFg==} dev: true - /@eslint-types/typescript-eslint@6.12.0: - resolution: {integrity: sha512-N8cbOYjyFl2BFgDhDgHhTGpgiMkFg0CoITG5hdBm9ZGmcEgUvFBnHvHG7qJl3qVEmFnoKUdfSAcr7MRb2/Jxvw==} + /@eslint-types/typescript-eslint@6.19.1: + resolution: {integrity: sha512-X0farz1+psE6Qfx6+ISQQ/J3ZetKlUeuTIN9Zt/agx4UXrgK6daH/n9ba776JxysK6YJCRaEHng/bcQQUm+BsA==} dev: true /@eslint-types/unicorn@49.0.0: @@ -531,7 +540,7 @@ packages: debug: 4.3.4 espree: 9.6.1 globals: 13.24.0 - ignore: 5.3.0 + ignore: 5.3.1 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -540,43 +549,44 @@ packages: - supports-color dev: true - /@eslint/js@8.55.0: - resolution: {integrity: sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==} + /@eslint/js@8.56.0: + resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@floating-ui/core@1.5.2: - resolution: {integrity: sha512-Ii3MrfY/GAIN3OhXNzpCKaLxHQfJF9qvwq/kEJYdqDxeIHa01K8sldugal6TmeeXl+WMvhv9cnVzUTaFFJF09A==} + /@floating-ui/core@1.6.0: + resolution: {integrity: sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==} dependencies: - '@floating-ui/utils': 0.1.6 + '@floating-ui/utils': 0.2.1 dev: false - /@floating-ui/dom@1.5.3: - resolution: {integrity: sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==} + /@floating-ui/dom@1.6.1: + resolution: {integrity: sha512-iA8qE43/H5iGozC3W0YSnVSW42Vh522yyM1gj+BqRwVsTNOyr231PsXDaV04yT39PsO0QL2QpbI/M0ZaLUQgRQ==} dependencies: - '@floating-ui/core': 1.5.2 - '@floating-ui/utils': 0.1.6 + '@floating-ui/core': 1.6.0 + '@floating-ui/utils': 0.2.1 dev: false - /@floating-ui/utils@0.1.6: - resolution: {integrity: sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==} + /@floating-ui/utils@0.2.1: + resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==} dev: false - /@floating-ui/vue@1.0.2(vue@3.3.11): - resolution: {integrity: sha512-sImlAl9mAoCKZLNlwWz2P2ZMJIDlOEDXrRD6aD2sIHAka1LPC+nWtB+D3lPe7IE7FGWSbwBPTnlSdlABa3Fr0A==} + /@floating-ui/vue@1.0.6(vue@3.4.15): + resolution: {integrity: sha512-EdrOljjkpkkqZnrpqUcPoz9NvHxuTjUtSInh6GMv3+Mcy+giY2cE2pHh9rpacRcZ2eMSCxel9jWkWXTjLmY55w==} dependencies: - '@floating-ui/dom': 1.5.3 - vue-demi: 0.14.6(vue@3.3.11) + '@floating-ui/dom': 1.6.1 + '@floating-ui/utils': 0.2.1 + vue-demi: 0.14.7(vue@3.4.15) transitivePeerDependencies: - '@vue/composition-api' - vue dev: false - /@humanwhocodes/config-array@0.11.13: - resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} + /@humanwhocodes/config-array@0.11.14: + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} dependencies: - '@humanwhocodes/object-schema': 2.0.1 + '@humanwhocodes/object-schema': 2.0.2 debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: @@ -588,12 +598,12 @@ packages: engines: {node: '>=12.22'} dev: true - /@humanwhocodes/object-schema@2.0.1: - resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} + /@humanwhocodes/object-schema@2.0.2: + resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} dev: true - /@iconify-json/bi@1.1.22: - resolution: {integrity: sha512-6hg+xd6PW1TVm6bj4SIpWEyIk67O7Ms8NPBSOp3p0hUdL4AVmY4iYEh3Fst33sSI0yblPacfa2zcpP8WCJ/h3A==} + /@iconify-json/bi@1.1.23: + resolution: {integrity: sha512-1te+g9ZzI+PU1Lv6Xerd3XPXf4DE6g3TvDL2buIopTAfrauPHyXCHPFQMrzoQVNrVPCpN3rv3vBtJMPyBwJ9IA==} dependencies: '@iconify/types': 2.0.0 dev: true @@ -602,21 +612,22 @@ packages: resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} dev: true - /@iconify/utils@2.1.12: - resolution: {integrity: sha512-7vf3Uk6H7TKX4QMs2gbg5KR1X9J0NJzKSRNWhMZ+PWN92l0t6Q3tj2ZxLDG07rC3ppWBtTtA4FPmkQphuEmdsg==} + /@iconify/utils@2.1.22: + resolution: {integrity: sha512-6UHVzTVXmvO8uS6xFF+L/QTSpTzA/JZxtgU+KYGFyDYMEObZ1bu/b5l+zNJjHy+0leWjHI+C0pXlzGvv3oXZMA==} dependencies: '@antfu/install-pkg': 0.1.1 '@antfu/utils': 0.7.7 '@iconify/types': 2.0.0 debug: 4.3.4 kolorist: 1.8.0 - local-pkg: 0.4.3 + local-pkg: 0.5.0 + mlly: 1.5.0 transitivePeerDependencies: - supports-color dev: true - /@intlify/bundle-utils@7.4.0(vue-i18n@9.8.0): - resolution: {integrity: sha512-AQfjBe2HUxzyN8ignIk3WhhSuVcSuirgzOzkd17nb337rCbI4Gv/t1R60UUyIqFoFdviLb/wLcDUzTD/xXjv9w==} + /@intlify/bundle-utils@7.5.0(vue-i18n@9.9.1): + resolution: {integrity: sha512-6DymqusddBQ8kVtVBsVFFF7arNfIhuLacOmmsqayT2vl427j9m0VX12mMC+cgoVIodSpRfzYPaPTdPuJq7mK0Q==} engines: {node: '>= 14.16'} peerDependencies: petite-vue-i18n: '*' @@ -627,39 +638,39 @@ packages: vue-i18n: optional: true dependencies: - '@intlify/message-compiler': 9.8.0 - '@intlify/shared': 9.8.0 - acorn: 8.11.2 + '@intlify/message-compiler': 9.9.1 + '@intlify/shared': 9.9.1 + acorn: 8.11.3 escodegen: 2.1.0 estree-walker: 2.0.2 jsonc-eslint-parser: 2.4.0 - magic-string: 0.30.5 - mlly: 1.4.2 + magic-string: 0.30.6 + mlly: 1.5.0 source-map-js: 1.0.2 - vue-i18n: 9.8.0(vue@3.3.11) + vue-i18n: 9.9.1(vue@3.4.15) yaml-eslint-parser: 1.2.2 dev: true - /@intlify/core-base@9.8.0: - resolution: {integrity: sha512-UxaSZVZ1DwqC/CltUZrWZNaWNhfmKtfyV4BJSt/Zt4Or/fZs1iFj0B+OekYk1+MRHfIOe3+x00uXGQI4PbO/9g==} + /@intlify/core-base@9.9.1: + resolution: {integrity: sha512-qsV15dg7jNX2faBRyKMgZS8UcFJViWEUPLdzZ9UR0kQZpFVeIpc0AG7ZOfeP7pX2T9SQ5jSiorq/tii9nkkafA==} engines: {node: '>= 16'} dependencies: - '@intlify/message-compiler': 9.8.0 - '@intlify/shared': 9.8.0 + '@intlify/message-compiler': 9.9.1 + '@intlify/shared': 9.9.1 - /@intlify/message-compiler@9.8.0: - resolution: {integrity: sha512-McnYWhcoYmDJvssVu6QGR0shqlkJuL1HHdi5lK7fNqvQqRYaQ4lSLjYmZxwc8tRNMdIe9/KUKfyPxU9M6yCtNQ==} + /@intlify/message-compiler@9.9.1: + resolution: {integrity: sha512-zTvP6X6HeumHOXuAE1CMMsV6tTX+opKMOxO1OHTCg5N5Sm/F7d8o2jdT6W6L5oHUsJ/vvkGefHIs7Q3hfowmsA==} engines: {node: '>= 16'} dependencies: - '@intlify/shared': 9.8.0 + '@intlify/shared': 9.9.1 source-map-js: 1.0.2 - /@intlify/shared@9.8.0: - resolution: {integrity: sha512-TmgR0RCLjzrSo+W3wT0ALf9851iFMlVI9EYNGeWvZFUQTAJx0bvfsMlPdgVtV1tDNRiAfhkFsMKu6jtUY1ZLKQ==} + /@intlify/shared@9.9.1: + resolution: {integrity: sha512-b3Pta1nwkz5rGq434v0psHwEwHGy1pYCttfcM22IE//K9owbpkEvFptx9VcuRAxjQdrO2If249cmDDjBu5wMDA==} engines: {node: '>= 16'} - /@intlify/unplugin-vue-i18n@1.5.0(vue-i18n@9.8.0): - resolution: {integrity: sha512-jW0MCCdwxybxcwjEfCunAcKjVoxyO3i+cnLL6v+MNGRLUHqrpELF6zQAJUhgAK2afhY7mCliy8RxTFWKdXm26w==} + /@intlify/unplugin-vue-i18n@1.6.0(vue-i18n@9.9.1): + resolution: {integrity: sha512-IGeFNWxdEvB12E/3Y/+nmIsGeTg5okPsK1XEtUUD/DdkHbVqUbJucMpHKeHF8Px55Qca551pQCs/g+VjNUt6KA==} engines: {node: '>= 14.16'} peerDependencies: petite-vue-i18n: '*' @@ -673,19 +684,19 @@ packages: vue-i18n-bridge: optional: true dependencies: - '@intlify/bundle-utils': 7.4.0(vue-i18n@9.8.0) - '@intlify/shared': 9.8.0 + '@intlify/bundle-utils': 7.5.0(vue-i18n@9.9.1) + '@intlify/shared': 9.9.1 '@rollup/pluginutils': 5.1.0 - '@vue/compiler-sfc': 3.3.11 + '@vue/compiler-sfc': 3.4.15 debug: 4.3.4 fast-glob: 3.3.2 js-yaml: 4.1.0 json5: 2.2.3 - pathe: 1.1.1 + pathe: 1.1.2 picocolors: 1.0.0 source-map-js: 1.0.2 - unplugin: 1.5.1 - vue-i18n: 9.8.0(vue@3.3.11) + unplugin: 1.6.0 + vue-i18n: 9.9.1(vue@3.4.15) transitivePeerDependencies: - rollup - supports-color @@ -712,7 +723,7 @@ packages: engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 + fastq: 1.17.0 dev: true /@popperjs/core@2.11.8: @@ -741,67 +752,175 @@ packages: picomatch: 2.3.1 dev: true - /@stylistic/eslint-plugin-js@1.5.1(eslint@8.55.0): - resolution: {integrity: sha512-iZF0rF+uOhAmOJYOJx1Yvmm3CZ1uz9n0SRd9dpBYHA3QAvfABUORh9LADWwZCigjHJkp2QbCZelGFJGwGz7Siw==} + /@rollup/rollup-android-arm-eabi@4.9.6: + resolution: {integrity: sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg==} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-android-arm64@4.9.6: + resolution: {integrity: sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw==} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-arm64@4.9.6: + resolution: {integrity: sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-x64@4.9.6: + resolution: {integrity: sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm-gnueabihf@4.9.6: + resolution: {integrity: sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-gnu@4.9.6: + resolution: {integrity: sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-musl@4.9.6: + resolution: {integrity: sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-riscv64-gnu@4.9.6: + resolution: {integrity: sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA==} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-gnu@4.9.6: + resolution: {integrity: sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-musl@4.9.6: + resolution: {integrity: sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-arm64-msvc@4.9.6: + resolution: {integrity: sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-ia32-msvc@4.9.6: + resolution: {integrity: sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ==} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-x64-msvc@4.9.6: + resolution: {integrity: sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@socket.io/component-emitter@3.1.0: + resolution: {integrity: sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==} + dev: false + + /@stylistic/eslint-plugin-js@1.5.4(eslint@8.56.0): + resolution: {integrity: sha512-3ctWb3NvJNV1MsrZN91cYp2EGInLPSoZKphXIbIRx/zjZxKwLDr9z4LMOWtqjq14li/OgqUUcMq5pj8fgbLoTw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: '>=8.40.0' dependencies: - acorn: 8.11.2 + acorn: 8.11.3 escape-string-regexp: 4.0.0 - eslint: 8.55.0 + eslint: 8.56.0 eslint-visitor-keys: 3.4.3 espree: 9.6.1 dev: true - /@stylistic/eslint-plugin-jsx@1.5.1(eslint@8.55.0): - resolution: {integrity: sha512-JuX+jsbVdpZ6EZXkbxYr9ERcGc0ndSMFgOuwEPHhOWPZ+7F8JP/nzpBjrRf7dUPMX7ezTYLZ2a3KRGRNme6rWQ==} + /@stylistic/eslint-plugin-jsx@1.5.4(eslint@8.56.0): + resolution: {integrity: sha512-JUfrpCkeBCqt1IZ4QsP4WgxGza4PhK4LPbc0VnCjHKygl+rgqoDAovqOuzFJ49wJ4Ix3r6OIHFuwiBGswZEVvg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: '>=8.40.0' dependencies: - '@stylistic/eslint-plugin-js': 1.5.1(eslint@8.55.0) - eslint: 8.55.0 + '@stylistic/eslint-plugin-js': 1.5.4(eslint@8.56.0) + eslint: 8.56.0 estraverse: 5.3.0 dev: true - /@stylistic/eslint-plugin-plus@1.5.1(eslint@8.55.0)(typescript@5.3.3): - resolution: {integrity: sha512-yxkFHsUgoqEf/j1Og0FGkpEmeQoqx0CMmtgoyZGr34hka0ElCy9fRpsFkLcwx60SfiHXspbvs2YUMXiWIffnjg==} + /@stylistic/eslint-plugin-plus@1.5.4(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-dI0Cs5vYX/0uMhQDY+NK0cKQ0Pe9B6jWYxd0Ndud+mNloDaVLrsmJocK4zn+YfhGEDs1E4Nk5uAPZEumIpDuSg==} peerDependencies: eslint: '*' dependencies: - '@typescript-eslint/utils': 6.14.0(eslint@8.55.0)(typescript@5.3.3) - eslint: 8.55.0 + '@typescript-eslint/utils': 6.20.0(eslint@8.56.0)(typescript@5.3.3) + eslint: 8.56.0 transitivePeerDependencies: - supports-color - typescript dev: true - /@stylistic/eslint-plugin-ts@1.5.1(eslint@8.55.0)(typescript@5.3.3): - resolution: {integrity: sha512-oXM1V7Jp8G9+udxQTy+Igo79LR2e5HXiWqlA/3v+/PAqWxniR9nJqJSBjtQKJTPsGplDqn/ASpHUOETP4EI/4A==} + /@stylistic/eslint-plugin-ts@1.5.4(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-NZDFVIlVNjuPvhT+0Cidm5IS3emtx338xbJTqs2xfOVRDGTpYwRHhNVEGa1rFOpYHmv0sAj6+OXbMDn7ul0K/g==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: '>=8.40.0' dependencies: - '@stylistic/eslint-plugin-js': 1.5.1(eslint@8.55.0) - '@typescript-eslint/utils': 6.14.0(eslint@8.55.0)(typescript@5.3.3) - eslint: 8.55.0 + '@stylistic/eslint-plugin-js': 1.5.4(eslint@8.56.0) + '@typescript-eslint/utils': 6.20.0(eslint@8.56.0)(typescript@5.3.3) + eslint: 8.56.0 transitivePeerDependencies: - supports-color - typescript dev: true - /@stylistic/eslint-plugin@1.5.1(eslint@8.55.0)(typescript@5.3.3): - resolution: {integrity: sha512-y7ynUMh5Hq1MhYApAccl1iuQem5Sf2JSEIjV/qsBfmW1WfRDs74V+0kLkcOn1Y600W3t8orIFrrEuWmJSetAgw==} + /@stylistic/eslint-plugin@1.5.4(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-zWPXr+O67GC9KDAFkbL1U9UVqE6Iv69YMKhkIECCmE0GvClUJwdfsimm4XebEDondV7kfjMrTDZaYfrI5aS0Jg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: '>=8.40.0' dependencies: - '@stylistic/eslint-plugin-js': 1.5.1(eslint@8.55.0) - '@stylistic/eslint-plugin-jsx': 1.5.1(eslint@8.55.0) - '@stylistic/eslint-plugin-plus': 1.5.1(eslint@8.55.0)(typescript@5.3.3) - '@stylistic/eslint-plugin-ts': 1.5.1(eslint@8.55.0)(typescript@5.3.3) - eslint: 8.55.0 + '@stylistic/eslint-plugin-js': 1.5.4(eslint@8.56.0) + '@stylistic/eslint-plugin-jsx': 1.5.4(eslint@8.56.0) + '@stylistic/eslint-plugin-plus': 1.5.4(eslint@8.56.0)(typescript@5.3.3) + '@stylistic/eslint-plugin-ts': 1.5.4(eslint@8.56.0)(typescript@5.3.3) + eslint: 8.56.0 transitivePeerDependencies: - supports-color - typescript @@ -813,8 +932,8 @@ packages: '@types/ms': 0.7.34 dev: true - /@types/eslint@8.44.8: - resolution: {integrity: sha512-4K8GavROwhrYl2QXDXm0Rv9epkA8GBFu0EI+XrrnnuCl7u8CWBRusX7fXJfanhZTDWSAL24gDI/UqXyUM0Injw==} + /@types/eslint@8.56.2: + resolution: {integrity: sha512-uQDwm1wFHmbBbCZCqAlq6Do9LYwByNZHWzXppSnay9SuwJ+VRbjkbLABer54kcPnMSlG6Fdiy2yaFXm/z9Z5gw==} dependencies: '@types/estree': 1.0.5 '@types/json-schema': 7.0.15 @@ -882,8 +1001,8 @@ packages: resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} dev: false - /@typescript-eslint/eslint-plugin@6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0)(typescript@5.3.3): - resolution: {integrity: sha512-1ZJBykBCXaSHG94vMMKmiHoL0MhNHKSVlcHVYZNw+BKxufhqQVTOawNpwwI1P5nIFZ/4jLVop0mcY6mJJDFNaw==} + /@typescript-eslint/eslint-plugin@6.20.0(@typescript-eslint/parser@6.20.0)(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-fTwGQUnjhoYHeSF6m5pWNkzmDDdsKELYrOBxhjMrofPqCkoC2k3B2wvGHFxa1CTIqkEn88nlW1HVMztjo2K8Hg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -894,15 +1013,15 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.14.0(eslint@8.55.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 6.14.0 - '@typescript-eslint/type-utils': 6.14.0(eslint@8.55.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.14.0(eslint@8.55.0)(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.14.0 + '@typescript-eslint/parser': 6.20.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/scope-manager': 6.20.0 + '@typescript-eslint/type-utils': 6.20.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/utils': 6.20.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.20.0 debug: 4.3.4 - eslint: 8.55.0 + eslint: 8.56.0 graphemer: 1.4.0 - ignore: 5.3.0 + ignore: 5.3.1 natural-compare: 1.4.0 semver: 7.5.4 ts-api-utils: 1.0.3(typescript@5.3.3) @@ -911,8 +1030,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.3.3): - resolution: {integrity: sha512-QjToC14CKacd4Pa7JK4GeB/vHmWFJckec49FR4hmIRf97+KXole0T97xxu9IFiPxVQ1DBWrQ5wreLwAGwWAVQA==} + /@typescript-eslint/parser@6.20.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-bYerPDF/H5v6V76MdMYhjwmwgMA+jlPVqjSDq2cRqMi8bP5sR3Z+RLOiOMad3nsnmDVmn2gAFCyNgh/dIrfP/w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -921,27 +1040,27 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.14.0 - '@typescript-eslint/types': 6.14.0 - '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.14.0 + '@typescript-eslint/scope-manager': 6.20.0 + '@typescript-eslint/types': 6.20.0 + '@typescript-eslint/typescript-estree': 6.20.0(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.20.0 debug: 4.3.4 - eslint: 8.55.0 + eslint: 8.56.0 typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager@6.14.0: - resolution: {integrity: sha512-VT7CFWHbZipPncAZtuALr9y3EuzY1b1t1AEkIq2bTXUPKw+pHoXflGNG5L+Gv6nKul1cz1VH8fz16IThIU0tdg==} + /@typescript-eslint/scope-manager@6.20.0: + resolution: {integrity: sha512-p4rvHQRDTI1tGGMDFQm+GtxP1ZHyAh64WANVoyEcNMpaTFn3ox/3CcgtIlELnRfKzSs/DwYlDccJEtr3O6qBvA==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.14.0 - '@typescript-eslint/visitor-keys': 6.14.0 + '@typescript-eslint/types': 6.20.0 + '@typescript-eslint/visitor-keys': 6.20.0 dev: true - /@typescript-eslint/type-utils@6.14.0(eslint@8.55.0)(typescript@5.3.3): - resolution: {integrity: sha512-x6OC9Q7HfYKqjnuNu5a7kffIYs3No30isapRBJl1iCHLitD8O0lFbRcVGiOcuyN837fqXzPZ1NS10maQzZMKqw==} + /@typescript-eslint/type-utils@6.20.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-qnSobiJQb1F5JjN0YDRPHruQTrX7ICsmltXhkV536mp4idGAYrIyr47zF/JmkJtEcAVnIz4gUYJ7gOZa6SmN4g==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -950,23 +1069,23 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) - '@typescript-eslint/utils': 6.14.0(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.20.0(typescript@5.3.3) + '@typescript-eslint/utils': 6.20.0(eslint@8.56.0)(typescript@5.3.3) debug: 4.3.4 - eslint: 8.55.0 + eslint: 8.56.0 ts-api-utils: 1.0.3(typescript@5.3.3) typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@6.14.0: - resolution: {integrity: sha512-uty9H2K4Xs8E47z3SnXEPRNDfsis8JO27amp2GNCnzGETEW3yTqEIVg5+AI7U276oGF/tw6ZA+UesxeQ104ceA==} + /@typescript-eslint/types@6.20.0: + resolution: {integrity: sha512-MM9mfZMAhiN4cOEcUOEx+0HmuaW3WBfukBZPCfwSqFnQy0grXYtngKCqpQN339X3RrwtzspWJrpbrupKYUSBXQ==} engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@6.14.0(typescript@5.3.3): - resolution: {integrity: sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw==} + /@typescript-eslint/typescript-estree@6.20.0(typescript@5.3.3): + resolution: {integrity: sha512-RnRya9q5m6YYSpBN7IzKu9FmLcYtErkDkc8/dKv81I9QiLLtVBHrjz+Ev/crAqgMNW2FCsoZF4g2QUylMnJz+g==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -974,11 +1093,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.14.0 - '@typescript-eslint/visitor-keys': 6.14.0 + '@typescript-eslint/types': 6.20.0 + '@typescript-eslint/visitor-keys': 6.20.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 + minimatch: 9.0.3 semver: 7.5.4 ts-api-utils: 1.0.3(typescript@5.3.3) typescript: 5.3.3 @@ -986,30 +1106,30 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@6.14.0(eslint@8.55.0)(typescript@5.3.3): - resolution: {integrity: sha512-XwRTnbvRr7Ey9a1NT6jqdKX8y/atWG+8fAIu3z73HSP8h06i3r/ClMhmaF/RGWGW1tHJEwij1uEg2GbEmPYvYg==} + /@typescript-eslint/utils@6.20.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-/EKuw+kRu2vAqCoDwDCBtDRU6CTKbUmwwI7SH7AashZ+W+7o8eiyy6V2cdOqN49KsTcASWsC5QeghYuRDTyOOg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 6.14.0 - '@typescript-eslint/types': 6.14.0 - '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.3.3) - eslint: 8.55.0 + '@typescript-eslint/scope-manager': 6.20.0 + '@typescript-eslint/types': 6.20.0 + '@typescript-eslint/typescript-estree': 6.20.0(typescript@5.3.3) + eslint: 8.56.0 semver: 7.5.4 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys@6.14.0: - resolution: {integrity: sha512-fB5cw6GRhJUz03MrROVuj5Zm/Q+XWlVdIsFj+Zb1Hvqouc8t+XP2H5y53QYU/MGtd2dPg6/vJJlhoX3xc2ehfw==} + /@typescript-eslint/visitor-keys@6.20.0: + resolution: {integrity: sha512-E8Cp98kRe4gKHjJD4NExXKz/zOJ1A2hhZc+IMVD6i7w4yjIvh6VyuRI0gRtxAsXtoC35uGMaQ9rjI2zJaXDEAw==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/types': 6.20.0 eslint-visitor-keys: 3.4.3 dev: true @@ -1017,15 +1137,15 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /@vitejs/plugin-vue@4.5.2(vite@4.5.1)(vue@3.3.11): - resolution: {integrity: sha512-UGR3DlzLi/SaVBPX0cnSyE37vqxU3O6chn8l0HJNzQzDia6/Au2A4xKv+iIJW8w2daf80G7TYHhi1pAUjdZ0bQ==} - engines: {node: ^14.18.0 || >=16.0.0} + /@vitejs/plugin-vue@5.0.3(vite@5.0.12)(vue@3.4.15): + resolution: {integrity: sha512-b8S5dVS40rgHdDrw+DQi/xOM9ed+kSRZzfm1T74bMmBDCd8XO87NKlFYInzCtwvtWwXZvo1QxE2OSspTATWrbA==} + engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: - vite: ^4.0.0 || ^5.0.0 + vite: ^5.0.0 vue: ^3.2.25 dependencies: - vite: 4.5.1(sass@1.69.5) - vue: 3.3.11(typescript@5.3.3) + vite: 5.0.12(sass@1.70.0) + vue: 3.4.15(typescript@5.3.3) dev: true /@volar/language-core@1.11.1: @@ -1047,45 +1167,45 @@ packages: path-browserify: 1.0.1 dev: true - /@vue/compiler-core@3.3.11: - resolution: {integrity: sha512-h97/TGWBilnLuRaj58sxNrsUU66fwdRKLOLQ9N/5iNDfp+DZhYH9Obhe0bXxhedl8fjAgpRANpiZfbgWyruQ0w==} + /@vue/compiler-core@3.4.15: + resolution: {integrity: sha512-XcJQVOaxTKCnth1vCxEChteGuwG6wqnUHxAm1DO3gCz0+uXKaJNx8/digSz4dLALCy8n2lKq24jSUs8segoqIw==} dependencies: - '@babel/parser': 7.23.6 - '@vue/shared': 3.3.11 + '@babel/parser': 7.23.9 + '@vue/shared': 3.4.15 + entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.0.2 - /@vue/compiler-dom@3.3.11: - resolution: {integrity: sha512-zoAiUIqSKqAJ81WhfPXYmFGwDRuO+loqLxvXmfUdR5fOitPoUiIeFI9cTTyv9MU5O1+ZZglJVTusWzy+wfk5hw==} + /@vue/compiler-dom@3.4.15: + resolution: {integrity: sha512-wox0aasVV74zoXyblarOM3AZQz/Z+OunYcIHe1OsGclCHt8RsRm04DObjefaI82u6XDzv+qGWZ24tIsRAIi5MQ==} dependencies: - '@vue/compiler-core': 3.3.11 - '@vue/shared': 3.3.11 + '@vue/compiler-core': 3.4.15 + '@vue/shared': 3.4.15 - /@vue/compiler-sfc@3.3.11: - resolution: {integrity: sha512-U4iqPlHO0KQeK1mrsxCN0vZzw43/lL8POxgpzcJweopmqtoYy9nljJzWDIQS3EfjiYhfdtdk9Gtgz7MRXnz3GA==} + /@vue/compiler-sfc@3.4.15: + resolution: {integrity: sha512-LCn5M6QpkpFsh3GQvs2mJUOAlBQcCco8D60Bcqmf3O3w5a+KWS5GvYbrrJBkgvL1BDnTp+e8q0lXCLgHhKguBA==} dependencies: - '@babel/parser': 7.23.6 - '@vue/compiler-core': 3.3.11 - '@vue/compiler-dom': 3.3.11 - '@vue/compiler-ssr': 3.3.11 - '@vue/reactivity-transform': 3.3.11 - '@vue/shared': 3.3.11 + '@babel/parser': 7.23.9 + '@vue/compiler-core': 3.4.15 + '@vue/compiler-dom': 3.4.15 + '@vue/compiler-ssr': 3.4.15 + '@vue/shared': 3.4.15 estree-walker: 2.0.2 - magic-string: 0.30.5 - postcss: 8.4.32 + magic-string: 0.30.6 + postcss: 8.4.33 source-map-js: 1.0.2 - /@vue/compiler-ssr@3.3.11: - resolution: {integrity: sha512-Zd66ZwMvndxRTgVPdo+muV4Rv9n9DwQ4SSgWWKWkPFebHQfVYRrVjeygmmDmPewsHyznCNvJ2P2d6iOOhdv8Qg==} + /@vue/compiler-ssr@3.4.15: + resolution: {integrity: sha512-1jdeQyiGznr8gjFDadVmOJqZiLNSsMa5ZgqavkPZ8O2wjHv0tVuAEsw5hTdUoUW4232vpBbL/wJhzVW/JwY1Uw==} dependencies: - '@vue/compiler-dom': 3.3.11 - '@vue/shared': 3.3.11 + '@vue/compiler-dom': 3.4.15 + '@vue/shared': 3.4.15 /@vue/devtools-api@6.5.1: resolution: {integrity: sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==} - /@vue/language-core@1.8.25(typescript@5.3.3): - resolution: {integrity: sha512-NJk/5DnAZlpvXX8BdWmHI45bWGLViUaS3R/RMrmFSvFMSbJKuEODpM4kR0F0Ofv5SFzCWuNiMhxameWpVdQsnA==} + /@vue/language-core@1.8.27(typescript@5.3.3): + resolution: {integrity: sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -1094,69 +1214,60 @@ packages: dependencies: '@volar/language-core': 1.11.1 '@volar/source-map': 1.11.1 - '@vue/compiler-dom': 3.3.11 - '@vue/shared': 3.3.11 + '@vue/compiler-dom': 3.4.15 + '@vue/shared': 3.4.15 computeds: 0.0.1 minimatch: 9.0.3 muggle-string: 0.3.1 path-browserify: 1.0.1 typescript: 5.3.3 - vue-template-compiler: 2.7.15 + vue-template-compiler: 2.7.16 dev: true - /@vue/reactivity-transform@3.3.11: - resolution: {integrity: sha512-fPGjH0wqJo68A0wQ1k158utDq/cRyZNlFoxGwNScE28aUFOKFEnCBsvyD8jHn+0kd0UKVpuGuaZEQ6r9FJRqCg==} - dependencies: - '@babel/parser': 7.23.6 - '@vue/compiler-core': 3.3.11 - '@vue/shared': 3.3.11 - estree-walker: 2.0.2 - magic-string: 0.30.5 - - /@vue/reactivity@3.3.11: - resolution: {integrity: sha512-D5tcw091f0nuu+hXq5XANofD0OXnBmaRqMYl5B3fCR+mX+cXJIGNw/VNawBqkjLNWETrFW0i+xH9NvDbTPVh7g==} + /@vue/reactivity@3.4.15: + resolution: {integrity: sha512-55yJh2bsff20K5O84MxSvXKPHHt17I2EomHznvFiJCAZpJTNW8IuLj1xZWMLELRhBK3kkFV/1ErZGHJfah7i7w==} dependencies: - '@vue/shared': 3.3.11 + '@vue/shared': 3.4.15 - /@vue/runtime-core@3.3.11: - resolution: {integrity: sha512-g9ztHGwEbS5RyWaOpXuyIVFTschclnwhqEbdy5AwGhYOgc7m/q3NFwr50MirZwTTzX55JY8pSkeib9BX04NIpw==} + /@vue/runtime-core@3.4.15: + resolution: {integrity: sha512-6E3by5m6v1AkW0McCeAyhHTw+3y17YCOKG0U0HDKDscV4Hs0kgNT5G+GCHak16jKgcCDHpI9xe5NKb8sdLCLdw==} dependencies: - '@vue/reactivity': 3.3.11 - '@vue/shared': 3.3.11 + '@vue/reactivity': 3.4.15 + '@vue/shared': 3.4.15 - /@vue/runtime-dom@3.3.11: - resolution: {integrity: sha512-OlhtV1PVpbgk+I2zl+Y5rQtDNcCDs12rsRg71XwaA2/Rbllw6mBLMi57VOn8G0AjOJ4Mdb4k56V37+g8ukShpQ==} + /@vue/runtime-dom@3.4.15: + resolution: {integrity: sha512-EVW8D6vfFVq3V/yDKNPBFkZKGMFSvZrUQmx196o/v2tHKdwWdiZjYUBS+0Ez3+ohRyF8Njwy/6FH5gYJ75liUw==} dependencies: - '@vue/runtime-core': 3.3.11 - '@vue/shared': 3.3.11 + '@vue/runtime-core': 3.4.15 + '@vue/shared': 3.4.15 csstype: 3.1.3 - /@vue/server-renderer@3.3.11(vue@3.3.11): - resolution: {integrity: sha512-AIWk0VwwxCAm4wqtJyxBylRTXSy1wCLOKbWxHaHiu14wjsNYtiRCSgVuqEPVuDpErOlRdNnuRgipQfXRLjLN5A==} + /@vue/server-renderer@3.4.15(vue@3.4.15): + resolution: {integrity: sha512-3HYzaidu9cHjrT+qGUuDhFYvF/j643bHC6uUN9BgM11DVy+pM6ATsG6uPBLnkwOgs7BpJABReLmpL3ZPAsUaqw==} peerDependencies: - vue: 3.3.11 + vue: 3.4.15 dependencies: - '@vue/compiler-ssr': 3.3.11 - '@vue/shared': 3.3.11 - vue: 3.3.11(typescript@5.3.3) + '@vue/compiler-ssr': 3.4.15 + '@vue/shared': 3.4.15 + vue: 3.4.15(typescript@5.3.3) - /@vue/shared@3.3.11: - resolution: {integrity: sha512-u2G8ZQ9IhMWTMXaWqZycnK4UthG1fA238CD+DP4Dm4WJi5hdUKKLg0RMRaRpDPNMdkTwIDkp7WtD0Rd9BH9fLw==} + /@vue/shared@3.4.15: + resolution: {integrity: sha512-KzfPTxVaWfB+eGcGdbSf4CWdaXcGDqckoeXUh7SB3fZdEtzPCK2Vq9B/lRRL3yutax/LWITz+SwvgyOxz5V75g==} - /@vueuse/core@10.7.0(vue@3.3.11): - resolution: {integrity: sha512-4EUDESCHtwu44ZWK3Gc/hZUVhVo/ysvdtwocB5vcauSV4B7NiGY5972WnsojB3vRNdxvAt7kzJWE2h9h7C9d5w==} + /@vueuse/core@10.7.2(vue@3.4.15): + resolution: {integrity: sha512-AOyAL2rK0By62Hm+iqQn6Rbu8bfmbgaIMXcE3TSr7BdQ42wnSFlwIdPjInO62onYsEMK/yDMU8C6oGfDAtZ2qQ==} dependencies: '@types/web-bluetooth': 0.0.20 - '@vueuse/metadata': 10.7.0 - '@vueuse/shared': 10.7.0(vue@3.3.11) - vue-demi: 0.14.6(vue@3.3.11) + '@vueuse/metadata': 10.7.2 + '@vueuse/shared': 10.7.2(vue@3.4.15) + vue-demi: 0.14.7(vue@3.4.15) transitivePeerDependencies: - '@vue/composition-api' - vue dev: false - /@vueuse/integrations@10.7.0(async-validator@4.2.5)(axios@1.6.2)(vue@3.3.11): - resolution: {integrity: sha512-rxiMYgS+91n93qXpHZF9NbHhppWY6IJyVTDxt4acyChL0zZVx7P8FAAfpF1qVK8e4wfjerhpEiMJ0IZ1GWUZ2A==} + /@vueuse/integrations@10.7.2(async-validator@4.2.5)(axios@1.6.7)(vue@3.4.15): + resolution: {integrity: sha512-+u3RLPFedjASs5EKPc69Ge49WNgqeMfSxFn+qrQTzblPXZg6+EFzhjarS5edj2qAf6xQ93f95TUxRwKStXj/sQ==} peerDependencies: async-validator: '*' axios: '*' @@ -1196,39 +1307,39 @@ packages: universal-cookie: optional: true dependencies: - '@vueuse/core': 10.7.0(vue@3.3.11) - '@vueuse/shared': 10.7.0(vue@3.3.11) + '@vueuse/core': 10.7.2(vue@3.4.15) + '@vueuse/shared': 10.7.2(vue@3.4.15) async-validator: 4.2.5 - axios: 1.6.2 - vue-demi: 0.14.6(vue@3.3.11) + axios: 1.6.7 + vue-demi: 0.14.7(vue@3.4.15) transitivePeerDependencies: - '@vue/composition-api' - vue dev: false - /@vueuse/metadata@10.7.0: - resolution: {integrity: sha512-GlaH7tKP2iBCZ3bHNZ6b0cl9g0CJK8lttkBNUX156gWvNYhTKEtbweWLm9rxCPIiwzYcr/5xML6T8ZUEt+DkvA==} + /@vueuse/metadata@10.7.2: + resolution: {integrity: sha512-kCWPb4J2KGrwLtn1eJwaJD742u1k5h6v/St5wFe8Quih90+k2a0JP8BS4Zp34XUuJqS2AxFYMb1wjUL8HfhWsQ==} dev: false - /@vueuse/shared@10.7.0(vue@3.3.11): - resolution: {integrity: sha512-kc00uV6CiaTdc3i1CDC4a3lBxzaBE9AgYNtFN87B5OOscqeWElj/uza8qVDmk7/U8JbqoONLbtqiLJ5LGRuqlw==} + /@vueuse/shared@10.7.2(vue@3.4.15): + resolution: {integrity: sha512-qFbXoxS44pi2FkgFjPvF4h7c9oMDutpyBdcJdMYIMg9XyXli2meFMuaKn+UMgsClo//Th6+beeCgqweT/79BVA==} dependencies: - vue-demi: 0.14.6(vue@3.3.11) + vue-demi: 0.14.7(vue@3.4.15) transitivePeerDependencies: - '@vue/composition-api' - vue dev: false - /acorn-jsx@5.3.2(acorn@8.11.2): + /acorn-jsx@5.3.2(acorn@8.11.3): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.11.2 + acorn: 8.11.3 dev: true - /acorn@8.11.2: - resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} + /acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} engines: {node: '>=0.4.0'} hasBin: true dev: true @@ -1278,11 +1389,12 @@ packages: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true - /array-buffer-byte-length@1.0.0: - resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + /array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 - is-array-buffer: 3.0.2 + is-array-buffer: 3.0.4 dev: true /array-union@2.1.0: @@ -1298,27 +1410,27 @@ packages: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: false - /available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + /available-typed-arrays@1.0.6: + resolution: {integrity: sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==} engines: {node: '>= 0.4'} dev: true - /axios-cache-interceptor@1.3.2(axios@1.6.2): - resolution: {integrity: sha512-FNy4/IKvFYVswpPS09j3H9OUzcXSuxQ93wYxCKnogHbjCRE9nDQ/lukgjyuJqMIk3Yao51qQI/zPbMRNQu4JJw==} + /axios-cache-interceptor@1.5.1(axios@1.6.7): + resolution: {integrity: sha512-1p/rTi7DSqUghJ5Ck8GKNt47X6f3IB8XnJ+TM4PwIdhimmCgh0jEQiwI8mBvf2kIMIl4Kz5idwbf/ouK75nEHA==} engines: {node: '>=12'} peerDependencies: axios: ^1 dependencies: - axios: 1.6.2 + axios: 1.6.7 cache-parser: 1.2.4 fast-defer: 1.1.8 - object-code: 1.3.0 + object-code: 1.3.2 dev: false - /axios@1.6.2: - resolution: {integrity: sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==} + /axios@1.6.7: + resolution: {integrity: sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==} dependencies: - follow-redirects: 1.15.3 + follow-redirects: 1.15.5 form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -1338,14 +1450,14 @@ packages: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} dev: true - /bootstrap-vue-next@0.15.5(vue@3.3.11): + /bootstrap-vue-next@0.15.5(vue@3.4.15): resolution: {integrity: sha512-zKn0t07Jw/6LGxekm5qV/2JYDFpWJ2U9mEzt98hLIjXPdZg1qpxB7v/ElBKtHrynNfAFOJH5EF8RQxhCx2T4Ug==} peerDependencies: vue: ^3.3.8 dependencies: - '@floating-ui/vue': 1.0.2(vue@3.3.11) - '@vueuse/core': 10.7.0(vue@3.3.11) - vue: 3.3.11(typescript@5.3.3) + '@floating-ui/vue': 1.0.6(vue@3.4.15) + '@vueuse/core': 10.7.2(vue@3.4.15) + vue: 3.4.15(typescript@5.3.3) transitivePeerDependencies: - '@vue/composition-api' dev: false @@ -1397,8 +1509,8 @@ packages: resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} dependencies: function-bind: 1.1.2 - get-intrinsic: 1.2.2 - set-function-length: 1.1.1 + get-intrinsic: 1.2.3 + set-function-length: 1.2.0 dev: true /callsites@3.1.0: @@ -1550,7 +1662,7 @@ packages: resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.23.9 dev: true /dayjs@1.11.10: @@ -1582,18 +1694,17 @@ packages: optional: true dependencies: ms: 2.1.2 - dev: true /deep-equal@2.2.3: resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} engines: {node: '>= 0.4'} dependencies: - array-buffer-byte-length: 1.0.0 + array-buffer-byte-length: 1.0.1 call-bind: 1.0.5 es-get-iterator: 1.1.3 - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.3 is-arguments: 1.1.1 - is-array-buffer: 3.0.2 + is-array-buffer: 3.0.4 is-date-object: 1.0.5 is-regex: 1.1.4 is-shared-array-buffer: 1.0.2 @@ -1605,7 +1716,7 @@ packages: side-channel: 1.0.4 which-boxed-primitive: 1.0.2 which-collection: 1.0.1 - which-typed-array: 1.1.13 + which-typed-array: 1.1.14 dev: true /deep-is@0.1.4: @@ -1616,7 +1727,7 @@ packages: resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.3 gopd: 1.0.1 has-property-descriptors: 1.0.1 dev: true @@ -1642,13 +1753,6 @@ packages: path-type: 4.0.0 dev: true - /doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - dependencies: - esutils: 2.0.3 - dev: true - /doctrine@3.0.0: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} @@ -1660,17 +1764,45 @@ packages: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} dev: true + /engine.io-client@6.5.3: + resolution: {integrity: sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q==} + dependencies: + '@socket.io/component-emitter': 3.1.0 + debug: 4.3.4 + engine.io-parser: 5.2.1 + ws: 8.11.0 + xmlhttprequest-ssl: 2.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /engine.io-parser@5.2.1: + resolution: {integrity: sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==} + engines: {node: '>=10.0.0'} + dev: false + + /entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + /error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 dev: true + /es-errors@1.0.0: + resolution: {integrity: sha512-yHV74THqMJUyFKkHyN7hyENcEZM3Dj2a2IrdClY+IT4BFQHkIVwlh8s6uZfjsFydMdNHv0F5mWgAA3ajFbsvVQ==} + engines: {node: '>= 0.4'} + dev: true + /es-get-iterator@1.1.3: resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} dependencies: call-bind: 1.0.5 - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.3 has-symbols: 1.0.3 is-arguments: 1.1.1 is-map: 2.0.2 @@ -1680,34 +1812,35 @@ packages: stop-iteration-iterator: 1.0.0 dev: true - /esbuild@0.18.20: - resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + /esbuild@0.19.12: + resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': 0.18.20 - '@esbuild/android-arm64': 0.18.20 - '@esbuild/android-x64': 0.18.20 - '@esbuild/darwin-arm64': 0.18.20 - '@esbuild/darwin-x64': 0.18.20 - '@esbuild/freebsd-arm64': 0.18.20 - '@esbuild/freebsd-x64': 0.18.20 - '@esbuild/linux-arm': 0.18.20 - '@esbuild/linux-arm64': 0.18.20 - '@esbuild/linux-ia32': 0.18.20 - '@esbuild/linux-loong64': 0.18.20 - '@esbuild/linux-mips64el': 0.18.20 - '@esbuild/linux-ppc64': 0.18.20 - '@esbuild/linux-riscv64': 0.18.20 - '@esbuild/linux-s390x': 0.18.20 - '@esbuild/linux-x64': 0.18.20 - '@esbuild/netbsd-x64': 0.18.20 - '@esbuild/openbsd-x64': 0.18.20 - '@esbuild/sunos-x64': 0.18.20 - '@esbuild/win32-arm64': 0.18.20 - '@esbuild/win32-ia32': 0.18.20 - '@esbuild/win32-x64': 0.18.20 + '@esbuild/aix-ppc64': 0.19.12 + '@esbuild/android-arm': 0.19.12 + '@esbuild/android-arm64': 0.19.12 + '@esbuild/android-x64': 0.19.12 + '@esbuild/darwin-arm64': 0.19.12 + '@esbuild/darwin-x64': 0.19.12 + '@esbuild/freebsd-arm64': 0.19.12 + '@esbuild/freebsd-x64': 0.19.12 + '@esbuild/linux-arm': 0.19.12 + '@esbuild/linux-arm64': 0.19.12 + '@esbuild/linux-ia32': 0.19.12 + '@esbuild/linux-loong64': 0.19.12 + '@esbuild/linux-mips64el': 0.19.12 + '@esbuild/linux-ppc64': 0.19.12 + '@esbuild/linux-riscv64': 0.19.12 + '@esbuild/linux-s390x': 0.19.12 + '@esbuild/linux-x64': 0.19.12 + '@esbuild/netbsd-x64': 0.19.12 + '@esbuild/openbsd-x64': 0.19.12 + '@esbuild/sunos-x64': 0.19.12 + '@esbuild/win32-arm64': 0.19.12 + '@esbuild/win32-ia32': 0.19.12 + '@esbuild/win32-x64': 0.19.12 dev: true /escalade@3.1.1: @@ -1742,13 +1875,23 @@ packages: source-map: 0.6.1 dev: true - /eslint-compat-utils@0.1.2(eslint@8.55.0): + /eslint-compat-utils@0.1.2(eslint@8.56.0): resolution: {integrity: sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==} engines: {node: '>=12'} peerDependencies: eslint: '>=6.0.0' dependencies: - eslint: 8.55.0 + eslint: 8.56.0 + dev: true + + /eslint-compat-utils@0.4.1(eslint@8.56.0): + resolution: {integrity: sha512-5N7ZaJG5pZxUeNNJfUchurLVrunD1xJvyg5kYOIVF8kg1f3ajTikmAu/5fZ9w100omNPOoMjngRszh/Q/uFGMg==} + engines: {node: '>=12'} + peerDependencies: + eslint: '>=6.0.0' + dependencies: + eslint: 8.56.0 + semver: 7.5.4 dev: true /eslint-config-flat-gitignore@0.1.2: @@ -1757,13 +1900,13 @@ packages: parse-gitignore: 2.0.0 dev: true - /eslint-config-prettier@8.10.0(eslint@8.55.0): + /eslint-config-prettier@8.10.0(eslint@8.56.0): resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.55.0 + eslint: 8.56.0 dev: true /eslint-import-resolver-node@0.3.9: @@ -1776,7 +1919,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint@8.55.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.20.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -1797,60 +1940,59 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.14.0(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.20.0(eslint@8.56.0)(typescript@5.3.3) debug: 3.2.7 - eslint: 8.55.0 + eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-antfu@1.0.13(eslint@8.55.0): + /eslint-plugin-antfu@1.0.13(eslint@8.56.0): resolution: {integrity: sha512-JzWEzNWZcNK4Q4Tz4VaNELhu3VgCv3obSYxUbK1UhbDBmr2v0a7H9n9xGv5GTS4LkEo905/2Gq6y0dcoBq5FZA==} peerDependencies: eslint: '*' dependencies: - eslint: 8.55.0 + eslint: 8.56.0 dev: true - /eslint-plugin-es-x@7.5.0(eslint@8.55.0): + /eslint-plugin-es-x@7.5.0(eslint@8.56.0): resolution: {integrity: sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: eslint: '>=8' dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@eslint-community/regexpp': 4.10.0 - eslint: 8.55.0 - eslint-compat-utils: 0.1.2(eslint@8.55.0) + eslint: 8.56.0 + eslint-compat-utils: 0.1.2(eslint@8.56.0) dev: true - /eslint-plugin-eslint-comments@3.2.0(eslint@8.55.0): + /eslint-plugin-eslint-comments@3.2.0(eslint@8.56.0): resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} engines: {node: '>=6.5.0'} peerDependencies: eslint: '>=4.19.1' dependencies: escape-string-regexp: 1.0.5 - eslint: 8.55.0 - ignore: 5.3.0 + eslint: 8.56.0 + ignore: 5.3.1 dev: true - /eslint-plugin-i@2.29.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0): - resolution: {integrity: sha512-slGeTS3GQzx9267wLJnNYNO8X9EHGsc75AKIAFvnvMYEcTJKotPKL1Ru5PIGVHIVet+2DsugePWp8Oxpx8G22w==} + /eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.20.0)(eslint@8.56.0): + resolution: {integrity: sha512-ORizX37MelIWLbMyqI7hi8VJMf7A0CskMmYkB+lkCX3aF4pkGV7kwx5bSEb4qx7Yce2rAf9s34HqDRPjGRZPNQ==} engines: {node: '>=12'} peerDependencies: eslint: ^7.2.0 || ^8 dependencies: - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.55.0 + debug: 4.3.4 + doctrine: 3.0.0 + eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint@8.55.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.20.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) get-tsconfig: 4.7.2 is-glob: 4.0.3 minimatch: 3.1.2 - resolve: 1.22.8 semver: 7.5.4 transitivePeerDependencies: - '@typescript-eslint/parser' @@ -1859,63 +2001,67 @@ packages: - supports-color dev: true - /eslint-plugin-jsdoc@46.9.0(eslint@8.55.0): - resolution: {integrity: sha512-UQuEtbqLNkPf5Nr/6PPRCtr9xypXY+g8y/Q7gPa0YK7eDhh0y2lWprXRnaYbW7ACgIUvpDKy9X2bZqxtGzBG9Q==} + /eslint-plugin-jsdoc@46.10.1(eslint@8.56.0): + resolution: {integrity: sha512-x8wxIpv00Y50NyweDUpa+58ffgSAI5sqe+zcZh33xphD0AVh+1kqr1ombaTRb7Fhpove1zfUuujlX9DWWBP5ag==} engines: {node: '>=16'} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 dependencies: '@es-joy/jsdoccomment': 0.41.0 are-docs-informative: 0.0.2 comment-parser: 1.4.1 debug: 4.3.4 escape-string-regexp: 4.0.0 - eslint: 8.55.0 + eslint: 8.56.0 esquery: 1.5.0 is-builtin-module: 3.2.1 semver: 7.5.4 - spdx-expression-parse: 3.0.1 + spdx-expression-parse: 4.0.0 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-jsonc@2.10.0(eslint@8.55.0): - resolution: {integrity: sha512-9d//o6Jyh4s1RxC9fNSt1+MMaFN2ruFdXPG9XZcb/mR2KkfjADYiNL/hbU6W0Cyxfg3tS/XSFuhl5LgtMD8hmw==} + /eslint-plugin-jsonc@2.13.0(eslint@8.56.0): + resolution: {integrity: sha512-2wWdJfpO/UbZzPDABuUVvlUQjfMJa2p2iQfYt/oWxOMpXCcjuiMUSaA02gtY/Dbu82vpaSqc+O7Xq6ECHwtIxA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '>=6.0.0' dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) - eslint: 8.55.0 - eslint-compat-utils: 0.1.2(eslint@8.55.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + eslint: 8.56.0 + eslint-compat-utils: 0.4.1(eslint@8.56.0) + espree: 9.6.1 + graphemer: 1.4.0 jsonc-eslint-parser: 2.4.0 natural-compare: 1.4.0 + synckit: 0.6.2 dev: true - /eslint-plugin-markdown@3.0.1(eslint@8.55.0): + /eslint-plugin-markdown@3.0.1(eslint@8.56.0): resolution: {integrity: sha512-8rqoc148DWdGdmYF6WSQFT3uQ6PO7zXYgeBpHAOAakX/zpq+NvFYbDA/H7PYzHajwtmaOzAwfxyl++x0g1/N9A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - eslint: 8.55.0 + eslint: 8.56.0 mdast-util-from-markdown: 0.8.5 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-n@16.4.0(eslint@8.55.0): - resolution: {integrity: sha512-IkqJjGoWYGskVaJA7WQuN8PINIxc0N/Pk/jLeYT4ees6Fo5lAhpwGsYek6gS9tCUxgDC4zJ+OwY2bY/6/9OMKQ==} + /eslint-plugin-n@16.6.2(eslint@8.56.0): + resolution: {integrity: sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==} engines: {node: '>=16.0.0'} peerDependencies: eslint: '>=7.0.0' dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) builtins: 5.0.1 - eslint: 8.55.0 - eslint-plugin-es-x: 7.5.0(eslint@8.55.0) + eslint: 8.56.0 + eslint-plugin-es-x: 7.5.0(eslint@8.56.0) get-tsconfig: 4.7.2 - ignore: 5.3.0 + globals: 13.24.0 + ignore: 5.3.1 is-builtin-module: 3.2.1 is-core-module: 2.13.1 minimatch: 3.1.2 @@ -1928,7 +2074,7 @@ packages: engines: {node: '>=5.0.0'} dev: true - /eslint-plugin-perfectionist@2.5.0(eslint@8.55.0)(typescript@5.3.3)(vue-eslint-parser@9.3.2): + /eslint-plugin-perfectionist@2.5.0(eslint@8.56.0)(typescript@5.3.3)(vue-eslint-parser@9.4.2): resolution: {integrity: sha512-F6XXcq4mKKUe/SREoMGQqzgw6cgCgf3pFzkFfQVIGtqD1yXVpQjnhTepzhBeZfxZwgMzR9HO4yH4CUhIQ2WBcQ==} peerDependencies: astro-eslint-parser: ^0.16.0 @@ -1946,11 +2092,11 @@ packages: vue-eslint-parser: optional: true dependencies: - '@typescript-eslint/utils': 6.14.0(eslint@8.55.0)(typescript@5.3.3) - eslint: 8.55.0 + '@typescript-eslint/utils': 6.20.0(eslint@8.56.0)(typescript@5.3.3) + eslint: 8.56.0 minimatch: 9.0.3 natural-compare-lite: 1.4.0 - vue-eslint-parser: 9.3.2(eslint@8.55.0) + vue-eslint-parser: 9.4.2(eslint@8.56.0) transitivePeerDependencies: - supports-color - typescript @@ -1960,13 +2106,13 @@ packages: resolution: {integrity: sha512-DA2oNRx+pZ6RM/EIHIPME4FQZifnkEROa55OWtTTUFGHpj53tcHomuxVP/kS/2MM+ul46GEK+jymK69STWDWoA==} engines: {node: '>=14'} dependencies: - '@vue/compiler-sfc': 3.3.11 + '@vue/compiler-sfc': 3.4.15 chalk: 4.1.2 prettier: 2.8.8 prettier-linter-helpers: 1.0.0 dev: true - /eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.10.0)(eslint@8.55.0)(prettier@2.8.8): + /eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.10.0)(eslint@8.56.0)(prettier@2.8.8): resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} engines: {node: '>=12.0.0'} peerDependencies: @@ -1977,31 +2123,31 @@ packages: eslint-config-prettier: optional: true dependencies: - eslint: 8.55.0 - eslint-config-prettier: 8.10.0(eslint@8.55.0) + eslint: 8.56.0 + eslint-config-prettier: 8.10.0(eslint@8.56.0) prettier: 2.8.8 prettier-linter-helpers: 1.0.0 dev: true - /eslint-plugin-simple-import-sort@10.0.0(eslint@8.55.0): + /eslint-plugin-simple-import-sort@10.0.0(eslint@8.56.0): resolution: {integrity: sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==} peerDependencies: eslint: '>=5.0.0' dependencies: - eslint: 8.55.0 + eslint: 8.56.0 dev: true - /eslint-plugin-unicorn@49.0.0(eslint@8.55.0): + /eslint-plugin-unicorn@49.0.0(eslint@8.56.0): resolution: {integrity: sha512-0fHEa/8Pih5cmzFW5L7xMEfUTvI9WKeQtjmKpTUmY+BiFCDxkxrTdnURJOHKykhtwIeyYsxnecbGvDCml++z4Q==} engines: {node: '>=16'} peerDependencies: eslint: '>=8.52.0' dependencies: '@babel/helper-validator-identifier': 7.22.20 - '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) ci-info: 3.9.0 clean-regexp: 1.0.0 - eslint: 8.55.0 + eslint: 8.56.0 esquery: 1.5.0 indent-string: 4.0.0 is-builtin-module: 3.2.1 @@ -2014,7 +2160,7 @@ packages: strip-indent: 3.0.0 dev: true - /eslint-plugin-unused-imports@3.0.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.55.0): + /eslint-plugin-unused-imports@3.0.0(@typescript-eslint/eslint-plugin@6.20.0)(eslint@8.56.0): resolution: {integrity: sha512-sduiswLJfZHeeBJ+MQaG+xYzSWdRXoSw61DpU13mzWumCkR0ufD0HmO4kdNokjrkluMHpj/7PJeN35pgbhW3kw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2024,13 +2170,13 @@ packages: '@typescript-eslint/eslint-plugin': optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0)(typescript@5.3.3) - eslint: 8.55.0 + '@typescript-eslint/eslint-plugin': 6.20.0(@typescript-eslint/parser@6.20.0)(eslint@8.56.0)(typescript@5.3.3) + eslint: 8.56.0 eslint-rule-composer: 0.3.0 dev: true - /eslint-plugin-vitest@0.3.15(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.55.0)(typescript@5.3.3): - resolution: {integrity: sha512-ZUUd9ARKR3p0W7zoWg0irmQW9aM+SlJYZOoFOBemmgwQIHLxtdRLodQGP48nYf8jLdCGFDQqPyaltQQKsa9UMw==} + /eslint-plugin-vitest@0.3.21(@typescript-eslint/eslint-plugin@6.20.0)(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-oYwR1MrwaBw/OG6CKU+SJYleAc442w6CWL1RTQl5WLwy8X3sh0bgHIQk5iEtmTak3Q+XAvZglr0bIoDOjFdkcw==} engines: {node: ^18.0.0 || >= 20.0.0} peerDependencies: '@typescript-eslint/eslint-plugin': '*' @@ -2042,41 +2188,41 @@ packages: vitest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.14.0(eslint@8.55.0)(typescript@5.3.3) - eslint: 8.55.0 + '@typescript-eslint/eslint-plugin': 6.20.0(@typescript-eslint/parser@6.20.0)(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/utils': 6.20.0(eslint@8.56.0)(typescript@5.3.3) + eslint: 8.56.0 transitivePeerDependencies: - supports-color - typescript dev: true - /eslint-plugin-vue@9.19.2(eslint@8.55.0): - resolution: {integrity: sha512-CPDqTOG2K4Ni2o4J5wixkLVNwgctKXFu6oBpVJlpNq7f38lh9I80pRTouZSJ2MAebPJlINU/KTFSXyQfBUlymA==} + /eslint-plugin-vue@9.21.1(eslint@8.56.0): + resolution: {integrity: sha512-XVtI7z39yOVBFJyi8Ljbn7kY9yHzznKXL02qQYn+ta63Iy4A9JFBw6o4OSB9hyD2++tVT+su9kQqetUyCCwhjw==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) - eslint: 8.55.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + eslint: 8.56.0 natural-compare: 1.4.0 nth-check: 2.1.1 - postcss-selector-parser: 6.0.13 + postcss-selector-parser: 6.0.15 semver: 7.5.4 - vue-eslint-parser: 9.3.2(eslint@8.55.0) + vue-eslint-parser: 9.4.2(eslint@8.56.0) xml-name-validator: 4.0.0 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-yml@1.10.0(eslint@8.55.0): - resolution: {integrity: sha512-53SUwuNDna97lVk38hL/5++WXDuugPM9SUQ1T645R0EHMRCdBIIxGye/oOX2qO3FQ7aImxaUZJU/ju+NMUBrLQ==} + /eslint-plugin-yml@1.12.2(eslint@8.56.0): + resolution: {integrity: sha512-hvS9p08FhPT7i/ynwl7/Wt7ke7Rf4P2D6fT8lZlL43peZDTsHtH2A0SIFQ7Kt7+mJ6if6P+FX3iJhMkdnxQwpg==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: '>=6.0.0' dependencies: debug: 4.3.4 - eslint: 8.55.0 - eslint-compat-utils: 0.1.2(eslint@8.55.0) + eslint: 8.56.0 + eslint-compat-utils: 0.4.1(eslint@8.56.0) lodash: 4.17.21 natural-compare: 1.4.0 yaml-eslint-parser: 1.2.2 @@ -2102,16 +2248,16 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.55.0: - resolution: {integrity: sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==} + /eslint@8.56.0: + resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@eslint-community/regexpp': 4.10.0 '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.55.0 - '@humanwhocodes/config-array': 0.11.13 + '@eslint/js': 8.56.0 + '@humanwhocodes/config-array': 0.11.14 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 '@ungap/structured-clone': 1.2.0 @@ -2132,7 +2278,7 @@ packages: glob-parent: 6.0.2 globals: 13.24.0 graphemer: 1.4.0 - ignore: 5.3.0 + ignore: 5.3.1 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -2153,8 +2299,8 @@ packages: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.11.2 - acorn-jsx: 5.3.2(acorn@8.11.2) + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) eslint-visitor-keys: 3.4.3 dev: true @@ -2193,6 +2339,12 @@ packages: /estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + /estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + dependencies: + '@types/estree': 1.0.5 + dev: true + /esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} @@ -2222,7 +2374,7 @@ packages: human-signals: 5.0.0 is-stream: 3.0.0 merge-stream: 2.0.0 - npm-run-path: 5.1.0 + npm-run-path: 5.2.0 onetime: 6.0.0 signal-exit: 4.1.0 strip-final-newline: 3.0.0 @@ -2267,8 +2419,8 @@ packages: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true - /fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + /fastq@1.17.0: + resolution: {integrity: sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==} dependencies: reusify: 1.0.4 dev: true @@ -2316,8 +2468,8 @@ packages: resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} dev: true - /follow-redirects@1.15.3: - resolution: {integrity: sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==} + /follow-redirects@1.15.5: + resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -2366,9 +2518,11 @@ packages: engines: {node: 6.* || 8.* || >= 10.*} dev: true - /get-intrinsic@1.2.2: - resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} + /get-intrinsic@1.2.3: + resolution: {integrity: sha512-JIcZczvcMVE7AUOP+X72bh8HqHBRxFdz5PDHYtNG/lE3yk9b3KZBJlwFcTyPYjg3L4RLLmZJzvjxhaZVapxFrQ==} + engines: {node: '>= 0.4'} dependencies: + es-errors: 1.0.0 function-bind: 1.1.2 has-proto: 1.0.1 has-symbols: 1.0.3 @@ -2430,7 +2584,7 @@ packages: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.3.0 + ignore: 5.3.1 merge2: 1.4.1 slash: 3.0.0 dev: true @@ -2438,7 +2592,7 @@ packages: /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.3 dev: true /graphemer@1.4.0: @@ -2462,7 +2616,7 @@ packages: /has-property-descriptors@1.0.1: resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} dependencies: - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.3 dev: true /has-proto@1.0.1: @@ -2475,8 +2629,8 @@ packages: engines: {node: '>= 0.4'} dev: true - /has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + /has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 @@ -2508,13 +2662,13 @@ packages: engines: {node: '>=16.17.0'} dev: true - /ignore@5.3.0: - resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} + /ignore@5.3.1: + resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} engines: {node: '>= 4'} dev: true - /immutable@4.3.4: - resolution: {integrity: sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==} + /immutable@4.3.5: + resolution: {integrity: sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==} dev: true /import-fresh@3.3.0: @@ -2550,7 +2704,7 @@ packages: resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.3 hasown: 2.0.0 side-channel: 1.0.4 dev: true @@ -2571,15 +2725,15 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 dev: true - /is-array-buffer@3.0.2: - resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + /is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-typed-array: 1.1.12 + get-intrinsic: 1.2.3 dev: true /is-arrayish@0.2.1: @@ -2604,7 +2758,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 dev: true /is-builtin-module@3.2.1: @@ -2629,7 +2783,7 @@ packages: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 dev: true /is-decimal@1.0.4: @@ -2665,7 +2819,7 @@ packages: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 dev: true /is-number@7.0.0: @@ -2683,7 +2837,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.5 - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 dev: true /is-set@2.0.2: @@ -2710,7 +2864,7 @@ packages: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 dev: true /is-symbol@1.0.4: @@ -2720,13 +2874,6 @@ packages: has-symbols: 1.0.3 dev: true - /is-typed-array@1.1.12: - resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} - engines: {node: '>= 0.4'} - dependencies: - which-typed-array: 1.1.13 - dev: true - /is-weakmap@2.0.1: resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} dev: true @@ -2735,7 +2882,7 @@ packages: resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} dependencies: call-bind: 1.0.5 - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.3 dev: true /isarray@2.0.5: @@ -2804,14 +2951,14 @@ packages: resolution: {integrity: sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.11.2 + acorn: 8.11.3 eslint-visitor-keys: 3.4.3 espree: 9.6.1 semver: 7.5.4 dev: true - /jsonc-parser@3.2.0: - resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} + /jsonc-parser@3.2.1: + resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} dev: true /keyv@4.5.4: @@ -2850,7 +2997,7 @@ packages: resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} engines: {node: '>=14'} dependencies: - mlly: 1.4.2 + mlly: 1.5.0 pkg-types: 1.0.3 dev: true @@ -2891,8 +3038,8 @@ packages: yallist: 4.0.0 dev: true - /magic-string@0.30.5: - resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} + /magic-string@0.30.6: + resolution: {integrity: sha512-n62qCLbPjNjyo+owKtveQxZFZTBm+Ms6YoGD23Wew6Vw337PElFNifQpknPruVRQV57kVShPnLGo9vWxVhpPvA==} engines: {node: '>=12'} dependencies: '@jridgewell/sourcemap-codec': 1.4.15 @@ -2979,18 +3126,17 @@ packages: brace-expansion: 2.0.1 dev: true - /mlly@1.4.2: - resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==} + /mlly@1.5.0: + resolution: {integrity: sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ==} dependencies: - acorn: 8.11.2 - pathe: 1.1.1 + acorn: 8.11.3 + pathe: 1.1.2 pkg-types: 1.0.3 ufo: 1.3.2 dev: true /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -3034,8 +3180,8 @@ packages: path-key: 3.1.1 dev: true - /npm-run-path@5.1.0: - resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} + /npm-run-path@5.2.0: + resolution: {integrity: sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: path-key: 4.0.0 @@ -3047,8 +3193,8 @@ packages: boolbase: 1.0.0 dev: true - /object-code@1.3.0: - resolution: {integrity: sha512-PLplgvzuFhSPBuTX/mtaXEnU3c6g7qKflVVQbV9VWEnV/34iKeAX1jeDNCKq1OgGlsnkA/NjldCzTbHxa7Wj4A==} + /object-code@1.3.2: + resolution: {integrity: sha512-3CVDmQiru7YYVr+4OpCGrqkVE7GogmWinDcgfno1fXlKgIhtW9FhgHTiV98gMPUjQwWuWvijQDCY8sGnqKrhTw==} dev: false /object-inspect@1.13.1: @@ -3218,8 +3364,8 @@ packages: engines: {node: '>=8'} dev: true - /pathe@1.1.1: - resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} + /pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} dev: true /picocolors@1.0.0: @@ -3230,7 +3376,7 @@ packages: engines: {node: '>=8.6'} dev: true - /pinia@2.1.7(typescript@5.3.3)(vue@3.3.11): + /pinia@2.1.7(typescript@5.3.3)(vue@3.4.15): resolution: {integrity: sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==} peerDependencies: '@vue/composition-api': ^1.4.0 @@ -3244,16 +3390,16 @@ packages: dependencies: '@vue/devtools-api': 6.5.1 typescript: 5.3.3 - vue: 3.3.11(typescript@5.3.3) - vue-demi: 0.14.6(vue@3.3.11) + vue: 3.4.15(typescript@5.3.3) + vue-demi: 0.14.7(vue@3.4.15) dev: false /pkg-types@1.0.3: resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} dependencies: - jsonc-parser: 3.2.0 - mlly: 1.4.2 - pathe: 1.1.1 + jsonc-parser: 3.2.1 + mlly: 1.5.0 + pathe: 1.1.2 dev: true /pluralize@8.0.0: @@ -3261,16 +3407,16 @@ packages: engines: {node: '>=4'} dev: true - /postcss-selector-parser@6.0.13: - resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} + /postcss-selector-parser@6.0.15: + resolution: {integrity: sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==} engines: {node: '>=4'} dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 dev: true - /postcss@8.4.32: - resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==} + /postcss@8.4.33: + resolution: {integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.7 @@ -3342,8 +3488,8 @@ packages: picomatch: 2.3.1 dev: true - /regenerator-runtime@0.14.0: - resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} + /regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} dev: true /regexp-tree@0.1.27: @@ -3410,11 +3556,26 @@ packages: fsevents: 2.3.3 dev: true - /rollup@3.29.4: - resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} + /rollup@4.9.6: + resolution: {integrity: sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + dependencies: + '@types/estree': 1.0.5 optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.9.6 + '@rollup/rollup-android-arm64': 4.9.6 + '@rollup/rollup-darwin-arm64': 4.9.6 + '@rollup/rollup-darwin-x64': 4.9.6 + '@rollup/rollup-linux-arm-gnueabihf': 4.9.6 + '@rollup/rollup-linux-arm64-gnu': 4.9.6 + '@rollup/rollup-linux-arm64-musl': 4.9.6 + '@rollup/rollup-linux-riscv64-gnu': 4.9.6 + '@rollup/rollup-linux-x64-gnu': 4.9.6 + '@rollup/rollup-linux-x64-musl': 4.9.6 + '@rollup/rollup-win32-arm64-msvc': 4.9.6 + '@rollup/rollup-win32-ia32-msvc': 4.9.6 + '@rollup/rollup-win32-x64-msvc': 4.9.6 fsevents: 2.3.3 dev: true @@ -3430,18 +3591,18 @@ packages: tslib: 2.6.2 dev: true - /sass@1.69.5: - resolution: {integrity: sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==} + /sass@1.70.0: + resolution: {integrity: sha512-uUxNQ3zAHeAx5nRFskBnrWzDUJrrvpCPD5FNAoRvTi0WwremlheES3tg+56PaVtCs5QDRX5CBLxxKMDJMEa1WQ==} engines: {node: '>=14.0.0'} hasBin: true dependencies: chokidar: 3.5.3 - immutable: 4.3.4 + immutable: 4.3.5 source-map-js: 1.0.2 dev: true - /scule@1.1.1: - resolution: {integrity: sha512-sHtm/SsIK9BUBI3EFT/Gnp9VoKfY6QLvlkvAE6YK7454IF8FSgJEAnJpVdSC7K5/pjI5NfxhzBLW2JAfYA/shQ==} + /scule@1.2.0: + resolution: {integrity: sha512-CRCmi5zHQnSoeCik9565PONMg0kfkvYmcSqrbOJY4txFfy1wvVULV4FDaiXhUblUgahdqz3F2NwHZ8i4eBTwUw==} dev: true /semver@5.7.2: @@ -3457,12 +3618,13 @@ packages: lru-cache: 6.0.0 dev: true - /set-function-length@1.1.1: - resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} + /set-function-length@1.2.0: + resolution: {integrity: sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==} engines: {node: '>= 0.4'} dependencies: define-data-property: 1.1.1 - get-intrinsic: 1.2.2 + function-bind: 1.1.2 + get-intrinsic: 1.2.3 gopd: 1.0.1 has-property-descriptors: 1.0.1 dev: true @@ -3496,7 +3658,7 @@ packages: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: call-bind: 1.0.5 - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.3 object-inspect: 1.13.1 dev: true @@ -3518,6 +3680,30 @@ packages: engines: {node: '>=8'} dev: true + /socket.io-client@4.7.4: + resolution: {integrity: sha512-wh+OkeF0rAVCrABWQBaEjLfb7DVPotMbu0cgWgyR0v6eA4EoVnAwcIeIbcdTE3GT/H3kbdLl7OoH2+asoDRIIg==} + engines: {node: '>=10.0.0'} + dependencies: + '@socket.io/component-emitter': 3.1.0 + debug: 4.3.4 + engine.io-client: 6.5.3 + socket.io-parser: 4.2.4 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /socket.io-parser@4.2.4: + resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} + engines: {node: '>=10.0.0'} + dependencies: + '@socket.io/component-emitter': 3.1.0 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + /source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} @@ -3540,14 +3726,21 @@ packages: spdx-license-ids: 3.0.16 dev: true - /spdx-exceptions@2.3.0: - resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} + /spdx-exceptions@2.4.0: + resolution: {integrity: sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw==} dev: true /spdx-expression-parse@3.0.1: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: - spdx-exceptions: 2.3.0 + spdx-exceptions: 2.4.0 + spdx-license-ids: 3.0.16 + dev: true + + /spdx-expression-parse@4.0.0: + resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==} + dependencies: + spdx-exceptions: 2.4.0 spdx-license-ids: 3.0.16 dev: true @@ -3603,7 +3796,7 @@ packages: /strip-literal@1.3.0: resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} dependencies: - acorn: 8.11.2 + acorn: 8.11.3 dev: true /supports-color@5.5.0: @@ -3632,6 +3825,13 @@ packages: engines: {node: '>= 0.4'} dev: true + /synckit@0.6.2: + resolution: {integrity: sha512-Vhf+bUa//YSTYKseDiiEuQmhGCoIF3CVBhunm3r/DQnYiGT4JssmnKQc44BIyOZRK2pKjXXAgbhfmbeoC9CJpA==} + engines: {node: '>=12.20'} + dependencies: + tslib: 2.6.2 + dev: true + /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true @@ -3702,20 +3902,22 @@ packages: resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==} dev: true - /unimport@3.6.1: - resolution: {integrity: sha512-zKzbp8AQ+l8QK3XrONtUBdgBbMI8TkGh8hBYF77ZkVqMLLIAHwGSwJRFolPQMBx/5pezeRKvmu2gzlqnxRZeqQ==} + /unimport@3.7.1: + resolution: {integrity: sha512-V9HpXYfsZye5bPPYUgs0Otn3ODS1mDUciaBlXljI4C2fTwfFpvFZRywmlOu943puN9sncxROMZhsZCjNXEpzEQ==} dependencies: '@rollup/pluginutils': 5.1.0 + acorn: 8.11.3 escape-string-regexp: 5.0.0 + estree-walker: 3.0.3 fast-glob: 3.3.2 local-pkg: 0.5.0 - magic-string: 0.30.5 - mlly: 1.4.2 - pathe: 1.1.1 + magic-string: 0.30.6 + mlly: 1.5.0 + pathe: 1.1.2 pkg-types: 1.0.3 - scule: 1.1.1 + scule: 1.2.0 strip-literal: 1.3.0 - unplugin: 1.5.1 + unplugin: 1.6.0 transitivePeerDependencies: - rollup dev: true @@ -3726,8 +3928,8 @@ packages: '@types/unist': 2.0.10 dev: true - /unplugin-auto-import@0.17.2: - resolution: {integrity: sha512-Eu/xWI6SH4jTWXvzOfXQWAxRtiz/gMObm7wXtgMj7wBjHQKLgHTmHd4R4oha87KYGah1aKMqiqDeAxiPmfSoTg==} + /unplugin-auto-import@0.17.5: + resolution: {integrity: sha512-fHNDkDSxv3PGagX1wmKBYBkgaM4AKAgZmdJw/bxjhNljx9KSXSgHpGfX0MwUrq9qw6q1bhHIZVWyOwoY2koo4w==} engines: {node: '>=14'} peerDependencies: '@nuxt/kit': ^3.2.2 @@ -3742,16 +3944,16 @@ packages: '@rollup/pluginutils': 5.1.0 fast-glob: 3.3.2 local-pkg: 0.5.0 - magic-string: 0.30.5 + magic-string: 0.30.6 minimatch: 9.0.3 - unimport: 3.6.1 - unplugin: 1.5.1 + unimport: 3.7.1 + unplugin: 1.6.0 transitivePeerDependencies: - rollup dev: true - /unplugin-icons@0.18.1: - resolution: {integrity: sha512-WzKu/eoq74YC7vyEAGsFebkRzsZrRkR4FUzLU6gbpfa7WRaVVpQS2n7LSxE1iRUN0scKL5b9bq+i0wucR+ttFQ==} + /unplugin-icons@0.18.5: + resolution: {integrity: sha512-KVNAohXbZ7tVcG1C3p6QaC7wU9Qrj7etv4XvsMMJAxr5LccQZ+Iuv5LOIv/7GtqXaGN1BuFCqRO1ErsHEgEXdQ==} peerDependencies: '@svgr/core': '>=7.0.0' '@svgx/core': ^1.0.1 @@ -3772,17 +3974,17 @@ packages: dependencies: '@antfu/install-pkg': 0.3.1 '@antfu/utils': 0.7.7 - '@iconify/utils': 2.1.12 + '@iconify/utils': 2.1.22 debug: 4.3.4 kolorist: 1.8.0 local-pkg: 0.5.0 - unplugin: 1.5.1 + unplugin: 1.6.0 transitivePeerDependencies: - supports-color dev: true - /unplugin-vue-components@0.25.2(vue@3.3.11): - resolution: {integrity: sha512-OVmLFqILH6w+eM8fyt/d/eoJT9A6WO51NZLf1vC5c1FZ4rmq2bbGxTy8WP2Jm7xwFdukaIdv819+UI7RClPyCA==} + /unplugin-vue-components@0.26.0(vue@3.4.15): + resolution: {integrity: sha512-s7IdPDlnOvPamjunVxw8kNgKNK8A5KM1YpK5j/p97jEKTjlPNrA0nZBiSfAKKlK1gWZuyWXlKL5dk3EDw874LQ==} engines: {node: '>=14'} peerDependencies: '@babel/parser': ^7.15.8 @@ -3800,20 +4002,20 @@ packages: debug: 4.3.4 fast-glob: 3.3.2 local-pkg: 0.4.3 - magic-string: 0.30.5 + magic-string: 0.30.6 minimatch: 9.0.3 resolve: 1.22.8 - unplugin: 1.5.1 - vue: 3.3.11(typescript@5.3.3) + unplugin: 1.6.0 + vue: 3.4.15(typescript@5.3.3) transitivePeerDependencies: - rollup - supports-color dev: true - /unplugin@1.5.1: - resolution: {integrity: sha512-0QkvG13z6RD+1L1FoibQqnvTwVBXvS4XSPwAyinVgoOCl2jAgwzdUKmEj05o4Lt8xwQI85Hb6mSyYkcAGwZPew==} + /unplugin@1.6.0: + resolution: {integrity: sha512-BfJEpWBu3aE/AyHx8VaNE/WgouoQxgH9baAiH82JjX8cqVyi3uJQstqwD5J+SZxIK326SZIhsSZlALXVBCknTQ==} dependencies: - acorn: 8.11.2 + acorn: 8.11.3 chokidar: 3.5.3 webpack-sources: 3.2.3 webpack-virtual-modules: 0.6.1 @@ -3836,20 +4038,20 @@ packages: spdx-expression-parse: 3.0.1 dev: true - /vite-plugin-eslint@1.8.1(eslint@8.55.0)(vite@4.5.1): + /vite-plugin-eslint@1.8.1(eslint@8.56.0)(vite@5.0.12): resolution: {integrity: sha512-PqdMf3Y2fLO9FsNPmMX+//2BF5SF8nEWspZdgl4kSt7UvHDRHVVfHvxsD7ULYzZrJDGRxR81Nq7TOFgwMnUang==} peerDependencies: eslint: '>=7' vite: '>=2' dependencies: '@rollup/pluginutils': 4.2.1 - '@types/eslint': 8.44.8 - eslint: 8.55.0 + '@types/eslint': 8.56.2 + eslint: 8.56.0 rollup: 2.79.1 - vite: 4.5.1(sass@1.69.5) + vite: 5.0.12(sass@1.70.0) dev: true - /vite-plugin-pages@0.32.0(vite@4.5.1): + /vite-plugin-pages@0.32.0(vite@5.0.12): resolution: {integrity: sha512-OxS3n0zUo5wsfgNCAuw2FiG/KD1ipgQV+2Flst4RyeI2iPv+m0YueVq+nx41k5NOWJj/zhqEas6I0b7HXveXjA==} peerDependencies: '@vue/compiler-sfc': ^2.7.0 || ^3.0.0 @@ -3866,18 +4068,18 @@ packages: json5: 2.2.3 local-pkg: 0.5.0 picocolors: 1.0.0 - vite: 4.5.1(sass@1.69.5) + vite: 5.0.12(sass@1.70.0) yaml: 2.3.4 transitivePeerDependencies: - supports-color dev: true - /vite@4.5.1(sass@1.69.5): - resolution: {integrity: sha512-AXXFaAJ8yebyqzoNB9fu2pHoo/nWX+xZlaRwoeYUxEqBO+Zj4msE5G+BhGBll9lYEKv9Hfks52PAF2X7qDYXQA==} - engines: {node: ^14.18.0 || >=16.0.0} + /vite@5.0.12(sass@1.70.0): + resolution: {integrity: sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w==} + engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: - '@types/node': '>= 14' + '@types/node': ^18.0.0 || >=20.0.0 less: '*' lightningcss: ^1.21.0 sass: '*' @@ -3900,16 +4102,16 @@ packages: terser: optional: true dependencies: - esbuild: 0.18.20 - postcss: 8.4.32 - rollup: 3.29.4 - sass: 1.69.5 + esbuild: 0.19.12 + postcss: 8.4.33 + rollup: 4.9.6 + sass: 1.70.0 optionalDependencies: fsevents: 2.3.3 dev: true - /vue-demi@0.14.6(vue@3.3.11): - resolution: {integrity: sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==} + /vue-demi@0.14.7(vue@3.4.15): + resolution: {integrity: sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==} engines: {node: '>=12'} hasBin: true requiresBuild: true @@ -3920,17 +4122,17 @@ packages: '@vue/composition-api': optional: true dependencies: - vue: 3.3.11(typescript@5.3.3) + vue: 3.4.15(typescript@5.3.3) dev: false - /vue-eslint-parser@9.3.2(eslint@8.55.0): - resolution: {integrity: sha512-q7tWyCVaV9f8iQyIA5Mkj/S6AoJ9KBN8IeUSf3XEmBrOtxOZnfTg5s4KClbZBCK3GtnT/+RyCLZyDHuZwTuBjg==} + /vue-eslint-parser@9.4.2(eslint@8.56.0): + resolution: {integrity: sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: '>=6.0.0' dependencies: debug: 4.3.4 - eslint: 8.55.0 + eslint: 8.56.0 eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 @@ -3941,58 +4143,58 @@ packages: - supports-color dev: true - /vue-i18n@9.8.0(vue@3.3.11): - resolution: {integrity: sha512-Izho+6PYjejsTq2mzjcRdBZ5VLRQoSuuexvR8029h5CpN03FYqiqBrShMyf2I1DKkN6kw/xmujcbvC+4QybpsQ==} + /vue-i18n@9.9.1(vue@3.4.15): + resolution: {integrity: sha512-xyQ4VspLdNSPTKBFBPWa1tvtj+9HuockZwgFeD2OhxxXuC2CWeNvV4seu2o9+vbQOyQbhAM5Ez56oxUrrnTWdw==} engines: {node: '>= 16'} peerDependencies: vue: ^3.0.0 dependencies: - '@intlify/core-base': 9.8.0 - '@intlify/shared': 9.8.0 + '@intlify/core-base': 9.9.1 + '@intlify/shared': 9.9.1 '@vue/devtools-api': 6.5.1 - vue: 3.3.11(typescript@5.3.3) + vue: 3.4.15(typescript@5.3.3) - /vue-router@4.2.5(vue@3.3.11): + /vue-router@4.2.5(vue@3.4.15): resolution: {integrity: sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==} peerDependencies: vue: ^3.2.0 dependencies: '@vue/devtools-api': 6.5.1 - vue: 3.3.11(typescript@5.3.3) + vue: 3.4.15(typescript@5.3.3) dev: false - /vue-template-compiler@2.7.15: - resolution: {integrity: sha512-yQxjxMptBL7UAog00O8sANud99C6wJF+7kgbcwqkvA38vCGF7HWE66w0ZFnS/kX5gSoJr/PQ4/oS3Ne2pW37Og==} + /vue-template-compiler@2.7.16: + resolution: {integrity: sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==} dependencies: de-indent: 1.0.2 he: 1.2.0 dev: true - /vue-tsc@1.8.25(typescript@5.3.3): - resolution: {integrity: sha512-lHsRhDc/Y7LINvYhZ3pv4elflFADoEOo67vfClAfF2heVHpHmVquLSjojgCSIwzA4F0Pc4vowT/psXCYcfk+iQ==} + /vue-tsc@1.8.27(typescript@5.3.3): + resolution: {integrity: sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==} hasBin: true peerDependencies: typescript: '*' dependencies: '@volar/typescript': 1.11.1 - '@vue/language-core': 1.8.25(typescript@5.3.3) + '@vue/language-core': 1.8.27(typescript@5.3.3) semver: 7.5.4 typescript: 5.3.3 dev: true - /vue@3.3.11(typescript@5.3.3): - resolution: {integrity: sha512-d4oBctG92CRO1cQfVBZp6WJAs0n8AK4Xf5fNjQCBeKCvMI1efGQ5E3Alt1slFJS9fZuPcFoiAiqFvQlv1X7t/w==} + /vue@3.4.15(typescript@5.3.3): + resolution: {integrity: sha512-jC0GH4KkWLWJOEQjOpkqU1bQsBwf4R1rsFtw5GQJbjHVKWDzO6P0nWWBTmjp1xSemAioDFj1jdaK1qa3DnMQoQ==} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@vue/compiler-dom': 3.3.11 - '@vue/compiler-sfc': 3.3.11 - '@vue/runtime-dom': 3.3.11 - '@vue/server-renderer': 3.3.11(vue@3.3.11) - '@vue/shared': 3.3.11 + '@vue/compiler-dom': 3.4.15 + '@vue/compiler-sfc': 3.4.15 + '@vue/runtime-dom': 3.4.15 + '@vue/server-renderer': 3.4.15(vue@3.4.15) + '@vue/shared': 3.4.15 typescript: 5.3.3 /webpack-sources@3.2.3: @@ -4023,15 +4225,15 @@ packages: is-weakset: 2.0.2 dev: true - /which-typed-array@1.1.13: - resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} + /which-typed-array@1.1.14: + resolution: {integrity: sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.5 + available-typed-arrays: 1.0.6 call-bind: 1.0.5 for-each: 0.3.3 gopd: 1.0.1 - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 dev: true /which@2.0.2: @@ -4055,11 +4257,29 @@ packages: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true + /ws@8.11.0: + resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + /xml-name-validator@4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} dev: true + /xmlhttprequest-ssl@2.0.0: + resolution: {integrity: sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==} + engines: {node: '>=0.4.0'} + dev: false + /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} diff --git a/src/App.vue b/src/App.vue index 83d4c3d..6882bc1 100644 --- a/src/App.vue +++ b/src/App.vue @@ -8,7 +8,7 @@ fluid class="d-flex flex-column flex-grow-1 overflow-y-auto justify-content-center" > - +

Vous devez être connecté pour accéder à cette page. @@ -26,13 +26,16 @@ diff --git a/src/api.ts b/src/api.ts deleted file mode 100644 index 96c3ecc..0000000 --- a/src/api.ts +++ /dev/null @@ -1,23 +0,0 @@ -import axios from "axios"; -import { buildWebStorage } from "axios-cache-interceptor"; -import Cookies from "js-cookie"; - -import { - addTokenRequestInterceptor, - addUrlParamsRequestInterceptor, -} from "~axios-helper"; -import { createCachedCoaApi } from "~web"; - -const cachedCoaApi = createCachedCoaApi( - buildWebStorage(sessionStorage), - import.meta.env.VITE_DM_API_URL -); - -const defaultApi = addTokenRequestInterceptor( - addUrlParamsRequestInterceptor( - axios.create({ baseURL: import.meta.env.VITE_DM_API_URL }) - ), - () => Promise.resolve(Cookies.get("token") as string) -); - -export { cachedCoaApi, defaultApi }; diff --git a/src/components/Book.vue b/src/components/Book.vue index d8622f3..69d4a75 100644 --- a/src/components/Book.vue +++ b/src/components/Book.vue @@ -108,7 +108,7 @@ class="ms-2 hint" :disabled="ai.status.value === 'loading'" :class="ai.status.value" - @click="ai.runKumiko(indexationId)" + @click="ai.runKumiko()" > import { PageFlip } from "page-flip"; -import { storeToRefs } from "pinia"; -import { computed, ref, watch } from "vue"; import useAi from "~/composables/useAi"; import { ai as aiStore } from "~/stores/ai"; @@ -151,7 +149,7 @@ import { suggestions } from "~/stores/suggestions"; import { user } from "~/stores/user"; const route = useRoute(); -const ai = useAi(); +let ai: ReturnType; const aiDetails = storeToRefs(aiStore()).aiDetails; const coverWidth = ref(null as number | null); @@ -257,8 +255,9 @@ watch( watch( () => storyversionKindSuggestions.value, async () => { - await ai.runCoverSearch(indexationId.value); - await ai.runStorycodeOcr(indexationId.value); + ai = useAi(indexationId.value); + await ai.runCoverSearch(); + await ai.runStorycodeOcr(); ai.status.value = "loaded"; }, { deep: true } diff --git a/src/components/Entry.vue b/src/components/Entry.vue index 674967f..331b151 100644 --- a/src/components/Entry.vue +++ b/src/components/Entry.vue @@ -147,10 +147,6 @@ diff --git a/src/components/IssueSelect.vue b/src/components/IssueSelect.vue index 9a47a23..a96d994 100644 --- a/src/components/IssueSelect.vue +++ b/src/components/IssueSelect.vue @@ -40,13 +40,10 @@ diff --git a/src/pages/indexation/[id].vue b/src/pages/indexation/[id].vue index c84afe3..5b32ce1 100644 --- a/src/pages/indexation/[id].vue +++ b/src/pages/indexation/[id].vue @@ -22,10 +22,7 @@ diff --git a/src/components/SuggestionList.vue b/src/components/SuggestionList.vue index d2e12f3..c3c969d 100644 --- a/src/components/SuggestionList.vue +++ b/src/components/SuggestionList.vue @@ -24,14 +24,20 @@ :status="suggestion.meta.status" /> - - + - - - - - + + + + Page {{ pageNumber }}
+
+
+ + + + + + + + + +
From abe59e0d8356827f2643d4c163a78ffeb22440d5 Mon Sep 17 00:00:00 2001 From: Bruno Perel Date: Sat, 2 Mar 2024 14:41:48 +0100 Subject: [PATCH 25/41] WIP --- api/services/indexations/index.ts | 93 ++++++------ api/services/indexations/types.ts | 76 +++++----- package.json | 2 +- src/components/Book.vue | 220 +++-------------------------- src/components/TableOfContents.vue | 217 ++++++++++++++++++++++++++++ src/stores/suggestions.ts | 16 --- 6 files changed, 328 insertions(+), 296 deletions(-) create mode 100644 src/components/TableOfContents.vue diff --git a/api/services/indexations/index.ts b/api/services/indexations/index.ts index ac3a65b..cc4ade9 100644 --- a/api/services/indexations/index.ts +++ b/api/services/indexations/index.ts @@ -8,7 +8,8 @@ import { SessionData, SessionDataWithIndexation, } from "~/index"; -import { entry, page, Prisma, storyKindSuggestion, storySuggestion } from "~/prisma/client_dumili"; +import { entry, Prisma, storyKindSuggestion, storySuggestion } from "~/prisma/client_dumili"; +import { FullEntry } from "~/services/indexations/types"; import CoaServices from "~dm-services/coa/types"; import { storyKinds } from "~dumili-types/storyKinds"; import { useSocket } from "~socket.io-client-services/index"; @@ -163,7 +164,7 @@ export default (io: Server) => { "a".charCodeAt(0) - 1); const indexationId = indexationSocket.data.indexation.id; - const entriesToCreate: (Pick & Pick & Pick & { pages: { pageId: number, panels: typeof panelsPerPage[number] }[] })[] = [] + const entriesToCreate: (Pick & Pick & { entryPages: { pageId: number, panels: typeof panelsPerPage[number] }[] })[] = [] panelsPerPage.forEach((panelsOfPage, idx) => { const pageId = indexationSocket.data.indexation.pages[idx].id const inferredKind = storyKinds.find( @@ -187,20 +188,19 @@ export default (io: Server) => { entriesToCreate.push({ position, kind: inferredKind, - pageNumber: idx + 1, - pages: [page] + entryPages: [page] }) previousPosition = position } else { - entriesToCreate[entriesToCreate.length - 1].pages.push(page) + entriesToCreate[entriesToCreate.length - 1].entryPages.push(page) } }) - await prisma.$transaction(entriesToCreate.map(({ pages }, idx) => + await prisma.$transaction(entriesToCreate.map(({ entryPages }, idx) => prisma.page.update({ where: { - id: pages[idx].pageId + id: entryPages[idx].pageId }, include: { aiKumikoResultPanels: true @@ -208,7 +208,7 @@ export default (io: Server) => { data: { aiKumikoResultPanels: { createMany: { - data: pages[idx].panels + data: entryPages[idx].panels } }, } @@ -242,22 +242,11 @@ export default (io: Server) => { }, }); - await prisma.$transaction(entriesToCreate.map(({ position, pages }) => - prisma.entry.create({ - data: { - indexationId, - position, - entryPages: { - createMany: { - data: pages.map(({ pageId }) => ({ pageId })) - } - } - }, - }))); + await upsertEntries(entriesToCreate, indexationId) const storyKindSuggestionsToCreate = entriesToCreate - .map(({ position, kind, pages }) => [ - { position, kind, aiSourcePageId: pages[0].pageId }, + .map(({ position, kind, entryPages }) => [ + { position, kind, aiSourcePageId: entryPages[0].pageId }, ...storyKinds .filter(({ code }) => code !== kind) .map(({ code }) => ({ position, kind: code, aiSourcePageId: null }))]) @@ -279,7 +268,7 @@ export default (io: Server) => { callback({ error: "Kumiko output could not be parsed", }) - })) + })); indexationSocket.on("runOcr", async (pageUrl, callback) => { const page = indexationSocket.data.indexation.pages.find( @@ -341,27 +330,13 @@ export default (io: Server) => { ))) }) - indexationSocket.on('updateIndexation', async (indexation, callback) => { - if (indexationSocket.data.indexation.id !== indexation.id) { - callback({ error: 'You are not allowed to update this resource' }) - return - } - - // await prisma.issueSuggestion.deleteMany({ - // where: { - // indexationId: indexation.id - // } - // }); - - // await prisma.entry.deleteMany({ - // where: { - // indexationId: indexation.id - // } - // }); - - // await prisma.entry.createMany({ - // data: indexation.entries - // }); + indexationSocket.on('upsertEntries', async (entries, callback) => { + await Promise.all(upsertEntries(entries.map(({ id, pageIds }, idx) => ({ + id, + entryPages: pageIds.map((pageId) => ({ pageId })), + position: String.fromCharCode( + "a".charCodeAt(0) + idx) + })), indexationSocket.data.indexation.id)) callback() }) @@ -396,4 +371,32 @@ const acceptStoryKindSuggestion = (suggestion: Prisma.storyKindSuggestionUncheck where: { id: suggestion.entryId } - }); \ No newline at end of file + }); + +const upsertEntries = ( + entries: (Pick & { id?: number, entryPages: { pageId: number }[] })[], + indexationId: string) => +(entries.map(({ id, position, entryPages }) => prisma.entry.upsert({ + where: { + id: id || -1, + }, + update: { + position, + entryPages: { + connectOrCreate: entryPages.map(({ pageId }) => ({ + where: { pageId_entryId: { pageId, entryId: id || -1 } }, + create: { pageId } + })) + } + }, + create: { + indexationId, + position, + entryPages: { + createMany: { + data: entryPages.map(({ pageId }) => ({ pageId })) + } + } + }, +}) +)); \ No newline at end of file diff --git a/api/services/indexations/types.ts b/api/services/indexations/types.ts index 651c782..3e047c0 100644 --- a/api/services/indexations/types.ts +++ b/api/services/indexations/types.ts @@ -3,35 +3,37 @@ import { Prisma, storySuggestion } from "~prisma/client_dumili"; import { Errorable } from '~socket.io-services/types'; export const indexationPayloadInclude = { - pages: { - include: { - aiKumikoResultPanels: true, - aiOcrPossibleStories: { - include: { - storySuggestions: true - } - }, - aiOcrResults: true, - } - }, - acceptedIssueSuggestion: true, - issueSuggestions: true, - entries: { - include: { - entryPages: true, - acceptedSuggestedStory: true, - acceptedSuggestedStoryKind: true, - storyKindSuggestions: { - include: { - acceptedOnEntries: true - } - }, - storySuggestions: true, - } + pages: { + include: { + aiKumikoResultPanels: true, + aiOcrPossibleStories: { + include: { + storySuggestions: true + } + }, + aiOcrResults: true, + } + }, + acceptedIssueSuggestion: true, + issueSuggestions: true, + entries: { + include: { + entryPages: true, + acceptedSuggestedStory: true, + acceptedSuggestedStoryKind: true, + storyKindSuggestions: { + include: { + acceptedOnEntries: true + } + }, + storySuggestions: true, } + } } as const -export type FullIndexation = Prisma.indexationGetPayload< {include: typeof indexationPayloadInclude}> +export type FullIndexation = Prisma.indexationGetPayload<{ include: typeof indexationPayloadInclude }> + +export type FullEntry = FullIndexation['entries'][number] export type IndexationWithFirstPage = Prisma.indexationGetPayload<{ include: { @@ -47,25 +49,25 @@ export type IndexationWithFirstPage = Prisma.indexationGetPayload<{ export default abstract class { static namespaceEndpoint: string = "/indexations"; - abstract getIndexations: (callback: (data: Errorable<{indexations: IndexationWithFirstPage[]}, "Error">) => void) => void; + abstract getIndexations: (callback: (data: Errorable<{ indexations: IndexationWithFirstPage[] }, "Error">) => void) => void; } export abstract class IndexationEvents { - abstract loadIndexation: (callback: (data: Errorable<{indexation: FullIndexation}, "Error">) => void) => void; + abstract loadIndexation: (callback: (data: Errorable<{ indexation: FullIndexation }, "Error">) => void) => void; - abstract createOcrDetails: (suggestion: Prisma.aiOcrPossibleStoryCreateInput, callback: (data: Errorable<{status: 'OK'}, 'You are not allowed to update this resource'>) => void) => void; + abstract createOcrDetails: (suggestion: Prisma.aiOcrPossibleStoryCreateInput, callback: (data: Errorable<{ status: 'OK' }, 'You are not allowed to update this resource'>) => void) => void; - abstract createStorySuggestion: (suggestion: Prisma.storySuggestionUncheckedCreateInput, callback: (data: Errorable<{suggestionId: storySuggestion['id']}, 'You are not allowed to update this resource'>) => void) => void; - - abstract acceptStorySuggestion: (suggestion: storySuggestion, callback: (data: Errorable<{status: 'OK'}, 'You are not allowed to update this resource'>) => void) => void; + abstract createStorySuggestion: (suggestion: Prisma.storySuggestionUncheckedCreateInput, callback: (data: Errorable<{ suggestionId: storySuggestion['id'] }, 'You are not allowed to update this resource'>) => void) => void; - abstract acceptIssueSuggestion: (suggestion: Prisma.issueSuggestionUncheckedCreateInput, callback: (data: Errorable<{status: 'OK'}, 'You are not allowed to update this resource'>) => void) => void; + abstract acceptStorySuggestion: (suggestion: storySuggestion, callback: (data: Errorable<{ status: 'OK' }, 'You are not allowed to update this resource'>) => void) => void; - abstract acceptStoryKindSuggestion: (suggestion: Prisma.storyKindSuggestionUncheckedCreateInput, callback: (data: Errorable<{status: 'OK'}, 'You are not allowed to update this resource'>) => void) => void; + abstract acceptIssueSuggestion: (suggestion: Prisma.issueSuggestionUncheckedCreateInput, callback: (data: Errorable<{ status: 'OK' }, 'You are not allowed to update this resource'>) => void) => void; + + abstract acceptStoryKindSuggestion: (suggestion: Prisma.storyKindSuggestionUncheckedCreateInput, callback: (data: Errorable<{ status: 'OK' }, 'You are not allowed to update this resource'>) => void) => void; abstract runKumiko: (callback: (data: Errorable<{ status: 'OK' }, "Kumiko output could not be parsed">) => void) => void; - abstract runOcr: (pageUrl: string, callback: (data: Errorable<{status: 'OK'}, "Invalid page URL"|"OCR error">) => void) => void; + abstract runOcr: (pageUrl: string, callback: (data: Errorable<{ status: 'OK' }, "Invalid page URL" | "OCR error">) => void) => void; + + abstract upsertEntries: (entries: ({ id?: number, pageIds: number[] })[], callback: (data: Errorable) => void) => void - abstract updateIndexation: (indexation: FullIndexation, callback: (data: Errorable) => void) => void - } \ No newline at end of file diff --git a/package.json b/package.json index d3762e2..c96ac6f 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "node": ">=18.0.0 <19.0.0" }, "scripts": { - "dumili": "concurrently -p \"[dumili-{name}]\" --kill-others-on-fail -n front,api,dm,kumiko,paddleocr \"pnpm -F ~dumili dev\" \"pnpm -F ~dumili-api dev\" \"pnpm -F ~web web\" \"docker compose -f docker-compose-dev.yml up\"", + "dumili": "concurrently -p \"[dumili-{name}]\" --kill-others-on-fail -n front,api,dm,kumiko+paddleocr \"pnpm -F ~dumili dev\" \"pnpm -F ~dumili-api dev\" \"pnpm -F ~web web\" \"docker compose -f docker-compose-dev.yml up kumiko db\"", "dev": "concurrently -n vite,vue-tsc \"vite --port 8004\" \"vue-tsc --noEmit --watch\"", "build": "vite build", "preview": "vite preview", diff --git a/src/components/Book.vue b/src/components/Book.vue index 0247f31..280f178 100644 --- a/src/components/Book.vue +++ b/src/components/Book.vue @@ -18,7 +18,6 @@
- - - - - - - Page {{ pageNumber }}
- -
-
-
- - - - - - - - -
-
+
@@ -224,25 +127,18 @@ diff --git a/src/components/TableOfContents.vue b/src/components/TableOfContents.vue new file mode 100644 index 0000000..590516d --- /dev/null +++ b/src/components/TableOfContents.vue @@ -0,0 +1,217 @@ + + + + + \ No newline at end of file diff --git a/src/stores/suggestions.ts b/src/stores/suggestions.ts index 32b3d5d..e14eca9 100644 --- a/src/stores/suggestions.ts +++ b/src/stores/suggestions.ts @@ -13,10 +13,6 @@ export const suggestions = defineStore("suggestions", () => { acceptedStories = ref>( {} ); - // pendingIssueSuggestions = computed( - // () => indexation.value?.issueSuggestions - // ); - const entriesFirstPages = computed(() => { const firstPages: { entryId: number; @@ -51,18 +47,6 @@ export const suggestions = defineStore("suggestions", () => { indexation.value = data.indexation; }; - watch( - indexation, - async (newIndexation) => { - if (newIndexation) { - await getIndexationSocket(newIndexation.id).updateIndexation( - newIndexation - ); - } - }, - { deep: true } - ); - watch( () => indexation.value?.entries, async (entries) => { From e42b705bb72ee82f6740e947e0dddbfb70cfb764 Mon Sep 17 00:00:00 2001 From: Bruno Perel Date: Sat, 2 Mar 2024 17:47:17 +0100 Subject: [PATCH 26/41] WIP --- api/services/indexations/index.ts | 166 +++++++++++++++++++---------- api/services/indexations/kumiko.ts | 4 +- src/components/Entry.vue | 4 +- src/components/TableOfContents.vue | 82 +++++++++----- src/stores/suggestions.ts | 6 +- 5 files changed, 171 insertions(+), 91 deletions(-) diff --git a/api/services/indexations/index.ts b/api/services/indexations/index.ts index cc4ade9..27e9f77 100644 --- a/api/services/indexations/index.ts +++ b/api/services/indexations/index.ts @@ -8,7 +8,7 @@ import { SessionData, SessionDataWithIndexation, } from "~/index"; -import { entry, Prisma, storyKindSuggestion, storySuggestion } from "~/prisma/client_dumili"; +import { entry, Prisma, storyKind, storyKindSuggestion, storySuggestion } from "~/prisma/client_dumili"; import { FullEntry } from "~/services/indexations/types"; import CoaServices from "~dm-services/coa/types"; import { storyKinds } from "~dumili-types/storyKinds"; @@ -23,7 +23,7 @@ const coaServices = socket.addNamespace( import { Server } from "socket.io"; import { RequiredAuthMiddleware } from "../_auth"; -import { runKumiko } from "./kumiko"; +import { KumikoProcessedResult, runKumiko } from "./kumiko"; import { extendBoundaries, runOcr } from "./ocr"; import Events, { IndexationEvents, indexationPayloadInclude } from "./types"; @@ -160,37 +160,29 @@ export default (io: Server) => { ) ).then(async (panelsPerPage) => { const storyStoryKind = storyKinds.find(({ label }) => label === 'Story')! - let previousPosition = String.fromCharCode( - "a".charCodeAt(0) - 1); - const indexationId = indexationSocket.data.indexation.id; const entriesToCreate: (Pick & Pick & { entryPages: { pageId: number, panels: typeof panelsPerPage[number] }[] })[] = [] panelsPerPage.forEach((panelsOfPage, idx) => { - const pageId = indexationSocket.data.indexation.pages[idx].id - const inferredKind = storyKinds.find( - ({ label }) => - label === - (panelsOfPage.length === 1 - ? idx === 0 - ? "Cover" - : "Illustration" - : "Story") - )!.code; - - const page = { pageId, panels: panelsOfPage } + const pageNumber = idx + 1 + const inferredKind = inferStoryKindFromAiResults(panelsOfPage, pageNumber); + + const page = { + pageId: indexationSocket.data.indexation.pages[idx].id, + panels: panelsOfPage + } // Don't create a new entry if both the previous one and this one are stories if (!( storyStoryKind.code === inferredKind && storyStoryKind.code === entriesToCreate[entriesToCreate.length - 1]?.kind )) { - const position = String.fromCharCode(previousPosition.charCodeAt(0) + 1) + const position = String.fromCharCode(([...entriesToCreate].pop()?.position || String.fromCharCode( + "a".charCodeAt(0) - 1)).charCodeAt(0) + 1) entriesToCreate.push({ position, kind: inferredKind, entryPages: [page] }) - previousPosition = position } else { entriesToCreate[entriesToCreate.length - 1].entryPages.push(page) @@ -244,18 +236,7 @@ export default (io: Server) => { await upsertEntries(entriesToCreate, indexationId) - const storyKindSuggestionsToCreate = entriesToCreate - .map(({ position, kind, entryPages }) => [ - { position, kind, aiSourcePageId: entryPages[0].pageId }, - ...storyKinds - .filter(({ code }) => code !== kind) - .map(({ code }) => ({ position, kind: code, aiSourcePageId: null }))]) - .flat() - - await prisma.$transaction(storyKindSuggestionsToCreate.map(({ position, kind, aiSourcePageId }) => prisma.$queryRaw` - INSERT INTO story_kind_suggestion (kind, ai_source_page_id, entry_id) - VALUES (${kind}, ${aiSourcePageId}, (SELECT id FROM entry WHERE indexation_id = ${indexationId} AND position = ${position}))` - )) + await createStoryKindSuggestions(indexationId, entriesToCreate) await prisma.$transaction(entriesToCreate.map(({ position, kind }) => prisma.$queryRaw` UPDATE entry @@ -331,18 +312,61 @@ export default (io: Server) => { }) indexationSocket.on('upsertEntries', async (entries, callback) => { - await Promise.all(upsertEntries(entries.map(({ id, pageIds }, idx) => ({ + const maxEntryId = (await prisma.entry.findFirst({ + select: { + id: true + }, + orderBy: { + id: 'desc' + } + }))?.id || -1; + const newAndUpdatedEntries = await upsertEntries(entries.map(({ id, pageIds }, idx) => ({ id, entryPages: pageIds.map((pageId) => ({ pageId })), position: String.fromCharCode( "a".charCodeAt(0) + idx) - })), indexationSocket.data.indexation.id)) + })), indexationSocket.data.indexation.id) + + const newEntries = await prisma.entry.findMany({ + include: { + entryPages: { + include: { + page: { + include: { + aiKumikoResultPanels: true + } + } + } + } + }, + where: { + id: { + in: newAndUpdatedEntries.map(({ id }) => id).filter((id) => id > maxEntryId) + } + } + }); + + await createStoryKindSuggestions(indexationSocket.data.indexation.id, newEntries.map(({ position, entryPages }) => ({ + entryPages, + position, + kind: inferStoryKindFromAiResults(entryPages[0].page.aiKumikoResultPanels, entryPages[0].page.pageNumber) + }))); callback() }) }); }; +const inferStoryKindFromAiResults = (panelsOfPage: KumikoProcessedResult[], pageNumber: number) => storyKinds.find( + ({ label }) => + label === + (panelsOfPage.length === 1 + ? pageNumber === 1 + ? "Cover" + : "Illustration" + : "Story") +)!.code; + const acceptStorySuggestion = (suggestion: storySuggestion) => prisma.entry.update({ data: { acceptedSuggestedStoryKind: { @@ -373,30 +397,58 @@ const acceptStoryKindSuggestion = (suggestion: Prisma.storyKindSuggestionUncheck } }); -const upsertEntries = ( +const createStoryKindSuggestions = ( + indexationId: string, + entries: { entryPages: { pageId: number }[], position: string, kind: storyKind }[] +) => Promise.all([ + prisma.$transaction( + entries + .map(({ position, kind, entryPages }) => [ + { position, kind, aiSourcePageId: entryPages[0].pageId }, + ...storyKinds + .filter(({ code }) => code !== kind) + .map(({ code }) => ({ position, kind: code, aiSourcePageId: null }))]) + .flat().map(({ position, kind, aiSourcePageId }) => + prisma.$queryRaw` + INSERT INTO story_kind_suggestion (kind, ai_source_page_id, entry_id) + VALUES (${kind}, ${aiSourcePageId}, (SELECT id FROM entry WHERE indexation_id = ${indexationId} AND position = ${position}))` + )), + + prisma.$transaction(entries.map(({ position, kind }) => + prisma.$queryRaw` + UPDATE entry + SET accepted_story_kind_suggested_id = (SELECT id FROM story_kind_suggestion WHERE entry_id = (SELECT id FROM entry WHERE indexation_id = ${indexationId} AND position = ${position}) AND kind = ${kind})` + ))]); + +const upsertEntries = async ( entries: (Pick & { id?: number, entryPages: { pageId: number }[] })[], indexationId: string) => -(entries.map(({ id, position, entryPages }) => prisma.entry.upsert({ - where: { - id: id || -1, - }, - update: { - position, - entryPages: { - connectOrCreate: entryPages.map(({ pageId }) => ({ - where: { pageId_entryId: { pageId, entryId: id || -1 } }, - create: { pageId } - })) - } - }, - create: { - indexationId, - position, - entryPages: { - createMany: { - data: entryPages.map(({ pageId }) => ({ pageId })) + await Promise.all(entries.map(({ id, position, entryPages }) => prisma.entry.upsert({ + where: { + id: id || -1, + }, + update: { + position, + entryPages: { + connectOrCreate: entryPages.map(({ pageId }) => ({ + where: { pageId_entryId: { pageId, entryId: id || -1 } }, + create: { pageId } + })), + deleteMany: { + pageId: { + notIn: entryPages.map(({ pageId }) => pageId) + } + } } - } - }, -}) -)); \ No newline at end of file + }, + create: { + indexationId, + position, + entryPages: { + createMany: { + data: entryPages.map(({ pageId }) => ({ pageId })) + } + } + }, + }) + )); \ No newline at end of file diff --git a/api/services/indexations/kumiko.ts b/api/services/indexations/kumiko.ts index cf2b96d..cabf88e 100644 --- a/api/services/indexations/kumiko.ts +++ b/api/services/indexations/kumiko.ts @@ -10,7 +10,9 @@ type KumikoResult = { panels: [number, number, number, number][]; }; -export const runKumiko = async (urls: string[]): Promise[][]> => +export type KumikoProcessedResult = Pick; + +export const runKumiko = async (urls: string[]): Promise => (axios.get(`${process.env.KUMIKO_HOST}?i=${urls.join(",")}`)) .then((result) => { return result.data as KumikoResult[]}).then(data => data.map( ({ panels }) => panels.map(([ x, y, width, height ]) => ({ diff --git a/src/components/Entry.vue b/src/components/Entry.vue index 51c0af4..ed04d5b 100644 --- a/src/components/Entry.vue +++ b/src/components/Entry.vue @@ -144,13 +144,13 @@ import { getIndexationSocket } from "~/composables/useDumiliSocket"; import { suggestions } from "~/stores/suggestions"; import { user } from "~/stores/ui"; -import { FullIndexation } from "~dumili-services/indexations/types"; +import { FullEntry } from "~dumili-services/indexations/types"; import { storyKinds } from "~dumili-types/storyKinds"; import { entry, storyKind } from "~prisma/client_dumili"; const { t: $t } = useI18n(); const props = defineProps<{ - entry: FullIndexation["entries"][0]; + entry: FullEntry; editable: boolean; }>(); diff --git a/src/components/TableOfContents.vue b/src/components/TableOfContents.vue index 590516d..d8bc6ef 100644 --- a/src/components/TableOfContents.vue +++ b/src/components/TableOfContents.vue @@ -36,9 +36,10 @@ 'fw-bold': shownPages.includes(pageNumber - 1), }" @click="currentPage = pageNumber - 1" - >Page {{ pageNumber }}
Page {{ pageNumber }}
@@ -53,24 +54,28 @@ v-for="({ entry, pageIds }, idx) in entryPages" :key="entry.url" > +