From 013f66b0202e9640bf99fe6cf869e8e35fce8e0d Mon Sep 17 00:00:00 2001 From: Ashley Date: Tue, 17 Oct 2023 10:15:44 +0100 Subject: [PATCH 01/48] update --- frontend/package-lock.json | 108 +++++ frontend/package.json | 1 + frontend/src/main.ts | 2 + frontend/src/modules/settings/pages/Main.vue | 14 +- .../src/modules/settings/pages/Support.vue | 46 ++ .../src/modules/settings/router/children.ts | 6 + .../src/modules/settings/views/Settings.vue | 2 +- frontend/src/plugins/rocketChat.ts | 16 + frontend/src/shims/widget.d.ts | 3 + frontend/src/ts/utils/rocketChat.ts | 456 ++++++++++++++++++ frontend/vite.config.ts | 17 +- 11 files changed, 660 insertions(+), 11 deletions(-) create mode 100644 frontend/src/modules/settings/pages/Support.vue create mode 100644 frontend/src/plugins/rocketChat.ts create mode 100644 frontend/src/shims/widget.d.ts create mode 100644 frontend/src/ts/utils/rocketChat.ts diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 49744371f..3900a2da2 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -23,6 +23,7 @@ "@nanogiants/vue3-longpress": "^1.0.8", "@passwordless-id/webauthn": "^1.2.6", "@popperjs/core": "^2.11.8", + "@rocket.chat/sdk": "^0.2.9-2", "@segment/analytics-next": "^1.55.0", "@sentry/vue": "^7.64.0", "@simplewebauthn/browser": "^8.0.2", @@ -3599,6 +3600,41 @@ "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, + "node_modules/@rocket.chat/sdk": { + "version": "0.2.9-2", + "resolved": "https://registry.npmjs.org/@rocket.chat/sdk/-/sdk-0.2.9-2.tgz", + "integrity": "sha512-T8No2GI9Zez2638n79GtTkE73P4A0QdHhsh/G1ioNjpcEYmjWy8bbtGiBZcFNLTy4CaJSWj81zZ7eoaUUYr2MQ==", + "dependencies": { + "@types/lru-cache": "^4.1.0", + "@types/node": "^9.4.6", + "asteroid": "github:rocketchat/asteroid", + "lru-cache": "^4.1.1", + "node-rest-client": "^3.1.0" + }, + "engines": { + "node": "> 8.0.0", + "npm": "> 5.0.0" + } + }, + "node_modules/@rocket.chat/sdk/node_modules/@types/node": { + "version": "9.6.61", + "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.61.tgz", + "integrity": "sha512-/aKAdg5c8n468cYLy2eQrcR5k6chlbNwZNGUj3TboyPa2hcO2QAJcfymlqPzMiRj8B6nYKXjzQz36minFE0RwQ==" + }, + "node_modules/@rocket.chat/sdk/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/@rocket.chat/sdk/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" + }, "node_modules/@rollup/pluginutils": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", @@ -6932,6 +6968,11 @@ "integrity": "sha512-trNJ/vtMZYMLhfN45uLq4ShQSw0/S7xCTLLVM+WM1rmFpba/VS42jVUgaO3w/NOLiWR/09lnYk0yMaA/atdIsg==", "optional": true }, + "node_modules/@types/lru-cache": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-4.1.3.tgz", + "integrity": "sha512-QjCOmf5kYwekcsfEKhcEHMK8/SvgnneuSDXFERBuC/DPca2KJIO/gpChTsVb35BoWLBpEAJWz1GFVEArSdtKtw==" + }, "node_modules/@types/micromatch": { "version": "2.3.31", "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-2.3.31.tgz", @@ -8235,6 +8276,16 @@ "node": "*" } }, + "node_modules/asteroid": { + "version": "0.6.1", + "resolved": "git+ssh://git@github.com/rocketchat/asteroid.git#a76a53254e381f9487aa2a9be3d874c9a2df6552", + "license": "MIT", + "dependencies": { + "ddp.js": "^0.5.0", + "faye-websocket": "^0.11.0", + "q": "^1.0.1" + } + }, "node_modules/astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -10084,6 +10135,11 @@ "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==", "dev": true }, + "node_modules/ddp.js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/ddp.js/-/ddp.js-0.5.0.tgz", + "integrity": "sha512-jDsrOfTusxHLrUTZt6q/WeZk90TEcVRKTY5uIHJ1zu1Z65eXfrl6DvUdgf1JdwkYeCaSUvuAXKEkDNsxDQiJhQ==" + }, "node_modules/de-indent": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", @@ -14692,6 +14748,19 @@ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" }, + "node_modules/node-rest-client": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/node-rest-client/-/node-rest-client-3.1.1.tgz", + "integrity": "sha512-O8RUGGhGLLbzlL7SFOBza1AgUWP3uITv4mas4f5Q7A87HAy6qtYpa8Sj5x4UG9cDf4374v7lWyvgWladI04zzQ==", + "dependencies": { + "debug": "~4.3.3", + "follow-redirects": ">=1.14.7", + "xml2js": ">=0.4.23" + }, + "engines": { + "node": "*" + } + }, "node_modules/nopt": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", @@ -15823,6 +15892,11 @@ "node": ">= 0.10" } }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" + }, "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", @@ -15848,6 +15922,15 @@ "node": ">=6" } }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, "node_modules/qrcode": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.3.tgz", @@ -16702,6 +16785,11 @@ "node": ">=14.0.0" } }, + "node_modules/sax": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==" + }, "node_modules/saxes": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", @@ -20998,6 +21086,26 @@ "resolved": "https://registry.npmjs.org/xml-utils/-/xml-utils-1.7.0.tgz", "integrity": "sha512-bWB489+RQQclC7A9OW8e5BzbT8Tu//jtAOvkYwewFr+Q9T9KDGvfzC1lp0pYPEQPEoPQLDkmxkepSC/2gIAZGw==" }, + "node_modules/xml2js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", + "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "engines": { + "node": ">=4.0" + } + }, "node_modules/xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index b8e45933f..9989aa9c2 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -32,6 +32,7 @@ "@nanogiants/vue3-longpress": "^1.0.8", "@passwordless-id/webauthn": "^1.2.6", "@popperjs/core": "^2.11.8", + "@rocket.chat/sdk": "^0.2.9-2", "@segment/analytics-next": "^1.55.0", "@sentry/vue": "^7.64.0", "@simplewebauthn/browser": "^8.0.2", diff --git a/frontend/src/main.ts b/frontend/src/main.ts index 8ea40d8ec..5954fbdf3 100644 --- a/frontend/src/main.ts +++ b/frontend/src/main.ts @@ -15,6 +15,7 @@ import FloatingVue from "floating-vue"; import Modal from "./plugins/modal"; import OpenLayersMap from "vue3-openlayers"; import ProgressOptions from "./assets/configs/DefaultProgress"; +import RocketChat from "./plugins/rocketChat"; import Sentry from "./plugins/sentry"; import ToastOptions from "./assets/configs/DefaultToasts"; import ToastPlugin from "vue-toastification"; @@ -60,6 +61,7 @@ app.use(Modal); app.use(WebShare); app.use(Firebase); app.use(Tours, { i18n: i18n }); +app.use(RocketChat); app.component("VueFeather", VueFeather); diff --git a/frontend/src/modules/settings/pages/Main.vue b/frontend/src/modules/settings/pages/Main.vue index 906e24595..a139f0307 100644 --- a/frontend/src/modules/settings/pages/Main.vue +++ b/frontend/src/modules/settings/pages/Main.vue @@ -16,7 +16,7 @@ -
+
diff --git a/apps/wizarr-frontend/src/components/FormKit/ButtonInput.vue b/apps/wizarr-frontend/src/components/FormKit/ButtonInput.vue new file mode 100644 index 000000000..148459ddc --- /dev/null +++ b/apps/wizarr-frontend/src/components/FormKit/ButtonInput.vue @@ -0,0 +1,95 @@ + + + diff --git a/frontend/src/components/FormKit/OneTimePassword.vue b/apps/wizarr-frontend/src/components/FormKit/OneTimePassword.vue similarity index 66% rename from frontend/src/components/FormKit/OneTimePassword.vue rename to apps/wizarr-frontend/src/components/FormKit/OneTimePassword.vue index fa7462dc1..de64039fe 100644 --- a/frontend/src/components/FormKit/OneTimePassword.vue +++ b/apps/wizarr-frontend/src/components/FormKit/OneTimePassword.vue @@ -1,5 +1,13 @@ diff --git a/frontend/src/components/FormKit/OptionalInput.vue b/apps/wizarr-frontend/src/components/FormKit/OptionalInput.vue similarity index 78% rename from frontend/src/components/FormKit/OptionalInput.vue rename to apps/wizarr-frontend/src/components/FormKit/OptionalInput.vue index dc71aa193..4103cc93c 100644 --- a/frontend/src/components/FormKit/OptionalInput.vue +++ b/apps/wizarr-frontend/src/components/FormKit/OptionalInput.vue @@ -3,17 +3,22 @@ {{ context.label }} (optional) - + diff --git a/frontend/src/components/Inputs/DateInput.vue b/apps/wizarr-frontend/src/components/Inputs/DateInput.vue similarity index 50% rename from frontend/src/components/Inputs/DateInput.vue rename to apps/wizarr-frontend/src/components/Inputs/DateInput.vue index 3ab9cc6b4..6ba9d8a00 100644 --- a/frontend/src/components/Inputs/DateInput.vue +++ b/apps/wizarr-frontend/src/components/Inputs/DateInput.vue @@ -1,23 +1,39 @@ diff --git a/apps/wizarr-frontend/src/components/ListItem.vue b/apps/wizarr-frontend/src/components/ListItem.vue new file mode 100644 index 000000000..09f56f99e --- /dev/null +++ b/apps/wizarr-frontend/src/components/ListItem.vue @@ -0,0 +1,76 @@ + + + diff --git a/apps/wizarr-frontend/src/components/Loading/DefaultLoading.vue b/apps/wizarr-frontend/src/components/Loading/DefaultLoading.vue new file mode 100644 index 000000000..d81464fe2 --- /dev/null +++ b/apps/wizarr-frontend/src/components/Loading/DefaultLoading.vue @@ -0,0 +1,48 @@ + + + diff --git a/frontend/src/components/Loading/FullPageLoading.vue b/apps/wizarr-frontend/src/components/Loading/FullPageLoading.vue similarity index 67% rename from frontend/src/components/Loading/FullPageLoading.vue rename to apps/wizarr-frontend/src/components/Loading/FullPageLoading.vue index f99a38bd1..3951d8016 100644 --- a/frontend/src/components/Loading/FullPageLoading.vue +++ b/apps/wizarr-frontend/src/components/Loading/FullPageLoading.vue @@ -1,20 +1,35 @@ diff --git a/frontend/src/modules/admin/components/Users/UserManager/Permissions.vue b/apps/wizarr-frontend/src/modules/admin/components/Users/UserManager/Permissions.vue similarity index 100% rename from frontend/src/modules/admin/components/Users/UserManager/Permissions.vue rename to apps/wizarr-frontend/src/modules/admin/components/Users/UserManager/Permissions.vue diff --git a/apps/wizarr-frontend/src/modules/admin/components/Users/UserManager/Settings.vue b/apps/wizarr-frontend/src/modules/admin/components/Users/UserManager/Settings.vue new file mode 100644 index 000000000..c0f7db2b9 --- /dev/null +++ b/apps/wizarr-frontend/src/modules/admin/components/Users/UserManager/Settings.vue @@ -0,0 +1,43 @@ + + + diff --git a/frontend/src/modules/admin/components/Users/UserManager/User.vue b/apps/wizarr-frontend/src/modules/admin/components/Users/UserManager/User.vue similarity index 50% rename from frontend/src/modules/admin/components/Users/UserManager/User.vue rename to apps/wizarr-frontend/src/modules/admin/components/Users/UserManager/User.vue index 4b8cb4b10..caf17377a 100644 --- a/frontend/src/modules/admin/components/Users/UserManager/User.vue +++ b/apps/wizarr-frontend/src/modules/admin/components/Users/UserManager/User.vue @@ -2,11 +2,20 @@
-
- Profile Picture +
+ Profile Picture
- + {{ user.username }} @@ -20,12 +29,22 @@
-

{{ __("Invitation Code") }}

+

+ {{ __('Invitation Code') }} +

-
+
{{ invitationCodeValue }}
- +
@@ -33,11 +52,20 @@
-

{{ __("User Expiration") }}

+

+ {{ __('User Expiration') }} +

-
- {{ __("No expiration") }} - {{ userExpiredHumanReadable }} +
+ {{ + __('No expiration') + }} + {{ + userExpiredHumanReadable + }} {{ userExpiredDateReadable }}
@@ -46,14 +74,14 @@ diff --git a/apps/wizarr-frontend/src/modules/admin/pages/Invitations.vue b/apps/wizarr-frontend/src/modules/admin/pages/Invitations.vue new file mode 100644 index 000000000..774d2ca1e --- /dev/null +++ b/apps/wizarr-frontend/src/modules/admin/pages/Invitations.vue @@ -0,0 +1,61 @@ + + + diff --git a/apps/wizarr-frontend/src/modules/admin/pages/Settings.vue b/apps/wizarr-frontend/src/modules/admin/pages/Settings.vue new file mode 100644 index 000000000..2c87aae3c --- /dev/null +++ b/apps/wizarr-frontend/src/modules/admin/pages/Settings.vue @@ -0,0 +1,84 @@ + + + diff --git a/apps/wizarr-frontend/src/modules/admin/pages/Users.vue b/apps/wizarr-frontend/src/modules/admin/pages/Users.vue new file mode 100644 index 000000000..e5267a546 --- /dev/null +++ b/apps/wizarr-frontend/src/modules/admin/pages/Users.vue @@ -0,0 +1,59 @@ + + + diff --git a/apps/wizarr-frontend/src/modules/admin/router/children.ts b/apps/wizarr-frontend/src/modules/admin/router/children.ts new file mode 100644 index 000000000..8e76648da --- /dev/null +++ b/apps/wizarr-frontend/src/modules/admin/router/children.ts @@ -0,0 +1,26 @@ +import type { RouteRecordRaw } from 'vue-router'; + +const children: RouteRecordRaw[] = [ + { + path: '', + name: 'admin-home', + component: () => import('../pages/Home.vue'), + }, + { + path: 'invitations', + name: 'admin-invitations', + component: () => import('../pages/Invitations.vue'), + }, + { + path: 'users', + name: 'admin-users', + component: () => import('../pages/Users.vue'), + }, + { + path: 'flow-editor', + name: 'admin-flow-editor', + component: () => import('../pages/FlowEditor.vue'), + }, +]; + +export default children; diff --git a/apps/wizarr-frontend/src/modules/admin/router/index.ts b/apps/wizarr-frontend/src/modules/admin/router/index.ts new file mode 100644 index 000000000..eb6e0c92b --- /dev/null +++ b/apps/wizarr-frontend/src/modules/admin/router/index.ts @@ -0,0 +1,18 @@ +import requireAuth from '@/router/middleware/requireAuth'; +import children from './children'; +import type { RouteRecordRaw } from 'vue-router'; + +const routes: Readonly = [ + { + path: '/admin', + name: 'admin', + redirect: { name: 'admin-home' }, + component: () => import('../views/Admin.vue'), + meta: { + middleware: [requireAuth], + }, + children: children, + }, +]; + +export default routes; diff --git a/frontend/src/modules/admin/views/Admin.vue b/apps/wizarr-frontend/src/modules/admin/views/Admin.vue similarity index 64% rename from frontend/src/modules/admin/views/Admin.vue rename to apps/wizarr-frontend/src/modules/admin/views/Admin.vue index d032b738b..bd263bbb1 100644 --- a/frontend/src/modules/admin/views/Admin.vue +++ b/apps/wizarr-frontend/src/modules/admin/views/Admin.vue @@ -12,13 +12,13 @@ diff --git a/apps/wizarr-frontend/src/modules/authentication/components/UsernameForm.vue b/apps/wizarr-frontend/src/modules/authentication/components/UsernameForm.vue new file mode 100644 index 000000000..6e3a4273d --- /dev/null +++ b/apps/wizarr-frontend/src/modules/authentication/components/UsernameForm.vue @@ -0,0 +1,63 @@ + + + diff --git a/apps/wizarr-frontend/src/modules/authentication/router/index.ts b/apps/wizarr-frontend/src/modules/authentication/router/index.ts new file mode 100644 index 000000000..ef872db58 --- /dev/null +++ b/apps/wizarr-frontend/src/modules/authentication/router/index.ts @@ -0,0 +1,15 @@ +import type { RouteRecordRaw } from 'vue-router'; +import requireNoAuth from '@/router/middleware/requireNoAuth'; + +const routes: Readonly = [ + { + path: '/login', + name: 'login', + component: () => import('../views/LoginView.vue'), + meta: { + middleware: [requireNoAuth], + }, + }, +]; + +export default routes; diff --git a/frontend/src/modules/authentication/views/LoginView.vue b/apps/wizarr-frontend/src/modules/authentication/views/LoginView.vue similarity index 57% rename from frontend/src/modules/authentication/views/LoginView.vue rename to apps/wizarr-frontend/src/modules/authentication/views/LoginView.vue index 19a0d89ad..24a9e2f4a 100644 --- a/frontend/src/modules/authentication/views/LoginView.vue +++ b/apps/wizarr-frontend/src/modules/authentication/views/LoginView.vue @@ -1,24 +1,45 @@ diff --git a/apps/wizarr-frontend/src/modules/help/components/Discord.vue b/apps/wizarr-frontend/src/modules/help/components/Discord.vue new file mode 100644 index 000000000..a8918bfad --- /dev/null +++ b/apps/wizarr-frontend/src/modules/help/components/Discord.vue @@ -0,0 +1,126 @@ + + + diff --git a/apps/wizarr-frontend/src/modules/help/components/Download.vue b/apps/wizarr-frontend/src/modules/help/components/Download.vue new file mode 100644 index 000000000..ba83c1109 --- /dev/null +++ b/apps/wizarr-frontend/src/modules/help/components/Download.vue @@ -0,0 +1,31 @@ + + + diff --git a/apps/wizarr-frontend/src/modules/help/components/Jellyfin/Download.vue b/apps/wizarr-frontend/src/modules/help/components/Jellyfin/Download.vue new file mode 100644 index 000000000..6cd05e25c --- /dev/null +++ b/apps/wizarr-frontend/src/modules/help/components/Jellyfin/Download.vue @@ -0,0 +1,156 @@ + + + diff --git a/apps/wizarr-frontend/src/modules/help/components/Jellyfin/Welcome.vue b/apps/wizarr-frontend/src/modules/help/components/Jellyfin/Welcome.vue new file mode 100644 index 000000000..96131f10e --- /dev/null +++ b/apps/wizarr-frontend/src/modules/help/components/Jellyfin/Welcome.vue @@ -0,0 +1,25 @@ + + + diff --git a/apps/wizarr-frontend/src/modules/help/components/Plex/Download.vue b/apps/wizarr-frontend/src/modules/help/components/Plex/Download.vue new file mode 100644 index 000000000..5564efdc9 --- /dev/null +++ b/apps/wizarr-frontend/src/modules/help/components/Plex/Download.vue @@ -0,0 +1,47 @@ + diff --git a/apps/wizarr-frontend/src/modules/help/components/Plex/Welcome.vue b/apps/wizarr-frontend/src/modules/help/components/Plex/Welcome.vue new file mode 100644 index 000000000..6c0222ea6 --- /dev/null +++ b/apps/wizarr-frontend/src/modules/help/components/Plex/Welcome.vue @@ -0,0 +1,35 @@ + + + diff --git a/apps/wizarr-frontend/src/modules/help/components/Welcome.vue b/apps/wizarr-frontend/src/modules/help/components/Welcome.vue new file mode 100644 index 000000000..81b275584 --- /dev/null +++ b/apps/wizarr-frontend/src/modules/help/components/Welcome.vue @@ -0,0 +1,31 @@ + + + diff --git a/apps/wizarr-frontend/src/modules/help/router/index.ts b/apps/wizarr-frontend/src/modules/help/router/index.ts new file mode 100644 index 000000000..3348fdf91 --- /dev/null +++ b/apps/wizarr-frontend/src/modules/help/router/index.ts @@ -0,0 +1,20 @@ +import openServer from '@/router/middleware/openServer'; +import type { RouteRecordRaw } from 'vue-router'; + +const routes: Readonly = [ + { + path: '/help', + name: 'help', + component: () => import('../views/Help.vue'), + }, + { + path: '/open', + name: 'open', + component: () => '', + meta: { + middleware: [openServer], + }, + }, +]; + +export default routes; diff --git a/apps/wizarr-frontend/src/modules/help/views/Help.vue b/apps/wizarr-frontend/src/modules/help/views/Help.vue new file mode 100644 index 000000000..e313b1e1f --- /dev/null +++ b/apps/wizarr-frontend/src/modules/help/views/Help.vue @@ -0,0 +1,79 @@ + + + diff --git a/apps/wizarr-frontend/src/modules/home/router/index.ts b/apps/wizarr-frontend/src/modules/home/router/index.ts new file mode 100644 index 000000000..2e983aed2 --- /dev/null +++ b/apps/wizarr-frontend/src/modules/home/router/index.ts @@ -0,0 +1,11 @@ +import type { RouteRecordRaw } from 'vue-router'; + +const routes: Readonly = [ + { + path: '/', + name: 'home', + component: () => import('../views/Home.vue'), + }, +]; + +export default routes; diff --git a/apps/wizarr-frontend/src/modules/home/views/Home.vue b/apps/wizarr-frontend/src/modules/home/views/Home.vue new file mode 100644 index 000000000..d2b13c735 --- /dev/null +++ b/apps/wizarr-frontend/src/modules/home/views/Home.vue @@ -0,0 +1,85 @@ + + + diff --git a/apps/wizarr-frontend/src/modules/join/events.ts b/apps/wizarr-frontend/src/modules/join/events.ts new file mode 100644 index 000000000..88eeaaff7 --- /dev/null +++ b/apps/wizarr-frontend/src/modules/join/events.ts @@ -0,0 +1,6 @@ +import mitt from 'mitt'; +import type { EventRecords } from './types/EventRecords'; + +const eventBus = mitt(); + +export default eventBus; diff --git a/apps/wizarr-frontend/src/modules/join/pages/Complete.vue b/apps/wizarr-frontend/src/modules/join/pages/Complete.vue new file mode 100644 index 000000000..389343fff --- /dev/null +++ b/apps/wizarr-frontend/src/modules/join/pages/Complete.vue @@ -0,0 +1,40 @@ + + + diff --git a/apps/wizarr-frontend/src/modules/join/pages/Error.vue b/apps/wizarr-frontend/src/modules/join/pages/Error.vue new file mode 100644 index 000000000..1259f2938 --- /dev/null +++ b/apps/wizarr-frontend/src/modules/join/pages/Error.vue @@ -0,0 +1,55 @@ + + + diff --git a/apps/wizarr-frontend/src/modules/join/pages/Jellyfin/Signup.vue b/apps/wizarr-frontend/src/modules/join/pages/Jellyfin/Signup.vue new file mode 100644 index 000000000..019f0d8da --- /dev/null +++ b/apps/wizarr-frontend/src/modules/join/pages/Jellyfin/Signup.vue @@ -0,0 +1,107 @@ + + + diff --git a/apps/wizarr-frontend/src/modules/join/pages/JoinForm.vue b/apps/wizarr-frontend/src/modules/join/pages/JoinForm.vue new file mode 100644 index 000000000..ecd0a1876 --- /dev/null +++ b/apps/wizarr-frontend/src/modules/join/pages/JoinForm.vue @@ -0,0 +1,68 @@ + + + diff --git a/apps/wizarr-frontend/src/modules/join/pages/Payment.vue b/apps/wizarr-frontend/src/modules/join/pages/Payment.vue new file mode 100644 index 000000000..a3f83ba32 --- /dev/null +++ b/apps/wizarr-frontend/src/modules/join/pages/Payment.vue @@ -0,0 +1,48 @@ + + + diff --git a/apps/wizarr-frontend/src/modules/join/pages/Plex/Signup.vue b/apps/wizarr-frontend/src/modules/join/pages/Plex/Signup.vue new file mode 100644 index 000000000..11a60f00e --- /dev/null +++ b/apps/wizarr-frontend/src/modules/join/pages/Plex/Signup.vue @@ -0,0 +1,65 @@ + + + diff --git a/apps/wizarr-frontend/src/modules/join/pages/Signup.vue b/apps/wizarr-frontend/src/modules/join/pages/Signup.vue new file mode 100644 index 000000000..79a09cff0 --- /dev/null +++ b/apps/wizarr-frontend/src/modules/join/pages/Signup.vue @@ -0,0 +1,26 @@ + + + diff --git a/frontend/src/modules/join/pages/Stepper.vue b/apps/wizarr-frontend/src/modules/join/pages/Stepper.vue similarity index 58% rename from frontend/src/modules/join/pages/Stepper.vue rename to apps/wizarr-frontend/src/modules/join/pages/Stepper.vue index ed73c8f10..09e0aac08 100644 --- a/frontend/src/modules/join/pages/Stepper.vue +++ b/apps/wizarr-frontend/src/modules/join/pages/Stepper.vue @@ -3,12 +3,12 @@ diff --git a/apps/wizarr-frontend/src/modules/settings/components/APIKeys/APIKeys.vue b/apps/wizarr-frontend/src/modules/settings/components/APIKeys/APIKeys.vue new file mode 100644 index 000000000..7dcba9f72 --- /dev/null +++ b/apps/wizarr-frontend/src/modules/settings/components/APIKeys/APIKeys.vue @@ -0,0 +1,47 @@ + + + diff --git a/apps/wizarr-frontend/src/modules/settings/components/APIKeys/APIKeysForm.vue b/apps/wizarr-frontend/src/modules/settings/components/APIKeys/APIKeysForm.vue new file mode 100644 index 000000000..0d7b486b1 --- /dev/null +++ b/apps/wizarr-frontend/src/modules/settings/components/APIKeys/APIKeysForm.vue @@ -0,0 +1,83 @@ + + + diff --git a/apps/wizarr-frontend/src/modules/settings/components/APIKeys/APIKeysItem.vue b/apps/wizarr-frontend/src/modules/settings/components/APIKeys/APIKeysItem.vue new file mode 100644 index 000000000..23ad34a00 --- /dev/null +++ b/apps/wizarr-frontend/src/modules/settings/components/APIKeys/APIKeysItem.vue @@ -0,0 +1,98 @@ + + + diff --git a/apps/wizarr-frontend/src/modules/settings/components/Forms/MediaForm.vue b/apps/wizarr-frontend/src/modules/settings/components/Forms/MediaForm.vue new file mode 100644 index 000000000..baf10d273 --- /dev/null +++ b/apps/wizarr-frontend/src/modules/settings/components/Forms/MediaForm.vue @@ -0,0 +1,270 @@ + + + diff --git a/apps/wizarr-frontend/src/modules/settings/components/Forms/RequestForm.vue b/apps/wizarr-frontend/src/modules/settings/components/Forms/RequestForm.vue new file mode 100644 index 000000000..ce4786b08 --- /dev/null +++ b/apps/wizarr-frontend/src/modules/settings/components/Forms/RequestForm.vue @@ -0,0 +1,96 @@ + + + diff --git a/apps/wizarr-frontend/src/modules/settings/components/Forms/WebhookForm.vue b/apps/wizarr-frontend/src/modules/settings/components/Forms/WebhookForm.vue new file mode 100644 index 000000000..4dc001839 --- /dev/null +++ b/apps/wizarr-frontend/src/modules/settings/components/Forms/WebhookForm.vue @@ -0,0 +1,50 @@ + + + diff --git a/frontend/src/modules/settings/components/Membership/Register.vue b/apps/wizarr-frontend/src/modules/settings/components/Membership/Register.vue similarity index 67% rename from frontend/src/modules/settings/components/Membership/Register.vue rename to apps/wizarr-frontend/src/modules/settings/components/Membership/Register.vue index eda0350b6..409fcf642 100644 --- a/frontend/src/modules/settings/components/Membership/Register.vue +++ b/apps/wizarr-frontend/src/modules/settings/components/Membership/Register.vue @@ -1,8 +1,15 @@ diff --git a/frontend/src/modules/settings/pages/Media.vue b/apps/wizarr-frontend/src/modules/settings/pages/Media.vue similarity index 57% rename from frontend/src/modules/settings/pages/Media.vue rename to apps/wizarr-frontend/src/modules/settings/pages/Media.vue index 12c3659e3..528970a0b 100644 --- a/frontend/src/modules/settings/pages/Media.vue +++ b/apps/wizarr-frontend/src/modules/settings/pages/Media.vue @@ -1,18 +1,29 @@ diff --git a/apps/wizarr-frontend/src/modules/settings/pages/Passkeys.vue b/apps/wizarr-frontend/src/modules/settings/pages/Passkeys.vue new file mode 100644 index 000000000..92d137d2d --- /dev/null +++ b/apps/wizarr-frontend/src/modules/settings/pages/Passkeys.vue @@ -0,0 +1,38 @@ + + + diff --git a/apps/wizarr-frontend/src/modules/settings/pages/Requests.vue b/apps/wizarr-frontend/src/modules/settings/pages/Requests.vue new file mode 100644 index 000000000..072f4c585 --- /dev/null +++ b/apps/wizarr-frontend/src/modules/settings/pages/Requests.vue @@ -0,0 +1,39 @@ + + + diff --git a/frontend/src/modules/settings/pages/Sessions.vue b/apps/wizarr-frontend/src/modules/settings/pages/Sessions.vue similarity index 54% rename from frontend/src/modules/settings/pages/Sessions.vue rename to apps/wizarr-frontend/src/modules/settings/pages/Sessions.vue index 4310c99e0..4cc42cfd1 100644 --- a/frontend/src/modules/settings/pages/Sessions.vue +++ b/apps/wizarr-frontend/src/modules/settings/pages/Sessions.vue @@ -3,12 +3,12 @@ diff --git a/frontend/src/modules/settings/pages/Tasks.vue b/apps/wizarr-frontend/src/modules/settings/pages/Tasks.vue similarity index 55% rename from frontend/src/modules/settings/pages/Tasks.vue rename to apps/wizarr-frontend/src/modules/settings/pages/Tasks.vue index 3252efe8b..6f64aac26 100644 --- a/frontend/src/modules/settings/pages/Tasks.vue +++ b/apps/wizarr-frontend/src/modules/settings/pages/Tasks.vue @@ -3,12 +3,12 @@ diff --git a/apps/wizarr-frontend/src/modules/settings/router/children.ts b/apps/wizarr-frontend/src/modules/settings/router/children.ts new file mode 100644 index 000000000..268e194ed --- /dev/null +++ b/apps/wizarr-frontend/src/modules/settings/router/children.ts @@ -0,0 +1,102 @@ +import type { RouteRecordRaw } from 'vue-router'; + +const children: RouteRecordRaw[] = [ + { + path: '', + name: 'admin-settings', + component: () => import('../pages/Main.vue'), + meta: { searchBar: true }, + }, + { + path: 'media', + name: 'admin-settings-media', + component: () => import('../pages/Media.vue'), + meta: { header: 'Manage Media', subheader: 'Configure media server' }, + }, + { + path: 'requests', + name: 'admin-settings-requests', + component: () => import('../pages/Requests.vue'), + meta: { + header: 'Manage Requests', + subheader: 'Configure request server', + }, + }, + { + path: 'apikeys', + name: 'admin-settings-apikeys', + component: () => import('../pages/APIKeys.vue'), + meta: { header: 'Manage API Keys', subheader: 'Configure API keys' }, + }, + { + path: 'webhooks', + name: 'admin-settings-webhooks', + component: () => import('../pages/Webhooks.vue'), + meta: { header: 'Manage Webhooks', subheader: 'Configure webhooks' }, + }, + { + path: 'account', + name: 'admin-settings-account', + component: () => import('../pages/Account.vue'), + meta: { header: 'Manage Account', subheader: 'Configure your account' }, + }, + { + path: 'sessions', + name: 'admin-settings-sessions', + component: () => import('../pages/Sessions.vue'), + meta: { + header: 'Manage Sessions', + subheader: 'View and revoke your sessions', + }, + }, + { + path: 'logs', + name: 'admin-settings-logs', + component: () => import('../pages/Logs.vue'), + meta: { header: 'View Logs', subheader: 'View server logs' }, + }, + { + path: 'mfa', + name: 'admin-settings-mfa', + component: () => import('../pages/Passkeys.vue'), + meta: { + header: 'Manage MFA', + subheader: 'Configure multi-factor authentication', + }, + }, + { + path: 'tasks', + name: 'admin-settings-tasks', + component: () => import('../pages/Tasks.vue'), + meta: { header: 'Manage Tasks', subheader: 'Configure server tasks' }, + }, + { + path: 'backup', + name: 'admin-settings-backup', + component: () => import('../pages/Backup.vue'), + meta: { header: 'Backup Server', subheader: 'Backup server data' }, + }, + { + path: 'about', + name: 'admin-settings-about', + component: () => import('../pages/About.vue'), + meta: { header: 'About', subheader: 'View server information' }, + }, + { + path: 'membership', + name: 'admin-settings-membership', + component: () => import('../pages/Membership.vue'), + meta: { + header: 'Membership', + subheader: 'View Wizarr Cloud membership', + }, + }, + { + path: 'support', + name: 'admin-settings-support', + component: () => import('../pages/Support.vue'), + meta: { header: 'Live Support', subheader: 'Get live support' }, + }, +]; + +export default children; diff --git a/apps/wizarr-frontend/src/modules/settings/router/index.ts b/apps/wizarr-frontend/src/modules/settings/router/index.ts new file mode 100644 index 000000000..24c00728a --- /dev/null +++ b/apps/wizarr-frontend/src/modules/settings/router/index.ts @@ -0,0 +1,17 @@ +import type { RouteRecordRaw } from 'vue-router'; +import children from './children'; +import requireAuth from '@/router/middleware/requireAuth'; + +const routes: Readonly = [ + { + path: '/admin/settings', + name: 'admin-settings', + component: () => import('../views/Settings.vue'), + meta: { + middleware: [requireAuth], + }, + children: children, + }, +]; + +export default routes; diff --git a/frontend/src/modules/settings/views/Settings.vue b/apps/wizarr-frontend/src/modules/settings/views/Settings.vue similarity index 59% rename from frontend/src/modules/settings/views/Settings.vue rename to apps/wizarr-frontend/src/modules/settings/views/Settings.vue index e562a6110..de5c2e7ce 100644 --- a/frontend/src/modules/settings/views/Settings.vue +++ b/apps/wizarr-frontend/src/modules/settings/views/Settings.vue @@ -12,14 +12,14 @@ diff --git a/apps/wizarr-frontend/src/modules/setup/pages/Complete.vue b/apps/wizarr-frontend/src/modules/setup/pages/Complete.vue new file mode 100644 index 000000000..efd01a67d --- /dev/null +++ b/apps/wizarr-frontend/src/modules/setup/pages/Complete.vue @@ -0,0 +1,38 @@ + + + diff --git a/apps/wizarr-frontend/src/modules/setup/pages/Database.vue b/apps/wizarr-frontend/src/modules/setup/pages/Database.vue new file mode 100644 index 000000000..1ebbe115d --- /dev/null +++ b/apps/wizarr-frontend/src/modules/setup/pages/Database.vue @@ -0,0 +1,32 @@ + + + diff --git a/apps/wizarr-frontend/src/modules/setup/pages/Restore.vue b/apps/wizarr-frontend/src/modules/setup/pages/Restore.vue new file mode 100644 index 000000000..58bceb06d --- /dev/null +++ b/apps/wizarr-frontend/src/modules/setup/pages/Restore.vue @@ -0,0 +1,96 @@ + + + diff --git a/frontend/src/modules/setup/pages/Settings.vue b/apps/wizarr-frontend/src/modules/setup/pages/Settings.vue similarity index 59% rename from frontend/src/modules/setup/pages/Settings.vue rename to apps/wizarr-frontend/src/modules/setup/pages/Settings.vue index 31a3a0320..876eaae45 100644 --- a/frontend/src/modules/setup/pages/Settings.vue +++ b/apps/wizarr-frontend/src/modules/setup/pages/Settings.vue @@ -5,12 +5,12 @@ diff --git a/apps/wizarr-frontend/src/modules/setup/router/index.ts b/apps/wizarr-frontend/src/modules/setup/router/index.ts new file mode 100644 index 000000000..ca2ee1f66 --- /dev/null +++ b/apps/wizarr-frontend/src/modules/setup/router/index.ts @@ -0,0 +1,11 @@ +import type { RouteRecordRaw } from 'vue-router'; + +const routes: Readonly = [ + { + path: '/setup', + name: 'setup', + component: () => import('../views/Setup.vue'), + }, +]; + +export default routes; diff --git a/apps/wizarr-frontend/src/modules/setup/views/Setup.vue b/apps/wizarr-frontend/src/modules/setup/views/Setup.vue new file mode 100644 index 000000000..6e588b8e4 --- /dev/null +++ b/apps/wizarr-frontend/src/modules/setup/views/Setup.vue @@ -0,0 +1,165 @@ + + + diff --git a/frontend/src/plugins/ModalWrapper.tsx b/apps/wizarr-frontend/src/plugins/ModalWrapper.tsx similarity index 50% rename from frontend/src/plugins/ModalWrapper.tsx rename to apps/wizarr-frontend/src/plugins/ModalWrapper.tsx index fbc5d9b94..37d55431b 100644 --- a/frontend/src/plugins/ModalWrapper.tsx +++ b/apps/wizarr-frontend/src/plugins/ModalWrapper.tsx @@ -1,14 +1,18 @@ -import type { CustomModalOptions, CustomModalOptionsButtons } from "./modal"; +import type { CustomModalOptions, CustomModalOptionsButtons } from './modal'; -import { FormKit } from "@formkit/vue"; -import { Modal } from "jenesius-vue-modal"; -import type { WrapComponent } from "jenesius-vue-modal/dist/types/types/types"; -import { defineComponent } from "vue"; -import mitt from "mitt"; +import { FormKit } from '@formkit/vue'; +import { Modal } from 'jenesius-vue-modal'; +import type { WrapComponent } from 'jenesius-vue-modal/dist/types/types/types'; +import { defineComponent } from 'vue'; +import mitt from 'mitt'; -const ModalWrapper =

(component: P | string, props?: any, options?: Partial) => { +const ModalWrapper =

( + component: P | string, + props?: any, + options?: Partial, +) => { return defineComponent({ - name: "ModalWrapper", + name: 'ModalWrapper', data() { return { eventBus: mitt(), @@ -18,18 +22,29 @@ const ModalWrapper =

(component: P | string, props?: an computed: { attrs() { // Create a shallow copy of the props and $attrs objects - const localAttrs = { ...props, ...this.$attrs, eventBus: this.eventBus }; + const localAttrs = { + ...props, + ...this.$attrs, + eventBus: this.eventBus, + }; // Iterate over the button actions and add a new property to the test object for each action this.options?.actions?.forEach((action) => { - const alphaKey = action.event.replace(/([A-Z])/g, "-$1").toLowerCase(); - const key = `on${alphaKey.charAt(0).toUpperCase() + alphaKey.slice(1)}`; + const alphaKey = action.event + .replace(/([A-Z])/g, '-$1') + .toLowerCase(); + const key = `on${ + alphaKey.charAt(0).toUpperCase() + alphaKey.slice(1) + }`; localAttrs[key] = action.callback ?? (() => {}); }); // Add custom actions - localAttrs.onClose = () => this.$emit(Modal.EVENT_PROMPT, false); - localAttrs.onUpdateOptions = (newOptions: Partial) => (this.options = { ...this.options, ...newOptions }); + localAttrs.onClose = () => + this.$emit(Modal.EVENT_PROMPT, false); + localAttrs.onUpdateOptions = ( + newOptions: Partial, + ) => (this.options = { ...this.options, ...newOptions }); // Return the test object return localAttrs; @@ -49,11 +64,20 @@ const ModalWrapper =

(component: P | string, props?: an

{/* Title */} - {this.options?.title && typeof this.options.title === "string" ? this.options.title : null} + {this.options?.title && + typeof this.options.title === 'string' + ? this.options.title + : null}

{/* Close Button */} {!this.options?.disableCloseButton ? ( - ) : null} @@ -62,24 +86,46 @@ const ModalWrapper =

(component: P | string, props?: an {/* Body */}

{/* String or Component */} - {typeof component === "string" ?

: } + {typeof component === 'string' ? ( +

+ ) : ( + + )}
{/* Footer */} {!this.options?.disableFooter ? (
{this.options?.buttons?.map((button) => ( - this.buttonTrigger(button)} {...button.attrs} key={button.text}> + this.buttonTrigger(button)} + {...button.attrs} + key={button.text} + > {button.text} ))} {this.options?.enableConfirmButton ? ( - this.$emit(Modal.EVENT_PROMPT, true)}> - {this.options?.confirmButtonText ?? "Confirm"} + + this.$emit(Modal.EVENT_PROMPT, true) + } + > + {this.options?.confirmButtonText ?? + 'Confirm'} ) : null} {!this.options?.disableCancelButton ? ( - this.$emit(Modal.EVENT_PROMPT, false)}> - {this.options?.cancelButtonText ?? "Cancel"} + + this.$emit(Modal.EVENT_PROMPT, false) + } + > + {this.options?.cancelButtonText ?? 'Cancel'} ) : null}
diff --git a/apps/wizarr-frontend/src/plugins/analytics.ts b/apps/wizarr-frontend/src/plugins/analytics.ts new file mode 100644 index 000000000..a62bb41c7 --- /dev/null +++ b/apps/wizarr-frontend/src/plugins/analytics.ts @@ -0,0 +1,62 @@ +import { AnalyticsBrowser } from '@segment/analytics-next'; +import { nanoid } from 'nanoid'; + +import type { + AnalyticsBrowserSettings, + InitOptions, +} from '@segment/analytics-next'; +import type { App } from 'vue'; + +declare module '@vue/runtime-core' { + interface ComponentCustomProperties { + $analytics: AnalyticsBrowser; + } +} + +const vuePluginAnalytics = { + install: ( + app: App, + options?: { + settings?: AnalyticsBrowserSettings; + options?: InitOptions; + }, + ): void => { + // Get base URL from localStorage or use window.location.origin + const baseURL = + localStorage.getItem('base_url') ?? window.location.origin; + + // Default settings + const defaultSettings: AnalyticsBrowserSettings = { + // cdnURL: baseURL, + // cdnURL: "https://webhook.site/44c93238-6e85-4736-a1f4-90bb007afc0b", + // writeKey: "wizarr", + writeKey: 'rAjFFBAQf10L1mwRl4MlwDVYBYLcRdGY', + }; + + // Default options + const defaultOptions: InitOptions = {}; + + // Load analytics + const analytics = AnalyticsBrowser.load( + defaultSettings, + defaultOptions, + ); + + // Intergate with Vue Router to track page views + app.config.globalProperties.$router.beforeEach((to, from) => { + analytics.page({ + path: to.path, + referrer: from.path, + url: `${baseURL}${to.path}`, + title: to.name, + search: to.query, + id: nanoid(), + }); + }); + + // Set global properties + app.config.globalProperties.$analytics = analytics; + }, +}; + +export default vuePluginAnalytics; diff --git a/frontend/src/plugins/axios.ts b/apps/wizarr-frontend/src/plugins/axios.ts similarity index 82% rename from frontend/src/plugins/axios.ts rename to apps/wizarr-frontend/src/plugins/axios.ts index 91680186d..c60170812 100644 --- a/frontend/src/plugins/axios.ts +++ b/apps/wizarr-frontend/src/plugins/axios.ts @@ -1,19 +1,19 @@ -import mainAxios from "axios"; +import mainAxios from 'axios'; -import type { App } from "vue"; -import type { AxiosInstance, CreateAxiosDefaults } from "axios"; -import type { PiniaPluginContext } from "pinia"; +import type { App } from 'vue'; +import type { AxiosInstance, CreateAxiosDefaults } from 'axios'; +import type { PiniaPluginContext } from 'pinia'; -import { AxiosInterceptor, type CustomAxiosInstance } from "../ts/utils/axios"; +import { AxiosInterceptor, type CustomAxiosInstance } from '../ts/utils/axios'; -declare module "pinia" { +declare module 'pinia' { export interface PiniaCustomProperties { $axios: CustomAxiosInstance; $rawAxios: AxiosInstance; } } -declare module "@vue/runtime-core" { +declare module '@vue/runtime-core' { interface ComponentCustomProperties { $axios: CustomAxiosInstance; $rawAxios: AxiosInstance; diff --git a/frontend/src/plugins/filters.ts b/apps/wizarr-frontend/src/plugins/filters.ts similarity index 63% rename from frontend/src/plugins/filters.ts rename to apps/wizarr-frontend/src/plugins/filters.ts index 5f635ed51..44e0b4b33 100644 --- a/frontend/src/plugins/filters.ts +++ b/apps/wizarr-frontend/src/plugins/filters.ts @@ -1,13 +1,13 @@ -import type { App } from "vue"; -import filters from "@/ts/filters"; -import type { PiniaPluginContext } from "pinia"; +import type { App } from 'vue'; +import filters from '@/ts/filters'; +import type { PiniaPluginContext } from 'pinia'; type FilterFunctions = typeof filters; type FilterNames = keyof FilterFunctions; type FilterArgs = Parameters; -declare module "pinia" { +declare module 'pinia' { export interface PiniaCustomProperties { /** * $filter - A function that takes a filter name and arguments and returns the result of the filter @@ -16,7 +16,10 @@ declare module "pinia" { * @param args - The arguments to pass to the filter * @returns The result of the filter */ - $filter: (name: T, ...args: FilterArgs) => ReturnType; + $filter: ( + name: T, + ...args: FilterArgs + ) => ReturnType; /** * $filters - A function that takes an array of filter names and arguments and returns the result of the filters chained together @@ -25,11 +28,14 @@ declare module "pinia" { * @param {FilterArgs} args - The arguments to pass to the filters * @returns The result of the filters chained together */ - $filters: (names: T, ...args: FilterArgs) => ReturnType; + $filters: ( + names: T, + ...args: FilterArgs + ) => ReturnType; } } -declare module "@vue/runtime-core" { +declare module '@vue/runtime-core' { interface ComponentCustomProperties { /** * $filter - A function that takes a filter name and arguments and returns the result of the filter @@ -38,7 +44,10 @@ declare module "@vue/runtime-core" { * @param args - The arguments to pass to the filter * @returns The result of the filter */ - $filter: (name: T, ...args: FilterArgs) => ReturnType; + $filter: ( + name: T, + ...args: FilterArgs + ) => ReturnType; /** * $filters - A function that takes an array of filter names and arguments and returns the result of the filters chained together @@ -47,22 +56,36 @@ declare module "@vue/runtime-core" { * @param {FilterArgs} args - The arguments to pass to the filters * @returns The result of the filters chained together */ - $filters: (names: T, ...args: FilterArgs) => ReturnType; + $filters: ( + names: T, + ...args: FilterArgs + ) => ReturnType; } } -const getFilterFunction = (name: T): FilterFunctions[T] => { +const getFilterFunction = ( + name: T, +): FilterFunctions[T] => { return filters[name]; }; -const filter = (name: T, ...args: FilterArgs): ReturnType => { +const filter = ( + name: T, + ...args: FilterArgs +): ReturnType => { // @ts-ignore return getFilterFunction(name)(...args) as ReturnType; }; -const filtersChained = (names: T, ...args: FilterArgs): ReturnType => { +const filtersChained = ( + names: T, + ...args: FilterArgs +): ReturnType => { // @ts-ignore - return names.reduce((acc, name) => getFilterFunction(name)(acc, ...args), args[0]) as ReturnType; + return names.reduce( + (acc, name) => getFilterFunction(name)(acc, ...args), + args[0], + ) as ReturnType; }; const useFilters = () => { diff --git a/frontend/src/plugins/firebase.ts b/apps/wizarr-frontend/src/plugins/firebase.ts similarity index 59% rename from frontend/src/plugins/firebase.ts rename to apps/wizarr-frontend/src/plugins/firebase.ts index a6e9c3627..890ce8e0b 100644 --- a/frontend/src/plugins/firebase.ts +++ b/apps/wizarr-frontend/src/plugins/firebase.ts @@ -1,10 +1,15 @@ -import type { App } from "vue"; -import firebaseApp from "@/ts/utils/firebase"; -import defaultValues from "@/assets/configs/DefaultValues"; -import { getRemoteConfig, getValue, type RemoteConfig, fetchAndActivate } from "firebase/remote-config"; -import type { PiniaPluginContext } from "pinia"; +import type { App } from 'vue'; +import firebaseApp from '@/ts/utils/firebase'; +import defaultValues from '@/assets/configs/DefaultValues'; +import { + getRemoteConfig, + getValue, + type RemoteConfig, + fetchAndActivate, +} from 'firebase/remote-config'; +import type { PiniaPluginContext } from 'pinia'; -declare module "@vue/runtime-core" { +declare module '@vue/runtime-core' { interface ComponentCustomProperties { $firebase: typeof firebaseApp; $remoteConfig: RemoteConfig; @@ -12,7 +17,7 @@ declare module "@vue/runtime-core" { } } -declare module "pinia" { +declare module 'pinia' { export interface PiniaCustomProperties { $firebase: typeof firebaseApp; $remoteConfig: RemoteConfig; @@ -22,7 +27,8 @@ declare module "pinia" { const piniaPluginFirebase = (context: PiniaPluginContext) => { context.store.$firebase = context.app.config.globalProperties.$firebase; - context.store.$remoteConfig = context.app.config.globalProperties.$remoteConfig; + context.store.$remoteConfig = + context.app.config.globalProperties.$remoteConfig; context.store.$config = context.app.config.globalProperties.$config; }; @@ -30,7 +36,8 @@ const vuePluginFirebase = { install: (app: App) => { // Set the firebase app and remote config app.config.globalProperties.$firebase = firebaseApp; - app.config.globalProperties.$remoteConfig = getRemoteConfig(firebaseApp); + app.config.globalProperties.$remoteConfig = + getRemoteConfig(firebaseApp); // Set the firebase remote config settings app.config.globalProperties.$remoteConfig.settings.minimumFetchIntervalMillis = 10800000; // 3 hours @@ -39,12 +46,20 @@ const vuePluginFirebase = { app.config.globalProperties.$remoteConfig.defaultConfig = defaultValues; // Fetch the firebase remote config - fetchAndActivate(app.config.globalProperties.$remoteConfig).then((activated) => { - console.log("Remote config " + (activated ? "fetched and activated" : "already fetched and activated")); - }); + fetchAndActivate(app.config.globalProperties.$remoteConfig).then( + (activated) => { + console.log( + 'Remote config ' + + (activated + ? 'fetched and activated' + : 'already fetched and activated'), + ); + }, + ); // Global function to retrieve a remote config value as a string - app.config.globalProperties.$config = (key: string): string => getValue(app.config.globalProperties.$remoteConfig, key).asString(); + app.config.globalProperties.$config = (key: string): string => + getValue(app.config.globalProperties.$remoteConfig, key).asString(); }, }; diff --git a/frontend/src/plugins/modal.ts b/apps/wizarr-frontend/src/plugins/modal.ts similarity index 59% rename from frontend/src/plugins/modal.ts rename to apps/wizarr-frontend/src/plugins/modal.ts index 5d7b4b3ea..c75f1e857 100644 --- a/frontend/src/plugins/modal.ts +++ b/apps/wizarr-frontend/src/plugins/modal.ts @@ -1,12 +1,26 @@ -import type { EventType, Handler } from "mitt"; -import { Modal, closeById, closeModal, config, getComponentFromStore, getCurrentModal, modalQueue, onBeforeModalClose, openModal, popModal, promptModal, pushModal, useModalRouter } from "jenesius-vue-modal"; +import type { EventType, Handler } from 'mitt'; +import { + Modal, + closeById, + closeModal, + config, + getComponentFromStore, + getCurrentModal, + modalQueue, + onBeforeModalClose, + openModal, + popModal, + promptModal, + pushModal, + useModalRouter, +} from 'jenesius-vue-modal'; -import type { App } from "vue"; -import type { ConfigInterface } from "jenesius-vue-modal/dist/types/utils/config"; -import type { FormKitClasses } from "@formkit/core"; -import type { ModalOptions } from "jenesius-vue-modal/dist/types/utils/Modal"; -import ModalWrapper from "./ModalWrapper"; -import type { WrapComponent } from "jenesius-vue-modal/dist/types/types/types"; +import type { App } from 'vue'; +import type { ConfigInterface } from 'jenesius-vue-modal/dist/types/utils/config'; +import type { FormKitClasses } from '@formkit/core'; +import type { ModalOptions } from 'jenesius-vue-modal/dist/types/utils/Modal'; +import ModalWrapper from './ModalWrapper'; +import type { WrapComponent } from 'jenesius-vue-modal/dist/types/types/types'; export declare interface CustomModalOptionsButtons { text: string; @@ -34,17 +48,33 @@ export declare interface CustomModalOptions extends Partial { actions?: CustomModalOptionsActions[]; } -const localOpenModal = async

(component: P | string, options?: Partial, props?: any): Promise => { +const localOpenModal = async

( + component: P | string, + options?: Partial, + props?: any, +): Promise => { const componentWrapper = ModalWrapper(component, props, options); const newModal = await openModal(componentWrapper, props, options); newModal.on(Modal.EVENT_PROMPT, () => newModal.close()); - newModal.on("close", () => newModal.close()); + newModal.on('close', () => newModal.close()); return newModal; }; -const confirmModal = async (title: string, message: string, options?: Partial): Promise => { - const componentWrapper = ModalWrapper(message, undefined, { ...options, title, enableConfirmButton: true }); - return (await promptModal(componentWrapper, { title, message }, options)) as boolean; +const confirmModal = async ( + title: string, + message: string, + options?: Partial, +): Promise => { + const componentWrapper = ModalWrapper(message, undefined, { + ...options, + title, + enableConfirmButton: true, + }); + return (await promptModal( + componentWrapper, + { title, message }, + options, + )) as boolean; }; declare type CustomModal = { @@ -63,7 +93,7 @@ declare type CustomModal = { getComponentFromStore: typeof getComponentFromStore; }; -declare module "@vue/runtime-core" { +declare module '@vue/runtime-core' { interface ComponentCustomProperties { $modal: CustomModal; } @@ -93,16 +123,18 @@ const vuePluginModal = { config( options ?? { scrollLock: true, - animation: "fade", + animation: 'fade', backgroundClose: false, escClose: true, }, ); - app.config.globalProperties.$router.beforeEach(async (to, from, next) => { - const modal = getCurrentModal(); - if (modal) await modal.close(); - next(); - }); + app.config.globalProperties.$router.beforeEach( + async (to, from, next) => { + const modal = getCurrentModal(); + if (modal) await modal.close(); + next(); + }, + ); }, }; diff --git a/frontend/src/plugins/rocketChat.ts b/apps/wizarr-frontend/src/plugins/rocketChat.ts similarity index 68% rename from frontend/src/plugins/rocketChat.ts rename to apps/wizarr-frontend/src/plugins/rocketChat.ts index 732408308..4e34b61f2 100644 --- a/frontend/src/plugins/rocketChat.ts +++ b/apps/wizarr-frontend/src/plugins/rocketChat.ts @@ -1,7 +1,7 @@ -import type { App } from "vue"; -import RocketChat from "@/ts/utils/rocketChat"; +import type { App } from 'vue'; +import RocketChat from '@/ts/utils/rocketChat'; -declare module "@vue/runtime-core" { +declare module '@vue/runtime-core' { interface ComponentCustomProperties { $RocketChat: typeof RocketChat; } diff --git a/frontend/src/plugins/sentry.ts b/apps/wizarr-frontend/src/plugins/sentry.ts similarity index 52% rename from frontend/src/plugins/sentry.ts rename to apps/wizarr-frontend/src/plugins/sentry.ts index f43ef16ea..72b5e50b9 100644 --- a/frontend/src/plugins/sentry.ts +++ b/apps/wizarr-frontend/src/plugins/sentry.ts @@ -1,11 +1,16 @@ -import { BrowserTracing, Replay, init, vueRouterInstrumentation } from "@sentry/vue"; -import type { Options, TracingOptions } from "@sentry/vue/types/types"; +import { + BrowserTracing, + Replay, + init, + vueRouterInstrumentation, +} from '@sentry/vue'; +import type { Options, TracingOptions } from '@sentry/vue/types/types'; -import type { App } from "vue"; -import DefaultToast from "@/components/Toasts/DefaultToast.vue"; +import type { App } from 'vue'; +import DefaultToast from '@/components/Toasts/DefaultToast.vue'; type SentryOptions = Partial< - Omit & { + Omit & { tracingOptions: Partial; } >; @@ -14,11 +19,13 @@ const vuePluginSentry = { install: (app: App, options?: SentryOptions) => { init({ app: app, - dsn: "https://d1994be8f88578e14f1a4ac06ae65e89@o4505748808400896.ingest.sentry.io/4505780347666432", + dsn: 'https://d1994be8f88578e14f1a4ac06ae65e89@o4505748808400896.ingest.sentry.io/4505780347666432', integrations: [ new BrowserTracing({ tracePropagationTargets: [location.origin], - routingInstrumentation: vueRouterInstrumentation(app.config.globalProperties.$router), + routingInstrumentation: vueRouterInstrumentation( + app.config.globalProperties.$router, + ), }), new Replay({ maskAllText: false, @@ -32,8 +39,14 @@ const vuePluginSentry = { replaysOnErrorSampleRate: 1.0, beforeSend(event, hint) { if (event.exception) { - const errorMessage = event.exception.values ?? "Unknown error"; - app.config.globalProperties.$toast.error(DefaultToast("Detected Error", `${errorMessage}, this can generally be ignored.`)); + const errorMessage = + event.exception.values ?? 'Unknown error'; + app.config.globalProperties.$toast.error( + DefaultToast( + 'Detected Error', + `${errorMessage}, this can generally be ignored.`, + ), + ); } return event; }, diff --git a/frontend/src/plugins/socket.ts b/apps/wizarr-frontend/src/plugins/socket.ts similarity index 52% rename from frontend/src/plugins/socket.ts rename to apps/wizarr-frontend/src/plugins/socket.ts index 468df0d96..23ea0eca0 100644 --- a/frontend/src/plugins/socket.ts +++ b/apps/wizarr-frontend/src/plugins/socket.ts @@ -1,8 +1,12 @@ -import SocketIO, { type Socket, type ManagerOptions } from "socket.io-client"; -import type { ReservedOrUserListener, ReservedOrUserEventNames, EventsMap } from "@socket.io/component-emitter"; -import type { App } from "vue"; -import type { SocketOptions } from "dgram"; -import type { PiniaPluginContext } from "pinia"; +import SocketIO, { type Socket, type ManagerOptions } from 'socket.io-client'; +import type { + ReservedOrUserListener, + ReservedOrUserEventNames, + EventsMap, +} from '@socket.io/component-emitter'; +import type { App } from 'vue'; +import type { SocketOptions } from 'dgram'; +import type { PiniaPluginContext } from 'pinia'; export interface ServerToClientEvents { [event: string]: (...args: any[]) => void; @@ -12,30 +16,52 @@ export interface ClientToServerEvents { [event: string]: (...args: any[]) => void; } -declare module "pinia" { +declare module 'pinia' { export interface PiniaCustomProperties { $socket: Socket; $io: typeof SocketIO; sockets: { - subscribe>(eventName: Ev, handler: ReservedOrUserListener): void; - unsubscribe>(eventName: Ev): void; + subscribe< + Ev extends ReservedOrUserEventNames, + >( + eventName: Ev, + handler: ReservedOrUserListener, + ): void; + unsubscribe< + Ev extends ReservedOrUserEventNames, + >( + eventName: Ev, + ): void; }; } } -declare module "@vue/runtime-core" { +declare module '@vue/runtime-core' { interface ComponentCustomProperties { $socket: Socket; $io: typeof SocketIO; sockets: { - subscribe>(eventName: Ev, handler: ReservedOrUserListener): void; - unsubscribe>(eventName: Ev): void; + subscribe< + Ev extends ReservedOrUserEventNames, + >( + eventName: Ev, + handler: ReservedOrUserListener, + ): void; + unsubscribe< + Ev extends ReservedOrUserEventNames, + >( + eventName: Ev, + ): void; }; } } -const useSocketIO = (uri?: string, opts?: Partial) => { - const optional_uri = uri ?? localStorage.getItem("base_url") ?? window.location.origin; +const useSocketIO = ( + uri?: string, + opts?: Partial, +) => { + const optional_uri = + uri ?? localStorage.getItem('base_url') ?? window.location.origin; const socket = SocketIO(optional_uri, opts); return socket as Socket; }; @@ -46,7 +72,13 @@ const piniaPluginSocketIO = (context: PiniaPluginContext) => { }; const vuePluginSocketIO = { - install: (app: App, options: { uri?: string; opts?: Partial }) => { + install: ( + app: App, + options: { + uri?: string; + opts?: Partial; + }, + ) => { // const uri = options.uri ?? localStorage.getItem("base_url") ?? window.location.origin; // app.config.globalProperties.$socket = SocketIO(uri, options.opts); app.config.globalProperties.$io = SocketIO; diff --git a/frontend/src/plugins/toasts.ts b/apps/wizarr-frontend/src/plugins/toasts.ts similarity index 72% rename from frontend/src/plugins/toasts.ts rename to apps/wizarr-frontend/src/plugins/toasts.ts index 0e657175c..9e8ff931f 100644 --- a/frontend/src/plugins/toasts.ts +++ b/apps/wizarr-frontend/src/plugins/toasts.ts @@ -1,16 +1,16 @@ -import toasts from "@/ts/utils/toasts"; +import toasts from '@/ts/utils/toasts'; -import type { Toasts } from "@/ts/utils/toasts"; -import type { PiniaPluginContext } from "pinia"; -import type { App } from "vue"; +import type { Toasts } from '@/ts/utils/toasts'; +import type { PiniaPluginContext } from 'pinia'; +import type { App } from 'vue'; -declare module "pinia" { +declare module 'pinia' { export interface PiniaCustomProperties { $toast: Toasts; } } -declare module "@vue/runtime-core" { +declare module '@vue/runtime-core' { interface ComponentCustomProperties { $toast: Toasts; } diff --git a/frontend/src/plugins/tours.ts b/apps/wizarr-frontend/src/plugins/tours.ts similarity index 57% rename from frontend/src/plugins/tours.ts rename to apps/wizarr-frontend/src/plugins/tours.ts index cd78b61db..9a4b87d21 100644 --- a/frontend/src/plugins/tours.ts +++ b/apps/wizarr-frontend/src/plugins/tours.ts @@ -1,9 +1,9 @@ -import type { App } from "vue"; -import type { Language } from "vue3-gettext"; -import type { PiniaPluginContext } from "pinia"; -import type TourGuideOptions from "@sjmc11/tourguidejs/src/core/options"; -import loadRouterTour from "@/tours"; -import { useUserStore } from "@/stores/user"; +import type { App } from 'vue'; +import type { Language } from 'vue3-gettext'; +import type { PiniaPluginContext } from 'pinia'; +import type TourGuideOptions from '@sjmc11/tourguidejs/src/core/options'; +import loadRouterTour from '@/tours'; +import { useUserStore } from '@/stores/user'; export interface CustomTourGuideOptions extends TourGuideOptions { i18n?: Language; @@ -11,13 +11,13 @@ export interface CustomTourGuideOptions extends TourGuideOptions { app: App; } -declare module "pinia" { +declare module 'pinia' { export interface PiniaCustomProperties { $tours: any; } } -declare module "@vue/runtime-core" { +declare module '@vue/runtime-core' { interface ComponentCustomProperties { $tours: any; } @@ -30,7 +30,10 @@ const piniaPluginTours = (context: PiniaPluginContext) => { const vuePluginTours = { install: (app: App, options?: Partial) => { - loadRouterTour(app.config.globalProperties.$router, { ...options, app }); + loadRouterTour(app.config.globalProperties.$router, { + ...options, + app, + }); }, }; diff --git a/frontend/src/plugins/webshare.ts b/apps/wizarr-frontend/src/plugins/webshare.ts similarity index 68% rename from frontend/src/plugins/webshare.ts rename to apps/wizarr-frontend/src/plugins/webshare.ts index b7d1adb82..aa7e6cdc1 100644 --- a/frontend/src/plugins/webshare.ts +++ b/apps/wizarr-frontend/src/plugins/webshare.ts @@ -1,8 +1,11 @@ -import type { App } from "vue"; -import type { PiniaPluginContext } from "pinia"; +import type { App } from 'vue'; +import type { PiniaPluginContext } from 'pinia'; export interface WebShare { - share: (data: ShareData, fallback?: () => Promise | void) => Promise; + share: ( + data: ShareData, + fallback?: () => Promise | void, + ) => Promise; isSupported: boolean; } @@ -10,13 +13,13 @@ export interface WebShareOptions { fallback?: () => Promise | void; } -declare module "pinia" { +declare module 'pinia' { export interface PiniaCustomProperties { $share: typeof share; } } -declare module "@vue/runtime-core" { +declare module '@vue/runtime-core' { interface ComponentCustomProperties { $share: typeof share; } @@ -24,12 +27,16 @@ declare module "@vue/runtime-core" { const useWebShare = (options?: WebShareOptions) => { return { - share: (data: ShareData, fallback?: () => Promise | void) => share(data, fallback ?? options?.fallback), - isSupported: "share" in navigator, + share: (data: ShareData, fallback?: () => Promise | void) => + share(data, fallback ?? options?.fallback), + isSupported: 'share' in navigator, } as WebShare; }; -const share = async (data: ShareData, fallback?: () => Promise | void) => { +const share = async ( + data: ShareData, + fallback?: () => Promise | void, +) => { try { await navigator.share(data); } catch { diff --git a/frontend/src/router/index.ts b/apps/wizarr-frontend/src/router/index.ts similarity index 60% rename from frontend/src/router/index.ts rename to apps/wizarr-frontend/src/router/index.ts index f592cbd68..154a731c2 100644 --- a/frontend/src/router/index.ts +++ b/apps/wizarr-frontend/src/router/index.ts @@ -1,22 +1,29 @@ -import { createMemoryHistory, createRouter, createWebHistory } from "vue-router"; -import { useProgressStore } from "@/stores/progress"; -import { useAuthStore } from "@/stores/auth"; +import { + createMemoryHistory, + createRouter, + createWebHistory, +} from 'vue-router'; +import { useProgressStore } from '@/stores/progress'; +import { useAuthStore } from '@/stores/auth'; // Import the middleware pipeline -import middlewarePipeline from "./middlewarePipeline"; +import middlewarePipeline from './middlewarePipeline'; // Import all Routes from the modules -import homeRoutes from "@/modules/home/router"; -import authenticationRoutes from "@/modules/authentication/router"; -import joinRoutes from "@/modules/join/router"; -import adminRoutes from "@/modules/admin/router"; -import settingsRoutes from "@/modules/settings/router"; -import helpRoutes from "@/modules/help/router"; -import setupRoutes from "@/modules/setup/router"; -import coreRoutes from "@/modules/core/router"; +import homeRoutes from '@/modules/home/router'; +import authenticationRoutes from '@/modules/authentication/router'; +import joinRoutes from '@/modules/join/router'; +import adminRoutes from '@/modules/admin/router'; +import settingsRoutes from '@/modules/settings/router'; +import helpRoutes from '@/modules/help/router'; +import setupRoutes from '@/modules/setup/router'; +import coreRoutes from '@/modules/core/router'; const router = createRouter({ - history: typeof window !== "undefined" ? createWebHistory() : createMemoryHistory(), + history: + typeof window !== 'undefined' + ? createWebHistory() + : createMemoryHistory(), routes: [ ...homeRoutes, // Homepage routes ["/"] ...authenticationRoutes, // Authentication routes ["/login", "/register", "/forgot-password", "/reset-password"] @@ -46,7 +53,10 @@ router.beforeEach(async (to, from, next) => { const context = { to, from, next, authStore }; // Run the middleware pipeline - return middleware[0]({ ...context, next: middlewarePipeline(context, middleware, 1) }); + return middleware[0]({ + ...context, + next: middlewarePipeline(context, middleware, 1), + }); }); router.afterEach(() => { diff --git a/apps/wizarr-frontend/src/router/middleware/openServer.ts b/apps/wizarr-frontend/src/router/middleware/openServer.ts new file mode 100644 index 000000000..83a3feecb --- /dev/null +++ b/apps/wizarr-frontend/src/router/middleware/openServer.ts @@ -0,0 +1,17 @@ +import { useServerStore } from '@/stores/server'; +import type { NavigationGuardNext } from 'vue-router'; + +export default async function openServer({ + next, + authStore, +}: { + next: NavigationGuardNext; + authStore: any; +}) { + try { + const serverStore = useServerStore(); + window.open(serverStore.settings.server_url, '_blank'); + } catch {} + + return next(); +} diff --git a/apps/wizarr-frontend/src/router/middleware/requireAuth.ts b/apps/wizarr-frontend/src/router/middleware/requireAuth.ts new file mode 100644 index 000000000..cd1697f7c --- /dev/null +++ b/apps/wizarr-frontend/src/router/middleware/requireAuth.ts @@ -0,0 +1,24 @@ +import Auth from '@/api/authentication'; + +import { useRouter } from 'vue-router'; +import type { NavigationGuardNext } from 'vue-router'; + +const router = useRouter(); + +export default async function requireAuth({ + next, + authStore, +}: { + next: NavigationGuardNext; + authStore: any; +}) { + try { + const auth = new Auth(); + if (!(await auth.isAuthenticated())) return router.push('/login'); + } catch (error) { + console.error(error); + return next({ name: 'login' }); + } + + return next(); +} diff --git a/apps/wizarr-frontend/src/router/middleware/requireNoAuth.ts b/apps/wizarr-frontend/src/router/middleware/requireNoAuth.ts new file mode 100644 index 000000000..8adc31c42 --- /dev/null +++ b/apps/wizarr-frontend/src/router/middleware/requireNoAuth.ts @@ -0,0 +1,21 @@ +import Auth from '@/api/authentication'; + +import type { NavigationGuardNext } from 'vue-router'; + +export default async function requireAuth({ + next, + authStore, +}: { + next: NavigationGuardNext; + authStore: any; +}) { + try { + const auth = new Auth(); + if (await auth.isAuthenticated()) return next({ name: 'admin' }); + } catch (error) { + console.error(error); + return next(); + } + + return next(); +} diff --git a/frontend/src/router/middlewarePipeline.ts b/apps/wizarr-frontend/src/router/middlewarePipeline.ts similarity index 100% rename from frontend/src/router/middlewarePipeline.ts rename to apps/wizarr-frontend/src/router/middlewarePipeline.ts diff --git a/frontend/src/service/sw.ts b/apps/wizarr-frontend/src/service/sw.ts similarity index 57% rename from frontend/src/service/sw.ts rename to apps/wizarr-frontend/src/service/sw.ts index ea381ad4b..24c8e1cf7 100644 --- a/frontend/src/service/sw.ts +++ b/apps/wizarr-frontend/src/service/sw.ts @@ -1,8 +1,12 @@ /// -import { cleanupOutdatedCaches, createHandlerBoundToURL, precacheAndRoute } from "workbox-precaching"; -import { clientsClaim } from "workbox-core"; -import { NavigationRoute, registerRoute } from "workbox-routing"; +import { + cleanupOutdatedCaches, + createHandlerBoundToURL, + precacheAndRoute, +} from 'workbox-precaching'; +import { clientsClaim } from 'workbox-core'; +import { NavigationRoute, registerRoute } from 'workbox-routing'; declare let self: ServiceWorkerGlobalScope; @@ -18,7 +22,11 @@ if (import.meta.env.PROD) { if (import.meta.env.DEV) allowlist = [/^\/$/]; // to allow work offline - registerRoute(new NavigationRoute(createHandlerBoundToURL("index.html"), { allowlist })); + registerRoute( + new NavigationRoute(createHandlerBoundToURL('index.html'), { + allowlist, + }), + ); self.skipWaiting(); clientsClaim(); diff --git a/apps/wizarr-frontend/src/shims/aacassandra__vue3-progressbar.d.ts b/apps/wizarr-frontend/src/shims/aacassandra__vue3-progressbar.d.ts new file mode 100644 index 000000000..6a90eb0fa --- /dev/null +++ b/apps/wizarr-frontend/src/shims/aacassandra__vue3-progressbar.d.ts @@ -0,0 +1,5 @@ +declare module '@aacassandra/vue3-progressbar' { + import type { Plugin } from 'vue'; + const VueProgressBar: Plugin; + export default VueProgressBar; +} diff --git a/frontend/src/shims/gettext.d.ts b/apps/wizarr-frontend/src/shims/gettext.d.ts similarity index 97% rename from frontend/src/shims/gettext.d.ts rename to apps/wizarr-frontend/src/shims/gettext.d.ts index 57e75304e..eb8834449 100644 --- a/frontend/src/shims/gettext.d.ts +++ b/apps/wizarr-frontend/src/shims/gettext.d.ts @@ -1,5 +1,5 @@ export {}; -declare module "vue" { +declare module 'vue' { interface ComponentCustomProperties { __: ( msgid: string, diff --git a/apps/wizarr-frontend/src/shims/global.d.ts b/apps/wizarr-frontend/src/shims/global.d.ts new file mode 100644 index 000000000..0d79a71b9 --- /dev/null +++ b/apps/wizarr-frontend/src/shims/global.d.ts @@ -0,0 +1,2 @@ +import 'vite-plugin-pwa/client'; +import 'vite/client'; diff --git a/frontend/src/shims/ping.d.ts b/apps/wizarr-frontend/src/shims/ping.d.ts similarity index 88% rename from frontend/src/shims/ping.d.ts rename to apps/wizarr-frontend/src/shims/ping.d.ts index 144a2574f..712b2a399 100644 --- a/frontend/src/shims/ping.d.ts +++ b/apps/wizarr-frontend/src/shims/ping.d.ts @@ -1,4 +1,4 @@ -declare module "ping.js" { +declare module 'ping.js' { export type CallbackFunc = (err: boolean, ping: number) => void; export type PingFunc = (source: string, cb?: CallbackFunc) => Promise; export default class Ping { diff --git a/apps/wizarr-frontend/src/shims/shims-vue.d.ts b/apps/wizarr-frontend/src/shims/shims-vue.d.ts new file mode 100644 index 000000000..75d6efaf6 --- /dev/null +++ b/apps/wizarr-frontend/src/shims/shims-vue.d.ts @@ -0,0 +1,22 @@ +import type { AxiosInstance } from 'axios'; +import type { Toasts } from '@/assets/ts/utils/Toasts'; +import type { CustomAxiosInstance } from '@/assets/ts/utils/Axios'; + +declare module '*.vue' { + import type { DefineComponent } from 'vue'; + const component: DefineComponent<{}, {}, any>; + export default component; +} + +declare module '@vue/runtime-core' { + interface ComponentCustomProperties { + $axios: CustomAxiosInstance; + $toast: Toasts; + $Progress: any; + } +} + +declare module 'LINGUAS' { + const LINGUAS: string; + export default LINGUAS; +} diff --git a/frontend/src/shims/svg.d.ts b/apps/wizarr-frontend/src/shims/svg.d.ts similarity index 55% rename from frontend/src/shims/svg.d.ts rename to apps/wizarr-frontend/src/shims/svg.d.ts index 1973c7ef4..b53e075ed 100644 --- a/frontend/src/shims/svg.d.ts +++ b/apps/wizarr-frontend/src/shims/svg.d.ts @@ -1,10 +1,10 @@ -declare module "*.svg" { +declare module '*.svg' { const filePath: string; export default filePath; } -declare module "*.svg?component" { - import { DefineComponent } from "vue"; +declare module '*.svg?component' { + import { DefineComponent } from 'vue'; const component: DefineComponent; export default component; } diff --git a/apps/wizarr-frontend/src/shims/v-offline.d.ts b/apps/wizarr-frontend/src/shims/v-offline.d.ts new file mode 100644 index 000000000..f81b20153 --- /dev/null +++ b/apps/wizarr-frontend/src/shims/v-offline.d.ts @@ -0,0 +1,5 @@ +declare module 'v-offline' { + import VOffline from 'v-offline/dist/components/VOffline.vue'; + export { default } from 'v-offline/dist/install'; + export { VOffline }; +} diff --git a/apps/wizarr-frontend/src/shims/vue-password-strength-meter.d.ts b/apps/wizarr-frontend/src/shims/vue-password-strength-meter.d.ts new file mode 100644 index 000000000..045c5771a --- /dev/null +++ b/apps/wizarr-frontend/src/shims/vue-password-strength-meter.d.ts @@ -0,0 +1,4 @@ +declare module 'vue-password-strength-meter' { + import Password from 'vue-password-strength-meter/dist/vue-password-strength-meter'; + export { Password }; +} diff --git a/frontend/src/shims/vue-stripe.d.ts b/apps/wizarr-frontend/src/shims/vue-stripe.d.ts similarity index 63% rename from frontend/src/shims/vue-stripe.d.ts rename to apps/wizarr-frontend/src/shims/vue-stripe.d.ts index 6ee9fd0c7..d41a9317f 100644 --- a/frontend/src/shims/vue-stripe.d.ts +++ b/apps/wizarr-frontend/src/shims/vue-stripe.d.ts @@ -1,5 +1,5 @@ -declare module "vue-stripe-js" { - import { Component } from "vue"; +declare module 'vue-stripe-js' { + import { Component } from 'vue'; const StripeElement: Component; const StripeElements: Component; export { StripeElement, StripeElements }; diff --git a/apps/wizarr-frontend/src/shims/vue-ts-responsive-grid-layout.d.ts b/apps/wizarr-frontend/src/shims/vue-ts-responsive-grid-layout.d.ts new file mode 100644 index 000000000..f1941ba1a --- /dev/null +++ b/apps/wizarr-frontend/src/shims/vue-ts-responsive-grid-layout.d.ts @@ -0,0 +1,5 @@ +declare module 'vue-ts-responsive-grid-layout' { + import { GridItem, GridLayout } from 'vue-ts-responsive-grid-layout'; + export const GridLayout: Component; + export const GridItem: Component; +} diff --git a/frontend/src/shims/widget.d.ts b/apps/wizarr-frontend/src/shims/widget.d.ts similarity index 61% rename from frontend/src/shims/widget.d.ts rename to apps/wizarr-frontend/src/shims/widget.d.ts index 00b67313d..e6a05f52a 100644 --- a/frontend/src/shims/widget.d.ts +++ b/apps/wizarr-frontend/src/shims/widget.d.ts @@ -1,3 +1,3 @@ -declare module "./widget.js" { +declare module './widget.js' { export function init(server: string): void; } diff --git a/frontend/src/stores/apikeys.ts b/apps/wizarr-frontend/src/stores/apikeys.ts similarity index 51% rename from frontend/src/stores/apikeys.ts rename to apps/wizarr-frontend/src/stores/apikeys.ts index 1a25513a0..2d5acc87a 100644 --- a/frontend/src/stores/apikeys.ts +++ b/apps/wizarr-frontend/src/stores/apikeys.ts @@ -1,40 +1,54 @@ -import type { APIKey, APIKeys } from "@/types/api/apikeys"; +import type { APIKey, APIKeys } from '@/types/api/apikeys'; -import { defineStore } from "pinia"; +import { defineStore } from 'pinia'; interface APIKeyStoreState { apikeys: APIKeys; } -export const useAPIKeyStore = defineStore("apikeys", { +export const useAPIKeyStore = defineStore('apikeys', { state: (): APIKeyStoreState => ({ apikeys: [], }), actions: { async getAPIKeys() { // Get the API keys from the API - const apikeys = await this.$axios.get("/api/apikeys").catch(() => { - this.$toast.error("Could not get API keys"); - return null; - }); + const apikeys = await this.$axios + .get('/api/apikeys') + .catch(() => { + this.$toast.error('Could not get API keys'); + return null; + }); // If the API keys are null, return if (apikeys === null) return; // Update the API keys that are already in the store this.apikeys.forEach((apikey, index) => { - const new_apikey = apikeys.data.find((new_apikey: APIKey) => new_apikey.id === apikey.id); + const new_apikey = apikeys.data.find( + (new_apikey: APIKey) => new_apikey.id === apikey.id, + ); if (new_apikey) this.apikeys[index] = new_apikey; }); // Add the new API keys to the store if they don't exist apikeys.data.forEach((apikey: APIKey) => { - if (!this.apikeys.find((old_apikey) => old_apikey.id === apikey.id)) this.apikeys.push(apikey); + if ( + !this.apikeys.find( + (old_apikey) => old_apikey.id === apikey.id, + ) + ) + this.apikeys.push(apikey); }); // Remove the API keys that were not in the response this.apikeys.forEach((apikey, index) => { - if (!apikeys.data.find((new_apikey: APIKey) => new_apikey.id === apikey.id)) this.apikeys.splice(index, 1); + if ( + !apikeys.data.find( + (new_apikey: APIKey) => new_apikey.id === apikey.id, + ) + ) + this.apikeys.splice(index, 1); }); // Return the API keys @@ -50,11 +64,13 @@ export const useAPIKeyStore = defineStore("apikeys", { }); // Create the API key - const response = await this.$axios.post("/api/apikeys", formData, { disableErrorToast: true }).catch((err) => { - this.$toast.error("Could not create API key"); - console.error(err); - return null; - }); + const response = await this.$axios + .post('/api/apikeys', formData, { disableErrorToast: true }) + .catch((err) => { + this.$toast.error('Could not create API key'); + console.error(err); + return null; + }); // If the response is null, return if (response === null) return; @@ -67,16 +83,20 @@ export const useAPIKeyStore = defineStore("apikeys", { }, async deleteAPIKey(id: number) { // Delete the API key from the API - const response = await this.$axios.delete(`/api/apikeys/${id}`, { disableInfoToast: true }).catch(() => { - this.$toast.error("Could not delete API key"); - return null; - }); + const response = await this.$axios + .delete(`/api/apikeys/${id}`, { disableInfoToast: true }) + .catch(() => { + this.$toast.error('Could not delete API key'); + return null; + }); // If the response is null, return if (response === null) return; // Remove the API key from the store - const index = this.apikeys.findIndex((apikey: APIKey) => apikey.id === id); + const index = this.apikeys.findIndex( + (apikey: APIKey) => apikey.id === id, + ); if (index !== -1) this.apikeys.splice(index, 1); }, }, diff --git a/frontend/src/stores/auth.ts b/apps/wizarr-frontend/src/stores/auth.ts similarity index 85% rename from frontend/src/stores/auth.ts rename to apps/wizarr-frontend/src/stores/auth.ts index 8a825e2a3..02cd06f97 100644 --- a/frontend/src/stores/auth.ts +++ b/apps/wizarr-frontend/src/stores/auth.ts @@ -1,12 +1,12 @@ -import { defineStore } from "pinia"; -import { useJwt } from "@vueuse/integrations/useJwt"; +import { defineStore } from 'pinia'; +import { useJwt } from '@vueuse/integrations/useJwt'; export type AuthStoreState = { token: string | null; refresh_token: string | null; }; -export const useAuthStore = defineStore("auth", { +export const useAuthStore = defineStore('auth', { state: (): AuthStoreState => ({ token: null, refresh_token: null, @@ -38,13 +38,15 @@ export const useAuthStore = defineStore("auth", { isAccessTokenExpired() { if (!this.token) return true; const { payload } = useJwt(this.token); - if (payload.value?.exp && payload.value?.exp < Date.now() / 1000) return true; + if (payload.value?.exp && payload.value?.exp < Date.now() / 1000) + return true; return false; }, isRefreshTokenExpired() { if (!this.refresh_token) return true; const { payload } = useJwt(this.refresh_token); - if (payload.value?.exp && payload.value?.exp < Date.now() / 1000) return true; + if (payload.value?.exp && payload.value?.exp < Date.now() / 1000) + return true; return false; }, }, diff --git a/frontend/src/stores/changeLog.ts b/apps/wizarr-frontend/src/stores/changeLog.ts similarity index 52% rename from frontend/src/stores/changeLog.ts rename to apps/wizarr-frontend/src/stores/changeLog.ts index 1d829abbd..d21c392a8 100644 --- a/frontend/src/stores/changeLog.ts +++ b/apps/wizarr-frontend/src/stores/changeLog.ts @@ -1,17 +1,17 @@ -import toasts from "@/ts/utils/toasts"; -import CacheStorage from "@/ts/utils/cacheStorage"; +import toasts from '@/ts/utils/toasts'; +import CacheStorage from '@/ts/utils/cacheStorage'; -import type { AxiosInstance } from "axios"; -import type { ChangeLog, ChangeLogs } from "@/types/ChangeLog"; +import type { AxiosInstance } from 'axios'; +import type { ChangeLog, ChangeLogs } from '@/types/ChangeLog'; -import { defineStore } from "pinia"; -import { useAxios } from "@/plugins/axios"; -import { buildWebStorage, setupCache } from "axios-cache-interceptor"; +import { defineStore } from 'pinia'; +import { useAxios } from '@/plugins/axios'; +import { buildWebStorage, setupCache } from 'axios-cache-interceptor'; const axios = useAxios(); const cachedAxios = setupCache(axios as AxiosInstance); -export const useChangeLogStore = defineStore("changeLog", { +export const useChangeLogStore = defineStore('changeLog', { state: () => ({ cache: {} as any, changeLogs: [] as ChangeLogs, @@ -25,33 +25,42 @@ export const useChangeLogStore = defineStore("changeLog", { this.fixCachedAxios(this); // Get the change logs from the API - const reponse = await cachedAxios.get("https://api.github.com/repos/wizarrrr/wizarr/releases", { - params: { per_page, page }, - transformRequest: [ - (data, headers) => { - delete headers["X-CSRF-TOKEN"]; - delete headers["pragma"]; - delete headers["expires"]; - delete headers["cache-control"]; - delete headers["Authorization"]; - return data; - }, - ], - }); + const reponse = await cachedAxios.get( + 'https://api.github.com/repos/wizarrrr/wizarr/releases', + { + params: { per_page, page }, + transformRequest: [ + (data, headers) => { + delete headers['X-CSRF-TOKEN']; + delete headers['pragma']; + delete headers['expires']; + delete headers['cache-control']; + delete headers['Authorization']; + return data; + }, + ], + }, + ); // If we didn't get a 200, raise an error if (reponse.status !== 200) { - toasts.error("Could not get Change Logs"); + toasts.error('Could not get Change Logs'); return; } // Add the new change logs and update existing ones reponse.data.forEach((changeLog: ChangeLog) => { - const index = this.changeLogs.findIndex((c) => c.id === changeLog.id); + const index = this.changeLogs.findIndex( + (c) => c.id === changeLog.id, + ); if (index === -1) { this.changeLogs = [...this.changeLogs, changeLog]; } else { - this.changeLogs = [...this.changeLogs.slice(0, index), changeLog, ...this.changeLogs.slice(index + 1)]; + this.changeLogs = [ + ...this.changeLogs.slice(0, index), + changeLog, + ...this.changeLogs.slice(index + 1), + ]; } }); }, diff --git a/frontend/src/stores/dashboard.ts b/apps/wizarr-frontend/src/stores/dashboard.ts similarity index 73% rename from frontend/src/stores/dashboard.ts rename to apps/wizarr-frontend/src/stores/dashboard.ts index 2e9f1a802..33243a171 100644 --- a/frontend/src/stores/dashboard.ts +++ b/apps/wizarr-frontend/src/stores/dashboard.ts @@ -1,6 +1,6 @@ -import type { WidgetOptions } from "@/types/local/WidgetOptions"; -import { defineStore } from "pinia"; -import { nanoid } from "nanoid"; +import type { WidgetOptions } from '@/types/local/WidgetOptions'; +import { defineStore } from 'pinia'; +import { nanoid } from 'nanoid'; interface DashboardStoreState { dashboard: WidgetOptions[]; @@ -9,47 +9,47 @@ interface DashboardStoreState { const defaultDashboard: WidgetOptions[] = [ { id: nanoid(), - type: "LatestInfo", + type: 'LatestInfo', grid: { w: 6, h: 2 }, }, { id: nanoid(), - type: "InvitesTotal", + type: 'InvitesTotal', grid: { w: 2, h: 2 }, }, { id: nanoid(), - type: "UsersTotal", + type: 'UsersTotal', grid: { w: 2, h: 2 }, }, { id: nanoid(), - type: "TasksTotal", + type: 'TasksTotal', grid: { w: 2, h: 2 }, }, { id: nanoid(), - type: "UsersGraph", + type: 'UsersGraph', grid: { w: 3, h: 4 }, }, { id: nanoid(), - type: "InvitesGraph", + type: 'InvitesGraph', grid: { w: 3, h: 4 }, }, { id: nanoid(), - type: "MapWidget", + type: 'MapWidget', grid: { w: 4, h: 5 }, }, { id: nanoid(), - type: "ContributorsList", + type: 'ContributorsList', grid: { w: 2, h: 5 }, }, ]; -export const useDashboardStore = defineStore("dashboard", { +export const useDashboardStore = defineStore('dashboard', { state: (): DashboardStoreState => ({ dashboard: defaultDashboard, }), diff --git a/apps/wizarr-frontend/src/stores/invitations.ts b/apps/wizarr-frontend/src/stores/invitations.ts new file mode 100644 index 000000000..545a4c23d --- /dev/null +++ b/apps/wizarr-frontend/src/stores/invitations.ts @@ -0,0 +1,101 @@ +import type { Invitation, Invitations } from '@/types/api/invitations'; + +import { defineStore } from 'pinia'; + +interface InvitationStoreState { + invitations: any[]; +} + +export const useInvitationStore = defineStore('invitations', { + state: (): InvitationStoreState => ({ + invitations: [] as Invitations, + }), + actions: { + async getInvitations() { + // Get invites from API + const invitations = await this.$axios + .get('/api/invitations') + .catch(() => { + this.$toast.error('Could not get invitations'); + return null; + }); + + // If the invites are null, return + if (invitations === null) return; + + // Update the invites that are already in the store + this.invitations.forEach((invite, index) => { + const new_invitation = invitations.data.find( + (new_invitation: Invitation) => + new_invitation.id === invite.id, + ); + if (new_invitation) this.invitations[index] = new_invitation; + }); + + // Add the new invites to the store if they don't exist + invitations.data.forEach((invitation: Invitation) => { + if ( + !this.invitations.find( + (old_invitation) => old_invitation.id === invitation.id, + ) + ) + this.invitations.push(invitation); + }); + + // Remove the invites that were not in the response + this.invitations.forEach((invitation, index) => { + if ( + !invitations.data.find( + (new_invitation: Invitation) => + new_invitation.id === invitation.id, + ) + ) + this.invitations.splice(index, 1); + }); + + // Return the invites + return invitations.data; + }, + async createInvitation(invitation: FormData | Partial) { + // Create the invite + const response = await this.$axios + .post('/api/invitations', invitation, { + disableErrorToast: true, + }) + .catch((err) => { + this.$toast.error('Could not create invitation'); + console.error(err); + return null; + }); + + // If the response is null, return + if (response === null) return; + + // Add the invite to the store + this.invitations.push(response.data as Invitation); + + // Return the invite + return response.data as Invitation; + }, + async deleteInvitation(id: number) { + // Delete the invite from the API + const response = await this.$axios + .delete(`/api/invitations/${id}`, { disableInfoToast: true }) + .catch((err) => { + this.$toast.error('Could not delete invitation'); + console.error(err); + return null; + }); + + // If the response is null, return + if (response === null) return; + + // Remove the invite from the store + const index = this.invitations.findIndex( + (invitation: Invitation) => invitation.id === id, + ); + if (index !== -1) this.invitations.splice(index, 1); + }, + }, + persist: true, +}); diff --git a/frontend/src/stores/language.ts b/apps/wizarr-frontend/src/stores/language.ts similarity index 64% rename from frontend/src/stores/language.ts rename to apps/wizarr-frontend/src/stores/language.ts index 5bc960e91..5267c2274 100644 --- a/frontend/src/stores/language.ts +++ b/apps/wizarr-frontend/src/stores/language.ts @@ -1,10 +1,10 @@ -import type { Language } from "vue3-gettext"; -import { language as autoLanguage } from "@/i18n"; -import { defineStore } from "pinia"; +import type { Language } from 'vue3-gettext'; +import { language as autoLanguage } from '@/i18n'; +import { defineStore } from 'pinia'; -export const useLanguageStore = defineStore("language", { +export const useLanguageStore = defineStore('language', { state: () => ({ - language: "auto" as string, + language: 'auto' as string, availableLanguages: {} as { [key: string]: string }, }), actions: { @@ -12,7 +12,7 @@ export const useLanguageStore = defineStore("language", { this.language = language; }, updateLanguage(gettext: Language, language: string) { - gettext.current = language === "auto" ? autoLanguage : language; + gettext.current = language === 'auto' ? autoLanguage : language; }, updateAvailableLanguages(gettext: Language) { this.availableLanguages = gettext.available; diff --git a/apps/wizarr-frontend/src/stores/libraries.ts b/apps/wizarr-frontend/src/stores/libraries.ts new file mode 100644 index 000000000..dc5c9ac2c --- /dev/null +++ b/apps/wizarr-frontend/src/stores/libraries.ts @@ -0,0 +1,111 @@ +import { defineStore } from 'pinia'; + +export const useLibrariesStore = defineStore('libraries', { + state: () => ({ + libraries: [] as Array<{ id: string; name: string; created: Date }>, + }), + actions: { + async getLibraries() { + // Get the libraries from the API + const response = await this.$axios.get('/api/libraries'); + + // Check if the response is valid + if (!response?.data) { + this.$toast.error('Could not get libraries'); + return; + } + + // Map the libraries to the correct format + this.libraries = response.data.map( + (library: { id: string; name: string; created: string }) => { + return { + id: library.id, + name: library.name, + created: new Date(library.created), + }; + }, + ); + }, + async saveLibraries( + libraries: Array<{ id: string; name: string; selected: boolean }>, + ) { + const formData = new FormData(); + const newLibraries: string[] = []; + + libraries.forEach((library) => { + if (library.selected) { + newLibraries.push(library.id); + } + }); + + formData.append('libraries', JSON.stringify(newLibraries)); + + const response = await this.$axios + .post('/api/libraries', formData, { disableInfoToast: true }) + .catch(() => { + return; + }); + + if (!response?.data?.message) { + this.$toast.error('Could not save libraries'); + return; + } + + this.$toast.info('Successfully saved libraries'); + }, + async scanLibraries() { + // Get the libraries from the API + const libResponse = await this.$axios.get('/api/libraries'); + + // Check if the response is valid + if (!libResponse?.data) { + this.$toast.error('Could not get libraries'); + return; + } + + // Map the libraries to the correct format + const allLibraries = libResponse.data.map( + (library: { id: string; name: string; created: string }) => { + return { + id: library.id, + name: library.name, + created: new Date(library.created), + }; + }, + ) as Array<{ id: string; name: string; created: Date }>; + + // Update the libraries in the store + this.libraries = allLibraries; + + // Get the libraries from the media server + const scanResponse = await this.$axios.get('/api/scan-libraries'); + + // Check if the response is valid + if (!scanResponse?.data?.libraries) { + this.$toast.error('Could not get libraries'); + return; + } + + // Map the libraries to the correct format + const libraries: [string, string][] = Object.entries( + scanResponse.data.libraries, + ); + const newLibraries: Array<{ + id: string; + name: string; + selected: boolean; + }> = []; + + // Check if the library is selected + for (const [name, id] of libraries) { + const selected = + allLibraries.find((library) => library.id === id) !== + undefined; + newLibraries.push({ id: id, name: name, selected: selected }); + } + + return newLibraries; + }, + }, + persist: true, +}); diff --git a/frontend/src/stores/membership.ts b/apps/wizarr-frontend/src/stores/membership.ts similarity index 100% rename from frontend/src/stores/membership.ts rename to apps/wizarr-frontend/src/stores/membership.ts diff --git a/frontend/src/stores/passkeys.ts b/apps/wizarr-frontend/src/stores/passkeys.ts similarity index 74% rename from frontend/src/stores/passkeys.ts rename to apps/wizarr-frontend/src/stores/passkeys.ts index fdff9a971..de80f4ce3 100644 --- a/frontend/src/stores/passkeys.ts +++ b/apps/wizarr-frontend/src/stores/passkeys.ts @@ -1,14 +1,14 @@ -import type { MFA, MFAList } from "@/types/api/auth/MFA"; +import type { MFA, MFAList } from '@/types/api/auth/MFA'; -import Auth from "@/api/authentication"; -import browser from "browser-detect"; -import { defineStore } from "pinia"; +import Auth from '@/api/authentication'; +import browser from 'browser-detect'; +import { defineStore } from 'pinia'; interface PasskeysStoreState { mfas: MFAList; } -export const usePasskeysStore = defineStore("passkeys", { +export const usePasskeysStore = defineStore('passkeys', { state: (): PasskeysStoreState => ({ mfas: [], }), @@ -17,11 +17,11 @@ export const usePasskeysStore = defineStore("passkeys", { return string.charAt(0).toUpperCase() + string.slice(1); }, removeVersion(string: string) { - return string.replace(/ \d+(\.\d+)*\s*/g, ""); + return string.replace(/ \d+(\.\d+)*\s*/g, ''); }, async getMfas() { // Get the mfas from the API - const mfa = await this.$axios.get("/api/mfa").catch((err) => { + const mfa = await this.$axios.get('/api/mfa').catch((err) => { console.error(err); return null; }); @@ -43,8 +43,12 @@ export const usePasskeysStore = defineStore("passkeys", { const browser_info = browser(); // Get the browser name and os name - const browser_name = this.firstLetterUppercase(browser_info.name ?? "Unknown"); - const os_name = this.firstLetterUppercase(this.removeVersion(browser_info.os ?? "Unknown")); + const browser_name = this.firstLetterUppercase( + browser_info.name ?? 'Unknown', + ); + const os_name = this.firstLetterUppercase( + this.removeVersion(browser_info.os ?? 'Unknown'), + ); // Create name for the new MFA const name = `${browser_name} on ${os_name}`; @@ -59,10 +63,11 @@ export const usePasskeysStore = defineStore("passkeys", { const mfa = response.data as MFA; // Add the new MFA to the store - if (!this.mfas.find((old_mfa: MFA) => old_mfa.id === mfa.id)) this.mfas.push(mfa); + if (!this.mfas.find((old_mfa: MFA) => old_mfa.id === mfa.id)) + this.mfas.push(mfa); // Show message to user - this.$toast.info("Successfully created new Passkey"); + this.$toast.info('Successfully created new Passkey'); }, async deleteMfa(id: string | number) { // Delete the MFA from the API diff --git a/frontend/src/stores/progress.ts b/apps/wizarr-frontend/src/stores/progress.ts similarity index 74% rename from frontend/src/stores/progress.ts rename to apps/wizarr-frontend/src/stores/progress.ts index 4a2bb93d7..c2f6c595f 100644 --- a/frontend/src/stores/progress.ts +++ b/apps/wizarr-frontend/src/stores/progress.ts @@ -1,6 +1,6 @@ -import { defineStore } from "pinia"; +import { defineStore } from 'pinia'; -export const useProgressStore = defineStore("progress", { +export const useProgressStore = defineStore('progress', { state: () => ({ progress: false as boolean, fullPageLoading: true as boolean, diff --git a/frontend/src/stores/requests.ts b/apps/wizarr-frontend/src/stores/requests.ts similarity index 54% rename from frontend/src/stores/requests.ts rename to apps/wizarr-frontend/src/stores/requests.ts index 7b02470f3..6ab432fb3 100644 --- a/frontend/src/stores/requests.ts +++ b/apps/wizarr-frontend/src/stores/requests.ts @@ -1,40 +1,54 @@ -import type { Request, Requests } from "@/types/api/request"; +import type { Request, Requests } from '@/types/api/request'; -import { defineStore } from "pinia"; +import { defineStore } from 'pinia'; interface RequestsStoreState { requests: Requests; } -export const useRequestsStore = defineStore("requests", { +export const useRequestsStore = defineStore('requests', { state: (): RequestsStoreState => ({ requests: [], }), actions: { async getRequests() { // Get the requests from the API - const requests = await this.$axios.get("/api/requests").catch((err) => { - this.$toast.error("Could not get requests"); - return null; - }); + const requests = await this.$axios + .get('/api/requests') + .catch((err) => { + this.$toast.error('Could not get requests'); + return null; + }); // If the requests are null, return if (requests === null) return; // Update the requests that are already in the store this.requests.forEach((request, index) => { - const new_request = requests.data.find((new_request: Request) => new_request.id === request.id); + const new_request = requests.data.find( + (new_request: Request) => new_request.id === request.id, + ); if (new_request) this.requests[index] = new_request; }); // Add the new requests to the store if they don't exist requests.data.forEach((request: Request) => { - if (!this.requests.find((old_request) => old_request.id === request.id)) this.requests.push(request); + if ( + !this.requests.find( + (old_request) => old_request.id === request.id, + ) + ) + this.requests.push(request); }); // Remove the requests that were not in the response this.requests.forEach((request, index) => { - if (!requests.data.find((new_request: Request) => new_request.id === request.id)) this.requests.splice(index, 1); + if ( + !requests.data.find( + (new_request: Request) => new_request.id === request.id, + ) + ) + this.requests.splice(index, 1); }); }, async createRequest(request: Request) { @@ -47,11 +61,13 @@ export const useRequestsStore = defineStore("requests", { }); // Create the request - const response = await this.$axios.post("/api/requests", formData, { disableErrorToast: true }).catch((err) => { - this.$toast.error("Could not create request"); - console.error(err); - return null; - }); + const response = await this.$axios + .post('/api/requests', formData, { disableErrorToast: true }) + .catch((err) => { + this.$toast.error('Could not create request'); + console.error(err); + return null; + }); // If the response is null, return if (response === null) return; @@ -65,13 +81,15 @@ export const useRequestsStore = defineStore("requests", { async deleteRequest(id: number) { // Delete the request from the API await this.$axios.delete(`/api/requests/${id}`).catch((err) => { - this.$toast.error("Could not delete request"); + this.$toast.error('Could not delete request'); console.error(err); return null; }); // Remove the request from the store - const index = this.requests.findIndex((request: Request) => request.id === id); + const index = this.requests.findIndex( + (request: Request) => request.id === id, + ); if (index !== -1) this.requests.splice(index, 1); }, }, diff --git a/apps/wizarr-frontend/src/stores/server.ts b/apps/wizarr-frontend/src/stores/server.ts new file mode 100644 index 000000000..9d76280be --- /dev/null +++ b/apps/wizarr-frontend/src/stores/server.ts @@ -0,0 +1,28 @@ +import type { Server, ServerSettings } from '@/types/api/server'; + +import { defineStore } from 'pinia'; + +export const useServerStore = defineStore('server', { + state: () => ({ + settings: {} as ServerSettings, + version: '' as string, + update_available: false as boolean, + debug: false as boolean, + setup_required: false as boolean, + latest_version: '' as string, + latest_beta_version: '' as string, + }), + actions: { + setServerData(server_data: Partial | undefined) { + if (server_data !== undefined) { + Object.keys(server_data).forEach((key: string) => { + if ((this as any)[key] !== undefined) + (this as any)[key] = ( + server_data as { [key: string]: any } + )[key]; + }); + } + }, + }, + persist: true, +}); diff --git a/apps/wizarr-frontend/src/stores/sessions.ts b/apps/wizarr-frontend/src/stores/sessions.ts new file mode 100644 index 000000000..c311ee4c4 --- /dev/null +++ b/apps/wizarr-frontend/src/stores/sessions.ts @@ -0,0 +1,74 @@ +import type { Session, Sessions } from '@/types/api/sessions'; +import { defineStore } from 'pinia'; + +interface SessionsStoreState { + sessions: Sessions; +} + +export const useSessionsStore = defineStore('sessions', { + state: (): SessionsStoreState => ({ + sessions: [], + }), + actions: { + async getSessions() { + // Get the sessions from the API + const sessions = await this.$axios + .get('/api/sessions') + .catch((err) => { + this.$toast.error('Could not get sessions'); + return null; + }); + + // If the sessions are null, return + if (sessions === null) return; + + // Update the sessions that are already in the store + this.sessions.forEach((session, index) => { + const new_session = sessions.data.find( + (new_session: Session) => new_session.id === session.id, + ); + if (new_session) this.sessions[index] = new_session; + }); + + // Add the new sessions to the store if they don't exist + sessions.data.forEach((session: Session) => { + if ( + !this.sessions.find( + (old_session) => old_session.id === session.id, + ) + ) + this.sessions.push(session); + }); + + // Remove the sessions that were not in the response + this.sessions.forEach((session, index) => { + if ( + !sessions.data.find( + (new_session: Session) => new_session.id === session.id, + ) + ) + this.sessions.splice(index, 1); + }); + }, + async deleteSession(id: number) { + // Delete the session from the API + const response = await this.$axios + .delete(`/api/sessions/${id}`) + .catch((err) => { + this.$toast.error('Could not delete session'); + console.error(err); + return null; + }); + + // If the response is null, return + if (response === null) return; + + // Remove the session from the store + const index = this.sessions.findIndex( + (session: Session) => session.id === id, + ); + if (index !== -1) this.sessions.splice(index, 1); + }, + }, + persist: true, +}); diff --git a/apps/wizarr-frontend/src/stores/settings.ts b/apps/wizarr-frontend/src/stores/settings.ts new file mode 100644 index 000000000..a3647632c --- /dev/null +++ b/apps/wizarr-frontend/src/stores/settings.ts @@ -0,0 +1,13 @@ +import { defineStore } from 'pinia'; + +interface SettingsStoreState { + search: string; + header: 'search' | 'back'; +} + +export const useSettingsStore = defineStore('settings', { + state: (): SettingsStoreState => ({ + search: '', + header: 'search', + }), +}); diff --git a/frontend/src/stores/tasks.ts b/apps/wizarr-frontend/src/stores/tasks.ts similarity index 59% rename from frontend/src/stores/tasks.ts rename to apps/wizarr-frontend/src/stores/tasks.ts index ce7f46e48..aa205d1c5 100644 --- a/frontend/src/stores/tasks.ts +++ b/apps/wizarr-frontend/src/stores/tasks.ts @@ -1,39 +1,45 @@ -import { defineStore } from "pinia"; -import type { Job, JobList } from "@/types/Tasks"; +import { defineStore } from 'pinia'; +import type { Job, JobList } from '@/types/Tasks'; interface TasksStoreState { jobs: JobList; } -export const useTasksStore = defineStore("tasks", { +export const useTasksStore = defineStore('tasks', { state: (): TasksStoreState => ({ jobs: [], }), actions: { async getJobs() { // Get the jobs from the API - const jobs = await this.$axios.get("/api/scheduler/jobs").catch((err) => { - this.$toast.error("Could not get jobs"); - return null; - }); + const jobs = await this.$axios + .get('/api/scheduler/jobs') + .catch((err) => { + this.$toast.error('Could not get jobs'); + return null; + }); // If the jobs are null, return if (jobs === null) return; // Update the jobs that are already in the store this.jobs.forEach((job, index) => { - const new_job = jobs.data.find((new_job: Job) => new_job.id === job.id); + const new_job = jobs.data.find( + (new_job: Job) => new_job.id === job.id, + ); if (new_job) this.jobs[index] = new_job; }); // Add the new jobs to the store if they don't exist jobs.data.forEach((job: Job) => { - if (!this.jobs.find((old_job: Job) => old_job.id === job.id)) this.jobs.push(job); + if (!this.jobs.find((old_job: Job) => old_job.id === job.id)) + this.jobs.push(job); }); // Remove the jobs that were not in the response this.jobs.forEach((job, index) => { - if (!jobs.data.find((new_job: Job) => new_job.id === job.id)) this.jobs.splice(index, 1); + if (!jobs.data.find((new_job: Job) => new_job.id === job.id)) + this.jobs.splice(index, 1); }); // Return the jobs @@ -41,11 +47,13 @@ export const useTasksStore = defineStore("tasks", { }, async getJob(id: string) { // Get the job from the API - const job = await this.$axios.get(`/api/scheduler/jobs/${id}`).catch((err) => { - this.$toast.error("Could not get job"); - console.error(err); - return null; - }); + const job = await this.$axios + .get(`/api/scheduler/jobs/${id}`) + .catch((err) => { + this.$toast.error('Could not get job'); + console.error(err); + return null; + }); // If the job is null, return if (job === null) return; @@ -59,11 +67,13 @@ export const useTasksStore = defineStore("tasks", { }, async runJob(id: string) { // Run the job - const job = await this.$axios.post(`/api/scheduler/jobs/${id}/run`).catch((err) => { - this.$toast.error("Could not run job"); - console.error(err); - return null; - }); + const job = await this.$axios + .post(`/api/scheduler/jobs/${id}/run`) + .catch((err) => { + this.$toast.error('Could not run job'); + console.error(err); + return null; + }); // If the job is null, return if (job === null) return; @@ -77,11 +87,13 @@ export const useTasksStore = defineStore("tasks", { }, async pauseJob(id: string) { // Pause the job - const job = await this.$axios.post(`/api/scheduler/jobs/${id}/pause`).catch((err) => { - this.$toast.error("Could not pause job"); - console.error(err); - return null; - }); + const job = await this.$axios + .post(`/api/scheduler/jobs/${id}/pause`) + .catch((err) => { + this.$toast.error('Could not pause job'); + console.error(err); + return null; + }); // If the job is null, return if (job === null) return; @@ -95,11 +107,13 @@ export const useTasksStore = defineStore("tasks", { }, async resumeJob(id: string) { // Resume the job - const job = await this.$axios.post(`/api/scheduler/jobs/${id}/resume`).catch((err) => { - this.$toast.error("Could not resume job"); - console.error(err); - return null; - }); + const job = await this.$axios + .post(`/api/scheduler/jobs/${id}/resume`) + .catch((err) => { + this.$toast.error('Could not resume job'); + console.error(err); + return null; + }); // If the job is null, return if (job === null) return; @@ -113,11 +127,13 @@ export const useTasksStore = defineStore("tasks", { }, async deleteJob(id: string) { // Delete the job - const job = await this.$axios.delete(`/api/scheduler/jobs/${id}`).catch((err) => { - this.$toast.error("Could not delete job"); - console.error(err); - return null; - }); + const job = await this.$axios + .delete(`/api/scheduler/jobs/${id}`) + .catch((err) => { + this.$toast.error('Could not delete job'); + console.error(err); + return null; + }); // If the job is null, return if (job === null) return; diff --git a/frontend/src/stores/theme.ts b/apps/wizarr-frontend/src/stores/theme.ts similarity index 60% rename from frontend/src/stores/theme.ts rename to apps/wizarr-frontend/src/stores/theme.ts index 73fd7a8d0..75c7d8656 100644 --- a/frontend/src/stores/theme.ts +++ b/apps/wizarr-frontend/src/stores/theme.ts @@ -1,14 +1,14 @@ -import { SYSTEM_VALUE, getTheme, updateTheme } from "@/ts/utils/darkMode"; +import { SYSTEM_VALUE, getTheme, updateTheme } from '@/ts/utils/darkMode'; -import type { THEME } from "@/ts/utils/darkMode"; -import { defineStore } from "pinia"; +import type { THEME } from '@/ts/utils/darkMode'; +import { defineStore } from 'pinia'; interface ThemeStoreState { theme: THEME; boxView: boolean; } -export const useThemeStore = defineStore("theme", { +export const useThemeStore = defineStore('theme', { state: (): ThemeStoreState => ({ theme: SYSTEM_VALUE, boxView: false, @@ -24,17 +24,17 @@ export const useThemeStore = defineStore("theme", { }, toggleTheme() { switch (this.theme) { - case "dark": - this.theme = "light"; + case 'dark': + this.theme = 'light'; break; - case "light": - this.theme = "system"; + case 'light': + this.theme = 'system'; break; - case "system": - this.theme = "dark"; + case 'system': + this.theme = 'dark'; break; default: - this.theme = "dark"; + this.theme = 'dark'; break; } diff --git a/frontend/src/stores/user.ts b/apps/wizarr-frontend/src/stores/user.ts similarity index 67% rename from frontend/src/stores/user.ts rename to apps/wizarr-frontend/src/stores/user.ts index 00f7b3342..b4b586324 100644 --- a/frontend/src/stores/user.ts +++ b/apps/wizarr-frontend/src/stores/user.ts @@ -1,13 +1,13 @@ -import type { Membership } from "@/types/api/membership"; -import type { APIUser as User } from "@/types/api/auth/User"; -import { defineStore } from "pinia"; +import type { Membership } from '@/types/api/membership'; +import type { APIUser as User } from '@/types/api/auth/User'; +import { defineStore } from 'pinia'; interface UserStoreState { user: Partial | null; membership: Membership | null; } -export const useUserStore = defineStore("user", { +export const useUserStore = defineStore('user', { state: (): UserStoreState => ({ user: null, membership: null, @@ -28,7 +28,10 @@ export const useUserStore = defineStore("user", { this.membership = membership; }, updateMembership(membership: Partial) { - this.membership = { ...this.membership, ...membership } as Membership; + this.membership = { + ...this.membership, + ...membership, + } as Membership; }, }, persist: true, diff --git a/frontend/src/stores/users.ts b/apps/wizarr-frontend/src/stores/users.ts similarity index 54% rename from frontend/src/stores/users.ts rename to apps/wizarr-frontend/src/stores/users.ts index 0b6ccb82e..b202a0e01 100644 --- a/frontend/src/stores/users.ts +++ b/apps/wizarr-frontend/src/stores/users.ts @@ -1,22 +1,24 @@ -import type { User, Users } from "@/types/api/users"; +import type { User, Users } from '@/types/api/users'; -import { defineStore } from "pinia"; +import { defineStore } from 'pinia'; interface UserStoreState { users: Users; } -export const useUsersStore = defineStore("users", { +export const useUsersStore = defineStore('users', { state: (): UserStoreState => ({ users: [], }), actions: { async scanUsers() { // Trigger the scan through the API - const response = await this.$axios.get("/api/users/scan").catch(() => { - this.$toast.error("Could not scan users"); - return null; - }); + const response = await this.$axios + .get('/api/users/scan') + .catch(() => { + this.$toast.error('Could not scan users'); + return null; + }); // If the response is null, return if (response === null) return; @@ -26,28 +28,38 @@ export const useUsersStore = defineStore("users", { }, async getUsers() { // Get the users from the API - const users = await this.$axios.get("/api/users").catch(() => { - this.$toast.error("Could not get users"); - return null; - }); + const users = await this.$axios + .get('/api/users') + .catch(() => { + this.$toast.error('Could not get users'); + return null; + }); // If the users are null, return if (users === null) return; // Update the users that are already in the store this.users.forEach((user, index) => { - const new_user = users.data.find((new_user: User) => new_user.id === user.id); + const new_user = users.data.find( + (new_user: User) => new_user.id === user.id, + ); if (new_user) this.users[index] = new_user; }); // Add the new users to the store if they don't exist users.data.forEach((user: User) => { - if (!this.users.find((old_user) => old_user.id === user.id)) this.users.push(user); + if (!this.users.find((old_user) => old_user.id === user.id)) + this.users.push(user); }); // Remove the users that were not in the response this.users.forEach((user, index) => { - if (!users.data.find((new_user: User) => new_user.id === user.id)) this.users.splice(index, 1); + if ( + !users.data.find( + (new_user: User) => new_user.id === user.id, + ) + ) + this.users.splice(index, 1); }); // Return the users @@ -55,10 +67,12 @@ export const useUsersStore = defineStore("users", { }, async deleteUser(id: number) { // Delete the user from the API - const response = await this.$axios.delete(`/api/users/${id}`, { disableInfoToast: true }).catch(() => { - this.$toast.error("Could not delete user"); - return null; - }); + const response = await this.$axios + .delete(`/api/users/${id}`, { disableInfoToast: true }) + .catch(() => { + this.$toast.error('Could not delete user'); + return null; + }); // If the response is null, return if (response === null) return; diff --git a/frontend/src/stores/webhooks.ts b/apps/wizarr-frontend/src/stores/webhooks.ts similarity index 53% rename from frontend/src/stores/webhooks.ts rename to apps/wizarr-frontend/src/stores/webhooks.ts index 08451b68e..528923a7b 100644 --- a/frontend/src/stores/webhooks.ts +++ b/apps/wizarr-frontend/src/stores/webhooks.ts @@ -1,40 +1,54 @@ -import type { Webhook, Webhooks } from "@/types/api/webhooks"; +import type { Webhook, Webhooks } from '@/types/api/webhooks'; -import { defineStore } from "pinia"; +import { defineStore } from 'pinia'; interface WebhookStoreState { webhooks: Webhooks; } -export const useWebhookStore = defineStore("webhooks", { +export const useWebhookStore = defineStore('webhooks', { state: (): WebhookStoreState => ({ webhooks: [], }), actions: { async getWebhooks() { // Get webhooks from API - const webhooks = await this.$axios.get("/api/webhooks").catch(() => { - this.$toast.error("Could not get webhooks"); - return null; - }); + const webhooks = await this.$axios + .get('/api/webhooks') + .catch(() => { + this.$toast.error('Could not get webhooks'); + return null; + }); // If the webhooks are null, return if (webhooks === null) return; // Update the webhooks that are already in the store this.webhooks.forEach((webhook, index) => { - const new_webhook = webhooks.data.find((new_webhook: Webhook) => new_webhook.id === webhook.id); + const new_webhook = webhooks.data.find( + (new_webhook: Webhook) => new_webhook.id === webhook.id, + ); if (new_webhook) this.webhooks[index] = new_webhook; }); // Add the new webhooks to the store if they don't exist webhooks.data.forEach((webhook: Webhook) => { - if (!this.webhooks.find((old_webhook) => old_webhook.id === webhook.id)) this.webhooks.push(webhook); + if ( + !this.webhooks.find( + (old_webhook) => old_webhook.id === webhook.id, + ) + ) + this.webhooks.push(webhook); }); // Remove the webhooks that were not in the response this.webhooks.forEach((webhook, index) => { - if (!webhooks.data.find((new_webhook: Webhook) => new_webhook.id === webhook.id)) this.webhooks.splice(index, 1); + if ( + !webhooks.data.find( + (new_webhook: Webhook) => new_webhook.id === webhook.id, + ) + ) + this.webhooks.splice(index, 1); }); }, async createWebhook(webhook: Partial) { @@ -47,11 +61,13 @@ export const useWebhookStore = defineStore("webhooks", { }); // Create the webhook - const response = await this.$axios.post("/api/webhooks", formData, { disableErrorToast: true }).catch((err) => { - this.$toast.error("Could not create webhook"); - console.error(err); - return null; - }); + const response = await this.$axios + .post('/api/webhooks', formData, { disableErrorToast: true }) + .catch((err) => { + this.$toast.error('Could not create webhook'); + console.error(err); + return null; + }); // If the response is null, return if (response === null) return; @@ -64,10 +80,12 @@ export const useWebhookStore = defineStore("webhooks", { }, async deleteWebhook(id: number) { // Delete the webhook from the API - const response = await this.$axios.delete(`/api/webhooks/${id}`, { disableInfoToast: true }).catch(() => { - this.$toast.error("Could not delete webhook"); - return null; - }); + const response = await this.$axios + .delete(`/api/webhooks/${id}`, { disableInfoToast: true }) + .catch(() => { + this.$toast.error('Could not delete webhook'); + return null; + }); // If the response is null, return if (response === null) return; diff --git a/apps/wizarr-frontend/src/templates/AdminTemplate.vue b/apps/wizarr-frontend/src/templates/AdminTemplate.vue new file mode 100644 index 000000000..3a2c67949 --- /dev/null +++ b/apps/wizarr-frontend/src/templates/AdminTemplate.vue @@ -0,0 +1,176 @@ + + + diff --git a/frontend/src/templates/HeaderTemplate.vue b/apps/wizarr-frontend/src/templates/HeaderTemplate.vue similarity index 59% rename from frontend/src/templates/HeaderTemplate.vue rename to apps/wizarr-frontend/src/templates/HeaderTemplate.vue index cde9f1e00..6a6996913 100644 --- a/frontend/src/templates/HeaderTemplate.vue +++ b/apps/wizarr-frontend/src/templates/HeaderTemplate.vue @@ -2,18 +2,30 @@

-
+
-
-
+
+
-
- {{ header ?? "" }} +
+ {{ header ?? '' }}
-
- {{ subheader ?? "" }} +
+ {{ subheader ?? '' }}
@@ -29,7 +41,10 @@
-
+
@@ -42,10 +57,10 @@ diff --git a/apps/wizarr-frontend/src/tours/admin-home.ts b/apps/wizarr-frontend/src/tours/admin-home.ts new file mode 100644 index 000000000..c51ee649a --- /dev/null +++ b/apps/wizarr-frontend/src/tours/admin-home.ts @@ -0,0 +1,56 @@ +import type { App } from 'vue'; +import type { CustomTourGuideOptions } from '@/plugins/tours'; +import type { TourGuideCallbacks } from '.'; +import { TourGuideStep } from '@sjmc11/tourguidejs/src/types/TourGuideStep'; + +const steps = (__: (key: string) => string): TourGuideStep[] => [ + { + title: __('Welcome to Wizarr'), + content: __( + 'We want to help you get started with Wizarr as quickly as possible, consider following this tour to get a quick overview.', + ), + }, + { + title: __('Dashboard Widgets'), + content: __( + 'These are your widgets, you can use them to get a quick overview of your Wizarr instance.', + ), + target: '.grid-stack-item:nth-child(2)', + }, + { + title: __('Latest Information'), + content: __( + 'Like this Widget, it shows you the latest information about Wizarr and will be updated regularly by our amazing team.', + ), + target: '.latest-info', + }, + { + title: __('Edit Dashboard'), + content: __( + 'You can also edit your dashboard, delete widgets, add new widgets, and move them around.', + ), + target: '#editDashboard', + }, +]; + +const options = ( + __: (key: string) => string, + app?: App, +): Partial => { + return { + finishLabel: __('Next Page'), + }; +}; + +const callbacks = ( + __: (key: string) => string, + app?: App, +): TourGuideCallbacks => { + return { + onFinish: () => { + app?.config.globalProperties.$router.push('/admin/invitations'); + }, + }; +}; + +export { steps, options, callbacks }; diff --git a/apps/wizarr-frontend/src/tours/admin-invitations.ts b/apps/wizarr-frontend/src/tours/admin-invitations.ts new file mode 100644 index 000000000..acc097967 --- /dev/null +++ b/apps/wizarr-frontend/src/tours/admin-invitations.ts @@ -0,0 +1,45 @@ +import type { CustomTourGuideStep, TourGuideCallbacks } from '.'; + +import type { App } from 'vue'; +import type TourGuideOptions from '@sjmc11/tourguidejs/src/core/options'; + +const steps = (__: (key: string) => string): CustomTourGuideStep[] => [ + { + title: __('Your Invitations'), + content: __( + 'This is where you can manage your invitations, they will appear here in a list. Invitations are used to invite new users to your media server.', + ), + target: + document.querySelector('#invitationList > li:nth-child(1)') ?? + '#invitationList', + }, + { + title: __('Create Invitation'), + content: __( + "You can create a new invitation by clicking on the 'Create Invitation' button.", + ), + target: '#createInvitation', + }, +]; + +const options = ( + __: (key: string) => string, + app?: App, +): Partial => { + return { + finishLabel: __('Next Page'), + }; +}; + +const callbacks = ( + __: (key: string) => string, + app?: App, +): TourGuideCallbacks => { + return { + onFinish: () => { + app?.config.globalProperties.$router.push('/admin/users'); + }, + }; +}; + +export { steps, options, callbacks }; diff --git a/apps/wizarr-frontend/src/tours/admin-settings.ts b/apps/wizarr-frontend/src/tours/admin-settings.ts new file mode 100644 index 000000000..38cbe4193 --- /dev/null +++ b/apps/wizarr-frontend/src/tours/admin-settings.ts @@ -0,0 +1,47 @@ +import type { CustomTourGuideStep, TourGuideCallbacks } from '.'; + +import type { App } from 'vue'; + +const steps = (__: (key: string) => string): CustomTourGuideStep[] => [ + { + title: __('Your Settings'), + content: __( + 'All of your media server settings will appear here, we know your going to spend a lot of time here 😝', + ), + }, + { + title: __('Search Settings'), + content: __( + 'There are a lot of settings, so you can search for them by using the search bar.', + ), + target: '#searchSettings', + }, + { + title: __('Settings Categories'), + content: __( + 'We have categorized all of your settings to make it easier to find them.', + ), + target: '#settingsContainer1', + }, + { + title: __('End of Tour'), + content: __( + 'This is the end of the tour, we hope you enjoyed you found it informative! Please feel free to contact us on Discord and let us know what you think of Wizarr.', + ), + }, +]; + +const callbacks = ( + __: (key: string) => string, + app?: App, +): TourGuideCallbacks => { + return { + onFinish: () => { + app?.config.globalProperties.$toast.info( + 'Thanks for taking the tour!', + ); + }, + }; +}; + +export { steps, callbacks }; diff --git a/apps/wizarr-frontend/src/tours/admin-users.ts b/apps/wizarr-frontend/src/tours/admin-users.ts new file mode 100644 index 000000000..5be334bc8 --- /dev/null +++ b/apps/wizarr-frontend/src/tours/admin-users.ts @@ -0,0 +1,45 @@ +import type { CustomTourGuideStep, TourGuideCallbacks } from '.'; + +import type { App } from 'vue'; +import type TourGuideOptions from '@sjmc11/tourguidejs/src/core/options'; + +const steps = (__: (key: string) => string): CustomTourGuideStep[] => [ + { + title: __('Your Users'), + content: __( + 'All of your media server users will appear here in a list. You can manage them, edit them, and delete them. Other information like their expiration or creation date will also be displayed here.', + ), + target: + document.querySelector('#userList > li:nth-child(1)') ?? + '#userList', + }, + { + title: __('Scan for Users'), + content: __( + "Wizarr will automatically scan your media server for new users, but you can also manually scan for new users by clicking on the 'Scan for Users' button, this is useful if Wizarr has not gotten around to doing it yet.", + ), + target: '#scanUsers', + }, +]; + +const options = ( + __: (key: string) => string, + app?: App, +): Partial => { + return { + finishLabel: __('Next Page'), + }; +}; + +const callbacks = ( + __: (key: string) => string, + app?: App, +): TourGuideCallbacks => { + return { + onFinish: () => { + app?.config.globalProperties.$router.push('/admin/settings'); + }, + }; +}; + +export { steps, options, callbacks }; diff --git a/frontend/src/tours/index.ts b/apps/wizarr-frontend/src/tours/index.ts similarity index 50% rename from frontend/src/tours/index.ts rename to apps/wizarr-frontend/src/tours/index.ts index 76e2d7651..913930415 100644 --- a/frontend/src/tours/index.ts +++ b/apps/wizarr-frontend/src/tours/index.ts @@ -1,13 +1,13 @@ -import type { RouteRecordName, Router } from "vue-router"; +import type { RouteRecordName, Router } from 'vue-router'; -import type { App } from "vue"; -import type { CustomTourGuideOptions } from "@/plugins/tours"; -import type { Language } from "vue3-gettext"; -import { TourGuideClient } from "@sjmc11/tourguidejs/src/Tour"; -import type TourGuideOptions from "@sjmc11/tourguidejs/src/core/options"; -import type { TourGuideStep } from "@sjmc11/tourguidejs/src/types/TourGuideStep"; -import defaultOptions from "@sjmc11/tourguidejs/src/util/util_default_options"; -import { useUserStore } from "@/stores/user"; +import type { App } from 'vue'; +import type { CustomTourGuideOptions } from '@/plugins/tours'; +import type { Language } from 'vue3-gettext'; +import { TourGuideClient } from '@sjmc11/tourguidejs/src/Tour'; +import type TourGuideOptions from '@sjmc11/tourguidejs/src/core/options'; +import type { TourGuideStep } from '@sjmc11/tourguidejs/src/types/TourGuideStep'; +import defaultOptions from '@sjmc11/tourguidejs/src/util/util_default_options'; +import { useUserStore } from '@/stores/user'; export interface CustomTourGuideStep extends TourGuideStep { onBackdropClick?: () => void | Promise; @@ -30,7 +30,10 @@ export type TourGuideStepsReturn = { export type TourGuideImport = { steps: (__: (key: string) => string) => TourGuideStep[]; - options?: (__: (key: string) => string, app?: App) => Partial; + options?: ( + __: (key: string) => string, + app?: App, + ) => Partial; callbacks?: (__: (key: string) => string, app?: App) => TourGuideCallbacks; }; @@ -42,10 +45,12 @@ export type TourGuideImport = { */ export const checkTourAvailability = (tour: string): boolean => { // Get an array of tour files from the tours folder - const tours = import.meta.glob("../tours/*.ts"); + const tours = import.meta.glob('../tours/*.ts'); // Extract the tour name from the file paths in tours (./*.ts) - const tourNames = Object.keys(tours).map((tour) => RegExp(/\.\/(.*).ts/).exec(tour.replace("../tours/", ""))![1]); + const tourNames = Object.keys(tours).map( + (tour) => RegExp(/\.\/(.*).ts/).exec(tour.replace('../tours/', ''))![1], + ); // Check if the tour exists return tourNames.includes(tour); @@ -60,13 +65,24 @@ export const checkTourAvailability = (tour: string): boolean => { */ const loadRouterTour = (router: Router, options: CustomTourGuideOptions) => { // Initialize the tour guide - const tourGuide = new TourGuideClient({ ...options, debug: process.env.NODE_ENV === "development" }); + const tourGuide = new TourGuideClient({ + ...options, + debug: process.env.NODE_ENV === 'development', + }); // Load the tour when the route is loaded router.afterEach(async (to) => { - const userStore = useUserStore(options.app.config.globalProperties.$pinia); - if (!userStore.user?.tutorial && checkTourAvailability(to.name as string)) { - await loadTour(to.name as RouteRecordName, tourGuide, { ...options, userStore: userStore }); + const userStore = useUserStore( + options.app.config.globalProperties.$pinia, + ); + if ( + !userStore.user?.tutorial && + checkTourAvailability(to.name as string) + ) { + await loadTour(to.name as RouteRecordName, tourGuide, { + ...options, + userStore: userStore, + }); } }); }; @@ -79,7 +95,11 @@ const loadRouterTour = (router: Router, options: CustomTourGuideOptions) => { * @param callback * @returns */ -const defaultOnFinish = async (tourGuide: TourGuideClient, options?: CustomTourGuideOptions, callback?: () => void | Promise) => { +const defaultOnFinish = async ( + tourGuide: TourGuideClient, + options?: CustomTourGuideOptions, + callback?: () => void | Promise, +) => { // Reset the tour guide options tourGuide.options = { ...defaultOptions, ...options }; @@ -94,9 +114,14 @@ const defaultOnFinish = async (tourGuide: TourGuideClient, options?: CustomTourG * @param callback * @returns */ -const defaultOnBeforeStepChange = async (tourGuide: TourGuideClient, callback?: () => void | Promise) => { +const defaultOnBeforeStepChange = async ( + tourGuide: TourGuideClient, + callback?: () => void | Promise, +) => { // Get the current step - const currentStep = tourGuide.tourSteps[tourGuide.activeStep + 1] as CustomTourGuideStep; + const currentStep = tourGuide.tourSteps[ + tourGuide.activeStep + 1 + ] as CustomTourGuideStep; // Call the current step's onBeforeEnter callback if it exists await currentStep?.onBeforeEnter?.(); @@ -112,14 +137,20 @@ const defaultOnBeforeStepChange = async (tourGuide: TourGuideClient, callback?: * @param callback * @returns */ -const defaultOnAfterExit = async (tourGuide: TourGuideClient, options?: CustomTourGuideOptions, callback?: () => void | Promise) => { +const defaultOnAfterExit = async ( + tourGuide: TourGuideClient, + options?: CustomTourGuideOptions, + callback?: () => void | Promise, +) => { // Don't show the tour guide again if the tour has been completed const axios = options?.app.config.globalProperties.$axios; // Update the user in the database - await axios!.patch("/api/accounts/me", { tutorial: true }).then((response) => { - options?.userStore?.$patch({ user: { ...response.data } }); - }); + await axios! + .patch('/api/accounts/me', { tutorial: true }) + .then((response) => { + options?.userStore?.$patch({ user: { ...response.data } }); + }); // Call the callback if it exists await callback?.(); @@ -132,7 +163,11 @@ const defaultOnAfterExit = async (tourGuide: TourGuideClient, options?: CustomTo * @param options * @returns */ -const loadTour = async (name: RouteRecordName, tourGuide: TourGuideClient, options?: CustomTourGuideOptions) => { +const loadTour = async ( + name: RouteRecordName, + tourGuide: TourGuideClient, + options?: CustomTourGuideOptions, +) => { // Make sure the tour name is a string const tourName = name.toString(); @@ -145,7 +180,11 @@ const loadTour = async (name: RouteRecordName, tourGuide: TourGuideClient, optio } // Get the tour - const tour = await getTourSteps(tourName, options?.i18n, options?.app).catch((error) => { + const tour = await getTourSteps( + tourName, + options?.i18n, + options?.app, + ).catch((error) => { console.log(`Tour ${tourName} does not exist`); }); @@ -153,20 +192,41 @@ const loadTour = async (name: RouteRecordName, tourGuide: TourGuideClient, optio if (!tour) return; // Add the steps to the tour guide if they don't exist - tourGuide.addSteps(tour.steps.map((step) => ({ ...step, group: tourName })).filter((step) => !tourGuide.tourSteps.map((step) => step.content).includes(step.content))); + tourGuide.addSteps( + tour.steps + .map((step) => ({ ...step, group: tourName })) + .filter( + (step) => + !tourGuide.tourSteps + .map((step) => step.content) + .includes(step.content), + ), + ); // Add the options to the tour guide if they exist tourGuide.options = { ...tourGuide.options, ...tour.options }; - const onFinishCallback = async () => await defaultOnFinish(tourGuide, options, tour.callbacks?.onFinish); - const onBeforeStepChangeCallback = async () => await defaultOnBeforeStepChange(tourGuide, tour.callbacks?.onBeforeStepChange); - const onAfterExitCallback = async () => await defaultOnAfterExit(tourGuide, options, tour.callbacks?.onAfterExit); + const onFinishCallback = async () => + await defaultOnFinish(tourGuide, options, tour.callbacks?.onFinish); + const onBeforeStepChangeCallback = async () => + await defaultOnBeforeStepChange( + tourGuide, + tour.callbacks?.onBeforeStepChange, + ); + const onAfterExitCallback = async () => + await defaultOnAfterExit( + tourGuide, + options, + tour.callbacks?.onAfterExit, + ); // Add the callbacks to the tour guide if they exist tourGuide.onFinish(onFinishCallback); tourGuide.onAfterExit(onAfterExitCallback); - tour.callbacks?.onAfterStepChange && tourGuide.onAfterStepChange(tour.callbacks.onAfterStepChange); - tour.callbacks?.onBeforeExit && tourGuide.onBeforeExit(tour.callbacks.onBeforeExit); + tour.callbacks?.onAfterStepChange && + tourGuide.onAfterStepChange(tour.callbacks.onAfterStepChange); + tour.callbacks?.onBeforeExit && + tourGuide.onBeforeExit(tour.callbacks.onBeforeExit); tourGuide.onBeforeStepChange(onBeforeStepChangeCallback); // Start the tour @@ -179,9 +239,15 @@ const loadTour = async (name: RouteRecordName, tourGuide: TourGuideClient, optio * @param tour * @returns */ -const getTourSteps = async (tour: string, i18n?: Language, app?: App): Promise => { +const getTourSteps = async ( + tour: string, + i18n?: Language, + app?: App, +): Promise => { // Import the tour steps from the tours folder - const { steps, options, callbacks } = (await import(`../tours/${tour}.ts`)) as TourGuideImport; + const { steps, options, callbacks } = (await import( + `../tours/${tour}.ts` + )) as TourGuideImport; // Verify the tour steps are valid if (!steps) throw new Error(`Tour steps for ${tour} do not exist`); @@ -189,8 +255,12 @@ const getTourSteps = async (tour: string, i18n?: Language, app?: App): Promise key)), - options: options ? options(i18n?.$gettext ?? ((key) => key), app) : undefined, - callbacks: callbacks ? callbacks(i18n?.$gettext ?? ((key) => key), app) : undefined, + options: options + ? options(i18n?.$gettext ?? ((key) => key), app) + : undefined, + callbacks: callbacks + ? callbacks(i18n?.$gettext ?? ((key) => key), app) + : undefined, }; }; diff --git a/frontend/src/ts/filters/dateLess.ts b/apps/wizarr-frontend/src/ts/filters/dateLess.ts similarity index 79% rename from frontend/src/ts/filters/dateLess.ts rename to apps/wizarr-frontend/src/ts/filters/dateLess.ts index 1e1c7b5f7..cabeea56e 100644 --- a/frontend/src/ts/filters/dateLess.ts +++ b/apps/wizarr-frontend/src/ts/filters/dateLess.ts @@ -1,4 +1,4 @@ -import moment from "moment"; +import moment from 'moment'; /** * dateLess - Filter that returns true if the first date is less than the second date @@ -8,7 +8,11 @@ import moment from "moment"; * @param {boolean} utc - Whether input date is in UTC * @returns The boolean result of the calculation */ -function dateLess(value: string | Date, other: string | Date, utc: boolean = true): boolean { +function dateLess( + value: string | Date, + other: string | Date, + utc: boolean = true, +): boolean { const date = utc ? moment.utc(value).local() : moment(value).local(); const date2 = utc ? moment.utc(other).local() : moment(other).local(); return date.isBefore(date2); diff --git a/frontend/src/ts/filters/firstLetterUppercase.ts b/apps/wizarr-frontend/src/ts/filters/firstLetterUppercase.ts similarity index 100% rename from frontend/src/ts/filters/firstLetterUppercase.ts rename to apps/wizarr-frontend/src/ts/filters/firstLetterUppercase.ts diff --git a/apps/wizarr-frontend/src/ts/filters/index.ts b/apps/wizarr-frontend/src/ts/filters/index.ts new file mode 100644 index 000000000..d95e01d0e --- /dev/null +++ b/apps/wizarr-frontend/src/ts/filters/index.ts @@ -0,0 +1,21 @@ +import titleCase from './titleCase'; +import underscroreSpaces from './underscoreSpaces'; +import firstLetterUppercase from './firstLetterUppercase'; +import removeVersion from './removeVersion'; +import timeAgo from './timeAgo'; +import toMinutes from './toMinutes'; +import isPast from './isPast'; +import dateLess from './dateLess'; + +const filters = { + titleCase, + underscroreSpaces, + firstLetterUppercase, + removeVersion, + timeAgo, + toMinutes, + isPast, + dateLess, +}; + +export default filters; diff --git a/frontend/src/ts/filters/isPast.ts b/apps/wizarr-frontend/src/ts/filters/isPast.ts similarity index 94% rename from frontend/src/ts/filters/isPast.ts rename to apps/wizarr-frontend/src/ts/filters/isPast.ts index 41025eeb0..846360e4e 100644 --- a/frontend/src/ts/filters/isPast.ts +++ b/apps/wizarr-frontend/src/ts/filters/isPast.ts @@ -1,4 +1,4 @@ -import moment from "moment"; +import moment from 'moment'; /** * isPast - Filter to determine if a date is in the past diff --git a/frontend/src/ts/filters/removeVersion.ts b/apps/wizarr-frontend/src/ts/filters/removeVersion.ts similarity index 84% rename from frontend/src/ts/filters/removeVersion.ts rename to apps/wizarr-frontend/src/ts/filters/removeVersion.ts index 2f5ba5761..55476dfd9 100644 --- a/frontend/src/ts/filters/removeVersion.ts +++ b/apps/wizarr-frontend/src/ts/filters/removeVersion.ts @@ -5,7 +5,7 @@ * @returns The string with the version numbers removed */ function removeVersion(value: string): string { - return value.replace(/ \d+(\.\d+)*\s*/g, ""); + return value.replace(/ \d+(\.\d+)*\s*/g, ''); } export default removeVersion; diff --git a/frontend/src/ts/filters/timeAgo.ts b/apps/wizarr-frontend/src/ts/filters/timeAgo.ts similarity index 73% rename from frontend/src/ts/filters/timeAgo.ts rename to apps/wizarr-frontend/src/ts/filters/timeAgo.ts index 5eeafe9c5..ab2e90dae 100644 --- a/frontend/src/ts/filters/timeAgo.ts +++ b/apps/wizarr-frontend/src/ts/filters/timeAgo.ts @@ -1,5 +1,5 @@ -import { formatTimeAgo } from "@vueuse/core"; -import moment from "moment"; +import { formatTimeAgo } from '@vueuse/core'; +import moment from 'moment'; /** * timeAgo - Filter to convert a date to a time ago string (e.g. 5 minutes ago) @@ -9,7 +9,9 @@ import moment from "moment"; * @returns The time ago string */ function timeAgo(value: string | Date, utc: boolean = true): string { - const date = utc ? moment.utc(value).local().toDate() : moment(value).local().toDate(); + const date = utc + ? moment.utc(value).local().toDate() + : moment(value).local().toDate(); const now = utc ? moment.utc().local().toDate() : moment().local().toDate(); return formatTimeAgo(date, { showSecond: true }, now); } diff --git a/frontend/src/ts/filters/titleCase.ts b/apps/wizarr-frontend/src/ts/filters/titleCase.ts similarity index 100% rename from frontend/src/ts/filters/titleCase.ts rename to apps/wizarr-frontend/src/ts/filters/titleCase.ts diff --git a/frontend/src/ts/filters/toMinutes.ts b/apps/wizarr-frontend/src/ts/filters/toMinutes.ts similarity index 87% rename from frontend/src/ts/filters/toMinutes.ts rename to apps/wizarr-frontend/src/ts/filters/toMinutes.ts index 284759a88..862bd08e9 100644 --- a/frontend/src/ts/filters/toMinutes.ts +++ b/apps/wizarr-frontend/src/ts/filters/toMinutes.ts @@ -1,4 +1,4 @@ -import moment from "moment"; +import moment from 'moment'; /** * toMinutes - Convert a string date or date object to minutes from now @@ -13,7 +13,7 @@ function toMinutes(value: string | Date, utc: boolean = true): number { const localNow = moment(); // Calculate the difference in minutes between the times - return localDateTime.diff(localNow, "minutes"); + return localDateTime.diff(localNow, 'minutes'); } export default toMinutes; diff --git a/frontend/src/ts/filters/underscoreSpaces.ts b/apps/wizarr-frontend/src/ts/filters/underscoreSpaces.ts similarity index 88% rename from frontend/src/ts/filters/underscoreSpaces.ts rename to apps/wizarr-frontend/src/ts/filters/underscoreSpaces.ts index c6be5bda7..b95638a5a 100644 --- a/frontend/src/ts/filters/underscoreSpaces.ts +++ b/apps/wizarr-frontend/src/ts/filters/underscoreSpaces.ts @@ -5,7 +5,7 @@ * @returns The string with underscores replaced with spaces */ function underscroreSpaces(value: string): string { - return value.replace(/_/g, " "); + return value.replace(/_/g, ' '); } export default underscroreSpaces; diff --git a/apps/wizarr-frontend/src/ts/utils/axios.ts b/apps/wizarr-frontend/src/ts/utils/axios.ts new file mode 100644 index 000000000..8e565d9c6 --- /dev/null +++ b/apps/wizarr-frontend/src/ts/utils/axios.ts @@ -0,0 +1,217 @@ +import mainAxios, { + Axios, + type AxiosRequestConfig, + type AxiosResponse, + type InternalAxiosRequestConfig, +} from 'axios'; +import cookie from 'js-cookie'; +import Auth from '@/api/authentication'; + +import { errorToast, infoToast } from './toasts'; +import { useAuthStore } from '@/stores/auth'; +import { useToast } from '@/plugins/toasts'; + +export interface CustomAxiosResponse extends AxiosResponse { + config: CustomAxiosRequestConfig & InternalAxiosRequestConfig; +} + +export interface CustomAxiosRequestConfig + extends AxiosRequestConfig { + disableInfoToast?: boolean; + disableErrorToast?: boolean; + refresh_header?: boolean; +} + +export interface CustomAxiosInstance extends Axios { + disableInfoToast?: boolean; + disableErrorToast?: boolean; + refresh_header?: boolean; + getUri(config?: CustomAxiosRequestConfig): string; + request, D = any>( + config: CustomAxiosRequestConfig, + ): Promise; + get, D = any>( + url: string, + config?: CustomAxiosRequestConfig, + ): Promise; + delete, D = any>( + url: string, + config?: CustomAxiosRequestConfig, + ): Promise; + head, D = any>( + url: string, + config?: CustomAxiosRequestConfig, + ): Promise; + options, D = any>( + url: string, + config?: CustomAxiosRequestConfig, + ): Promise; + post, D = any>( + url: string, + data?: D, + config?: CustomAxiosRequestConfig, + ): Promise; + put, D = any>( + url: string, + data?: D, + config?: CustomAxiosRequestConfig, + ): Promise; + patch, D = any>( + url: string, + data?: D, + config?: CustomAxiosRequestConfig, + ): Promise; + postForm, D = any>( + url: string, + data?: D, + config?: CustomAxiosRequestConfig, + ): Promise; + putForm, D = any>( + url: string, + data?: D, + config?: CustomAxiosRequestConfig, + ): Promise; + patchForm, D = any>( + url: string, + data?: D, + config?: CustomAxiosRequestConfig, + ): Promise; +} + +class AxiosInterceptor { + // Axios instance and progress store + public axios: CustomAxiosInstance = mainAxios.create(); + + /* + * Constructor to apply interceptors + */ + constructor(axios: CustomAxiosInstance) { + // Apply interceptors + axios.interceptors.response.use( + this.resp.bind(this), + this.error.bind(this), + ); + axios.interceptors.request.use( + this.req.bind(this), + this.error.bind(this), + ); + axios.defaults.headers.common['X-CSRF-TOKEN'] = + cookie.get('csrf_access_token'); + + // If localstorage has a base url, set it + if (typeof window !== 'undefined') { + if (localStorage.getItem('base_url')) { + axios.defaults.baseURL = localStorage.getItem( + 'base_url', + ) as string; + } + } + + // Set axios instance + this.axios = axios; + } + + /* + * Interceptor for axios request + * @param config + * @returns {any} + */ + public req(config: InternalAxiosRequestConfig & CustomAxiosRequestConfig) { + // Try to add the authorization header to the request + try { + const authStore = useAuthStore(); + + if ( + config.refresh_header && + (authStore.refresh_token?.length ?? 0) > 0 + ) { + config.headers[ + 'Authorization' + ] = `Bearer ${authStore.refresh_token}`; + } + + if ( + (authStore.token?.length ?? 0) > 0 && + !config.refresh_header && + (authStore.refresh_token?.length ?? 0) > 0 + ) { + config.headers['Authorization'] = `Bearer ${authStore.token}`; + } + } catch (e) { + // Do nothing + } + + return config; + } + + /* + * Interceptor for axios response + * @param resp + * @returns {any} + */ + public resp(resp: CustomAxiosResponse) { + // If response has a message, show it + if (!this.axios.disableInfoToast && !resp.config.disableInfoToast) { + if (resp.data?.message) { + infoToast(resp.data.message); + } + } + + return resp; + } + + /* + * Interceptor for axios error + * @param error + * @returns {any} + */ + public async error(error: any) { + if (this.axios.disableErrorToast || error.config.disableErrorToast) { + return Promise.reject(error); + } + + const showErrorToast = (message: string) => errorToast(message); + + const { response } = error; + if (response?.data) { + const { errors, message } = response.data as { + errors?: Record; + message?: string; + }; + if (errors) { + Object.values(errors).forEach( + (errorMessages: string[] | string) => { + if (Array.isArray(errorMessages)) { + errorMessages.forEach((errorMessage: string) => { + showErrorToast(errorMessage); + }); + } else if (typeof errorMessages === 'string') { + showErrorToast(errorMessages); + } + }, + ); + } else if (message) { + showErrorToast(message); + } + } + + if (response?.status === 401) { + try { + const auth = new Auth(); + auth.logout(); + } catch (e) { + useToast().error( + 'An unauthenticated request was made, but we failed to log you out. Please refresh the page.', + ); + } + } + + return Promise.reject(error); + } +} + +// Create a new instance of AxiosInterceptor +const axios = () => new AxiosInterceptor(mainAxios).axios; + +export default axios; +export { AxiosInterceptor }; diff --git a/frontend/src/ts/utils/cacheStorage.ts b/apps/wizarr-frontend/src/ts/utils/cacheStorage.ts similarity index 100% rename from frontend/src/ts/utils/cacheStorage.ts rename to apps/wizarr-frontend/src/ts/utils/cacheStorage.ts diff --git a/frontend/src/ts/utils/darkMode.ts b/apps/wizarr-frontend/src/ts/utils/darkMode.ts similarity index 63% rename from frontend/src/ts/utils/darkMode.ts rename to apps/wizarr-frontend/src/ts/utils/darkMode.ts index 04be047dd..f7cdf0623 100644 --- a/frontend/src/ts/utils/darkMode.ts +++ b/apps/wizarr-frontend/src/ts/utils/darkMode.ts @@ -1,16 +1,19 @@ -type DARK = "dark"; -type LIGHT = "light"; -type SYSTEM = "system"; +type DARK = 'dark'; +type LIGHT = 'light'; +type SYSTEM = 'system'; declare type THEME = DARK | LIGHT | SYSTEM; -const DARK_VALUE: DARK = "dark"; -const LIGHT_VALUE: LIGHT = "light"; -const SYSTEM_VALUE: SYSTEM = "system"; +const DARK_VALUE: DARK = 'dark'; +const LIGHT_VALUE: LIGHT = 'light'; +const SYSTEM_VALUE: SYSTEM = 'system'; const getTheme = (theme?: THEME): THEME => { const colorTheme = theme ?? (SYSTEM_VALUE as THEME); - const systemPrefence = window.matchMedia("(prefers-color-scheme: dark)").matches ? DARK_VALUE : LIGHT_VALUE; + const systemPrefence = window.matchMedia('(prefers-color-scheme: dark)') + .matches + ? DARK_VALUE + : LIGHT_VALUE; if (colorTheme === DARK_VALUE) { return DARK_VALUE; @@ -42,22 +45,34 @@ const updateTheme = (THEME: THEME): void => { // Set the theme to dark document.documentElement.classList.add(DARK_VALUE); // Remove event listener for system preference change - window.matchMedia("(prefers-color-scheme: dark)").removeEventListener("change", watchTheme); + window + .matchMedia('(prefers-color-scheme: dark)') + .removeEventListener('change', watchTheme); break; case LIGHT_VALUE: // Set the theme to light document.documentElement.classList.remove(DARK_VALUE); // Remove event listener for system preference change - window.matchMedia("(prefers-color-scheme: dark)").removeEventListener("change", watchTheme); + window + .matchMedia('(prefers-color-scheme: dark)') + .removeEventListener('change', watchTheme); break; case SYSTEM_VALUE: // Get the system preference and set the theme to it - const systemPrefence = window.matchMedia("(prefers-color-scheme: dark)").matches ? DARK_VALUE : LIGHT_VALUE; + const systemPrefence = window.matchMedia( + '(prefers-color-scheme: dark)', + ).matches + ? DARK_VALUE + : LIGHT_VALUE; document.documentElement.classList.add(systemPrefence); - document.documentElement.classList.remove(systemPrefence === DARK_VALUE ? LIGHT_VALUE : DARK_VALUE); + document.documentElement.classList.remove( + systemPrefence === DARK_VALUE ? LIGHT_VALUE : DARK_VALUE, + ); // Add event listener for system preference change - window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", watchTheme); + window + .matchMedia('(prefers-color-scheme: dark)') + .addEventListener('change', watchTheme); break; default: // Set the theme to dark diff --git a/frontend/src/ts/utils/filters.ts b/apps/wizarr-frontend/src/ts/utils/filters.ts similarity index 100% rename from frontend/src/ts/utils/filters.ts rename to apps/wizarr-frontend/src/ts/utils/filters.ts diff --git a/apps/wizarr-frontend/src/ts/utils/firebase.ts b/apps/wizarr-frontend/src/ts/utils/firebase.ts new file mode 100644 index 000000000..d9483e204 --- /dev/null +++ b/apps/wizarr-frontend/src/ts/utils/firebase.ts @@ -0,0 +1,12 @@ +import { initializeApp } from 'firebase/app'; + +const firebaseConfig = { + apiKey: 'AIzaSyCcxBu0jn9Qr7k5UQiJaqgOSSQGAGWuYoc', + authDomain: 'wizarr-v3.firebaseapp.com', + projectId: 'wizarr-v3', + storageBucket: 'wizarr-v3.appspot.com', + messagingSenderId: '163741477369', + appId: '1:163741477369:web:5aee8a3c42835f94d2b528', +}; + +export default initializeApp(firebaseConfig); diff --git a/frontend/src/ts/utils/plexAuth.ts b/apps/wizarr-frontend/src/ts/utils/plexAuth.ts similarity index 76% rename from frontend/src/ts/utils/plexAuth.ts rename to apps/wizarr-frontend/src/ts/utils/plexAuth.ts index 05bbc3ab6..19874ca6e 100644 --- a/frontend/src/ts/utils/plexAuth.ts +++ b/apps/wizarr-frontend/src/ts/utils/plexAuth.ts @@ -1,7 +1,7 @@ -import type { IPlexClientDetails } from "plex-oauth"; -import { PlexOauth } from "plex-oauth"; -import bowser from "bowser"; -import { nanoid } from "nanoid"; +import type { IPlexClientDetails } from 'plex-oauth'; +import { PlexOauth } from 'plex-oauth'; +import bowser from 'bowser'; +import { nanoid } from 'nanoid'; class PlexAuth { private plexOauth: PlexOauth; @@ -10,7 +10,7 @@ class PlexAuth { // Default client details clientDetails: IPlexClientDetails = { clientIdentifier: nanoid(), - product: "Wizarr", + product: 'Wizarr', device: this.browser.getOSName(), version: this.browser.getBrowserVersion(), platform: this.browser.getBrowserName(), @@ -39,7 +39,13 @@ class PlexAuth { // Create a popup window for a URL private createPopUp(url: string) { - setTimeout(() => window.open(url, "Plex", "width=600, height=700, toolbar=no, menubar=no")); + setTimeout(() => + window.open( + url, + 'Plex', + 'width=600, height=700, toolbar=no, menubar=no', + ), + ); } } diff --git a/frontend/src/ts/utils/rocketChat.ts b/apps/wizarr-frontend/src/ts/utils/rocketChat.ts similarity index 51% rename from frontend/src/ts/utils/rocketChat.ts rename to apps/wizarr-frontend/src/ts/utils/rocketChat.ts index d9b331d31..045c1c777 100644 --- a/frontend/src/ts/utils/rocketChat.ts +++ b/apps/wizarr-frontend/src/ts/utils/rocketChat.ts @@ -1,9 +1,9 @@ -import mitt from "mitt"; +import mitt from 'mitt'; class RocketChat { // Declare variables for the class - private widget: HTMLElement = document.createElement("div"); - private iframe: HTMLIFrameElement = document.createElement("iframe"); + private widget: HTMLElement = document.createElement('div'); + private iframe: HTMLIFrameElement = document.createElement('iframe'); private hookQueue: any[] = []; private isReady = false; private smallScreen = false; @@ -18,7 +18,20 @@ class RocketChat { }; // Declare the valid callbacks - public validCallbacks = ["chat-maximized", "chat-minimized", "chat-started", "chat-ended", "pre-chat-form-submit", "offline-form-submit", "show-widget", "hide-widget", "assign-agent", "agent-status-change", "queue-position-change", "no-agent-online"]; + public validCallbacks = [ + 'chat-maximized', + 'chat-minimized', + 'chat-started', + 'chat-ended', + 'pre-chat-form-submit', + 'offline-form-submit', + 'show-widget', + 'hide-widget', + 'assign-agent', + 'agent-status-change', + 'queue-position-change', + 'no-agent-online', + ]; // Declare the mitt event emitter private callbacks = mitt(); @@ -32,17 +45,17 @@ class RocketChat { // Declare the config private config = { - url: "https://chat.wizarr.dev/livechat", + url: 'https://chat.wizarr.dev/livechat', theme: { - title: "Wizarr Support", - color: "#fc425d", - offlineTitle: "Leave a message", - offlineColor: "#666666", + title: 'Wizarr Support', + color: '#fc425d', + offlineTitle: 'Leave a message', + offlineColor: '#666666', }, }; constructor(url: string, config?: any) { - if (!url) throw new Error("Missing required parameter: url"); + if (!url) throw new Error('Missing required parameter: url'); this.config.url = url; @@ -59,49 +72,57 @@ class RocketChat { continue; } - this.log("WizarrChat: ", method, params[method]); + this.log('WizarrChat: ', method, params[method]); switch (method) { - case "customField": + case 'customField': const { key, value, overwrite } = params[method]; this.setCustomField(key, value, overwrite); continue; - case "setCustomFields": + case 'setCustomFields': if (!Array.isArray(params[method])) { - console.log("Error: Invalid parameters. Value must be an array of objects"); + console.log( + 'Error: Invalid parameters. Value must be an array of objects', + ); continue; } - params[method].forEach((data: { key: string; value: string; overwrite: boolean }) => { - const { key, value, overwrite } = data; - this.setCustomField(key, value, overwrite); - }); + params[method].forEach( + (data: { + key: string; + value: string; + overwrite: boolean; + }) => { + const { key, value, overwrite } = data; + this.setCustomField(key, value, overwrite); + }, + ); continue; - case "theme": + case 'theme': this.setTheme(params[method]); continue; - case "department": + case 'department': this.setDepartment(params[method]); continue; - case "businessUnit": { + case 'businessUnit': { this.setBusinessUnit(params[method]); continue; } - case "guestToken": + case 'guestToken': this.setGuestToken(params[method]); continue; - case "guestName": + case 'guestName': this.setGuestName(params[method]); continue; - case "guestEmail": + case 'guestEmail': this.setGuestEmail(params[method]); continue; - case "registerGuest": + case 'registerGuest': this.registerGuest(params[method]); continue; - case "language": + case 'language': this.setLanguage(params[method]); continue; - case "agent": + case 'agent': this.setAgent(params[method]); continue; default: @@ -110,30 +131,47 @@ class RocketChat { } } - log = process.env.NODE_ENV === "development" ? (...args: any) => window.console.log("%cwidget%c", "color: red", "color: initial", ...args) : () => {}; + log = + process.env.NODE_ENV === 'development' + ? (...args: any) => + window.console.log( + '%cwidget%c', + 'color: red', + 'color: initial', + ...args, + ) + : () => {}; createWidget(url: string) { - this.widget.className = "rocketchat-widget"; - this.widget.style.position = "fixed"; - this.widget.style.width = `${this.WIDGET_MARGIN + this.WIDGET_MINIMIZED_WIDTH + this.WIDGET_MARGIN}px`; - this.widget.style.height = `${this.WIDGET_MARGIN + this.WIDGET_MINIMIZED_HEIGHT + this.WIDGET_MARGIN}px`; - this.widget.style.maxHeight = "100vh"; - this.widget.style.bottom = "0"; - this.widget.style.right = "0"; - this.widget.style.zIndex = "12345"; - this.widget.dataset.state = "closed"; - - const container = document.createElement("div"); - container.className = "rocketchat-container"; - container.style.width = "100%"; - container.style.height = "100%"; - - this.iframe.id = "rocketchat-iframe"; + this.widget.className = 'rocketchat-widget'; + this.widget.style.position = 'fixed'; + this.widget.style.width = `${ + this.WIDGET_MARGIN + + this.WIDGET_MINIMIZED_WIDTH + + this.WIDGET_MARGIN + }px`; + this.widget.style.height = `${ + this.WIDGET_MARGIN + + this.WIDGET_MINIMIZED_HEIGHT + + this.WIDGET_MARGIN + }px`; + this.widget.style.maxHeight = '100vh'; + this.widget.style.bottom = '0'; + this.widget.style.right = '0'; + this.widget.style.zIndex = '12345'; + this.widget.dataset.state = 'closed'; + + const container = document.createElement('div'); + container.className = 'rocketchat-container'; + container.style.width = '100%'; + container.style.height = '100%'; + + this.iframe.id = 'rocketchat-iframe'; this.iframe.src = url; - this.iframe.style.width = "100%"; - this.iframe.style.height = "100%"; - this.iframe.style.border = "none"; - this.iframe.style.backgroundColor = "transparent"; + this.iframe.style.width = '100%'; + this.iframe.style.height = '100%'; + this.iframe.style.border = 'none'; + this.iframe.style.backgroundColor = 'transparent'; container.appendChild(this.iframe); this.widget.appendChild(container); @@ -143,54 +181,56 @@ class RocketChat { if (!this.widget) return; this.smallScreen = event.matches ?? false; - this.updateWidgetStyle(this.widget.dataset.state === "opened"); - this.callHook("setExpanded", this.smallScreen); + this.updateWidgetStyle(this.widget.dataset.state === 'opened'); + this.callHook('setExpanded', this.smallScreen); }; - const mediaQueryList = window.matchMedia("screen and (max-device-width: 480px)"); - mediaQueryList.addEventListener("change", handleMediaQueryTest); + const mediaQueryList = window.matchMedia( + 'screen and (max-device-width: 480px)', + ); + mediaQueryList.addEventListener('change', handleMediaQueryTest); handleMediaQueryTest(mediaQueryList); } openWidget() { - if (this.widget.dataset.state === "opened") return; + if (this.widget.dataset.state === 'opened') return; this.widget_height = this.WIDGET_OPEN_HEIGHT; this.updateWidgetStyle(true); - this.widget.dataset.state = "opened"; + this.widget.dataset.state = 'opened'; this.iframe.focus(); - this.emitCallback("chat-maximized"); + this.emitCallback('chat-maximized'); } resizeWidget(height: number) { this.widget_height = height; this.updateWidgetStyle(true); - this.widget.dataset.state = "triggered"; + this.widget.dataset.state = 'triggered'; } closeWidget() { - if (this.widget.dataset.state === "closed") { + if (this.widget.dataset.state === 'closed') { return; } this.updateWidgetStyle(false); - this.widget.dataset.state = "closed"; - this.emitCallback("chat-minimized"); + this.widget.dataset.state = 'closed'; + this.emitCallback('chat-minimized'); } updateWidgetStyle(isOpened: boolean) { if (this.smallScreen && isOpened) { this.scrollPosition = document.documentElement.scrollTop; - document.body.classList.add("rc-livechat-mobile-full-screen"); + document.body.classList.add('rc-livechat-mobile-full-screen'); } else { - document.body.classList.remove("rc-livechat-mobile-full-screen"); + document.body.classList.remove('rc-livechat-mobile-full-screen'); if (this.smallScreen) { document.documentElement.scrollTop = this.scrollPosition; } } if (isOpened) { - this.widget.style.left = this.smallScreen ? "0" : "auto"; + this.widget.style.left = this.smallScreen ? '0' : 'auto'; /** * If we use widget.style.height = smallScreen ? '100vh' : ... @@ -200,12 +240,33 @@ class RocketChat { * for widget.style.width */ - this.widget.style.height = this.smallScreen ? "100%" : `${this.WIDGET_MARGIN + this.widget_height + this.WIDGET_MARGIN + this.WIDGET_MINIMIZED_HEIGHT}px`; - this.widget.style.width = this.smallScreen ? "100%" : `${this.WIDGET_MARGIN + this.WIDGET_OPEN_WIDTH + this.WIDGET_MARGIN}px`; + this.widget.style.height = this.smallScreen + ? '100%' + : `${ + this.WIDGET_MARGIN + + this.widget_height + + this.WIDGET_MARGIN + + this.WIDGET_MINIMIZED_HEIGHT + }px`; + this.widget.style.width = this.smallScreen + ? '100%' + : `${ + this.WIDGET_MARGIN + + this.WIDGET_OPEN_WIDTH + + this.WIDGET_MARGIN + }px`; } else { - this.widget.style.left = "auto"; - this.widget.style.width = `${this.WIDGET_MARGIN + this.WIDGET_MINIMIZED_WIDTH + this.WIDGET_MARGIN}px`; - this.widget.style.height = `${this.WIDGET_MARGIN + this.WIDGET_MINIMIZED_HEIGHT + this.WIDGET_MARGIN}px`; + this.widget.style.left = 'auto'; + this.widget.style.width = `${ + this.WIDGET_MARGIN + + this.WIDGET_MINIMIZED_WIDTH + + this.WIDGET_MARGIN + }px`; + this.widget.style.height = `${ + this.WIDGET_MARGIN + + this.WIDGET_MINIMIZED_HEIGHT + + this.WIDGET_MARGIN + }px`; } } @@ -233,7 +294,13 @@ class RocketChat { openPopout() { this.closeWidget(); - this.popup = window.open(`${this.config.url}${this.config.url.lastIndexOf("?") > -1 ? "&" : "?"}mode=popout`, "livechat-popout", `width=${this.WIDGET_OPEN_WIDTH}, height=${this.widget_height}, toolbars=no`); + this.popup = window.open( + `${this.config.url}${ + this.config.url.lastIndexOf('?') > -1 ? '&' : '?' + }mode=popout`, + 'livechat-popout', + `width=${this.WIDGET_OPEN_WIDTH}, height=${this.widget_height}, toolbars=no`, + ); this.popup!.focus(); } @@ -246,30 +313,38 @@ class RocketChat { } showWidget() { - this.iframe.style.display = "initial"; - this.emitCallback("show-widget"); + this.iframe.style.display = 'initial'; + this.emitCallback('show-widget'); } hideWidget() { - this.iframe.style.display = "none"; - this.emitCallback("hide-widget"); + this.iframe.style.display = 'none'; + this.emitCallback('hide-widget'); } resetDocumentStyle() { - document.body.classList.remove("rc-livechat-mobile-full-screen"); + document.body.classList.remove('rc-livechat-mobile-full-screen'); } setFullScreenDocumentMobile() { - this.smallScreen && document.body.classList.add("rc-livechat-mobile-full-screen"); + this.smallScreen && + document.body.classList.add('rc-livechat-mobile-full-screen'); } attachMessageListener() { window.addEventListener( - "message", + 'message', (msg) => { - if (typeof msg.data === "object" && msg.data.src !== undefined && msg.data.src === "rocketchat") { + if ( + typeof msg.data === 'object' && + msg.data.src !== undefined && + msg.data.src === 'rocketchat' + ) { // @ts-ignore - if (this[msg.data.fn] !== undefined && typeof this[msg.data.fn] === "function") { + if ( + this[msg.data.fn] !== undefined && + typeof this[msg.data.fn] === 'function' + ) { const args = [].concat(msg.data.args || []); this.log(`api.${msg.data.fn}`, ...args); // @ts-ignore @@ -284,12 +359,12 @@ class RocketChat { trackNavigation() { setInterval(() => { if (document.location.href !== this.currentPage.href) { - this.pageVisited("url"); + this.pageVisited('url'); this.currentPage.href = document.location.href; } if (document.title !== this.currentPage.title) { - this.pageVisited("title"); + this.pageVisited('title'); this.currentPage.title = document.title; } }, 800); @@ -304,7 +379,7 @@ class RocketChat { } emitCallback(eventName: string, data?: any) { - if (typeof data !== "undefined") { + if (typeof data !== 'undefined') { this.callbacks.emit(eventName, data); } else { this.callbacks.emit(eventName); @@ -315,13 +390,14 @@ class RocketChat { if (!this.isReady) return this.hookQueue.push([action, params]); const data = { - src: "rocketchat", + src: 'rocketchat', fn: action, args: params, }; - if (!this.iframe) console.error("Iframe not found"); - if (!this.iframe.contentWindow) console.error("Iframe content window not found"); + if (!this.iframe) console.error('Iframe not found'); + if (!this.iframe.contentWindow) + console.error('Iframe content window not found'); if (!this.iframe?.contentWindow) return; @@ -329,7 +405,7 @@ class RocketChat { } pageVisited(change: string) { - this.callHook("pageVisited", { + this.callHook('pageVisited', { change, location: JSON.parse(JSON.stringify(document.location)), title: document.title, @@ -337,119 +413,119 @@ class RocketChat { } setCustomField(key: string, value: string, overwrite: boolean) { - if (typeof overwrite === "undefined") { + if (typeof overwrite === 'undefined') { overwrite = true; } - this.callHook("setCustomField", [key, value, overwrite]); + this.callHook('setCustomField', [key, value, overwrite]); } setTheme(theme: string) { - this.callHook("setTheme", theme); + this.callHook('setTheme', theme); } setDepartment(department: string) { - this.callHook("setDepartment", department); + this.callHook('setDepartment', department); } setBusinessUnit(businessUnit: string) { - this.callHook("setBusinessUnit", businessUnit); + this.callHook('setBusinessUnit', businessUnit); } clearBusinessUnit() { - this.callHook("clearBusinessUnit"); + this.callHook('clearBusinessUnit'); } setGuestToken(token: string) { - this.callHook("setGuestToken", token); + this.callHook('setGuestToken', token); } setGuestName(name: string) { - this.callHook("setGuestName", name); + this.callHook('setGuestName', name); } setGuestEmail(email: string) { - this.callHook("setGuestEmail", email); + this.callHook('setGuestEmail', email); } registerGuest(guest: string) { - this.callHook("registerGuest", guest); + this.callHook('registerGuest', guest); } clearDepartment() { - this.callHook("clearDepartment"); + this.callHook('clearDepartment'); } setAgent(agent: string) { - this.callHook("setAgent", agent); + this.callHook('setAgent', agent); } setLanguage(language: string) { - this.callHook("setLanguage", language); + this.callHook('setLanguage', language); } showWidgets() { - this.callHook("showWidget"); + this.callHook('showWidget'); } hideWidgets() { - this.callHook("hideWidget"); + this.callHook('hideWidget'); } maximizeWidget() { - this.callHook("maximizeWidget"); + this.callHook('maximizeWidget'); } minimizeWidget() { - this.callHook("minimizeWidget"); + this.callHook('minimizeWidget'); } // Callbacks onChatMaximized(fn: (data: any) => void) { - this.registerCallback("chat-maximized", fn); + this.registerCallback('chat-maximized', fn); } onChatMinimized(fn: (data: any) => void) { - this.registerCallback("chat-minimized", fn); + this.registerCallback('chat-minimized', fn); } onChatStarted(fn: (data: any) => void) { - this.registerCallback("chat-started", fn); + this.registerCallback('chat-started', fn); } onChatEnded(fn: (data: any) => void) { - this.registerCallback("chat-ended", fn); + this.registerCallback('chat-ended', fn); } onPrechatFormSubmit(fn: (data: any) => void) { - this.registerCallback("pre-chat-form-submit", fn); + this.registerCallback('pre-chat-form-submit', fn); } onOfflineFormSubmit(fn: (data: any) => void) { - this.registerCallback("offline-form-submit", fn); + this.registerCallback('offline-form-submit', fn); } onWidgetShown(fn: (data: any) => void) { - this.registerCallback("show-widget", fn); + this.registerCallback('show-widget', fn); } onWidgetHidden(fn: (data: any) => void) { - this.registerCallback("hide-widget", fn); + this.registerCallback('hide-widget', fn); } onAssignAgent(fn: (data: any) => void) { - this.registerCallback("assign-agent", fn); + this.registerCallback('assign-agent', fn); } onAgentStatusChange(fn: (data: any) => void) { - this.registerCallback("agent-status-change", fn); + this.registerCallback('agent-status-change', fn); } onQueuePositionChange(fn: (data: any) => void) { - this.registerCallback("queue-position-change", fn); + this.registerCallback('queue-position-change', fn); } onServiceOffline(fn: (data: any) => void) { - this.registerCallback("no-agent-online", fn); + this.registerCallback('no-agent-online', fn); } } diff --git a/frontend/src/ts/utils/toasts.ts b/apps/wizarr-frontend/src/ts/utils/toasts.ts similarity index 86% rename from frontend/src/ts/utils/toasts.ts rename to apps/wizarr-frontend/src/ts/utils/toasts.ts index 73016d004..f58088db2 100644 --- a/frontend/src/ts/utils/toasts.ts +++ b/apps/wizarr-frontend/src/ts/utils/toasts.ts @@ -1,5 +1,11 @@ -import { useToast } from "vue-toastification"; -import type { CommonOptions, PluginOptions, ToastContent, ToastID, ToastOptions } from "vue-toastification/dist/types/types"; +import { useToast } from 'vue-toastification'; +import type { + CommonOptions, + PluginOptions, + ToastContent, + ToastID, + ToastOptions, +} from 'vue-toastification/dist/types/types'; export const infoToast = (message: ToastContent, options?: ToastOptions) => { const toast = useToast(); @@ -41,7 +47,11 @@ export const dismissToast = (id: ToastID) => { toast.dismiss(id); }; -export const updateToast = (id: ToastID, content: ToastContent, options?: ToastOptions) => { +export const updateToast = ( + id: ToastID, + content: ToastContent, + options?: ToastOptions, +) => { const toast = useToast(); toast.update(id, { content, options }); }; diff --git a/apps/wizarr-frontend/src/ts/utils/widgets.ts b/apps/wizarr-frontend/src/ts/utils/widgets.ts new file mode 100644 index 000000000..8a21830ef --- /dev/null +++ b/apps/wizarr-frontend/src/ts/utils/widgets.ts @@ -0,0 +1,15 @@ +import { defineAsyncComponent, type AsyncComponentLoader } from 'vue'; + +import ErrorWidget from '@/widgets/components/ErrorWidget.vue'; +import LoadingWidget from '@/widgets/components/LoadingWidget.vue'; + +export const getWidget = (type: T): AsyncComponentLoader => { + return defineAsyncComponent({ + loader: () => + import(`../../widgets/default/${type}.vue`) + .then((m) => m.default) + .catch(() => import('@/widgets/components/ErrorWidget.vue')), + errorComponent: ErrorWidget, + loadingComponent: LoadingWidget, + }); +}; diff --git a/frontend/src/types/ChangeLog.ts b/apps/wizarr-frontend/src/types/ChangeLog.ts similarity index 100% rename from frontend/src/types/ChangeLog.ts rename to apps/wizarr-frontend/src/types/ChangeLog.ts diff --git a/frontend/src/types/Tasks.ts b/apps/wizarr-frontend/src/types/Tasks.ts similarity index 100% rename from frontend/src/types/Tasks.ts rename to apps/wizarr-frontend/src/types/Tasks.ts diff --git a/frontend/src/types/api/apikeys.ts b/apps/wizarr-frontend/src/types/api/apikeys.ts similarity index 100% rename from frontend/src/types/api/apikeys.ts rename to apps/wizarr-frontend/src/types/api/apikeys.ts diff --git a/frontend/src/types/api/auth/MFA.ts b/apps/wizarr-frontend/src/types/api/auth/MFA.ts similarity index 100% rename from frontend/src/types/api/auth/MFA.ts rename to apps/wizarr-frontend/src/types/api/auth/MFA.ts diff --git a/frontend/src/types/api/auth/User.ts b/apps/wizarr-frontend/src/types/api/auth/User.ts similarity index 100% rename from frontend/src/types/api/auth/User.ts rename to apps/wizarr-frontend/src/types/api/auth/User.ts diff --git a/frontend/src/types/api/health.ts b/apps/wizarr-frontend/src/types/api/health.ts similarity index 100% rename from frontend/src/types/api/health.ts rename to apps/wizarr-frontend/src/types/api/health.ts diff --git a/frontend/src/types/api/invitations.ts b/apps/wizarr-frontend/src/types/api/invitations.ts similarity index 100% rename from frontend/src/types/api/invitations.ts rename to apps/wizarr-frontend/src/types/api/invitations.ts diff --git a/frontend/src/types/api/membership.ts b/apps/wizarr-frontend/src/types/api/membership.ts similarity index 100% rename from frontend/src/types/api/membership.ts rename to apps/wizarr-frontend/src/types/api/membership.ts diff --git a/frontend/src/types/api/request.ts b/apps/wizarr-frontend/src/types/api/request.ts similarity index 100% rename from frontend/src/types/api/request.ts rename to apps/wizarr-frontend/src/types/api/request.ts diff --git a/frontend/src/types/api/server.ts b/apps/wizarr-frontend/src/types/api/server.ts similarity index 87% rename from frontend/src/types/api/server.ts rename to apps/wizarr-frontend/src/types/api/server.ts index 86513240f..e21792df7 100644 --- a/frontend/src/types/api/server.ts +++ b/apps/wizarr-frontend/src/types/api/server.ts @@ -9,6 +9,6 @@ export interface Server { export interface ServerSettings { server_name: string; server_url: string; - server_type: "jellyfin" | "plex"; + server_type: 'jellyfin' | 'plex'; server_verified: string; } diff --git a/frontend/src/types/api/sessions.ts b/apps/wizarr-frontend/src/types/api/sessions.ts similarity index 100% rename from frontend/src/types/api/sessions.ts rename to apps/wizarr-frontend/src/types/api/sessions.ts diff --git a/frontend/src/types/api/users.ts b/apps/wizarr-frontend/src/types/api/users.ts similarity index 100% rename from frontend/src/types/api/users.ts rename to apps/wizarr-frontend/src/types/api/users.ts diff --git a/frontend/src/types/api/webhooks.ts b/apps/wizarr-frontend/src/types/api/webhooks.ts similarity index 100% rename from frontend/src/types/api/webhooks.ts rename to apps/wizarr-frontend/src/types/api/webhooks.ts diff --git a/frontend/src/types/local/WidgetOptions.ts b/apps/wizarr-frontend/src/types/local/WidgetOptions.ts similarity index 84% rename from frontend/src/types/local/WidgetOptions.ts rename to apps/wizarr-frontend/src/types/local/WidgetOptions.ts index 4abc69bcd..7951e29cb 100644 --- a/frontend/src/types/local/WidgetOptions.ts +++ b/apps/wizarr-frontend/src/types/local/WidgetOptions.ts @@ -1,4 +1,4 @@ -import type { Component } from "vue"; +import type { Component } from 'vue'; export interface WidgetOptions> { id: string; diff --git a/apps/wizarr-frontend/src/widgets/components/ErrorWidget.vue b/apps/wizarr-frontend/src/widgets/components/ErrorWidget.vue new file mode 100644 index 000000000..9ccf85aa6 --- /dev/null +++ b/apps/wizarr-frontend/src/widgets/components/ErrorWidget.vue @@ -0,0 +1,19 @@ + + + diff --git a/apps/wizarr-frontend/src/widgets/components/LoadingWidget.vue b/apps/wizarr-frontend/src/widgets/components/LoadingWidget.vue new file mode 100644 index 000000000..da85828a8 --- /dev/null +++ b/apps/wizarr-frontend/src/widgets/components/LoadingWidget.vue @@ -0,0 +1,29 @@ + + + diff --git a/apps/wizarr-frontend/src/widgets/default/ContributorsList.vue b/apps/wizarr-frontend/src/widgets/default/ContributorsList.vue new file mode 100644 index 000000000..9a8187ea1 --- /dev/null +++ b/apps/wizarr-frontend/src/widgets/default/ContributorsList.vue @@ -0,0 +1,182 @@ + + + diff --git a/frontend/src/widgets/default/InvitesGraph.vue b/apps/wizarr-frontend/src/widgets/default/InvitesGraph.vue similarity index 62% rename from frontend/src/widgets/default/InvitesGraph.vue rename to apps/wizarr-frontend/src/widgets/default/InvitesGraph.vue index 9364189ac..813a040a3 100644 --- a/frontend/src/widgets/default/InvitesGraph.vue +++ b/apps/wizarr-frontend/src/widgets/default/InvitesGraph.vue @@ -1,23 +1,29 @@ diff --git a/apps/wizarr-frontend/src/widgets/default/InvitesTotal.vue b/apps/wizarr-frontend/src/widgets/default/InvitesTotal.vue new file mode 100644 index 000000000..03f9ab30d --- /dev/null +++ b/apps/wizarr-frontend/src/widgets/default/InvitesTotal.vue @@ -0,0 +1,28 @@ + + + diff --git a/apps/wizarr-frontend/src/widgets/default/LatestInfo.vue b/apps/wizarr-frontend/src/widgets/default/LatestInfo.vue new file mode 100644 index 000000000..80f8b219e --- /dev/null +++ b/apps/wizarr-frontend/src/widgets/default/LatestInfo.vue @@ -0,0 +1,65 @@ + + + diff --git a/frontend/src/widgets/default/MapWidget.vue b/apps/wizarr-frontend/src/widgets/default/MapWidget.vue similarity index 53% rename from frontend/src/widgets/default/MapWidget.vue rename to apps/wizarr-frontend/src/widgets/default/MapWidget.vue index 5205782ca..78b3985de 100644 --- a/frontend/src/widgets/default/MapWidget.vue +++ b/apps/wizarr-frontend/src/widgets/default/MapWidget.vue @@ -1,6 +1,17 @@ diff --git a/frontend/src/widgets/default/UsersGraph.vue b/apps/wizarr-frontend/src/widgets/default/UsersGraph.vue similarity index 61% rename from frontend/src/widgets/default/UsersGraph.vue rename to apps/wizarr-frontend/src/widgets/default/UsersGraph.vue index 150528f2e..f92b3c310 100644 --- a/frontend/src/widgets/default/UsersGraph.vue +++ b/apps/wizarr-frontend/src/widgets/default/UsersGraph.vue @@ -1,23 +1,29 @@ diff --git a/frontend/src/widgets/default/UsersTotal.vue b/apps/wizarr-frontend/src/widgets/default/UsersTotal.vue similarity index 55% rename from frontend/src/widgets/default/UsersTotal.vue rename to apps/wizarr-frontend/src/widgets/default/UsersTotal.vue index a4286bc3e..1e30fbc34 100644 --- a/frontend/src/widgets/default/UsersTotal.vue +++ b/apps/wizarr-frontend/src/widgets/default/UsersTotal.vue @@ -3,14 +3,14 @@ diff --git a/apps/wizarr-frontend/src/widgets/templates/DefaultWidget.vue b/apps/wizarr-frontend/src/widgets/templates/DefaultWidget.vue new file mode 100644 index 000000000..2997078b0 --- /dev/null +++ b/apps/wizarr-frontend/src/widgets/templates/DefaultWidget.vue @@ -0,0 +1,72 @@ + + + diff --git a/frontend/src/widgets/templates/GraphWidget.vue b/apps/wizarr-frontend/src/widgets/templates/GraphWidget.vue similarity index 53% rename from frontend/src/widgets/templates/GraphWidget.vue rename to apps/wizarr-frontend/src/widgets/templates/GraphWidget.vue index 29fe39c02..6da074a73 100644 --- a/frontend/src/widgets/templates/GraphWidget.vue +++ b/apps/wizarr-frontend/src/widgets/templates/GraphWidget.vue @@ -1,23 +1,33 @@ diff --git a/frontend/src/components/Buttons/DownloadButtons/DownloadAppStore.vue b/frontend/src/components/Buttons/DownloadButtons/DownloadAppStore.vue deleted file mode 100644 index 09e29ffd5..000000000 --- a/frontend/src/components/Buttons/DownloadButtons/DownloadAppStore.vue +++ /dev/null @@ -1,31 +0,0 @@ - - - diff --git a/frontend/src/components/Buttons/DownloadButtons/DownloadLinux.vue b/frontend/src/components/Buttons/DownloadButtons/DownloadLinux.vue deleted file mode 100644 index ef55a1ffe..000000000 --- a/frontend/src/components/Buttons/DownloadButtons/DownloadLinux.vue +++ /dev/null @@ -1,60 +0,0 @@ - - - diff --git a/frontend/src/components/Buttons/LanguageSelector.vue b/frontend/src/components/Buttons/LanguageSelector.vue deleted file mode 100644 index d7d7d25f4..000000000 --- a/frontend/src/components/Buttons/LanguageSelector.vue +++ /dev/null @@ -1,27 +0,0 @@ - - - diff --git a/frontend/src/components/Buttons/LogoutButton.vue b/frontend/src/components/Buttons/LogoutButton.vue deleted file mode 100644 index 2cd04c9cf..000000000 --- a/frontend/src/components/Buttons/LogoutButton.vue +++ /dev/null @@ -1,26 +0,0 @@ - - - diff --git a/frontend/src/components/Buttons/SettingsButton.vue b/frontend/src/components/Buttons/SettingsButton.vue deleted file mode 100644 index 2ddf8318f..000000000 --- a/frontend/src/components/Buttons/SettingsButton.vue +++ /dev/null @@ -1,74 +0,0 @@ - - - diff --git a/frontend/src/components/Buttons/ThemeToggle.vue b/frontend/src/components/Buttons/ThemeToggle.vue deleted file mode 100644 index 179e0e3d4..000000000 --- a/frontend/src/components/Buttons/ThemeToggle.vue +++ /dev/null @@ -1,44 +0,0 @@ - - - diff --git a/frontend/src/components/Buttons/ViewToggle.vue b/frontend/src/components/Buttons/ViewToggle.vue deleted file mode 100644 index c4b305ef4..000000000 --- a/frontend/src/components/Buttons/ViewToggle.vue +++ /dev/null @@ -1,29 +0,0 @@ - - - diff --git a/frontend/src/components/Carousel.vue b/frontend/src/components/Carousel.vue deleted file mode 100644 index 06e79e28b..000000000 --- a/frontend/src/components/Carousel.vue +++ /dev/null @@ -1,187 +0,0 @@ - - - diff --git a/frontend/src/components/ChangeLogs/ChangeLogItem.vue b/frontend/src/components/ChangeLogs/ChangeLogItem.vue deleted file mode 100644 index bbc54cf8f..000000000 --- a/frontend/src/components/ChangeLogs/ChangeLogItem.vue +++ /dev/null @@ -1,47 +0,0 @@ - - - diff --git a/frontend/src/components/Dashboard/Button.vue b/frontend/src/components/Dashboard/Button.vue deleted file mode 100644 index c4d68cd43..000000000 --- a/frontend/src/components/Dashboard/Button.vue +++ /dev/null @@ -1,38 +0,0 @@ - - diff --git a/frontend/src/components/Dashboard/Dashboard.vue b/frontend/src/components/Dashboard/Dashboard.vue deleted file mode 100644 index 443e0d2ed..000000000 --- a/frontend/src/components/Dashboard/Dashboard.vue +++ /dev/null @@ -1,106 +0,0 @@ - - - diff --git a/frontend/src/components/Dashboard/DeleteButton.vue b/frontend/src/components/Dashboard/DeleteButton.vue deleted file mode 100644 index dd2251205..000000000 --- a/frontend/src/components/Dashboard/DeleteButton.vue +++ /dev/null @@ -1,19 +0,0 @@ - - - diff --git a/frontend/src/components/Dashboard/Widget.vue b/frontend/src/components/Dashboard/Widget.vue deleted file mode 100644 index e3d55dee1..000000000 --- a/frontend/src/components/Dashboard/Widget.vue +++ /dev/null @@ -1,80 +0,0 @@ - - - diff --git a/frontend/src/components/Errors/DefaultError.vue b/frontend/src/components/Errors/DefaultError.vue deleted file mode 100644 index 350b7f319..000000000 --- a/frontend/src/components/Errors/DefaultError.vue +++ /dev/null @@ -1,30 +0,0 @@ - diff --git a/frontend/src/components/Footers/DefaultFooter.vue b/frontend/src/components/Footers/DefaultFooter.vue deleted file mode 100644 index 85e2e0be9..000000000 --- a/frontend/src/components/Footers/DefaultFooter.vue +++ /dev/null @@ -1,21 +0,0 @@ - - - diff --git a/frontend/src/components/FormKit/ButtonInput.vue b/frontend/src/components/FormKit/ButtonInput.vue deleted file mode 100644 index 46110ee24..000000000 --- a/frontend/src/components/FormKit/ButtonInput.vue +++ /dev/null @@ -1,73 +0,0 @@ - - - diff --git a/frontend/src/components/ListItem.vue b/frontend/src/components/ListItem.vue deleted file mode 100644 index 77ba733c9..000000000 --- a/frontend/src/components/ListItem.vue +++ /dev/null @@ -1,53 +0,0 @@ - - - diff --git a/frontend/src/components/Loading/DefaultLoading.vue b/frontend/src/components/Loading/DefaultLoading.vue deleted file mode 100644 index 289698f5a..000000000 --- a/frontend/src/components/Loading/DefaultLoading.vue +++ /dev/null @@ -1,36 +0,0 @@ - - - diff --git a/frontend/src/components/Modals/DefaultModal.vue b/frontend/src/components/Modals/DefaultModal.vue deleted file mode 100644 index a9172581c..000000000 --- a/frontend/src/components/Modals/DefaultModal.vue +++ /dev/null @@ -1,157 +0,0 @@ - - - diff --git a/frontend/src/components/Modals/LanguageModal.vue b/frontend/src/components/Modals/LanguageModal.vue deleted file mode 100644 index 29b93f6b4..000000000 --- a/frontend/src/components/Modals/LanguageModal.vue +++ /dev/null @@ -1,34 +0,0 @@ - - - diff --git a/frontend/src/components/NavBars/AdminNavBar.vue b/frontend/src/components/NavBars/AdminNavBar.vue deleted file mode 100644 index 36bfdec3c..000000000 --- a/frontend/src/components/NavBars/AdminNavBar.vue +++ /dev/null @@ -1,102 +0,0 @@ - - - diff --git a/frontend/src/components/NavBars/DefaultNavBar.vue b/frontend/src/components/NavBars/DefaultNavBar.vue deleted file mode 100644 index 762227ff3..000000000 --- a/frontend/src/components/NavBars/DefaultNavBar.vue +++ /dev/null @@ -1,46 +0,0 @@ - - - diff --git a/frontend/src/components/SessionList/SessionItem.vue b/frontend/src/components/SessionList/SessionItem.vue deleted file mode 100644 index 4f46615f9..000000000 --- a/frontend/src/components/SessionList/SessionItem.vue +++ /dev/null @@ -1,58 +0,0 @@ - - - diff --git a/frontend/src/components/SessionList/SessionList.vue b/frontend/src/components/SessionList/SessionList.vue deleted file mode 100644 index 0e99e5af1..000000000 --- a/frontend/src/components/SessionList/SessionList.vue +++ /dev/null @@ -1,35 +0,0 @@ - - - diff --git a/frontend/src/components/Stepper.vue b/frontend/src/components/Stepper.vue deleted file mode 100644 index dbdfd4b10..000000000 --- a/frontend/src/components/Stepper.vue +++ /dev/null @@ -1,69 +0,0 @@ - - - diff --git a/frontend/src/components/TaskList/TaskList.vue b/frontend/src/components/TaskList/TaskList.vue deleted file mode 100644 index 71ef2fc00..000000000 --- a/frontend/src/components/TaskList/TaskList.vue +++ /dev/null @@ -1,35 +0,0 @@ - - - diff --git a/frontend/src/components/Toasts/BadBackend.vue b/frontend/src/components/Toasts/BadBackend.vue deleted file mode 100644 index 374af764b..000000000 --- a/frontend/src/components/Toasts/BadBackend.vue +++ /dev/null @@ -1,15 +0,0 @@ - - - diff --git a/frontend/src/components/Toasts/DefaultToast.vue b/frontend/src/components/Toasts/DefaultToast.vue deleted file mode 100644 index a61cad9e2..000000000 --- a/frontend/src/components/Toasts/DefaultToast.vue +++ /dev/null @@ -1,22 +0,0 @@ - diff --git a/frontend/src/components/Toasts/UpdateAvailable.vue b/frontend/src/components/Toasts/UpdateAvailable.vue deleted file mode 100644 index b772c037c..000000000 --- a/frontend/src/components/Toasts/UpdateAvailable.vue +++ /dev/null @@ -1,14 +0,0 @@ - - - diff --git a/frontend/src/components/WebhookList/WebhookItem.vue b/frontend/src/components/WebhookList/WebhookItem.vue deleted file mode 100644 index 177e381a2..000000000 --- a/frontend/src/components/WebhookList/WebhookItem.vue +++ /dev/null @@ -1,61 +0,0 @@ - - - diff --git a/frontend/src/components/WebhookList/WebhookList.vue b/frontend/src/components/WebhookList/WebhookList.vue deleted file mode 100644 index 62397b200..000000000 --- a/frontend/src/components/WebhookList/WebhookList.vue +++ /dev/null @@ -1,39 +0,0 @@ - - - diff --git a/frontend/src/components/WizarrLogo.vue b/frontend/src/components/WizarrLogo.vue deleted file mode 100644 index c4be4a3f5..000000000 --- a/frontend/src/components/WizarrLogo.vue +++ /dev/null @@ -1,60 +0,0 @@ - - - diff --git a/frontend/src/formkit.config.ts b/frontend/src/formkit.config.ts deleted file mode 100644 index b2d678bb2..000000000 --- a/frontend/src/formkit.config.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { createProPlugin, inputs } from "@formkit/pro"; - -import ButtonInput from "./components/FormKit/ButtonInput.vue"; -import type { DefaultConfigOptions } from "@formkit/vue"; -import OneTimePassword from "./components/FormKit/OneTimePassword.vue"; -import { createInput } from "@formkit/vue"; -import formkitTheme from "./formkit.theme"; -import { generateClasses } from "@formkit/themes"; -import { genesisIcons } from "@formkit/icons"; - -const iconLoader = (icon: string) => { - const parent = document.createElement("div"); - parent.classList.add("absolute", "inset-y-0", "left-0", "flex", "items-center", "pl-3.5", "pointer-events-none"); - const i = document.createElement("i"); - i.classList.add("fas"); - icon.split(" ").forEach((c) => i.classList.add(c)); - parent.appendChild(i); - return parent.innerHTML; -}; - -const proPlugin = createProPlugin("fk-80a76bd3e4", { - ...inputs, -}); - -const config: DefaultConfigOptions = { - icons: { - ...genesisIcons, - }, - iconLoader, - // @ts-ignore - plugins: [proPlugin], - config: { - classes: generateClasses(formkitTheme), - }, - inputs: { - otp: createInput(OneTimePassword, { - props: ["digits"], - }), - inputButton: createInput(ButtonInput, { - type: "input", - }), - }, -}; - -export default config; diff --git a/frontend/src/formkit.theme.ts b/frontend/src/formkit.theme.ts deleted file mode 100644 index 15b467f06..000000000 --- a/frontend/src/formkit.theme.ts +++ /dev/null @@ -1,236 +0,0 @@ -const theme: Record> = { - global: { - help: "text-xs text-gray-500 ml-[2px]", - loaderIcon: "inline-flex items-center w-4 text-gray-600 animate-spin", - message: "text-red-500 mb-1 text-xs", - messages: "list-none p-0 mt-1 mb-0 ml-[2px]", - }, - - text: { - input: "peer-[.formkit-prefix-icon]:pl-9 peer-[.formkit-suffix-icon]:pr-9 mb-1 w-full bg-gray-50 dark:bg-gray-700 text-gray-900 dark:text-white sm:text-sm border border-gray-300 dark:border-gray-600 rounded block w-full dark:placeholder-gray-400 focus:ring-primary focus:border-primary", - label: "block mb-2 text-sm font-medium text-gray-900 dark:text-white", - inner: "w-full relative", - outer: "mb-4 formkit-disabled:opacity-50", - prefixIcon: "peer absolute inset-y-0 left-0 flex items-center pl-3 pointer-events-none bg-gray-50 dark:bg-gray-700 rounded-l border-l border-t border-b border-gray-300 dark:border-gray-600", - suffixIcon: "peer absolute inset-y-0 right-0 flex items-center pr-3 pointer-events-none bg-gray-50 dark:bg-gray-700 rounded-r border-r border-t border-b border-gray-300 dark:border-gray-600", - }, - - inputButton: { - input: "peer-[.formkit-prefix-icon]:pl-9 peer-[.formkit-suffix-icon]:pr-9 mb-1 w-full bg-gray-50 dark:bg-gray-700 text-gray-900 dark:text-white sm:text-sm border border-gray-300 dark:border-gray-600 rounded block w-full dark:placeholder-gray-400 focus:ring-primary focus:border-primary", - label: "block mb-2 text-sm font-medium text-gray-900 dark:text-white", - inner: "w-full relative", - outer: "mb-4 formkit-disabled:opacity-50", - prefixIcon: "peer absolute inset-y-0 left-0 flex items-center pl-3 pointer-events-none bg-gray-50 dark:bg-gray-700 rounded-l border-l border-t border-b border-gray-300 dark:border-gray-600", - suffixIcon: "peer absolute inset-y-0 right-0 flex items-center pr-3 pointer-events-none bg-gray-50 dark:bg-gray-700 rounded-r border-r border-t border-b border-gray-300 dark:border-gray-600", - }, - - email: { - input: "peer-[.formkit-prefix-icon]:pl-9 peer-[.formkit-suffix-icon]:pr-9 mb-1 w-full bg-gray-50 dark:bg-gray-700 text-gray-900 dark:text-white sm:text-sm border border-gray-300 dark:border-gray-600 rounded block w-full dark:placeholder-gray-400 focus:ring-primary focus:border-primary", - label: "block mb-2 text-sm font-medium text-gray-900 dark:text-white", - inner: "w-full relative", - outer: "mb-4 formkit-disabled:opacity-50", - prefixIcon: "peer absolute inset-y-0 left-0 flex items-center pl-3 pointer-events-none bg-gray-50 dark:bg-gray-700 rounded-l border-l border-t border-b border-gray-300 dark:border-gray-600", - suffixIcon: "peer absolute inset-y-0 right-0 flex items-center pr-3 pointer-events-none bg-gray-50 dark:bg-gray-700 rounded-r border-r border-t border-b border-gray-300 dark:border-gray-600", - }, - - password: { - input: "peer-[.formkit-prefix-icon]:pl-9 peer-[.formkit-suffix-icon]:pr-9 mb-1 w-full bg-gray-50 dark:bg-gray-700 text-gray-900 dark:text-white sm:text-sm border border-gray-300 dark:border-gray-600 rounded block w-full dark:placeholder-gray-400 focus:ring-primary focus:border-primary", - label: "block mb-2 text-sm font-medium text-gray-900 dark:text-white", - inner: "w-full relative", - outer: "mb-4 formkit-disabled:opacity-50", - prefixIcon: "peer absolute inset-y-0 left-0 flex items-center pl-3 pointer-events-none bg-gray-50 dark:bg-gray-700 rounded-l border-l border-t border-b border-gray-300 dark:border-gray-600", - suffixIcon: "peer absolute inset-y-0 right-0 flex items-center pr-3 pointer-events-none bg-gray-50 dark:bg-gray-700 rounded-r border-r border-t border-b border-gray-300 dark:border-gray-600", - }, - - search: { - input: "peer-[.formkit-prefix-icon]:pl-9 peer-[.formkit-suffix-icon]:pr-9 mb-1 w-full bg-gray-50 dark:bg-gray-700 text-gray-900 dark:text-white sm:text-sm border border-gray-300 dark:border-gray-600 rounded block w-full dark:placeholder-gray-400 focus:ring-primary focus:border-primary", - label: "block mb-2 text-sm font-medium text-gray-900 dark:text-white", - inner: "w-full relative", - outer: "mb-4 formkit-disabled:opacity-50", - prefixIcon: "peer absolute inset-y-0 left-0 flex items-center pl-3 pointer-events-none bg-gray-50 dark:bg-gray-700 rounded-l border-l border-t border-b border-gray-300 dark:border-gray-600", - suffixIcon: "peer absolute inset-y-0 right-0 flex items-center pr-3 pointer-events-none bg-gray-50 dark:bg-gray-700 rounded-r border-r border-t border-b border-gray-300 dark:border-gray-600", - }, - - file: { - input: "peer-[.formkit-prefix-icon]:pl-9 peer-[.formkit-suffix-icon]:pr-9 mb-1 w-full bg-gray-50 dark:bg-gray-700 text-gray-900 dark:text-white sm:text-sm border border-gray-300 dark:border-gray-600 rounded block w-full dark:placeholder-gray-400 focus:ring-primary focus:border-primary", - label: "block mb-2 text-sm font-medium text-gray-900 dark:text-white", - inner: "w-full relative", - outer: "mb-4 formkit-disabled:opacity-50", - prefixIcon: "peer absolute inset-y-0 left-0 flex items-center pl-3 pointer-events-none bg-gray-50 dark:bg-gray-700 rounded-l border-l border-t border-b border-gray-300 dark:border-gray-600", - suffixIcon: "peer absolute inset-y-0 right-0 flex items-center pr-3 pointer-events-none bg-gray-50 dark:bg-gray-700 rounded-r border-r border-t border-b border-gray-300 dark:border-gray-600", - fileList: "hidden", - noFiles: "hidden", - }, - - mask: { - input: "peer-[.formkit-prefix-icon]:pl-9 peer-[.formkit-suffix-icon]:pr-9 mb-1 w-full bg-gray-50 dark:bg-gray-700 text-gray-900 dark:text-white sm:text-sm border border-gray-300 dark:border-gray-600 rounded block w-full dark:placeholder-gray-400 focus:ring-primary focus:border-primary", - label: "block mb-2 text-sm font-medium text-gray-900 dark:text-white", - inner: "w-full relative", - outer: "mb-4 formkit-disabled:opacity-50", - prefixIcon: "peer absolute inset-y-0 left-0 flex items-center pl-3 pointer-events-none bg-gray-50 dark:bg-gray-700 rounded-l border-l border-t border-b border-gray-300 dark:border-gray-600", - suffixIcon: "peer absolute inset-y-0 right-0 flex items-center pr-3 pointer-events-none bg-gray-50 dark:bg-gray-700 rounded-r border-r border-t border-b border-gray-300 dark:border-gray-600", - }, - - checkbox: { - input: "w-4 h-4 text-primary bg-gray-100 rounded border-gray-300 focus:ring-primary dark:focus:ring-primary dark:ring-offset-gray-800 focus:ring-2 dark:bg-gray-700 dark:border-gray-600 formkit-disabled:opacity-50 formkit-disabled:cursor-default formkit-disabled:pointer-events-none", - label: "ml-2 text-sm text-gray-700 dark:text-white formkit-disabled:opacity-50 formkit-disabled:cursor-default formkit-disabled:pointer-events-none", - decorator: "hidden", - }, - - datepicker: { - outer: "mb-4 formkit-disabled:opacity-50", - input: "peer-[.formkit-prefix-icon]:pl-9 peer-[.formkit-suffix-icon]:pr-9 mb-1 w-full bg-gray-50 dark:bg-gray-700 text-gray-900 dark:text-white sm:text-sm border border-gray-300 dark:border-gray-600 rounded block w-full dark:placeholder-gray-400 focus:ring-primary focus:border-primary p-2.5", - timeInput: "peer-[.formkit-prefix-icon]:pl-9 peer-[.formkit-suffix-icon]:pr-9 mb-1 w-full bg-gray-50 dark:bg-gray-700 text-gray-900 dark:text-white sm:text-sm border border-gray-300 dark:border-gray-600 rounded block w-full dark:placeholder-gray-400 focus:ring-primary focus:border-primary p-2.5", - label: "block mb-2 text-sm font-medium text-gray-900 dark:text-white", - openButton: "absolute top-[30%] bottom-[25%] right-1 text-gray-700 dark:text-gray-300", - calendarIcon: "flex w-8 grow-0 shrink-0 self-stretch select-none [&>svg]:w-full [&>svg]:m-auto [&>svg]:max-h-[1em] [&>svg]:max-w-[1em]", - inner: "relative", - - // bg-gray-50 dark:bg-gray-700 border border-gray-300 dark:border-gray-600 - panelWrapper: "!absolute top-[calc(100%_+_0.5em)] rounded p-5 bg-gray-50 dark:bg-gray-700 border border-gray-300 dark:border-gray-600 z-10 w-full", - panelHeader: "hidden grid grid-cols-[2.5em_1fr_2.5em] justify-center items-center border-b-2 border-white dark:border-gray-400 mb-4 pb-4 dark:text-gray-400 text-black", - - yearButton: "appearance-none cursor-pointer px-3 py-1 border-2 rounded mx-1 border-white dark:border-gray-400", - monthButton: "appearance-none cursor-pointer px-3 py-1 border-2 rounded mx-1 border-white dark:border-gray-400", - dayButton: "appearance-none cursor-pointer px-3 py-1 border-2 rounded mx-1 border-white dark:border-gray-400", - - yearsHeader: "flex items-center justify-center col-start-2 col-end-2", - monthsHeader: "flex items-center justify-center col-start-2 col-end-2", - daysHeader: "flex items-center justify-center text-black dark:text-gray-400", - timeHeader: "flex items-center justify-center col-start-2 col-end-2", - - // bg-gray-200 dark:bg-gray-800 focus:bg-gray-100 dark:focus:bg-gray-600 text-black dark:text-white - year: "cursor-pointer flex items-center justify-center w-[calc(20%_-_1em)] m-2 p-2 rounded bg-gray-200 dark:bg-gray-800 focus:bg-gray-100 dark:focus:bg-gray-600 text-black dark:text-white data-[is-extra=true]:opacity-25 formkit-disabled:opacity-50 formkit-disabled:cursor-default formkit-disabled:pointer-events-none", - month: "cursor-pointer flex items-center justify-center w-[calc(33%_-_1em)] m-2 p-2 rounded bg-gray-200 dark:bg-gray-800 focus:bg-gray-100 dark:focus:bg-gray-600 text-black dark:text-white data-[is-extra=true]:opacity-25 formkit-disabled:opacity-50 formkit-disabled:cursor-default formkit-disabled:pointer-events-none", - dayCell: "cursor-pointer flex items-center justify-center w-[2.25em] h-[2.25em] m-1 p-2 rounded bg-gray-200 dark:bg-gray-800 focus:bg-gray-100 dark:focus:bg-gray-600 text-black dark:text-white data-[is-extra=true]:opacity-25 formkit-disabled:opacity-50 formkit-disabled:cursor-default formkit-disabled:pointer-events-none", - - years: "flex flex-wrap", - months: "flex flex-wrap", - calendar: "w-full flex justify-center", - week: "flex formkit-disabled:opacity-50 formkit-disabled:cursor-default formkit-disabled:pointer-events-none", - - weekDays: "hidden", - weekDay: "flex w-[2.25em] h-[1em] m-1 items-center justify-center rounded font-medium lowercase", - - next: "ml-auto px-3 py-1 hover:bg-gray-100 hover:rounded col-start-3 col-end-3", - nextLabel: "hidden", - nextIcon: "flex w-3 select-none [&>svg]:w-full", - - prev: "mr-auto px-3 py-1 hover:bg-gray-100 hover:rounded col-start-1 col-end-1", - prevLabel: "hidden", - prevIcon: "flex w-3 select-none [&>svg]:w-full", - }, - - "datetime-local": { - input: "peer-[.formkit-prefix-icon]:pl-9 peer-[.formkit-suffix-icon]:pr-9 mb-1 w-full bg-gray-50 dark:bg-gray-700 text-gray-900 dark:text-white sm:text-sm border border-gray-300 dark:border-gray-600 rounded block w-full dark:placeholder-gray-400 focus:ring-primary focus:border-primary", - label: "block mb-2 text-sm font-medium text-gray-900 dark:text-white", - inner: "w-full relative", - outer: "mb-4 formkit-disabled:opacity-50", - }, - - "family:button": { - input: ` - bg-primary hover:bg-primary_hover - data-[theme=primary]:bg-primary data-[theme=primary]:hover:bg-primary_hover - data-[theme=secondary]:bg-secondary data-[theme=secondary]:hover:bg-secondary_hover - data-[theme=danger]:bg-red-600 data-[theme=danger]:hover:bg-red-500 - data-[theme=success]:bg-green-500 data-[theme=success]:hover:bg-green-600 - data-[theme=warning]:bg-yellow-500 data-[theme=warning]:hover:bg-yellow-600 - data-[theme=transparent]:bg-transparent data-[theme=transparent]:hover:bg-gray-100 data-[theme=transparent]:text-gray-900 data-[theme=transparent]:dark:text-white data-[theme=transparent]:border data-[theme=transparent]:border-gray-300 data-[theme=transparent]:hover:bg-gray-100 data-[theme=transparent]:dark:border-gray-700 - data-[theme=none]:bg-transparent data-[theme=none]:text-gray-900 dark:text-white data-[theme=none]:hover:bg-gray-100 dark:hover:bg-gray-700 - - inline-flex items-center focus:outline-none text-white font-medium rounded px-5 py-2.5 text-sm - `, - prefixIcon: "$reset block w-4 mr-2 stretch", - suffixIcon: "$reset block w-4 ml-2 stretch", - }, - - tooltipInput: { - input: "peer-[.formkit-prefix-icon]:pl-9 peer-[.formkit-suffix-icon]:pr-9 mb-1 w-full bg-gray-50 dark:bg-gray-700 text-gray-900 dark:text-white sm:text-sm border border-gray-300 dark:border-gray-600 rounded block w-full dark:placeholder-gray-400 focus:ring-primary focus:border-primary", - }, - - // select: { - // outer: "mb-4 formkit-disabled:opacity-50", - // input: "peer-[.formkit-prefix-icon]:pl-9 peer-[.formkit-suffix-icon]:pr-9 mb-1 w-full bg-gray-50 dark:bg-gray-700 text-gray-900 dark:text-white sm:text-sm border border-gray-300 dark:border-gray-600 rounded block w-full dark:placeholder-gray-400 focus:ring-primary focus:border-primary", - // label: "block mb-2 text-sm font-medium text-gray-900 dark:text-white", - // selectIcon: "flex p-[3px] shrink-0 w-5 mr-2 -ml-[1.5em] h-full pointer-events-none [&>svg]:w-[1em]", - // option: "formkit-multiple:p-3 formkit-multiple:text-sm text-gray-700", - // icon: "hidden", - // }, - - select: { - outer: "mb-4 formkit-disabled:opacity-50", - input: "peer-[.formkit-prefix-icon]:pl-9 peer-[.formkit-suffix-icon]:pr-9 mb-1 w-full bg-gray-50 dark:bg-gray-700 text-gray-900 dark:text-white sm:text-sm border border-gray-300 dark:border-gray-600 rounded block w-full dark:placeholder-gray-400 focus:ring-primary focus:border-primary", - label: "block mb-2 text-sm font-medium text-gray-900 dark:text-white", - selectIcon: "flex p-[3px] shrink-0 w-5 mr-2 -ml-[1.5em] h-full pointer-events-none [&>svg]:w-[1em]", - option: "formkit-multiple:p-3 formkit-multiple:text-sm text-gray-500 dark:text-white", - icon: "hidden", - }, - - slider: { - help: "mt-0 mb-1", - sliderInner: 'flex items-center py-1 [&>.formkit-max-value]:mb-0 [&>.formkit-max-value]:ml-8 [&>.formkit-max-value]:shrink [&>.formkit-max-value]:grow-0 [&>.formkit-icon]:bg-none [&>.formkit-icon]:border-none [&>.formkit-icon]:p-0 [&>.formkit-icon]:w-4 [&>.formkit-prefix-icon]:mr-2 [&>.formkit-suffix-icon]:ml-2 [&[data-has-mark-labels="true"]_.formkit-track]:mb-4', - track: "grow relative z-[3] py-1", - trackWrapper: "px-[2px] rounded-full bg-gray-200 dark:bg-gray-700", - trackInner: "h-2 mx-[2px] relative", - fill: "h-full rounded-full absolute top-0 mx-[-4px] bg-primary dark:bg-primary", - marks: "absolute pointer-events-none left-0 right-0 top-0 bottom-0", - mark: 'absolute top-1/2 w-[3px] h-[3px] rounded-full -translate-x-1/2 -translate-y-1/2 bg-gray-400 data-[active="true"]:bg-white', - markLabel: "absolute top-[calc(100%+0.5em)] left-1/2 text-gray-400 text-[0.66em] -translate-x-1/2", - handles: "m-0 p-0 list-none", - handle: 'group w-5 h-5 rounded-full bg-primary absolute top-1/2 left-0 z-[2] -translate-x-1/2 -translate-y-1/2 shadow-[inset_0_0_0_1px_rgba(0,0,0,0.1),0_1px_2px_0_rgba(0,0,0,0.8)] focus-visible:outline-0 focus-visible:ring-2 ring-primary data-[is-target="true"]:z-[3]', - tooltip: 'absolute bottom-full left-1/2 -translate-x-1/2 -translate-y-[4px] bg-primary text-white py-1 px-2 text-xs leading-none whitespace-nowrap rounded-sm opacity-0 pointer-events-none transition-opacity after:content-[""] after:absolute after:top-full after:left-1/2 after:-translate-x-1/2 after:-translate-y-[1px] after:border-4 after:border-transparent after:border-t-primary group-hover:opacity-100 group-focus-visible:opacity-100 group-data-[show-tooltip="true"]:opacity-100', - linkedValues: "flex items-start justify-between", - minValue: 'grow max-w-[45%] mb-0 relative [&_.formkit-inner::after]:content-[""] [&_.formkit-inner::after]:absolute [&_.formkit-inner::after]:left-[105%] [&_.formkit-inner::after]:-translate-y-1/2 [&_.formkit-inner::after]:w-[10%] [&_.formkit-inner::after]:h-[1px] [&_.formkit-inner::after]:bg-gray-500', - maxValue: "grow max-w-[45%] mb-0 relative", - chart: "relative z-[2] mb-2 flex justify-between items-center w-full aspect-[3/1]", - chartBar: 'absolute bottom-0 h-full bg-gray-400 opacity-[.66] data-[active="false"]:opacity-[.25]', - }, - - range: { - inner: "$reset flex items-center", - input: "$reset w-full h-2 bg-gray-200 rounded appearance-none cursor-pointer dark:bg-gray-700 mb-2 accent-primary", - prefixIcon: "$reset w-4 mr-1 flex self-stretch grow-0 shrink-0 [&>svg]:max-w-[1em] [&>svg]:max-h-[1em] [&>svg]:m-auto", - suffixIcon: "$reset w-4 ml-1 flex self-stretch grow-0 shrink-0 [&>svg]:max-w-[1em] [&>svg]:max-h-[1em] [&>svg]:m-auto", - }, - - dropdown: { - outer: "mb-4 formkit-disabled:opacity-50", - input: "peer-[.formkit-prefix-icon]:pl-9 peer-[.formkit-suffix-icon]:pr-9 mb-1 w-full bg-gray-50 dark:bg-gray-700 text-gray-900 dark:text-white sm:text-sm border border-gray-300 dark:border-gray-600 rounded block w-full dark:placeholder-gray-400 focus:ring-primary focus:border-primary", - label: "block mb-2 text-sm font-medium text-gray-900 dark:text-white", - selectIcon: "flex p-[3px] shrink-0 w-5 mr-2 -ml-[1.5em] h-full pointer-events-none [&>svg]:w-[1em]", - option: "formkit-multiple:p-3 formkit-multiple:text-sm text-gray-700 dark:text-white", - - dropdownWrapper: "my-2 w-full shadow-lg rounded [&::-webkit-scrollbar]:hidden", - emptyMessageInner: "flex items-center justify-center text-sm p-2 text-center w-full text-gray-500 [&>span]:mr-3 [&>span]:ml-0", - inner: "relative flex rounded mb-1 border border-gray-300 dark:border-gray-600 rounded bg-gray-50 dark:bg-gray-700", - - listbox: "rounded bg-white dark:bg-gray-800 z-10 w-full overflow-hidden", - listboxButton: "flex w-12 self-stretch justify-center mx-auto", - listitem: 'relative hover:bg-gray-300 dark:hover:bg-gray-600 data-[is-active="true"]:bg-gray-300 dark:data-[is-active="true"]:bg-gray-600', - - placeholder: "px-4 p-3 text-gray-100 text-sm w-full text-left text-gray-600 dark:text-gray-400", - selector: "flex w-full", - selectedIcon: "block absolute top-1/2 right-4 w-3 -translate-y-1/2", - - tagsWrapper: "w-full", - tags: "flex flex-row flex-wrap w-full py-1.5 px-2 pr-8", - tag: "flex items-center my-1 p-1 bg-gray-300 dark:bg-gray-800 text-black dark:text-white text-xs rounded", - tagLabel: "pl-2 pr-1", - tagWrapper: "mr-1 focus:outline-none focus:text-white [&>div]:focus:bg-gray-500 [&>div>button]:focus:text-white", - removeSelection: "w-2.5 mx-1 self-center text-black leading-none", - icon: "block text-black dark:text-white", - }, - - taglist: { - input: "px-1 py-1 w-[0%] grow w-full", - removeSelection: "w-2.5 mx-1 self-center text-black leading-none", - tag: "flex items-center my-1 p-1 bg-gray-200 text-xs rounded-full", - tagWrapper: "mr-1 focus:outline-none focus:text-white [&>div]:focus:bg-gray-500 [&>div>button]:focus:text-white", - tagLabel: "pl-2 pr-1", - tagsWrapper: "w-full", - tags: "flex flex-row flex-wrap w-full py-1.5 px-2", - }, -}; - -export default theme; diff --git a/frontend/src/i18n.ts b/frontend/src/i18n.ts deleted file mode 100644 index 724a4223b..000000000 --- a/frontend/src/i18n.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { createGettext, type GetTextOptions } from "vue3-gettext"; -import translations from "./language/translations.json"; - -// Available languages -const availableLanguages: GetTextOptions["availableLanguages"] = { - vi: "Tiếng Việt", - cs: "Čeština", - da: "Dansk", - de: "Deutsch", - en: "English", - es: "Español", - fa: "فارسی", - fr: "Français", - he: "עברית", - hr: "Hrvatski", - hu: "Magyar", - is: "Íslenska", - it: "Italiano", - lt: "Lietuvių", - nl: "Nederlands", - no: "Norsk", - pl: "Polski", - pt: "Português", - ro: "Română", - ru: "Русский", - sv: "Svenska", - zh_cn: "简体中文", - zh_tw: "繁體中文", -}; - -// Get the preferred languages -const preferredLanguages = navigator.languages.map((language) => language.split("-")[0]); - -// Find the first available language that matches the preferred languages -const language = preferredLanguages.find((language) => availableLanguages[language]) ?? "en"; - -// Log the preferred languages -console.log("Preferred languages:", preferredLanguages); -console.log("Selected Language:", language); - -// Create the gettext instance -const gettext = createGettext({ - availableLanguages, - defaultLanguage: language, - translations: translations, - globalProperties: { - gettext: ["$gettext", "__"], - ngettext: ["$ngettext", "_n"], - pgettext: ["$pgettext", "_x"], - npgettext: ["$npgettext", "_xn"], - }, -}); - -export { language, availableLanguages }; -export default gettext; diff --git a/frontend/src/language/translations.json b/frontend/src/language/translations.json deleted file mode 100644 index 297d1ecf8..000000000 --- a/frontend/src/language/translations.json +++ /dev/null @@ -1 +0,0 @@ -{"vi":{"About":"Thông tin","Account":"Tài khoản","Account Settings":"Cài đặt tài khoản","Add API keys for external services":"Thêm API keys vào dịch vụ mở rộng","Add Custom HTML page to help screen":"Thêm trang HTML tùy chỉnh vào trang hỗ trợ","Add Jellyseerr, Overseerr or Ombi support":"Thêm hỗ trợ Jellyseerr, Overseerr hoặc Ombi","Add Passkey":"Thêm Passkey","Add Request Service":"Thêm dịch vụ yêu cầu","Add Service":"Thêm dịch vụ","Add webhooks for external services":"Thêm webhooks cho dịch vụ mở rộng","Admin Account":"Tài khoản Admin","Advanced Options":"Tùy chọn nâng cao","Advanced Settings":"Cài đặt mở rộng","Advanced settings for the server":"Cài đặt nâng cao cho server","All done!":"Tất cả đã được làm xong!","All of your media server settings will appear here, we know your going to spend a lot of time here 😝":"Tất cả cài đặt media server của bạn sẽ xuất hiện ở đây, chúng tôi biết bạn sẽ dành nhiều thời gian ở đây 😝","All of your media server users will appear here in a list. You can manage them, edit them, and delete them. Other information like their expiration or creation date will also be displayed here.":"Tất cả người dùng media server của bạn sẽ xuất hiện ở đây trong danh sách. Bạn có thể quản lý chúng, chỉnh sửa và xóa chúng. Các thông tin khác như ngày hết hạn hoặc ngày tạo cũng sẽ được hiển thị ở đây.","API Key":"API Key","API key deleted successfully":"Xoá API key thành công","API key deletion cancelled":"Xóa API key đã bị hủy","Are you sure you want to delete this API key?":"Bạn có chắc muốn xóa API key này không?","Are you sure you want to delete this invitation?":"Bạn có chắc muốn xóa thư mời này không?","Are you sure you want to delete this request?":"Bạn có chắc muốn xóa yêu cầu này không?","Are you sure you want to delete this webhook?":"Bạn có chắc muốn xóa webhook này không?","Are you sure you want to reset your dashboard?":"Bạn có chắc muốn đặt lại bảng điều khiển của mình không?","Are you sure you want to save this connection, this will reset your Wizarr instance, which may lead to data loss.":"Bạn có chắc muốn lưu kết nối này không, thao tác này sẽ đặt lại phiên bản Wizarr của bạn, điều này có thể dẫn đến mất dữ liệu.","Are you sure?":"Bạn có chắc không?","Back":"Trở về","Backup":"Sao lưu","Backup File":"Sao lưu File","Change your password":"Thay đổi mật khẩu","Check for and view updates":"Kiểm tra và xem bản cập nhật","Click the key to copy to clipboard!":"Chọn nút KEY sao chép nội dung vào bộ nhớ tạm!","Close":"Đóng","Configure Discord bot settings":"Cài đặt cấu hình bot Discord","Configure notification settings":"Cài đặt cấu hình thông báo","Configure payment settings":"Cài đặt cấu hình phương thức thanh toán","Configure your account settings":"Cài đặt cấu hình tài khoản của bạn","Configure your media server settings":"Cài đặt cấu hình media server của bạn","Configure your passkeys":"Cấu hình passkeys của bạn","Continue":"Tiếp tục","Copied to clipboard":"Sao chép vào bộ nhớ tạm","Copy":"Sao chép","Could not connect to the server.":"Không thể kết nối đến server.","Could not create the account.":"Không thể tạo tài khoản.","Create a backup of your database and configuration. Please set an encryption password to protect your backup file.":"Tạo bản sao database và cấu hình của bạn. Vui lòng đặt mật khẩu mã hóa để bảo vệ tập tin sao lưu của bạn.","Create and restore backups":"Tạo và khôi phục bản sao lưu","Create Another":"Tạo cái khác","Create API Key":"Tạo API Key","Create Flow":"Tạo luồng","Create Invitation":"Tạo thư mời","Create Invite":"Tạo lời mời","Create Webhook":"Tạo Webhook","Currently Wizarr only supports it's internal SQLite database.":"Hiện tại Wizarr chỉ hỗ trợ SQLite database nội bộ.","Custom HTML":"Tuỳ chỉnh HTML","Dashboard reset cancelled":"Đặt lại bảng điều khiển đã bị huỷ","Dashboard reset successfully":"Đặt lại bảng điều khiển thành công","Dashboard Widgets":"Tiện ích bảng điều khiển","Deleted users will not be visible":"Người dùng đã xóa sẽ không hiển thị","Detect Server":"Phát hiện Server","Detected %{server_type} server!":"Đã phát hiện %{server_type} server!","Do you really want to delete this user from your media server?":"Bạn có thực sự muốn xóa người dùng này khỏi media server của mình không?","Don't see your server?":"Không thấy server của mình?","Edit Dashboard":"Chỉnh sửa bảng điều khiển","Eh, So, What is Jellyfin exactly?":"Eh, Vậy Jellyfin chính xác là gì?","Eh, So, What is Plex exactly?":"Eh, Vậy Plex chính xác là gì?","Enable Discord page and configure settings":"Kích hoạt trang Discord và cài đặt cấu hình","Encryption Password":"Mã hoá mật khẩu","End of Tour":"Kết thúc hướng dẫn","Expired %{s}":"Quá hạn %{s}","Expires %{s}":"Hết hạn %{s}","Failed to create invitation":"Tạo thư mời bị lỗi","Flow Editor":"Chỉnh sửa luồng","General settings for the server":"Cài đặt chung cho server","Get Started":"Bắt Đầu","Getting Started!":"Bắt Đầu!","Go Home":"Về Trang Chủ","Go to Dashboard":"Đi đến Bảng điều khiển","Go to Login":"Đến trang Đăng nhập","Great news! You now have access to our server's media collection. Let's make sure you know how to use it with Jellyfin.":"Tin tốt! Bây giờ bạn có quyền truy cập vào bộ sưu tập server's media của chúng tôi. Hãy đảm bảo rằng bạn biết cách sử dụng nó với Jellyfin.","Great question! Plex is a software that allows individuals to share their media collections with others. If you've received this invitation, it means someone wants to share their library with you.":"Câu hỏi tuyệt vời! Plex là phần mềm cho phép các cá nhân chia sẻ bộ sưu tập media của họ với người khác. Nếu bạn nhận được liên kết lời mời này, điều đó có nghĩa là ai đó muốn chia sẻ thư viện của họ với bạn.","here":"Tại đây","Home":"Trang chủ","I wanted to invite you to join my media server.":"Tôi muốn mời bạn tham gia media server của tôi.","If you were sent here by a friend, please request access or if you have an invite code, please click Get Started!":"Nếu bạn được bạn bè gửi đến đây, vui lòng yêu cầu quyền truy cập hoặc nếu bạn có mã mời, vui lòng chọn vào Bắt Đầu!","Invalid invitation code, please try again":"Mã thư mời không hợp lệ, vui lòng thử lại","Invitation Code":"Mã thư mời","Invitation deleted successfully":"Đã xoá thư mời thành công","Invitation deletion cancelled":"Xóa thư mời đã bị huỷ","Invitation Details":"Chi tiết thư mời","Invitation expired %{s}":"Thư mời quá hạn %{s}","Invitation expires %{s}":"Thư mời hết hạn %{s}","Invitation Settings":"Cài đặt thư mời","Invitation used":"Thư mời đã sử dụng","Invitation Users":"Thư mời người dùng","Invitations":"Thư mời","Invite Code":"Mã mời","Invited Users":"Người dùng được mời","Jellyfin is a platform that lets you stream all your favorite movies, TV shows, and music in one place. It's like having your own personal movie theater right at your fingertips! Think of it as a digital library of your favorite content that you can access from anywhere, on any device - your phone, tablet, laptop, smart TV, you name it.":"Jellyfin là nền tảng cho phép bạn phát trực tuyến tất cả các bộ phim, chương trình truyền hình và âm nhạc yêu thích của mình ở một nơi. Nó giống như có rạp chiếu phim cá nhân của riêng bạn ngay trong tầm tay bạn! Hãy coi nó như một thư viện kỹ thuật số chứa nội dung yêu thích của bạn mà bạn có thể truy cập từ mọi nơi, trên mọi thiết bị - điện thoại, máy tính bảng, máy tính xách tay, TV thông minh, bạn đặt tên cho nó.","Join":"Tham gia","Join & Download":"Tham gia & Tải xuống","Join & Download Plex for this device":"Tham gia và tải xuống Plex cho thiết bị này","Join my media server":"Tham gia media server của tôi","Latest Info":"Thông tin mới nhất","Latest Information":"Thông tin mới nhất (Bài viết, tài liệu)","Like this Widget, it shows you the latest information about Wizarr and will be updated regularly by our amazing team.":"Giống như Widget này, nó hiển thị cho bạn thông tin mới nhất về Wizarr và sẽ được đội ngũ tuyệt vời của chúng tôi cập nhật thường xuyên.","Load More":"Tải thêm","Login":"Đăng nhập","Login to Plex":"Đăng nhập Plex","Login with Passkey":"Đăng nhập qua Passkey","Login with Password":"Đăng nhập qua mật khẩu","Login with your account":"Đăng nhập bằng tài khoản của bạn","Logs":"Nhật ký (Logs)","Main Settings":"Cài đặt Chính","Manage you Wizarr server":"Quản lý Wizarr server","Manage your command flows":"Quản lý luồng lệnh của bạn","Manage your invitations":"Quản lý thư mời của bạn","Manage your media server users":"Quản lý người dùng media server","Managing %{user}":"Quản lý %{user}","Mixing the potions":"Kết hợp và tích hợp các thành phần (module)","Modify the look and feel of the server":"Sửa đổi giao diện và trải nghiệm của server","My API Key":"API Key của tôi","My Webhook":"Webhook của tôi","Next":"Kế tiếp","Next Page":"Trang kế tiếp","No API Keys found":"Không tìm thấy API Keys","No contributors found":"Không tìm thấy người đóng góp","No expiration":"Không hết hạn","No Invitations found":"Không tìm thấy thư mời","No Passkeys found":"Không tìm thấy Passkeys","No Requests found":"Không tìm thấy yêu cầu","No servers could be found.":"Không tìm thấy servers nào để kết nối.","No settings matched your search.":"Không có cài đặt nào phù hợp với tìm kiếm của bạn.","No Users found":"Không tìm thấy người dùng","No Webhooks found":"Không tìm thấy Webhooks","Notifications":"Thông báo","Open Jellyfin":"Mở Jellyfin","Open Plex":"Mở Plex","Password":"Mật khẩu","Payments":"Thanh toán","Planning on watching Movies on this device? Download Jellyfin for this device or click 'Next' to for other options.":"Bạn đang có kế hoạch xem Phim trên thiết bị này? Tải xuống Jellyfin cho thiết bị này hoặc chọn vào 'Next' để có các tùy chọn khác.","Planning on watching Movies on this device? Download Plex for this device.":"Bạn đang có kế hoạch xem Phim trên thiết bị này? Tải xuống Plex cho thiết bị này.","Please bare in mind that these tools are only for debugging purposes and we will not provide you with support from any issues that may arise from using them.":"Xin lưu ý rằng những công cụ này chỉ nhằm mục đích gỡ lỗi và chúng tôi sẽ không hỗ trợ bạn về bất kỳ vấn đề nào có thể phát sinh khi sử dụng chúng.","Please enter a server URL and API key.":"Vui lòng nhập server URL và API key.","Please enter a server URL.":"Vui lòng nhập server URL.","Please enter an invite code":"Vui lòng nhập mã mời","Please enter your invite code":"Vui lòng nhập mã mời của bạn","Please login to your Plex account to help us connect you to our server.":"Vui lòng đăng nhập vào tài khoản Plex của bạn để giúp chúng tôi kết nối bạn với server của chúng tôi.","Please take a copy your API key. You will not be able to see it again, please make sure to store it somewhere safe.":"Vui lòng sao chép API key của bạn. Bạn sẽ không thể nhìn thấy nó nữa, hãy đảm bảo lưu trữ nó ở nơi an toàn.","Please wait":"Xin vui lòng chờ","Please wait...":"Xin vui lòng chờ...","Press the button below and follow your browser's steps to login":"Nhấn nút bên dưới và làm theo các bước trên trình duyệt của bạn để đăng nhập","Read More":"Đọc thêm","Request Access":"Yêu cầu quyền truy cập","Requests":"Yêu cầu","Reset Layout":"Đặt lại bố cục","Restore":"Khôi phục","Restore a backup of your database and configuration from a backup file. You will need to provide the encryption password that was used to create the backup":"Khôi phục bản sao lưu database và cấu hình của bạn từ file sao lưu. Bạn sẽ cần cung cấp mật khẩu mã hóa đã được sử dụng để tạo bản sao lưu","Restore a backup of your database and configuration from a backup file. You will need to provide the encryption password that was used to create the backup.":"Khôi phục bản sao lưu database và cấu hình của bạn từ file sao lưu. Bạn sẽ cần cung cấp mật khẩu mã hóa đã được sử dụng để tạo bản sao lưu.","Restore Backup":"Khôi phục bản sao lưu","Save":"Lưu","Save Account":"Lưu tài khoản","Save Connection":"Lưu kết nối","Save Dashboard":"Lưu bảng điều khiển","Save URL":"Lưu URL","Scan for Users":"Quét tìm người dùng","Scan Libraries":"Quét thư viện","Scan Servers":"Quét Servers","Scan Users":"Quét người dùng","Search Settings":"Thiết lập tìm kiếm","Select Language":"Chọn ngôn ngữ","Select Libraries":"Chọn thư viện","Server connection verified!":"Đã xác minh kết nối Server!","Server Display Name":"Tên hiển thị của Server","Server Type":"Loại Server","Settings":"Cài đặt","Settings Categories":"Danh mục cài đặt","Settings for user accounts":"Cài đặt cho tài khoản người dùng","Setup Wizarr":"Cài đặt Wizarr","Setup your account":"Cài đặt tài khoản của bạn","Share":"Chia sẻ","Share Invitation":"Chia sẻ thư mời","Share this link with your friends and family to invite them to join your media server.":"Chia sẻ link này với bạn bè và gia đình của bạn để mời họ tham gia media server của bạn.","So let's see how to get started!":"Vì vậy, hãy xem làm thế nào để bắt đầu!","So you now have access to our server's media collection. Let's make sure you know how to use it with Plex.":"Vì vậy, bây giờ bạn có quyền truy cập vào bộ sưu tập server's media của chúng tôi. Hãy đảm bảo rằng bạn biết cách sử dụng nó với Plex.","Something went wrong while trying to join the server. Please try again later.":"Đã xảy ra lỗi khi cố gắng tham gia vào server. Vui lòng thử lại sau.","Something's missing.":"Có gì đó đang thiếu.","Sorry, we can't find that page. It doesn't seem to exist!":"Xin lỗi, chúng tôi không thể tìm thấy trang đó. Nó dường như không tồn tại!","Start Walkthrough":"Hướng dẫn sử dụng","Still under development":"Vẫn đang được phát triển","System Default":"Mặc định hệ thống","Tasks":"Tác vụ","There are a lot of settings, so you can search for them by using the search bar.":"Có rất nhiều cài đặt nên bạn có thể tìm kiếm chúng bằng cách sử dụng thanh tìm kiếm.","These are your widgets, you can use them to get a quick overview of your Wizarr instance.":"Đây là các widgets của bạn, bạn có thể sử dụng chúng để có cái nhìn tổng quan nhanh về phiên bản Wizarr của mình.","This is a temporary and we are working on adding support for other databases.":"Đây chỉ là tạm thời và chúng tôi đang nỗ lực bổ sung hỗ trợ cho các databases khác.","This is the end of the tour, we hope you enjoyed you found it informative! Please feel free to contact us on Discord and let us know what you think of Wizarr.":"Đây là phần kết thúc của chuyến tham quan, chúng tôi hy vọng bạn thích thú vì thấy nó mang lại nhiều thông tin hữu ích! Vui lòng liên hệ với chúng tôi trên Discord và cho chúng tôi biết suy nghĩ của bạn về Wizarr.","This is where you can manage your invitations, they will appear here in a list. Invitations are used to invite new users to your media server.":"Đây là nơi bạn có thể quản lý thư mời của mình, chúng sẽ xuất hiện ở đây dưới dạng danh sách. Thư mời được sử dụng để mời người dùng mới vào media server của bạn.","This page is currently read only!":"Trang này hiện chỉ được đọc!","To decrypt and encrypt backup files you can use the tools":"Để giải mã và mã hóa files sao lưu bạn có thể sử dụng công cụ","Total Invitations":"Tổng thư mời","Total Tasks":"Tổng tác vụ","Total Users":"Tổng người dùng","Try Again":"Thử lại","Type in your invite code to %{server_name} server!":"Nhập mã mời của bạn để %{server_name} server!","UI Settings":"Cài đặt UI","Unable to detect server.":"Không thể phát hiện server.","Unable to save connection.":"Không thể lưu kết nối.","Unable to verify server.":"Không thể xác minh máy chủ.","Updates":"Cập nhật","Use your Fingerprint or Face Recognition to Verify your Identity":"Sử dụng Dấu vân tay hoặc Nhận dạng khuôn mặt để xác minh danh tính của bạn","User %{user} deleted":"Người dùng %{user} đã bị xoá","User deletion cancelled":"Xoá người dùng đã được huỷ","User Expiration":"Người dùng hết hạn","User expired %{s}":"Người dùng quá hạn %{s}","User expires %{s}":"Người dùng hết hạn %{s}","Username":"Tên tài khoản","Users":"Người dùng","Verify Connection":"Xác minh kết nối","View":"Xem","View and download server logs":"Xem và tải xuống nhật ký server","View and manage scheduled tasks":"Xem và quản lý tác vụ theo lịch trình","View and manage your active sessions":"Xem và quản lý sessions hoạt động của bạn","View API key":"Xem API key","View information about the server":"Xem thông tin về server","We have categorized all of your settings to make it easier to find them.":"Chúng tôi đã phân loại tất cả các cài đặt của bạn để giúp bạn tìm thấy chúng dễ dàng hơn.","We want to help you get started with Wizarr as quickly as possible, consider following this tour to get a quick overview.":"Chúng tôi muốn giúp bạn bắt đầu với Wizarr nhanh nhất có thể, hãy cân nhắc theo dõi chuyến tham quan này để có cái nhìn tổng quan nhanh chóng.","Webhook deleted successfully":"Xoá Webhook thành công","Webhook deletion cancelled":"Xoá Webhook đã được huỷ","Welcome to Wizarr":"Chào mừng đến với Wizarr","With Plex, you'll have access to all of the movies, TV shows, music, and photos that are stored on their server!":"Với Plex, bạn sẽ có quyền truy cập vào tất cả phim, chương trình TV, nhạc và ảnh được lưu trữ trên server của họ!","Wizarr is a software tool that provides advanced user invitation and management capabilities for media servers such as Jellyfin, Emby, and Plex. With Wizarr, server administrators can easily invite new users and manage their access":"Wizarr là một công cụ phần mềm cung cấp khả năng quản lý và mời người dùng nâng cao cho các media servers như Jellyfin, Emby và Plex. Với Wizarr, quản trị viên server có thể dễ dàng mời người dùng mới và quản lý quyền truy cập của họ","Wizarr will automatically scan your media server for new users, but you can also manually scan for new users by clicking on the 'Scan for Users' button, this is useful if Wizarr has not gotten around to doing it yet.":"Wizarr sẽ tự động quét media server của bạn để tìm người dùng mới, nhưng bạn cũng có thể quét thủ công người dùng mới bằng cách nhấp vào nút 'Quét tìm người dùng', điều này rất hữu ích nếu Wizarr chưa bắt đầu thực hiện việc đó.","You can also edit your dashboard, delete widgets, add new widgets, and move them around.":"Bạn cũng có thể chỉnh sửa trang bảng điều khiển của mình, xóa widgets, thêm widgets mới và di chuyển chúng.","You can create a new invitation by clicking on the 'Create Invitation' button.":"Bạn có thể tạo thư mời mới bằng cách nhấp vào nút 'Create Invitation'.","You have successfully completed the setup process.":"Bạn đã hoàn tất thành công quá trình thiết lập.","You're all set, click continue to get started and walkthrough how to use %{serverName}!":"Bạn đã hoàn tất, hãy nhấp vào tiếp tục để bắt đầu và hướng dẫn cách sử dụng %{serverName}!","Your browser does not support copying to clipboard":"Trình duyệt của bạn không hỗ trợ sao chép vào bộ nhớ tạm","Your Done":"Bạn đã hoàn tất","Your Invitations":"Thư mời của bạn","Your Settings":"Cài đặt của bạn","Your Users":"Người dùng của bạn"},"cs":{},"da":{},"de":{"About":"Über","Account":"Konto","Account Error":"Kontofehler","Account Settings":"Kontoeinstellungen","Add API keys for external services":"API-Schlüssel für externe Dienste hinzufügen","Add Custom HTML page to help screen":"Fügen Sie der Hilfeseite eine benutzerdefinierte HTML-Seite hinzu","Add Jellyseerr, Overseerr or Ombi support":"Jellyseerr, Overseerr oder Ombi hinzufügen","Add Passkey":"Passkey hinzufügen","Add Request Service":"Anfragedienst hinzufügen","Add Service":"Service hinzufügen","Add webhooks for external services":"Webhooks für externe Dienste hinzufügen","Admin Account":"Admin Konto","Advanced Options":"Erweiterte Optionen","Advanced Settings":"Erweiterte Einstellungen","Advanced settings for the server":"Erweiterte Einstellungen für den Server","All done!":"Alles erledigt!","All of your media server settings will appear here, we know your going to spend a lot of time here 😝":"All deine Medienserver-Einstellungen werden hier angezeigt. Wir wissen, dass du hier viel Zeit verbringen wirst! 😝","All of your media server users will appear here in a list. You can manage them, edit them, and delete them. Other information like their expiration or creation date will also be displayed here.":"All deine Medienserver-Benutzer werden hier in einer Liste angezeigt. Du kannst sie verwalten, bearbeiten und löschen. Weitere Informationen wie ihr Ablaufdatum oder das Erstellungsdatum werden ebenfalls hier angezeigt.","An error occured while creating your account, your account may of not of been created, if you face issue attempting to login, please contact an admin.":"Bei der Erstellung Ihres Kontos ist ein Fehler aufgetreten. Möglicherweise wurde Ihr Konto nicht erstellt. Wenn Sie Probleme beim Anmelden haben, kontaktieren Sie bitte einen Administrator.","API Key":"API Schlüssel","API key deleted successfully":"API Schlüssel gelöscht","API key deletion cancelled":"Löschung des API Schlüssels abgebrochen","API keys":"API-Schlüssel","Are you sure you want to delete this API key?":"Bist du sicher, dass du diesen API-Schlüssel löschen möchtest?","Are you sure you want to delete this invitation?":"Bist du sicher, dass du diese Einladung löschen möchtest?","Are you sure you want to delete this request?":"Bist du sicher, dass du diese Anfrage löschen möchtest?","Are you sure you want to delete this webhook?":"Bist du sicher, dass du diesen Webhook löschen möchtest?","Are you sure you want to reset your dashboard?":"Bist du sicher, dass du dein Dashboard zurücksetzen möchtest?","Are you sure you want to save this connection, this will reset your Wizarr instance, which may lead to data loss.":"Bist du sicher, dass du diese Verbindung speichern möchtest? Dies wird deine Wizarr-Instanz zurücksetzen, was zu Datenverlust führen kann.","Are you sure?":"Bist du sicher?","Back":"Zurück","Backup":"Sicherung","Backup File":"Sicherungsdatei","Change your password":"Passwort ändern","Check for and view updates":"Nach Updates suchen und anzeigen","Click the key to copy to clipboard!":"Klicke auf den Schlüssel, um ihn in die Zwischenablage zu kopieren!","Close":"Schliessen","Configure Discord bot settings":"Discord-Bot konfigurieren","Configure notification settings":"Benachrichtigungseinstellungen konfigurieren","Configure payment settings":"Zahlungseinstellungen konfigurieren","Configure your account settings":"Kontoeinstellungen konfigurieren","Configure your media server settings":"Medienserver-Einstellungen konfigurieren","Configure your passkeys":"Passkeys konfigurieren","Continue":"Weiter","Continue to Login":"Weiter zum Login","Copied to clipboard":"In die Zwischenablage kopiert","Copy":"Kopieren","Could not connect to the server.":"Konnte keine Verbindung zum Server herstellen.","Could not create the account.":"Konto konnte nicht erstellt werden.","Create a backup of your database and configuration. Please set an encryption password to protect your backup file.":"Erstelle eine Sicherung deiner Datenbank und Konfiguration. Bitte lege ein Verschlüsselungspasswort fest, um deine Sicherungsdatei zu schützen.","Create and restore backups":"Sicherungen erstellen und wiederherstellen","Create Another":"Weitere erstellen","Create API Key":"API-Schlüssel erstellen","Create Flow":"Flow erstellen","Create Invitation":"Einladung erstellen","Create Invite":"Einladung erstellen","Create Webhook":"Webhook erstellen","Currently Wizarr only supports it's internal SQLite database.":"Derzeit unterstützt Wizarr nur seine interne SQLite-Datenbank.","Custom HTML":"Eigenes HTML","Dashboard reset cancelled":"Dashboard-Zurücksetzung abgebrochen","Dashboard reset successfully":"Dashboard erfolgreich zurückgesetzt","Dashboard Widgets":"Dashboard Widgets","Database":"Datenbank","Deleted users will not be visible":"Gelöschte Benutzer werden nicht angezeigt","Detect Server":"Server erkennen","Detected %{server_type} server!":"Server vom Typ %{server_type} erkannt!","Discord":"Discord","Discord Bot":"Discord Bot","Do you really want to delete this user from your media server?":"Möchtest du diesen Benutzer wirklich von deinem Medienserver löschen?","Don't see your server?":"Deinen Server nicht gefunden?","Edit Dashboard":"Dashboard bearbeiten","Eh, So, What is Jellyfin exactly?":"Ähm, also, was ist Jellyfin genau?","Eh, So, What is Plex exactly?":"Ähm, also, was ist Plex genau?","Email":"Email","Enable Discord page and configure settings":"Discord-Seite aktivieren und Einstellungen konfigurieren","Encryption Password":"Verschlüsselungspasswort","End of Tour":"Ende der Tour","Expired %{s}":"Abgelaufen am %{s}","Expires %{s}":"Läuft ab am %{s}","Failed to create invitation":"Einladung konnte nicht erstellt werden","First name":"Vorname","Flow Editor":"Flow Editor","General settings for the server":"Allgemeine Einstellungen für den Server","Get Started":"Los geht's","Getting Started!":"Los geht's!","Go Home":"Zur Startseite","Go to Dashboard":"Zum Dashboard","Go to Login":"Zum Login","Great news! You now have access to our server's media collection. Let's make sure you know how to use it with Jellyfin.":"Tolle Neuigkeiten! Sie haben nun Zugang zur Mediensammlung unseres Servers. Lassen Sie uns sicherstellen, dass Sie wissen, wie Sie diese mit Jellyfin nutzen können.","Great question! Plex is a software that allows individuals to share their media collections with others. If you've received this invitation, it means someone wants to share their library with you.":"Gute Frage! Plex ist eine Software, mit der Einzelpersonen ihre Mediensammlungen mit anderen teilen können. Wenn Sie diese Einladung erhalten haben, bedeutet das, dass jemand seine Bibliothek mit Ihnen teilen möchte.","here":"hier","Home":"Start","https://example.com":"https://beispiel.de","I wanted to invite you to join my media server.":"Ich möchte dich dazu einladen, meinem Medienserver beizutreten.","If you were sent here by a friend, please request access or if you have an invite code, please click Get Started!":"Wenn dich ein Freund hierher geschickt hat, bitte um Zugang, oder wenn du einen Einladungscode hast, klicke auf 'Los geht's!","Invalid invitation code, please try again":"Ungültiger Einladungscode, bitte versuche es erneut","Invitation Code":"Einladungscode","Invitation deleted successfully":"Einladung erfolgreich gelöscht","Invitation deletion cancelled":"Löschung der Einladung abgebrochen","Invitation Details":"Einladungsdetails","Invitation expired %{s}":"Einladung abgelaufen am %{s}","Invitation expires %{s}":"Einladung läuft ab am %{s}","Invitation Settings":"Einladungseinstellungen","Invitation used":"Einladung wurde verwendet","Invitation Users":"Eingeladene Benutzer","Invitations":"Einladungen","Invite Code":"Einladungscode","Invited Users":"Eingeladene Benutzer","Jellyfin is a platform that lets you stream all your favorite movies, TV shows, and music in one place. It's like having your own personal movie theater right at your fingertips! Think of it as a digital library of your favorite content that you can access from anywhere, on any device - your phone, tablet, laptop, smart TV, you name it.":"Jellyfin ist eine Plattform, mit der Sie alle Ihre Lieblingsfilme, Fernsehsendungen und Musik an einem Ort streamen können. Es ist, als hätten Sie Ihr persönliches Kino direkt zur Hand! Betrachten Sie es als eine digitale Bibliothek Ihrer Lieblingsinhalte, auf die Sie von überall und auf jedem Gerät zugreifen können – Ihrem Telefon, Tablet, Laptop, Smart-TV, was auch immer.","Join":"Beitreten","Join & Download":"Beitreten & Herunterladen","Join & Download Plex for this device":"Beitreten und Plex für dieses Gerät herunterladen","Join my media server":"Trete meinem Medienserver bei","Join our Discord":"Treten Sie unserem Discord bei","Last name":"Nachname","Latest Info":"Neueste Informationen","Latest Information":"Neueste Informationen","Like this Widget, it shows you the latest information about Wizarr and will be updated regularly by our amazing team.":"Ähnlich wie dieses Widget zeigt es Ihnen die neuesten Informationen über Wizarr und wird regelmäßig von unserem großartigen Team aktualisiert.","Load More":"Mehr laden","Login":"Anmelden","Login to Plex":"Bei Plex anmelden","Login with Passkey":"Mit Passkey anmelden","Login with Password":"Anmelden mit Passwort","Login with your account":"Mit deinem Konto anmelden","Logs":"Logs","Made by ":"Hergestellt von ","Main Settings":"Einstellungen","Manage you Wizarr server":"Verwalten Sie Ihren Wizarr-Server","Manage your command flows":"Befehlsabläufe verwalten","Manage your invitations":"Ihre Einladungen verwalten","Manage your media server users":"Benutzer des Mediaservers verwalten","Managing %{user}":"Verwaltung von %{user}","Martian":"Marsmensch","marvin":"marvin","Marvin":"Marvin","marvin@wizarr.dev":"marvin@wizarr.dev","Media Server":"Medien Server","Members Online":"Mitglieder online","Mixing the potions":"Mixen der Zaubertränke","Modify the look and feel of the server":"Erscheinungsbild des Servers ändern","My API Key":"Mein API Schlüssel","My Webhook":"Mein Webhook","Name":"Name","Next":"Weiter","Next Page":"Nächste Seite","No API Keys found":"Keine API-Schlüssel gefunden","No contributors found":"Keine Unterstützer gefunden","No expiration":"Kein Ablaufdatum","No Invitations found":"Keine Einladungen gefunden","No Passkeys found":"Keine Passkeys gefunden","No Requests found":"Keine Anfragen gefunden","No servers could be found.":"Keine Server gefunden","No settings matched your search.":"Es wurden keine Einstellungen gefunden, die Ihrer Suche entsprechen.","No Users found":"Keine Benutzer gefunden","No Webhooks found":"Kein Webhook gefunden","Notifications":"Benachrichtigungen","Okay":"Okay","Open Jellyfin":"Öffnen Sie Jellyfin","Open Plex":"Plex öffnen","Passkey Authentication":"Passkey Authentifizierung","Password":"Passwort","Payments":"Zahlungen","Planning on watching Movies on this device? Download Jellyfin for this device or click 'Next' to for other options.":"Planen Sie, Filme auf diesem Gerät anzusehen? Laden Sie Jellyfin für dieses Gerät herunter oder klick auf weiter für mehr Auswahl","Planning on watching Movies on this device? Download Plex for this device.":"Planen Sie, Filme auf diesem Gerät anzusehen? Laden Sie Plex für dieses Gerät herunter.","Please bare in mind that these tools are only for debugging purposes and we will not provide you with support from any issues that may arise from using them.":"Bitte beachten Sie, dass diese Tools nur für Debugging-Zwecke gedacht sind und wir Ihnen keinen Support für etwaige Probleme bieten werden, die bei ihrer Verwendung auftreten könnten.","Please enter a server URL and API key.":"Bitte geben Sie eine Server-URL und API-Schlüssel ein.","Please enter a server URL.":"Bitte gib die URL vom Media Server ein.","Please enter an invite code":"Bitte geben Sie einen Einladungscode ein","Please enter your invite code":"Bitte geben Sie Ihren Einladungscode ein","Please login to your Plex account to help us connect you to our server.":"Bitte melden Sie sich in Ihrem Plex-Konto an, um Zugriff auf unseren Server zu erhalten.","Please take a copy your API key. You will not be able to see it again, please make sure to store it somewhere safe.":"Bitte kopieren Sie Ihren API-Schlüssel. Sie werden ihn nicht erneut sehen können. Stellen Sie sicher, ihn an einem sicheren Ort zu speichern.","Please wait":"Bitte warten","Please wait...":"Bitte warten...","Plex Warning":"Plex Warnung","Preparing the spells":"Die Zaubersprüche vorbereiten","Press the button below and follow your browser's steps to login":"Klicken Sie auf die Schaltfläche unten und befolgen Sie die Schritte Ihres Browsers, um sich anzumelden","Read More":"Mehr laden","Recent Contributors":"Neueste Unterstützer","Request Access":"Zugang beantragen","Requests":"Anfragen","Reset Layout":"Layout zurücksetzen","Restore":"Wiederherstellen","Restore a backup of your database and configuration from a backup file. You will need to provide the encryption password that was used to create the backup":"Stellen Sie eine Sicherung Ihrer Datenbank und Konfiguration aus einer Backup-Datei wieder her. Sie müssen das Verschlüsselungspasswort angeben, das für das Erstellen der Sicherung verwendet wurde","Restore a backup of your database and configuration from a backup file. You will need to provide the encryption password that was used to create the backup.":"Stellen Sie eine Sicherung Ihrer Datenbank und Konfiguration aus einer Backup-Datei wieder her. Sie müssen das Verschlüsselungspasswort angeben, das für das Erstellen der Sicherung verwendet wurde.","Restore Backup":"Sicherung wiederherstellen","Save":"Speichern","Save Account":"Konto speichern","Save Connection":"Verbindung speichern","Save Dashboard":"Dashboard speichern","Save URL":"URL speichern","Scan for Users":"Nach Benutzer scannen","Scan Libraries":"Bibliotheken scannen","Scan Servers":"Server scannen","Scan Users":"Benutzer scannen","Search":"Suchen","Search Settings":"Sucheinstellungen","Select Language":"Sprache auswählen","Select Libraries":"Bibliotheken auswählen","Server API Key":"Server API Schlüssel","Server connection verified!":"Verbindung fehlgeschlagen!","Server Display Name":"Anzeigename des Servers","Server Type":"Server Typ","Server URL":"Server URL","Sessions":"Sitzungen","Settings":"Einstellungen","Settings Categories":"Einstellungen Kategorien","Settings for user accounts":"Einstellungen für Benutzerkonten","Setup Wizarr":"Wizarr Einrichten","Setup your account":"Einrichten Ihres Kontos","Share":"Teilen","Share Invitation":"Einladung teilen","Share this link with your friends and family to invite them to join your media server.":"Teilen Sie diesen Link mit Ihren Freunden und Familie, um sie zur Teilnahme bei Ihrem Medienserver einzuladen.","So let's see how to get started!":"Lassen Sie uns also sehen, wie Sie beginnen können!","So you now have access to our server's media collection. Let's make sure you know how to use it with Plex.":"Sie haben nun Zugriff auf die Mediensammlung unseres Servers. Stellen wir sicher, dass Sie wissen, wie Sie diese mit Plex nutzen können.","Something went wrong while trying to join the server. Please try again later.":"Beim Versuch, dem Server beizutreten, ist etwas schief gelaufen. Bitte versuche es später noch einmal.","Something's missing.":"Etwas fehlt.","Sorry, we can't find that page. It doesn't seem to exist!":"Entschuldigung, wir können diese Seite nicht finden. Sie scheint nicht zu existieren!","Start Walkthrough":"Starte die Einführung","Still under development":"Noch in Entwicklung","Summoning the spirits":"Die Geister herbeirufen","Support Us":"Unterstütze uns","System Default":"Systemvoreinstellung","Tasks":"Aufgaben","There are a lot of settings, so you can search for them by using the search bar.":"Es gibt eine Vielzahl von Einstellungen, die Sie mit der Suchleiste finden können.","These are your widgets, you can use them to get a quick overview of your Wizarr instance.":"Dies sind deine Widgets, mit denen du dir einen schnellen Überblick über deine Wizarr-Instanz verschaffen kannst.","This is a temporary and we are working on adding support for other databases.":"Dies ist nur vorübergehend und wir arbeiten daran, Unterstützung für andere Datenbanken hinzuzufügen.","This is the end of the tour, we hope you enjoyed you found it informative! Please feel free to contact us on Discord and let us know what you think of Wizarr.":"Dies ist das Ende der Tour, wir hoffen, es hat dir gefallen und fandest es informativ! Bitte zögere nicht, uns auf Discord zu kontaktieren und uns mitzuteilen, was du von Wizarr hälst.","This is where you can manage your invitations, they will appear here in a list. Invitations are used to invite new users to your media server.":"Hier können Sie Ihre Einladungen verwalten, sie werden hier in einer Liste angezeigt. Einladungen werden verwendet, um neue Benutzer zu Ihrem Medienserver einzuladen.","This page is currently read only!":"Diese Seite ist zur Zeit nur lesbar!","To decrypt and encrypt backup files you can use the tools":"Um Backup-Dateien zu entschlüsseln und zu verschlüsseln, können Sie die Tools verwenden","Total Invitations":"Totale Einladungen","Total Tasks":"Totale Aufgaben","Total Users":"Totale Nutzer","Try Again":"Nochmal versuchen","Type in your invite code to %{server_name} server!":"Geben Sie Ihren Einladungscode für %{name}s Server ein!","Uh oh!":"Uh oh!","UI Settings":"UI Einstellungen","Unable to detect server.":"Server konnte nicht erkannt werden.","Unable to save connection.":"Verbindung konnte nicht gespeichert werden.","Unable to verify server.":"Server konnte nicht verifiziert werden.","Updates":"Updates","URL":"URL","Use your Fingerprint or Face Recognition to Verify your Identity":"Verwenden Sie Ihren Fingerabdruck oder Gesichtserkennung, um Ihre Identität zu bestätigen","User %{user} deleted":"Benutzer %{user} wurde gelöscht","User deletion cancelled":"Löschung des Benutzers abgebrochen","User Expiration":"Ablaufdatum des Benutzers","User expired %{s}":"Benutzer ist abgelaufen am %{s}","User expires %{s}":"Benutzer läuft ab am %{s}","Username":"Nutzername","Users":"Benutzer","Verify Connection":"Verbindung überprüfen","View":"Anzeigen","View and download server logs":"Serverprotokolle anzeigen und herunterladen","View and manage scheduled tasks":"Geplante Aufgaben anzeigen und verwalten","View and manage your active sessions":"Aktive Sitzungen anzeigen und verwalten","View API key":"API-Schlüssel anzeigen","View information about the server":"Informationen zum Server anzeigen","Waving our wands":"Mit unseren Zauberstäben schwingen","We have categorized all of your settings to make it easier to find them.":"Wir haben alle Ihre Einstellungen in Kategorien eingeteilt, damit Sie sie leichter finden können.","We want to help you get started with Wizarr as quickly as possible, consider following this tour to get a quick overview.":"Wir möchten Ihnen helfen, so schnell wie möglich mit Wizarr zu arbeiten. Folgen Sie dieser Tour, um einen schnellen Überblick zu erhalten.","Webhook deleted successfully":"Webhook erfolgreich gelöscht","Webhook deletion cancelled":"Löschung des Webhooks abgebrochen","Webhooks":"Webhooks","Welcome to":"Willkommen bei","Welcome to Wizarr":"Willkommen bei Wizarr","With Plex, you'll have access to all of the movies, TV shows, music, and photos that are stored on their server!":"Mit Plex haben Sie Zugriff auf alle Filme, Fernsehsendungen, Musik und Fotos, die auf dem Server gespeichert sind!","Wizarr":"Wizarr","Wizarr is a software tool that provides advanced user invitation and management capabilities for media servers such as Jellyfin, Emby, and Plex. With Wizarr, server administrators can easily invite new users and manage their access":"Wizarr ist ein Software-Tool, das erweiterte Einladungs- und Verwaltungsfunktionen für Medienserver wie Jellyfin, Emby und Plex bietet. Mit Wizarr können Server-Administratoren ganz einfach neue Benutzer einladen und deren Zugang verwalten","Wizarr is an unverified app. This means that Plex may warn you about using it. Do you wish to continue?":"Wizarr ist eine nicht verifizierte App. Das bedeutet, dass Plex Sie möglicherweise vor der Verwendung warnen kann. Möchten Sie trotzdem fortfahren?","Wizarr will automatically scan your media server for new users, but you can also manually scan for new users by clicking on the 'Scan for Users' button, this is useful if Wizarr has not gotten around to doing it yet.":"Wizarr scannt Ihren Medienserver automatisch nach neuen Benutzern, aber Sie können auch manuell nach neuen Benutzern suchen, indem Sie auf die Schaltfläche \"Benutzern scannen\" klicken; dies ist nützlich, wenn Wizarr noch nicht dazu gekommen ist, dies zu tun.","You can also edit your dashboard, delete widgets, add new widgets, and move them around.":"Sie können Ihr Dashboard auch bearbeiten, Widgets löschen, neue Widgets hinzufügen und sie verschieben.","You can create a new invitation by clicking on the 'Create Invitation' button.":"Sie können eine neue Einladung erstellen, indem Sie auf die Schaltfläche \"Einladung erstellen\" klicken.","You have successfully completed the setup process.":"Sie haben den Einrichtungsvorgang erfolgreich abgeschlossen.","You're all set, click continue to get started and walkthrough how to use %{serverName}!":"Du bist bereit! Klicke auf Weiter, um zu starten und eine Anleitung zur Verwendung von %{serverName} zu erhalten!","Your browser does not support copying to clipboard":"Ihr Browser unterstützt das Kopieren in die Zwischenablage nicht","Your Done":"Du bist fertig","Your Invitations":"Deine Einladungen","Your Settings":"Deine Einstellungen","Your Users":"Deine Benutzer"},"en":{},"es":{"About":"Acerca de","Account":"Cuenta","Account Error":"Error en la cuenta","Account Settings":"Opciones de cuenta","Add API keys for external services":"Agregar claves API para servicios externos","Add Custom HTML page to help screen":"Agregar una página HTML personalizada a la pantalla de ayuda","Add Jellyseerr, Overseerr or Ombi support":"Agregue soporte para Jellyseerr, Overseerr u Ombi","Add Passkey":"Agregar clave de acceso","Add Request Service":"Agregar servicio de solicitud","Add Service":"Agregar servicio","Add webhooks for external services":"Agregar webhooks para servicios externos","Admin Account":"Cuenta de administrador","Advanced Options":"Opciones avanzadas","Advanced Settings":"Configuraciones avanzadas","Advanced settings for the server":"Configuraciones avanzadas para el servidor","All done!":"Listo!","All of your media server settings will appear here, we know your going to spend a lot of time here 😝":"Todas las configuraciones de tu servidor multimedia aparecerán aquí, sabemos que pasarás mucho tiempo aquí 😝","All of your media server users will appear here in a list. You can manage them, edit them, and delete them. Other information like their expiration or creation date will also be displayed here.":"Todos los usuarios de su servidor de medios aparecerán aquí en una lista. Puede administrarlos, editarlos y eliminarlos. Aquí también se mostrará otra información como su fecha de vencimiento o creación.","An error occured while creating your account, your account may of not of been created, if you face issue attempting to login, please contact an admin.":"Se ha producido un error al crear su cuenta, es posible que su cuenta no se haya creado. Si tiene problemas para iniciar sesión, póngase en contacto con un administrador.","API Key":"Clave API","API key deleted successfully":"Clave API eliminada exitosamente","API key deletion cancelled":"Eliminación de clave API cancelada","API keys":"Claves API","Are you sure you want to delete this API key?":"¿Estás seguro de que desea eliminar esta clave API?","Are you sure you want to delete this invitation?":"¿Estás seguro de que desea eliminar esta invitación?","Are you sure you want to delete this request?":"¿Estás seguro de que desea eliminar esta solicitud?","Are you sure you want to delete this webhook?":"¿Estás seguro de que quieres eliminar este webhook?","Are you sure you want to reset your dashboard?":"¿Estás seguro de que quieres restablecer tu tablero?","Are you sure you want to save this connection, this will reset your Wizarr instance, which may lead to data loss.":"¿Está seguro de que desea guardar esta conexión? Esto restablecerá su instancia de Wizarr, lo que puede provocar la pérdida de datos.","Are you sure?":"¿Estás seguro?","Back":"Atrás","Backup":"Respaldo","Backup File":"Archivo de respaldo","Change your password":"Cambiar contraseña","Check for and view updates":"Checar y ver actualizaciones","Click the key to copy to clipboard!":"Da click en la llave para copiar!","Close":"Cerrar","Configure Discord bot settings":"Configurar los ajustes del bot de Discord","Configure notification settings":"Configurar ajustes de notificación","Configure payment settings":"Configurar ajustes de pago","Configure your account settings":"Configurar ajustes de la cuenta","Configure your media server settings":"Configurar ajustes de su servidor multimedia","Configure your passkeys":"Configurar claves de acceso","Continue":"Continuar","Continue to Login":"Continuar con el inicio de la sesión","Copied to clipboard":"Copiado al portapapeles","Copy":"Copiar","Could not connect to the server.":"No se puede conectar con el servidor.","Could not create the account.":"No se pudo crear la cuenta.","Create a backup of your database and configuration. Please set an encryption password to protect your backup file.":"Cree una copia de seguridad de su base de datos y configuración. Establezca una contraseña de cifrado para proteger su archivo de respaldo.","Create and restore backups":"Crear y restaurar respaldos","Create Another":"Crear otro","Create API Key":"Crear clave API","Create Flow":"Crear flujo","Create Invitation":"Crear invitación","Create Invite":"Crear invitación","Create Webhook":"Crear webhook","Currently Wizarr only supports it's internal SQLite database.":"Actualmente, Wizarr solo soporta su base de datos SQLite interna.","Custom HTML":"HTML personalizado","Dashboard reset cancelled":"Restablecimiento del panel cancelado","Dashboard reset successfully":"Restablecimiento del panel exitoso","Dashboard Widgets":"Widgets del panel","Database":"Base de datos","Deleted users will not be visible":"Los usuarios eliminados no serán visibles","Detect Server":"Detectar servidor","Detected %{server_type} server!":"Servidor %{server_type} detectado!","Discord":"Discord","Discord Bot":"Bot de Discord","Do you really want to delete this user from your media server?":"¿Estás seguro de querer eliminar este usuario de tu servidor?","Don't see your server?":"¿No ves tu servidor?","Edit Dashboard":"Editar panel","Eh, So, What is Jellyfin exactly?":"¿Qué es Jellyfin?","Eh, So, What is Plex exactly?":"¿Qué es Plex?","Email":"Email","Enable Discord page and configure settings":"Activar página de Discord y configurar ajustes","Encryption Password":"Contraseña de cifrado","End of Tour":"Fin del tour","Expired %{s}":"Expirado %{s}","Expires %{s}":"Expira %{s}","Failed to create invitation":"No se pudo crear la invitación","First name":"Nombre","Flow Editor":"Editor de flujo","General settings for the server":"Ajustes generales para el servidor","Get Started":"Comenzar","Getting Started!":"¡Comenzando!","Go Home":"Ir a Inicio","Go to Dashboard":"Ir al Panel","Go to Login":"Ir a Login","Great news! You now have access to our server's media collection. Let's make sure you know how to use it with Jellyfin.":"¡Buenas noticias! Ahora tienes acceso a nuestra colección de medios. Asegurémonos de que sabes usarlo con Jellyfin.","Great question! Plex is a software that allows individuals to share their media collections with others. If you've received this invitation, it means someone wants to share their library with you.":"¡Buena pregunta! Plex es un software que permite a las personas compartir sus colecciones de medios con otras personas. Si recibió esta invitación, significa que alguien quiere compartir su biblioteca con usted.","here":"aquí","Home":"Inicio","https://example.com":"https://ejemplo.com","I wanted to invite you to join my media server.":"Quisiera invitarte a unirte a mi servidor de medios.","If you were sent here by a friend, please request access or if you have an invite code, please click Get Started!":"Si un amigo lo envió aquí, solicite acceso o si tiene un código de invitación, haga clic en Comenzar!","Invalid invitation code, please try again":"Código de invitación no válido, inténtelo de nuevo","Invitation Code":"Código de invitación","Invitation deleted successfully":"Invitación eliminada exitosamente","Invitation deletion cancelled":"Eliminación de invitación cancelada","Invitation Details":"Detalles de la invitación","Invitation expired %{s}":"Invitación expirada %{s}","Invitation expires %{s}":"La invitación expira %{s}","Invitation Settings":"Ajustes de invitación","Invitation used":"Invitación utilizada","Invitation Users":"Usuarios de invitación","Invitations":"Invitaciones","Invite Code":"Código de invitación","Invited Users":"Usuarios invitados","Jellyfin is a platform that lets you stream all your favorite movies, TV shows, and music in one place. It's like having your own personal movie theater right at your fingertips! Think of it as a digital library of your favorite content that you can access from anywhere, on any device - your phone, tablet, laptop, smart TV, you name it.":"Jellyfin es una plataforma que te permite transmitir todas tus películas, programas de TV y música favoritos en un solo lugar. ¡Es como tener tu propia sala de cine al alcance de tu mano! Piensa en ello como una biblioteca digital de su contenido favorito a la que puedes acceder desde cualquier lugar y en cualquier dispositivo: teléfono, tableta, computadora portátil, televisor inteligente, lo que sea.","Join":"Unirse","Join & Download":"Unirse y descargar","Join & Download Plex for this device":"Unirse y descargar Plex para este dispositivo","Join my media server":"Unirse a mi servidor","Join our Discord":"Únase a nuestro Discord","Last name":"Apellido","Latest Info":"Información más reciente","Latest Information":"Información reciente","Like this Widget, it shows you the latest information about Wizarr and will be updated regularly by our amazing team.":"Al igual que este widget, le muestra la información más reciente sobre Wizarr y nuestro increíble equipo lo actualizará periódicamente.","Load More":"Cargar más","Login":"Iniciar sesión","Login to Plex":"Iniciar sesión en Plex","Login with Passkey":"Inicia sesión con Passkey","Login with Password":"Inicia sesión con contraseña","Login with your account":"Inicia sesión con tu cuenta","Logs":"Registros","Made by ":"Hecho por ","Main Settings":"Ajustes principales","Manage you Wizarr server":"Administra tu servidor Wizarr","Manage your command flows":"Administra tus flujos de comandos","Manage your invitations":"Administra tus invitaciones","Manage your media server users":"Administra tus usuarios","Managing %{user}":"Administrando %{user}","Martian":"Marciano","marvin":"usuario","Marvin":"Usuario","marvin@wizarr.dev":"usuario@wizarr.dev","Media Server":"Servidor de Medios","Members Online":"Miembros en línea","Mixing the potions":"Mezclando las pociones","Modify the look and feel of the server":"Modificar la apariencia del servidor","My API Key":"Mi clave API","My Webhook":"Mi webhook","Name":"Nombre","Next":"Siguiente","Next Page":"Siguiente página","No API Keys found":"No se encontraron claves API","No contributors found":"No se encontraron contribuidores","No expiration":"No expira","No Invitations found":"No se encontraron invitaciones","No Passkeys found":"No se encontraron Passkeys","No Requests found":"No se encontraron solicitudes","No servers could be found.":"No se encontró ningún servidor.","No settings matched your search.":"Ninguna configuración coincidió con su búsqueda.","No Users found":"No se encontraron usuarios","No Webhooks found":"No se encontraron webhooks","Notifications":"Notificaciones","Okay":"Vale","Open Jellyfin":"Abrir Jellyfin","Open Plex":"Abrir Plex","Passkey Authentication":"Autenticación de clave de acceso","Password":"Contraseña","Payments":"Pagos","Planning on watching Movies on this device? Download Jellyfin for this device or click 'Next' to for other options.":"¿Planeas ver películas en este dispositivo? Descarga Jellyfin para este dispositivo o haz clic en \"Siguiente\" para ver otras opciones.","Planning on watching Movies on this device? Download Plex for this device.":"¿Planeas ver películas en este dispositivo? Descarga Plex para este dispositivo.","Please bare in mind that these tools are only for debugging purposes and we will not provide you with support from any issues that may arise from using them.":"Tenga en cuenta que estas herramientas son solo para fines de depuración y no le brindaremos asistencia ante ningún problema que pueda surgir al usarlas.","Please enter a server URL and API key.":"Introduzca la URL del servidor y la clave API.","Please enter a server URL.":"Introduzca la URL del servidor.","Please enter an invite code":"Por favor ingresa un código de invitación","Please enter your invite code":"Por favor ingresa tu código de invitación","Please login to your Plex account to help us connect you to our server.":"Inicia sesión en tu cuenta Plex para ayudarnos a conectarlo a nuestro servidor.","Please take a copy your API key. You will not be able to see it again, please make sure to store it somewhere safe.":"Por favor, haga una copia de su clave API. No podrás volver a verla, asegúrate de guardarla en un lugar seguro.","Please wait":"Espera por favor","Please wait...":"Espera por favor...","Plex Warning":"Advertencia sobre Plex","Preparing the spells":"Preparando los hechizos","Press the button below and follow your browser's steps to login":"Presiona el botón y sigue los pasos del navegador para iniciar sesión","Read More":"Leer más","Recent Contributors":"Colaboradores recientes","Request Access":"Solicitar acceso","Requests":"Solicitudes","Reset Layout":"Restablecer diseño","Restore":"Restaurar","Restore a backup of your database and configuration from a backup file. You will need to provide the encryption password that was used to create the backup":"Restaura un respaldo de tu base de datos y configuración desde un archivo. Necesitarás proporcionar la clave de cifrado que elegiste para crear el respaldo","Restore a backup of your database and configuration from a backup file. You will need to provide the encryption password that was used to create the backup.":"Restaura un respaldo de tu base de datos y configuración desde un archivo. Necesitarás proporcionar la clave de cifrado que elegiste para crear el respaldo.","Restore Backup":"Restaurar respaldo","Save":"Guardar","Save Account":"Guardar cuenta","Save Connection":"Guardar conexión","Save Dashboard":"Guardar panel","Save URL":"Guardar URL","Scan for Users":"Escanear usuarios","Scan Libraries":"Escanear bibliotecas","Scan Servers":"Escanear servidores","Scan Users":"Escanear Usuarios","Search":"Buscar","Search Settings":"Buscar en ajustes","Select Language":"Seleccionar idioma","Select Libraries":"Seleccionar bibliotecas","Server API Key":"API del servidor","Server connection verified!":"¡Conexión al servidor verificada!","Server Display Name":"Nombre visible del servidor","Server Type":"Tipo de servidor","Server URL":"URL del servidor","Sessions":"Sesiones","Settings":"Ajustes","Settings Categories":"Categorías ajustes","Settings for user accounts":"Ajustes de cuentas de usuario","Setup Wizarr":"Configura Wizarr","Setup your account":"Configura tu cuenta","Share":"Compartir","Share Invitation":"Compartir invitación","Share this link with your friends and family to invite them to join your media server.":"Comparte este enlace con tus amigos y familiares para invitarlos a unirse a tu servidor multimedia.","So let's see how to get started!":"¡Así que veamos cómo empezar!","So you now have access to our server's media collection. Let's make sure you know how to use it with Plex.":"Ahora tienes acceso a la colección de medios de nuestro servidor. Asegurémonos de que sabes cómo usarlo con Plex.","Something went wrong while trying to join the server. Please try again later.":"Algo salió mal al intentar unirse al servidor. Por favor, inténtalo de nuevo más tarde.","Something's missing.":"Algo falta.","Sorry, we can't find that page. It doesn't seem to exist!":"Lo sentimos, no podemos encontrar esa página. ¡No parece existir!","Start Walkthrough":"Iniciar recorrido","Still under development":"Aún en desarrollo","Summoning the spirits":"Convocando a los espíritus","Support Us":"Ayúdanos","System Default":"Por defecto","Tasks":"Tareas","There are a lot of settings, so you can search for them by using the search bar.":"Hay muchas configuraciones, por lo que puedes buscarlas usando la barra de búsqueda.","These are your widgets, you can use them to get a quick overview of your Wizarr instance.":"Estos son tus widgets, puedes usarlos para obtener una descripción general rápida de tu instancia de Wizarr.","This is a temporary and we are working on adding support for other databases.":"Esto es temporal y estamos trabajando para agregar soporte para otras bases de datos.","This is the end of the tour, we hope you enjoyed you found it informative! Please feel free to contact us on Discord and let us know what you think of Wizarr.":"Este es el final del recorrido, esperamos que lo hayas disfrutado y que haya sido informativo. No dudes en contactarnos en Discord para compartir lo que piensas de Wizarr.","This is where you can manage your invitations, they will appear here in a list. Invitations are used to invite new users to your media server.":"Aquí es donde podrás administrar tus invitaciones, aparecerán aquí en una lista. Las invitaciones se utilizan para invitar a nuevos usuarios al servidor de medios.","This page is currently read only!":"¡Esta página es actualmente de solo lectura!","To decrypt and encrypt backup files you can use the tools":"Para descifrar y cifrar archivos de copia de seguridad puedes utilizar las herramientas","Total Invitations":"Invitaciones totales","Total Tasks":"Tareas totales","Total Users":"Usuarios totales","Try Again":"Intenta de nuevo","Type in your invite code to %{server_name} server!":"Ingresa tu código para el servidor %{server_name}!","Uh oh!":"Oh no!","UI Settings":"Ajustes UI","Unable to detect server.":"No se pudo detectar el servidor.","Unable to save connection.":"No se pudo guardar la conexión.","Unable to verify server.":"No se pudo verificar el servidor.","Updates":"Actualizaciones","URL":"URL","Use your Fingerprint or Face Recognition to Verify your Identity":"Usa tu huella digital o reconocimiento facial para verificar tu identidad","User %{user} deleted":"Usuario %{user} eliminado","User deletion cancelled":"Eliminación de usuario cancelada","User Expiration":"Expiración de usuario","User expired %{s}":"Usuario expiró %{s}","User expires %{s}":"Usuario expira %{s}","Username":"Nombre de usuario","Users":"Usuarios","Verify Connection":"Verificar conexión","View":"Ver","View and download server logs":"Ver y descargar registros del servidor","View and manage scheduled tasks":"Very y administrar tareas asignadas","View and manage your active sessions":"Ver y administrar tus sesiones activas","View API key":"Ver clave API","View information about the server":"Ver información del servidor","Waving our wands":"Agitando nuestras varitas","We have categorized all of your settings to make it easier to find them.":"Hemos categorizado todas tus configuraciones para que sea más fácil encontrarlas.","We want to help you get started with Wizarr as quickly as possible, consider following this tour to get a quick overview.":"Queremos ayudarte a comenzar con Wizarr lo más rápido posible. Sigue este recorrido para obtener una descripción general rápida.","Webhook deleted successfully":"Webhook eliminado correctamente","Webhook deletion cancelled":"Eliminación de webhook cancelada","Webhooks":"Webhooks","Welcome to":"Bienvenido a","Welcome to Wizarr":"Bienvenido a Wizarr","With Plex, you'll have access to all of the movies, TV shows, music, and photos that are stored on their server!":"Con Plex, tendrás acceso a todas las películas, programas de televisión, música y fotos almacenadas en su servidor!","Wizarr":"Wizarr","Wizarr is a software tool that provides advanced user invitation and management capabilities for media servers such as Jellyfin, Emby, and Plex. With Wizarr, server administrators can easily invite new users and manage their access":"Wizarr es una herramienta de software que proporciona capacidades avanzadas de administración e invitación de usuarios para servidores de medios como Jellyfin, Emby y Plex. Con Wizarr, los administradores de servidores pueden invitar fácilmente a nuevos usuarios y manejar su acceso","Wizarr is an unverified app. This means that Plex may warn you about using it. Do you wish to continue?":"Wizarr es una aplicación no verificada. Esto significa que Plex puede advertirte sobre su uso. ¿Deseas continuar?","Wizarr will automatically scan your media server for new users, but you can also manually scan for new users by clicking on the 'Scan for Users' button, this is useful if Wizarr has not gotten around to doing it yet.":"Wizarr escaneará automáticamente tu servidor de medios en busca de nuevos usuarios, pero también puede escanear manualmente en busca de nuevos usuarios haciendo clic en el botón 'Buscar usuarios'. Esto es útil si Wizarr aún no ha podido hacerlo.","You can also edit your dashboard, delete widgets, add new widgets, and move them around.":"También puedes editar tu panel, eliminar widgets, agregar nuevos widgets y moverlos.","You can create a new invitation by clicking on the 'Create Invitation' button.":"Puedes crear una nueva invitación haciendo clic en el botón 'Crear invitación'.","You have successfully completed the setup process.":"Ha completado exitosamente el proceso de configuración.","You're all set, click continue to get started and walkthrough how to use %{serverName}!":"Ya está todo listo, haz clic en continuar para comenzar y ver cómo usar %{serverName}!","Your browser does not support copying to clipboard":"Tu navegador no soporta copiar al portapapeles","Your Done":"Haz terminado","Your Invitations":"Tus invitaciones","Your Settings":"Tus ajustes","Your Users":"Tus usuarios"},"fa":{},"fr":{"About":"À propos","Account":"Compte","Account Error":"Erreur avec le compte","Account Settings":"Paramètres du compte","Add API keys for external services":"Ajouter des clés API pour des services externes","Add Custom HTML page to help screen":"Ajouter une page de code HTML personnalisé à l'écran d'aide","Add Jellyseerr, Overseerr or Ombi support":"Ajouter le support de Jellyseerr, Overseerr ou Ombi","Add Passkey":"Ajouter une phrase de passe","Add Request Service":"Ajouter un service de requête","Add Service":"Ajouter un service","Add webhooks for external services":"Ajouter des webhooks pour des services externes","Admin Account":"Compte administrateur","Advanced Options":"Options avancées","Advanced Settings":"Paramètres avancés","Advanced settings for the server":"Paramètres du serveur avancés","All done!":"Tout est bon !","All of your media server settings will appear here, we know your going to spend a lot of time here 😝":"Tous les paramètres de votre serveur multimédia apparaitront ici, nous savons que vous allez y passez un petit moment 😝","All of your media server users will appear here in a list. You can manage them, edit them, and delete them. Other information like their expiration or creation date will also be displayed here.":"Tous vos utilisateurs de votre serveur multimédia apparaitront ici. Vous pouvez les gérer, les éditer et les supprimer. D'autres informations comme leur expiration ou leur date de création y seront également affichées.","An error occured while creating your account, your account may of not of been created, if you face issue attempting to login, please contact an admin.":"Une erreur est survenue pendant la création de votre compte, celui-ci peut ne pas avoir été créé, si vous rencontrez des problèmes pour vous connecter, veuillez contacter un administrateur.","API Key":"Clé API","API key deleted successfully":"Clé API supprimée avec succès","API key deletion cancelled":"Suppression de la clé API annulée","API keys":"Clés API","Are you sure you want to delete this API key?":"Confirmez-vous la suppression de cette clé API ?","Are you sure you want to delete this invitation?":"Confirmez-vous la suppression de cette invitation ?","Are you sure you want to delete this request?":"Confirmez-vous la suppression de cette demande ?","Are you sure you want to delete this webhook?":"Confirmez-vous la suppression de ce webhook ?","Are you sure you want to reset your dashboard?":"Confirmez-vous la réinitialisation de votre tableau de bord ?","Are you sure you want to save this connection, this will reset your Wizarr instance, which may lead to data loss.":"Confirmez-vous ces paramètres de connexion ? L'instance de Wizarr sera réinitialisée, ce qui peut entraîner une perte de données.","Are you sure?":"Êtes-vous sûr(e) ?","Back":"Retour","Backup":"Sauvegarder","Backup File":"Fichier de sauvegarde","Change your password":"Changer de mot de passe","Check for and view updates":"Vérifier la présence de mise à jour","Click the key to copy to clipboard!":"Cliquez sur la clé pour la copier dans le presse-papiers !","Close":"Fermer","Configure Discord bot settings":"Configurer le bot Discord","Configure notification settings":"Configurer les paramètres de notifications","Configure payment settings":"Configurer les paramètres de paiement","Configure your account settings":"Configurer les paramètres de votre compte","Configure your media server settings":"Configurer votre serveur multimédia","Configure your passkeys":"Configurer vos phrases de passe","Continue":"Continuer","Continue to Login":"Continuer vers la connexion","Copied to clipboard":"Copié dans le presse-papiers","Copy":"Copier","Could not connect to the server.":"Connexion au serveur échouée.","Could not create the account.":"Création du compte échouée.","Create a backup of your database and configuration. Please set an encryption password to protect your backup file.":"Créer une sauvegarde de votre base de données et de votre configuration. Veuillez choisir un mot de passe pour protéger votre fichier de sauvegarde.","Create and restore backups":"Créer et restaurer des sauvegardes","Create Another":"Créer à nouveau","Create API Key":"Créer une clé API","Create Flow":"Créer un flux","Create Invitation":"Créer une invitation","Create Invite":"Créer une invitation","Create Webhook":"Créer un webhook","Currently Wizarr only supports it's internal SQLite database.":"Pour l'instant, Wizarr ne supporte que sa base de données SQLite intere.","Custom HTML":"Code HTML personnalisé","Dashboard reset cancelled":"Réinitialisation du tableau de bord annulée","Dashboard reset successfully":"Tableau de bord réinitialisé avec succès","Dashboard Widgets":"Widgets du tableau de bord","Database":"Base de données","Deleted users will not be visible":"Les utilisateurs supprimés ne seront pas visibles","Detect Server":"Détecter le serveur","Detected %{server_type} server!":"Serveur %{server_type} détecté !","Discord":"Discord","Discord Bot":"Bot Discord","Do you really want to delete this user from your media server?":"Confirmez-vous la suppression de cet utilisateur de votre serveur multimédia ?","Don't see your server?":"Vous ne voyez pas votre serveur ?","Edit Dashboard":"Éditer le tableau de bord","Eh, So, What is Jellyfin exactly?":"Qu'est-ce que Jellyfin exactement ?","Eh, So, What is Plex exactly?":"Qu'est-ce que Plex exactement ?","Email":"Courriel","Enable Discord page and configure settings":"Activer la page Discord et configurer les paramètres","Encryption Password":"Mot de passe de chiffrement","End of Tour":"Fin de la visite guidée","Expired %{s}":"Expiré %{s}","Expires %{s}":"Expire %{s}","Failed to create invitation":"Création de l'invitation échouée","First name":"Prénom","Flow Editor":"Editeur de flux","General settings for the server":"Paramètres généraux du serveur","Get Started":"Commencer","Getting Started!":"Commençons !","Go Home":"Se rendre à l'accueil","Go to Dashboard":"Se rendre au tableau de bord","Go to Login":"Se rendre à la page de connexion","Great news! You now have access to our server's media collection. Let's make sure you know how to use it with Jellyfin.":"Bonne nouvelle ! Vous avez à présent accès à notre serveur multimédia. Assurons-nous que vous sachez l'utiliser avec Jellyfin.","Great question! Plex is a software that allows individuals to share their media collections with others. If you've received this invitation, it means someone wants to share their library with you.":"Bonne question ! Plex est un programme qui permet aux individus de partager leurs médias avec d'autres. Si vous avez reçu cette invitation, cela veut dire que quelqu'un veut partager ses médias avec vous.","here":"ici","Home":"Accueil","https://example.com":"https://exemple.com","I wanted to invite you to join my media server.":"Je voulais vous inviter à rejoindre mon serveur multimédia.","If you were sent here by a friend, please request access or if you have an invite code, please click Get Started!":"Si vous avez été amené ici par un ami, veuillez demander un accès ou si vous avec un code d'invitation, cliquez sur Commencer !","Invalid invitation code, please try again":"Code d'invitation invalide, veuillez réessayer","Invitation Code":"Code d'invitation","Invitation deleted successfully":"Invitation supprimée avec succès","Invitation deletion cancelled":"Suppression de l'invitation annulée","Invitation Details":"Détails de l'invitation","Invitation expired %{s}":"Invitation expirée %{s}","Invitation expires %{s}":"L'invitation expire %{s}","Invitation Settings":"Paramètres de l'invitation","Invitation used":"Invitation utilisée","Invitation Users":"Utilisateurs de l'invitation","Invitations":"Invitations","Invite Code":"Code d'invitation","Invited Users":"Utilisateurs du code","Jellyfin is a platform that lets you stream all your favorite movies, TV shows, and music in one place. It's like having your own personal movie theater right at your fingertips! Think of it as a digital library of your favorite content that you can access from anywhere, on any device - your phone, tablet, laptop, smart TV, you name it.":"Jellyfin est une plateforme qui vous permet de diffuser tous vos médias favoris à un seul endroit. C'est comme avoir votre cinéma personnel à portée de main ! Voyez le comme une médiathèque avec vos contenus préférés accessible n'importe où, sur n'importe quel appareil, smartphone, tablette, ordinateur ou smart TV.","Join":"Rejoindre","Join & Download":"Rejoindre et télécharger","Join & Download Plex for this device":"Rejoindre et télécharger Plex pour cet appareil","Join my media server":"Rejoindre mon serveur multimédia","Join our Discord":"Rejoignez notre Discord","Last name":"Nom de famille","Latest Info":"Dernières informations","Latest Information":"Dernières informations","Like this Widget, it shows you the latest information about Wizarr and will be updated regularly by our amazing team.":"Comme ce widget, cela montre les dernières informations à propos de Wizarr et sera mis à jour régulièrement par notre fabuleuse équipe.","Load More":"Charger plus","Login":"Se connecter","Login to Plex":"Se connecter à Plex","Login with Passkey":"Se connecter avec une phrase de passe","Login with Password":"Se connecter avec un mot de passe","Login with your account":"Se connecter avec son compte","Logs":"Journaux","Made by ":"Créé par ","Main Settings":"Paramètres généraux","Manage you Wizarr server":"Gérer votre serveur Wizarr","Manage your command flows":"Gérer vos flux de commandes","Manage your invitations":"Gérer vos invitations","Manage your media server users":"Gérer vos utilisateurs du serveur multimédia","Managing %{user}":"Gestion de %{user}","Martian":"Martin","marvin":"jean","Marvin":"Jean","marvin@wizarr.dev":"jean@exemple.com","Media Server":"Serveur multimédia","Members Online":"Membres connectés","Mixing the potions":"Mélange des potions","Modify the look and feel of the server":"Modifier l'apparence du serveur","My API Key":"Ma clé API","My Webhook":"Mon webhook","Name":"Nom","Next":"Suivant","Next Page":"Page suivante","No API Keys found":"Aucune clé API trouvée","No contributors found":"Aucun contributeur trouvé","No expiration":"Aucune expiration","No Invitations found":"Aucune invitation trouvée","No Passkeys found":"Aucune phrase de passe trouvée","No Requests found":"Aucune demande trouvée","No servers could be found.":"Aucun serveur n'a pu être trouvé.","No settings matched your search.":"Aucun paramètre correspondant à votre recherche.","No Users found":"Aucun utilisateur trouvé","No Webhooks found":"Aucun webhook trouvé","Notifications":"Notifications","Okay":"D'accord","Open Jellyfin":"Ouvrir Jellyfin","Open Plex":"Ouvrir Plex","Passkey Authentication":"Authentification par phrase de passe","Password":"Mot de passe","Payments":"Paiements","Planning on watching Movies on this device? Download Jellyfin for this device or click 'Next' to for other options.":"Vous comptez visionner des médias sur cet appareil ? Téléchargez Jellyfin pour celui-ci ou cliquez sur \"Suivant\" pour d'autres options.","Planning on watching Movies on this device? Download Plex for this device.":"Vous comptez visionner des médias sur cet appareil ? Téléchargez Plex pour celui-ci.","Please bare in mind that these tools are only for debugging purposes and we will not provide you with support from any issues that may arise from using them.":"Veuillez garder en tête que ces outils ont uniquement pour but de déboguer et que nous ne fournirons aucun support pour tout problème résultant de leur utilisation.","Please enter a server URL and API key.":"Veuillez renseigner une URL de serveur et une clé API.","Please enter a server URL.":"Veuillez renseigner une URL de serveur.","Please enter an invite code":"Veuillez renseigner un code d'invitation","Please enter your invite code":"Veuillez renseigner votre code d'invitation","Please login to your Plex account to help us connect you to our server.":"Veuillez vous connecter à votre compte Plex pour nous aider à vous connecter à votre serveur.","Please take a copy your API key. You will not be able to see it again, please make sure to store it somewhere safe.":"Veuillez conserver une copie de votre clé API. Vous ne pourrez plus la consulter, assurez-vous de la conserver en lieu sûr.","Please wait":"Veuillez patienter","Please wait...":"Veuillez patienter...","Plex Warning":"Avertissement de Plex","Preparing the spells":"Préparation des sorts","Press the button below and follow your browser's steps to login":"Appuyez sur le bouton ci-dessous et suivre les étapes dans le navigateur pour vous connecter","Read More":"En savoir plus","Recent Contributors":"Derniers contributeurs","Request Access":"Demander un accès","Requests":"Demandes","Reset Layout":"Réinitialiser la mise en page","Restore":"Restaurer","Restore a backup of your database and configuration from a backup file. You will need to provide the encryption password that was used to create the backup":"Restaurer une sauvegarde de votre base de données et de votre configuration depuis un fichier de sauvegarde. Vous devrez fournir le mot de passe de chiffrement utilisé pendant la création du fichier","Restore a backup of your database and configuration from a backup file. You will need to provide the encryption password that was used to create the backup.":"Restaurer une sauvegarde de votre base de données et de votre configuration depuis un fichier de sauvegarde. Vous devrez fournir le mot de passe de chiffrement utilisé pendant la création du fichier.","Restore Backup":"Restaurer une sauvegarde","Save":"Enregistrer","Save Account":"Enregistrer le compte","Save Connection":"Enregistrer la connexion","Save Dashboard":"Enregistrer le tableau de bord","Save URL":"Enregistrer l'URL","Scan for Users":"Rechercher des utilisateurs","Scan Libraries":"Rechercher des bibliothèque","Scan Servers":"Rechercher un serveur","Scan Users":"Rechercher des utilisateurs","Search":"Rechercher","Search Settings":"Paramètres de recherche","Select Language":"Sélectionner une langue","Select Libraries":"Sélectionner des bibliothèques","Server API Key":"Clé API du serveur","Server connection verified!":"Connexion au serveur vérifiée !","Server Display Name":"Nom d'affichage du serveur","Server Type":"Type de serveur","Server URL":"URL du serveur","Sessions":"Sessions","Settings":"Paramètres","Settings Categories":"Catégories de paramètres","Settings for user accounts":"Paramètres des comptes utilisateurs","Setup Wizarr":"Configurer Wizarr","Setup your account":"Configurer votre compte","Share":"Partager","Share Invitation":"Partager l'invitation","Share this link with your friends and family to invite them to join your media server.":"Partagez ce lien avec vos amis et votre famille pour les inviter à rejoindre votre serveur multimédia.","So let's see how to get started!":"Voyons comment débuter !","So you now have access to our server's media collection. Let's make sure you know how to use it with Plex.":"Vous avez à présent accès à notre serveur multimédia. Assurons-nous que vous sachez l'utiliser avec Plex.","Something went wrong while trying to join the server. Please try again later.":"Quelque chose ne s'est pas bien passé en essayant de rejoindre le serveur. Veuillez réessayer plus tard.","Something's missing.":"Il manque quelque chose.","Sorry, we can't find that page. It doesn't seem to exist!":"Désolé, nous ne trouvons pas cette page. Elle semble de pas exister !","Start Walkthrough":"Commencer la visite guidée","Still under development":"En cours de développement","Summoning the spirits":"Invocation des esprits","Support Us":"Nous supporter","System Default":"Système par défaut","Tasks":"Tâches","There are a lot of settings, so you can search for them by using the search bar.":"Il existe de nombreux paramètres, vous pouvez les rechercher en utilisant la barre de recherche.","These are your widgets, you can use them to get a quick overview of your Wizarr instance.":"Ce sont vos widgets, vous pouvez les utiliser pour avoir un aperçu rapide de votre instance Wizarr.","This is a temporary and we are working on adding support for other databases.":"Ceci est temporaire et nous travaillons à prendre en charge d'autres bases de données.","This is the end of the tour, we hope you enjoyed you found it informative! Please feel free to contact us on Discord and let us know what you think of Wizarr.":"C'est la fin de la visite guidée, nous espérons que vous l'avez appréciée et trouvée complète ! N'hésitez pas à nous contacter sur Discord et à nous dire ce que vous pensez de Wizarr.","This is where you can manage your invitations, they will appear here in a list. Invitations are used to invite new users to your media server.":"C'est ci que vous pouvez gérer vos invitations, elles apparaitront dans une liste. Les invitations sont utilisées pour inviter de nouveaux utilisateurs sur votre serveur multimédia.","This page is currently read only!":"Cette page est en lecture seule pour le moment !","To decrypt and encrypt backup files you can use the tools":"Pour chiffrer et déchiffrer les fichiers de sauvegarder vous pouvez utiliser les outils","Total Invitations":"Total des invitations","Total Tasks":"Total des tâches","Total Users":"Total d'utilisateurs","Try Again":"Veuillez réessayer","Type in your invite code to %{server_name} server!":"Veuillez renseigner votre code d'invitation au serveur %{server_name} !","Uh oh!":"Oh oh !","UI Settings":"Paramètres de l'interface","Unable to detect server.":"Détection du serveur impossible.","Unable to save connection.":"Enregistrement de la connexion impossible.","Unable to verify server.":"Vérification du serveur impossible.","Updates":"Mises à jour","URL":"URL","Use your Fingerprint or Face Recognition to Verify your Identity":"Utiliser votre empreinte digitale ou la reconnaissance faciale pour vérifier votre identité","User %{user} deleted":"Utilisateur %{user} supprimé","User deletion cancelled":"Suppression de l'utilisateur annulée","User Expiration":"Expiration de l'utilisateur","User expired %{s}":"Utilisateur expiré %{s}","User expires %{s}":"L'utilisateur expire %{s}","Username":"Nom d'utilisateur","Users":"Utilisateurs","Verify Connection":"Vérifier la connexion","View":"Afficher","View and download server logs":"Afficher et télécharger les journaux du serveur","View and manage scheduled tasks":"Afficher et gérer les tâches programmées","View and manage your active sessions":"Afficher et gérer les sessions actives","View API key":"Afficher la clé API","View information about the server":"Afficher les informations à propos du serveur","Waving our wands":"Agitation des baguettes magiques","We have categorized all of your settings to make it easier to find them.":"Nous avons catégorisé tous vos paramètres pour les rendre plus faciles à trouver.","We want to help you get started with Wizarr as quickly as possible, consider following this tour to get a quick overview.":"Nous souhaitons vous aider à utiliser Wizarr aussi vite que possible, considérez suivre cette visite guidée pour un aperçu rapide.","Webhook deleted successfully":"Webhook supprimé avec succès","Webhook deletion cancelled":"Suppression du webhook annulée","Webhooks":"Webhooks","Welcome to":"Bienvenue dans","Welcome to Wizarr":"Bienvenue dans Wizarr","With Plex, you'll have access to all of the movies, TV shows, music, and photos that are stored on their server!":"Avec Plex, vous aurez accès à tous les films, toutes les séries, musiques et images qui sont stockées sur leur serveur !","Wizarr":"Wizarr","Wizarr is a software tool that provides advanced user invitation and management capabilities for media servers such as Jellyfin, Emby, and Plex. With Wizarr, server administrators can easily invite new users and manage their access":"Wizarr est un programme qui fournit des capacités d'invitation et de gestion d'utilisateurs avancées pour des serveurs multimédias comme Jellyfin, Emby et Plex. Avec Wizarr, les administrateurs de serveurs peuvent facilement inviter de nouveaux utilisateurs et gérer leurs accès","Wizarr is an unverified app. This means that Plex may warn you about using it. Do you wish to continue?":"Wizarr est une application non vérifiée. Cela signifie que Plex peut vous alerter sur son utilisation. Voulez-vous continuer ?","Wizarr will automatically scan your media server for new users, but you can also manually scan for new users by clicking on the 'Scan for Users' button, this is useful if Wizarr has not gotten around to doing it yet.":"Wizarr recherchera automatiquement de nouveaux utilisateurs sur votre serveur, mais vous pouvez également le faire manuellement en cliquant sur le bouton \"Rechercher des utilisateurs\", c'est pratique si Wizarr n'a pas encore pu le faire.","You can also edit your dashboard, delete widgets, add new widgets, and move them around.":"Vous pouvez aussi éditer votre tableau de bord, supprimer des widgets, en ajouter et les organiser.","You can create a new invitation by clicking on the 'Create Invitation' button.":"Vous pouvez créer une nouvelle invitation en cliquant sur le bouton \"Créer une invitation\".","You have successfully completed the setup process.":"Vous avez compléter le processus de configuration avec succès.","You're all set, click continue to get started and walkthrough how to use %{serverName}!":"C'est terminé, cliquez sur continuer pour commencer et apprendre à utiliser %{serverName} !","Your browser does not support copying to clipboard":"Votre navigateur ne prend pas en charge la copie dans le presse-papiers","Your Done":"Vous avez terminé","Your Invitations":"Vos invitations","Your Settings":"Vos paramètres","Your Users":"Vos utilisateurs"},"he":{},"hr":{},"hu":{},"is":{},"it":{},"lt":{},"nl":{},"no":{},"pl":{},"pt":{"About":"Sobre","Account":"Conta","Account Settings":"Configurações da Conta","Add API keys for external services":"Adicionar chaves de API para serviços externos","Add Custom HTML page to help screen":"Adicionar HTML personalizado para página de ajuda","Add Jellyseerr, Overseerr or Ombi support":"Adicionar suporte ao Jellyseerr, Overseerr ou Ombi","Add Passkey":"Adicionar chave de acesso","Add Request Service":"Adicionar Solicitação de Serviço","Add Service":"Adicionar Serviço","Add webhooks for external services":"Adicionar webhooks para serviços externos","Admin Account":"Conta de Administrador","Advanced Options":"Opções Avançadas","Advanced Settings":"Configurações Avançadas","Advanced settings for the server":"Configurações avançadas do servidor","All done!":"Tudo pronto!","All of your media server settings will appear here, we know your going to spend a lot of time here 😝":"Todas as configurações do seu servidor de mídia irão aparece aqui, sabemos que irá passar muito tempo aqui 😝","All of your media server users will appear here in a list. You can manage them, edit them, and delete them. Other information like their expiration or creation date will also be displayed here.":"Todos os usuários do seu servidor de mídia irão aparecer aqui em uma lista. Você pode gerir, editar e apagá-los. Informações como a data de criação e expiração também estarão aqui.","API Key":"Chave API","API key deleted successfully":"Chave API apagada com sucesso","API key deletion cancelled":"Exclusão da chave API cancelada","API keys":"Chaves API","Are you sure you want to delete this API key?":"Tem a certeza que deseja apagar esta chave API?","Are you sure you want to delete this invitation?":"Tem certeza que deseja apagar este convite?","Are you sure you want to delete this request?":"Tem certeza que deseja excluir essa solicitação?","Are you sure you want to delete this webhook?":"Tem certeza que deseja deletar esse webhook?","Are you sure you want to reset your dashboard?":"Tem certeza que deseja reiniciar seu dashboard?","Are you sure you want to save this connection, this will reset your Wizarr instance, which may lead to data loss.":"Tem a certeza que deseja guardar esta conexão, isso irá redefinir a instância do Wizarr, o que poderá causar perda de dados.","Are you sure?":"Tem a certeza?","Back":"Voltar","Backup":"Cópia de segurança","Backup File":"Arquivo de cópia de segurança","Change your password":"Mudar a sua password","Check for and view updates":"Verificar e mostrar atualizações","Click the key to copy to clipboard!":"Clique na chave para copiar!","Close":"Fechar","Configure Discord bot settings":"Configurar as opções do bot do Discord","Configure notification settings":"Configurar as opções de notificação","Configure payment settings":"Configurar as opções de pagamento","Configure your account settings":"Configurar as opções da sua conta","Configure your media server settings":"Configurar as opções do seu servidor de mídia","Configure your passkeys":"Configurar suas chaves de acesso","Continue":"Continuar","Copied to clipboard":"Copiada","Copy":"Copiar","Could not connect to the server.":"Não foi possível conectar ao servidor.","Could not create the account.":"Não foi possível criar a conta.","Create a backup of your database and configuration. Please set an encryption password to protect your backup file.":"Criar um backup da base de dados e configuração. Por favor defina uma senha para encriptar e proteger seu arquivo de backup.","Create and restore backups":"Criar e restaurar backups","Create Another":"Criar Outro","Create API Key":"Criar Chave de API","Create Flow":"Criar fluxo","Create Invitation":"Criar convite","Create Invite":"Criar convite","Create Webhook":"Criar Webhook","Currently Wizarr only supports it's internal SQLite database.":"Atualmente, o Wizarr apenas suporta a sua base de dados interna SQLite.","Custom HTML":"HTML personalizado","Database":"Base de dados","Deleted users will not be visible":"Utilizadores apagados não serão visíveis","Detect Server":"Detectar servidor","Detected %{server_type} server!":"Detectado servidor %{server_type}!","Discord":"Discord","Discord Bot":"Bot do Discord","Do you really want to delete this user from your media server?":"Realment deseja apagar este utilizador do seu servidor de mídia?","Don't see your server?":"Não consegue encontrar o seu servidor?","Eh, So, What is Jellyfin exactly?":"O que é exatamente o Jellyfin?","Eh, So, What is Plex exactly?":"O que é exatamente o Plex?","Email":"Email","Enable Discord page and configure settings":"Ativar a página do Discord e definir as configurações","Encryption Password":"Password de encriptação","End of Tour":"Fim da Tour","Expired %{s}":"Expirou %","Expires %{s}":"Expira %","Failed to create invitation":"Falha ao criar o convite","First name":"Primeiro nome","General settings for the server":"Configurações gerais do servidor","Get Started":"Começar","Getting Started!":"A começar!","Go Home":"Voltar ao início","Go to Login":"Ir para o Login","Great news! You now have access to our server's media collection. Let's make sure you know how to use it with Jellyfin.":"Boas notícias! Tem agora acesso à coleção de mídia do servidor. Vamos ter a certeza que sabe usá-lo com o Jellyfin.","Share":"Partilhar","Share Invitation":"Partilhar convite","Share this link with your friends and family to invite them to join your media server.":"Compartilhe este link com os seus amigos e familiares para convidá-los a partici+ar no seu servidor de mídia.","So let's see how to get started!":"Vamos ver como começar!","Something went wrong while trying to join the server. Please try again later.":"Houve um erro ao tentar juntar-se ao servidor. Por favor, tente novamente mais tarde.","Something's missing.":"Alguma coisa está em falta.","Sorry, we can't find that page. It doesn't seem to exist!":"Desculpe, não podemos encontrar essa página. Parece que não existe!","Still under development":"Ainda em desenvolvimento","Summoning the spirits":"Invocando os espíritos","System Default":"Padrão do sistema","Tasks":"Tarefas"},"ro":{},"ru":{},"sv":{},"zh_cn":{},"zh_tw":{"About":"關於","Account":"帳號","Account Settings":"帳號設定","Add Custom HTML page to help screen":"新增自定義 HTML 頁面至幫助畫面","Add Jellyseerr, Overseerr or Ombi support":"新增 Jellyseerr, Overseerr 或 Ombi 支援","Add Passkey":"新增 Passkey","Add Request Service":"新增 請求 服務","Add Service":"新增 服務","Add webhooks for external services":"新增外部服務的 Webhooks","Admin Account":"管理員帳號","Advanced Options":"進階選項","Advanced Settings":"進階設定","Advanced settings for the server":"進階伺服器設定","All of your media server users will appear here in a list. You can manage them, edit them, and delete them. Other information like their expiration or creation date will also be displayed here.":"您所有的媒體伺服器用戶都將顯示在此處。您可以管理、編輯和刪除它們。其他資訊(例如到期日期或建立日期)也將顯示於此。","API Key":"API 鑰匙","API key deleted successfully":"API 鑰匙 成功刪除","API key deletion cancelled":"API 鑰匙 刪除 已經取消","API keys":"API 鑰匙","Are you sure you want to delete this API key?":"您確定要刪除這個 API 鑰匙嗎?","Are you sure you want to delete this invitation?":"您確定要刪除這個邀請碼嗎?","Are you sure you want to delete this request?":"您確定要刪除這個請求嗎?","Are you sure you want to delete this webhook?":"您確定要刪除這個 Webhook 嗎?","Are you sure you want to reset your dashboard?":"您確定要重置你的儀表板嗎?","Are you sure you want to save this connection, this will reset your Wizarr instance, which may lead to data loss.":"您確定要保存此連線嗎?這將重置您的 Wizarr,可能會導致失去相關數據。","Are you sure?":"你確定嗎?","Back":"返回","Backup":"備份","Backup File":"備份檔案","Change your password":"更改您的密碼","Check for and view updates":"檢查及查看更新","Close":"關閉","Configure Discord bot settings":"設定 Discord 機械人選項","Configure notification settings":"設定通知選項","Configure payment settings":"設定付款選項","Configure your account settings":"設定帳號選項","Configure your media server settings":"設定媒體伺服器選項","Configure your passkeys":"設定 Passkeys","Continue":"下一步","Copied to clipboard":"已複製到剪貼簿","Copy":"複製","Could not connect to the server.":"無法連接到伺服器。","Could not create the account.":"無法創立帳號。","Create a backup of your database and configuration. Please set an encryption password to protect your backup file.":"建立您的數據庫和配置的備份。請設置加密密碼以保護您的備份檔案。","Create and restore backups":"建立和恢復備份","Create API Key":"建立 API 鑰匙","Create Flow":"建立流程","Create Webhook":"建立 Webhook","Currently Wizarr only supports it's internal SQLite database.":"目前 Wizarr 只支持其內置的SQLite數據庫。","Custom HTML":"自定義 HTML","Dashboard reset cancelled":"儀表板重置已取消","Dashboard reset successfully":"儀表板重置成功","Dashboard Widgets":"儀表板小工具","Database":"數據庫","Deleted users will not be visible":"已刪除的用戶將不會顯示","Detect Server":"檢測伺服器","Detected %{server_type} server!":"檢測到 %{server_type} 伺服器!","Discord":"Discord","Discord Bot":"Discord 機械人","Do you really want to delete this user from your media server?":"你確定要從你的媒體伺服器中刪除這個用戶嗎?","Don't see your server?":"看不到你的伺服器嗎?","Edit Dashboard":"編輯儀表板","Eh, So, What is Jellyfin exactly?":"哎,所以 Jellyfin 是什麼?","Eh, So, What is Plex exactly?":"哎,所以 Plex 是什麼?","Email":"電郵","Enable Discord page and configure settings":"啟用 Discord 頁面並配置設置","Encryption Password":"加密密碼","End of Tour":"導覽結束","Expired %{s}":"已過期 %{s}","Expires %{s}":"到期日 %{s}","Failed to create invitation":"建立邀請碼失敗","First name":"名字","Flow Editor":"流程編輯器","Go Home":"回到首頁","Go to Dashboard":"回到儀表板","Go to Login":"回到登入頁面","Great news! You now have access to our server's media collection. Let's make sure you know how to use it with Jellyfin.":"好消息!您現在可以訪問我們伺服器的媒體收藏。讓我們確保您知道如何使用 Jellyfin 來訪問它。","Great question! Plex is a software that allows individuals to share their media collections with others. If you've received this invitation, it means someone wants to share their library with you.":"好問題!Plex是一款允許個人與他人分享媒體收藏的軟件。如果您收到了這個邀請,那就表示有人想與您分享他們的媒體庫。","Home":"首頁","I wanted to invite you to join my media server.":"誠意邀請你加入我的媒體伺服器。","If you were sent here by a friend, please request access or if you have an invite code, please click Get Started!":"如果你是經朋友推薦來的,請先申請訪問。若你已有邀請碼,請直接點擊「開始使用」!","Invalid invitation code, please try again":"邀請碼無效,請重新嘗試","Invitation Code":"邀請碼","Invitation deleted successfully":"邀請成功刪除","Invitation deletion cancelled":"邀請刪除已取消","Invitation Details":"邀請詳情","Invitation expired %{s}":"邀請已過期 %{s}","Invitation expires %{s}":"邀請過期日 %{s}","Invitation Settings":"邀請設定","Invitation used":"邀請已被使用","Invitation Users":"邀請用戶","Invite Code":"邀請碼","Invited Users":"已邀請用戶","Jellyfin is a platform that lets you stream all your favorite movies, TV shows, and music in one place. It's like having your own personal movie theater right at your fingertips! Think of it as a digital library of your favorite content that you can access from anywhere, on any device - your phone, tablet, laptop, smart TV, you name it.":"Jellyfin是一個平台,讓您可以在一個地方串流所有您最喜愛的電影、電視節目和音樂。就像擁有您自己的個人電影院,輕鬆隨手可及!把它想像成您最喜愛內容的數字圖書館,您可以在任何地方、使用任何設備 - 手機、平板電腦、筆記本電腦、智能電視等等。無論您身在何處,都可以輕鬆享受。","Join":"加入","Join & Download":"加入並下載","Join & Download Plex for this device":"加入並在此設備上下載 Plex","Join my media server":"加入我的媒體伺服器","Last name":"姓氏","Latest Info":"最新資訊","Latest Information":"最新消息","Like this Widget, it shows you the latest information about Wizarr and will be updated regularly by our amazing team.":"就像這個小工具一樣,它會定期由我們出色的團隊更新,為您提供有關 Wizarr 的最新信息。","Load More":"加載更多","Login":"登入","Login to Plex":"登入 Plex","Login with Passkey":"使用 Passkey 登入","Login with Password":"使用密碼登入","Login with your account":"使用帳號登入","Logs":"日誌","Main Settings":"主要設定","Manage you Wizarr server":"管理您的 Wizarr 伺服器","Manage your command flows":"管理您的命令流程","Manage your invitations":"管理您的邀請","Manage your media server users":"管理您的媒體伺服器用戶","Managing %{user}":"管理 %{user}","Media Server":"媒體伺服器","Modify the look and feel of the server":"修改伺服器的外觀和風格","My API Key":"我的 API 鑰匙","My Webhook":"我的 Webhook","Name":"名字","Next Page":"下一頁","No API Keys found":"找不到 API 鑰匙","No contributors found":"找不到貢獻者","No expiration":"無到期日期","No Invitations found":"找不到邀請","No Passkeys found":"找不到 Passkeys","No Requests found":"找不到請求","No servers could be found.":"找不到伺服器。","No settings matched your search.":"沒有找到符合您搜尋的設置。","No Users found":"找不到用戶","No Webhooks found":"找不到 Webhooks","Notifications":"通知","Open Jellyfin":"啟動 Jellyfin","Open Plex":"啟動 Plex","Passkey Authentication":"Passkeys 授權","Password":"密碼","Payments":"付款","Planning on watching Movies on this device? Download Jellyfin for this device or click 'Next' to for other options.":"計劃在這台裝置上觀看電影嗎?請下載Jellyfin在此裝置上,或點擊'下一步'查看其他選擇。","Planning on watching Movies on this device? Download Plex for this device.":"您計劃在這台裝置上觀看電影嗎?請下載Plex在此裝置上使用。","Please bare in mind that these tools are only for debugging purposes and we will not provide you with support from any issues that may arise from using them.":"請注意,這些工具僅供調試使用,我們將不會為因使用這些工具而引起的任何問題提供支援。","Please enter a server URL and API key.":"請輸入伺服器網址和 API 鑰匙。","Please enter a server URL.":"請輸入伺服器網址。","Please enter an invite code":"請輸入邀請碼","Please enter your invite code":"請輸入您的邀請碼","Please login to your Plex account to help us connect you to our server.":"請登入您的 Plex 帳號,以協助我們將您連接到我們的伺服器。","Please take a copy your API key. You will not be able to see it again, please make sure to store it somewhere safe.":"請複製您的 API 鑰匙。您將無法再次查看它,請務必儲存在安全的地方。","Please wait":"請稍候","Please wait...":"請稍候...","Preparing the spells":"魔法準備中","Press the button below and follow your browser's steps to login":"請按下方的按鈕,然後跟隨您瀏覽器的步驟登入","Read More":"閱讀更多","Request Access":"請求訪問權限","Requests":"請求","Reset Layout":"重置版面","Restore":"恢復","Restore a backup of your database and configuration from a backup file. You will need to provide the encryption password that was used to create the backup":"從備份檔案恢復您的數據庫和配置。您需要提供用於建立備份的加密密碼","Restore a backup of your database and configuration from a backup file. You will need to provide the encryption password that was used to create the backup.":"從備份檔案恢復您的數據庫和配置。您需要提供用於建立備份的加密密碼。","Restore Backup":"恢復備份","Save":"儲存","Save Account":"儲存帳號","Save Connection":"儲存連線","Save Dashboard":"儲存儀表板","Save URL":"儲存網址","Scan for Users":"掃瞄用戶","Scan Libraries":"掃瞄媒體庫","Scan Servers":"掃瞄伺服器","Scan Users":"掃瞄用戶","Search Settings":"搜尋設定","Select Language":"選擇語言","Select Libraries":"選擇媒體庫","Server API Key":"伺服器 API 鑰匙","Server connection verified!":"伺服器連線已驗證!","Server Display Name":"伺服器顯示名稱","Server Type":"伺服器類型","Server URL":"伺服器網址","Settings":"設定","Settings Categories":"設定分類","Settings for user accounts":"用戶帳號設定","Setup Wizarr":"設置 Wizarr","Setup your account":"設置您的帳號","Share":"分享","Share Invitation":"分享邀請","Share this link with your friends and family to invite them to join your media server.":"與您的朋友和家人分享此連結,邀請他們加入您的媒體伺服器。","So let's see how to get started!":"那麼,讓我們來看看如何開始吧!","So you now have access to our server's media collection. Let's make sure you know how to use it with Plex.":"您現在可以訪問我們伺服器的媒體收藏了。讓我們確保您知道如何在 Plex 中訪問它。","Something went wrong while trying to join the server. Please try again later.":"很抱歉,我們在嘗試加入伺服器時遇到了一些問題。請稍後再試一次。","Something's missing.":"有些東西遺漏了。","Sorry, we can't find that page. It doesn't seem to exist!":"抱歉,我們找不到該頁面。它似乎不存在!","Start Walkthrough":"開始新手導覽","Still under development":"開發中","Summoning the spirits":"召喚靈魂中","System Default":"系統默認","Tasks":"任務","There are a lot of settings, so you can search for them by using the search bar.":"這裡有許多設置,您可以使用搜索欄來輕鬆查找它們。","These are your widgets, you can use them to get a quick overview of your Wizarr instance.":"這些小工具可供您使用,以便快速瀏覽您的 Wizarr 。","This is a temporary and we are working on adding support for other databases.":"這只是暫時的,我們正在努力增加對其他數據庫的支持。","This is the end of the tour, we hope you enjoyed you found it informative! Please feel free to contact us on Discord and let us know what you think of Wizarr.":"導覽正式結束,我們希望您喜歡,也希望對您有幫助!請隨時通過Discord與我們聯繫,讓我們知道您對Wizarr的看法。","This is where you can manage your invitations, they will appear here in a list. Invitations are used to invite new users to your media server.":"在這裡,您可以管理您的邀請,它們會以列表形式顯示。邀請用於邀請新的用戶加入您的媒體伺服器。","This page is currently read only!":"此頁面目前僅供參考。","To decrypt and encrypt backup files you can use the tools":"您可以使用以下工具解密和加密備份檔案","Total Invitations":"邀請總數","Total Tasks":"任務總數","Total Users":"用戶總數","Try Again":"再試一次","Type in your invite code to %{server_name} server!":"輸入您的邀請碼以加入到 %{server_name} 伺服器!","Uh oh!":"哎呀!","UI Settings":"界面設定","Unable to detect server.":"無法偵測到伺服器。","Unable to save connection.":"無法儲存連線。","Unable to verify server.":"無法驗證伺服器。","Updates":"更新","URL":"網址","Use your Fingerprint or Face Recognition to Verify your Identity":"使用指紋或面部識別驗證您的身份","User %{user} deleted":"已刪除用戶 %{user}","User deletion cancelled":"用戶刪除取消","User Expiration":"用戶到期","User expired %{s}":"用戶已過期 %{s}","User expires %{s}":"用戶過期日 %{s}","Username":"用戶名稱","Users":"用戶","Verify Connection":"驗證連線","View":"檢視","View and download server logs":"查看並下載伺服器日誌","View and manage scheduled tasks":"查看並管理排程任務","View and manage your active sessions":"查看和管理您啟用中的連線階段","View API key":"查看 API 鑰匙","View information about the server":"查看伺服器資訊","Waving our wands":"揮動我們的魔杖吧","We have categorized all of your settings to make it easier to find them.":"我們已經將所有的設置進行了分類,以幫助您更輕鬆地找到它們。","We want to help you get started with Wizarr as quickly as possible, consider following this tour to get a quick overview.":"我們希望能盡快幫助您熟悉Wizarr,請考慮跟隨這個導覽,以獲得快速的概覽。","Webhook deleted successfully":"Webhook 成功刪除","Webhook deletion cancelled":"Webhook 刪除取消","Welcome to Wizarr":"歡迎來到 Wizarr","With Plex, you'll have access to all of the movies, TV shows, music, and photos that are stored on their server!":"使用Plex,您可以輕鬆訪問儲存在他們伺服器上的所有電影、電視節目、音樂和照片!","Wizarr is a software tool that provides advanced user invitation and management capabilities for media servers such as Jellyfin, Emby, and Plex. With Wizarr, server administrators can easily invite new users and manage their access":"Wizarr是一個專為媒體伺服器,如Jellyfin、Emby和Plex等提供先進用戶邀請和管理功能的軟件工具。使用Wizarr,伺服器管理員可以輕鬆地邀請新用戶並管理他們的訪問權限","Wizarr will automatically scan your media server for new users, but you can also manually scan for new users by clicking on the 'Scan for Users' button, this is useful if Wizarr has not gotten around to doing it yet.":"Wizarr 會自動檢查您的媒體伺服器是否有新的用戶,但如果 Wizarr 還沒有執行檢查,您也可以點擊\"掃描用戶\"按鈕手動執行。","You can also edit your dashboard, delete widgets, add new widgets, and move them around.":"您也可以自訂您的儀表板,刪除小工具、新增小工具,以及調整它們的位置。","You can create a new invitation by clicking on the 'Create Invitation' button.":"您可以透過點選「建立邀請」按鈕來建立新的邀請。","You have successfully completed the setup process.":"恭喜您成功完成了設定過程。","You're all set, click continue to get started and walkthrough how to use %{serverName}!":"您已準備就緒,點擊繼續以深入了解如何使用 %{serverName}!","Your browser does not support copying to clipboard":"您的瀏覽器不支援複製到剪貼板功能","Your Done":"您已完成","Your Invitations":"您的邀請","Your Settings":"您的設定","Your Users":"您的用戶"}} \ No newline at end of file diff --git a/frontend/src/main.ts b/frontend/src/main.ts deleted file mode 100644 index 5954fbdf3..000000000 --- a/frontend/src/main.ts +++ /dev/null @@ -1,85 +0,0 @@ -import "./assets/scss/main.scss"; - -import Axios, { piniaPluginAxios } from "./plugins/axios"; -import Filters, { piniaPluginFilters } from "./plugins/filters"; -import Firebase, { piniaPluginFirebase } from "./plugins/firebase"; -import Socket, { piniaPluginSocketIO } from "./plugins/socket"; -import Toast, { piniaPluginToast } from "./plugins/toasts"; -import Tours, { piniaPluginTours } from "./plugins/tours"; -import WebShare, { piniaPluginWebShare } from "./plugins/webshare"; -import { defaultConfig, plugin } from "@formkit/vue"; - -import Analytics from "./plugins/analytics"; -import App from "./App.vue"; -import FloatingVue from "floating-vue"; -import Modal from "./plugins/modal"; -import OpenLayersMap from "vue3-openlayers"; -import ProgressOptions from "./assets/configs/DefaultProgress"; -import RocketChat from "./plugins/rocketChat"; -import Sentry from "./plugins/sentry"; -import ToastOptions from "./assets/configs/DefaultToasts"; -import ToastPlugin from "vue-toastification"; -import VueFeather from "vue-feather"; -import VueProgressBar from "@aacassandra/vue3-progressbar"; -import { createApp } from "vue"; -import { createPinia } from "pinia"; -import formkitConfig from "./formkit.config"; -import i18n from "./i18n"; -import piniaPluginPersistedstate from "pinia-plugin-persistedstate"; -import router from "./router"; - -const app = createApp(App); -const pinia = createPinia(); - -declare module "@vue/runtime-core" { - interface ComponentCustomProperties { - env: { - NODE_ENV: "development" | "production"; - }; - } -} - -app.config.globalProperties.env = { - NODE_ENV: process.env.NODE_ENV as "development" | "production", -}; - -app.use(pinia); -app.use(router); -app.use(ToastPlugin, ToastOptions); -app.use(Axios); -app.use(Toast); -app.use(i18n); -app.use(VueProgressBar, ProgressOptions); -app.use(OpenLayersMap, { debug: true }); -app.use(FloatingVue); -app.use(plugin, defaultConfig(formkitConfig)); -app.use(Socket, { uri: window.location.origin }); -app.use(Filters); -app.use(Sentry); -app.use(Analytics); -app.use(Modal); -app.use(WebShare); -app.use(Firebase); -app.use(Tours, { i18n: i18n }); -app.use(RocketChat); - -app.component("VueFeather", VueFeather); - -declare module "@vue/runtime-core" { - interface GlobalComponents { - VueFeather: typeof VueFeather; - } -} - -pinia.use(piniaPluginPersistedstate); -pinia.use(piniaPluginToast); -pinia.use(piniaPluginAxios); -pinia.use(piniaPluginSocketIO); -pinia.use(piniaPluginFilters); -pinia.use(piniaPluginWebShare); -pinia.use(piniaPluginFirebase); -pinia.use(piniaPluginTours); - -app.mount("#app"); - -export { app, pinia }; diff --git a/frontend/src/modules/admin/components/Forms/InvitationForm.vue b/frontend/src/modules/admin/components/Forms/InvitationForm.vue deleted file mode 100644 index 476f746ea..000000000 --- a/frontend/src/modules/admin/components/Forms/InvitationForm.vue +++ /dev/null @@ -1,353 +0,0 @@ - - - diff --git a/frontend/src/modules/admin/components/Invitations/InvitationList/InvitationItem.vue b/frontend/src/modules/admin/components/Invitations/InvitationList/InvitationItem.vue deleted file mode 100644 index b997e1652..000000000 --- a/frontend/src/modules/admin/components/Invitations/InvitationList/InvitationItem.vue +++ /dev/null @@ -1,177 +0,0 @@ - - - diff --git a/frontend/src/modules/admin/components/Invitations/InvitationList/InvitationList.vue b/frontend/src/modules/admin/components/Invitations/InvitationList/InvitationList.vue deleted file mode 100644 index a48e30a7b..000000000 --- a/frontend/src/modules/admin/components/Invitations/InvitationList/InvitationList.vue +++ /dev/null @@ -1,48 +0,0 @@ - - - diff --git a/frontend/src/modules/admin/components/Invitations/ShareSheet.vue b/frontend/src/modules/admin/components/Invitations/ShareSheet.vue deleted file mode 100644 index d76325747..000000000 --- a/frontend/src/modules/admin/components/Invitations/ShareSheet.vue +++ /dev/null @@ -1,77 +0,0 @@ - - - diff --git a/frontend/src/modules/admin/components/Invitations/SimpleUserList/SimpleUserItem.vue b/frontend/src/modules/admin/components/Invitations/SimpleUserList/SimpleUserItem.vue deleted file mode 100644 index aad7345a7..000000000 --- a/frontend/src/modules/admin/components/Invitations/SimpleUserList/SimpleUserItem.vue +++ /dev/null @@ -1,82 +0,0 @@ - - - diff --git a/frontend/src/modules/admin/components/Invitations/SimpleUserList/SimpleUserList.vue b/frontend/src/modules/admin/components/Invitations/SimpleUserList/SimpleUserList.vue deleted file mode 100644 index 142940b22..000000000 --- a/frontend/src/modules/admin/components/Invitations/SimpleUserList/SimpleUserList.vue +++ /dev/null @@ -1,32 +0,0 @@ - - - diff --git a/frontend/src/modules/admin/components/Users/UserList/UserItem.vue b/frontend/src/modules/admin/components/Users/UserList/UserItem.vue deleted file mode 100644 index 3cbda5afd..000000000 --- a/frontend/src/modules/admin/components/Users/UserList/UserItem.vue +++ /dev/null @@ -1,150 +0,0 @@ - - - diff --git a/frontend/src/modules/admin/components/Users/UserList/UserList.vue b/frontend/src/modules/admin/components/Users/UserList/UserList.vue deleted file mode 100644 index b74469fd3..000000000 --- a/frontend/src/modules/admin/components/Users/UserList/UserList.vue +++ /dev/null @@ -1,48 +0,0 @@ - - - diff --git a/frontend/src/modules/admin/components/Users/UserManager/Settings.vue b/frontend/src/modules/admin/components/Users/UserManager/Settings.vue deleted file mode 100644 index a7ef0dc28..000000000 --- a/frontend/src/modules/admin/components/Users/UserManager/Settings.vue +++ /dev/null @@ -1,35 +0,0 @@ - - - diff --git a/frontend/src/modules/admin/pages/Home.vue b/frontend/src/modules/admin/pages/Home.vue deleted file mode 100644 index d2617309c..000000000 --- a/frontend/src/modules/admin/pages/Home.vue +++ /dev/null @@ -1,43 +0,0 @@ - - - diff --git a/frontend/src/modules/admin/pages/Invitations.vue b/frontend/src/modules/admin/pages/Invitations.vue deleted file mode 100644 index 8bd155296..000000000 --- a/frontend/src/modules/admin/pages/Invitations.vue +++ /dev/null @@ -1,52 +0,0 @@ - - - diff --git a/frontend/src/modules/admin/pages/Settings.vue b/frontend/src/modules/admin/pages/Settings.vue deleted file mode 100644 index 2a596eaad..000000000 --- a/frontend/src/modules/admin/pages/Settings.vue +++ /dev/null @@ -1,63 +0,0 @@ - - - diff --git a/frontend/src/modules/admin/pages/Users.vue b/frontend/src/modules/admin/pages/Users.vue deleted file mode 100644 index 129e7d372..000000000 --- a/frontend/src/modules/admin/pages/Users.vue +++ /dev/null @@ -1,46 +0,0 @@ - - - diff --git a/frontend/src/modules/admin/router/children.ts b/frontend/src/modules/admin/router/children.ts deleted file mode 100644 index 57f03ce68..000000000 --- a/frontend/src/modules/admin/router/children.ts +++ /dev/null @@ -1,26 +0,0 @@ -import type { RouteRecordRaw } from "vue-router"; - -const children: RouteRecordRaw[] = [ - { - path: "", - name: "admin-home", - component: () => import("../pages/Home.vue"), - }, - { - path: "invitations", - name: "admin-invitations", - component: () => import("../pages/Invitations.vue"), - }, - { - path: "users", - name: "admin-users", - component: () => import("../pages/Users.vue"), - }, - { - path: "flow-editor", - name: "admin-flow-editor", - component: () => import("../pages/FlowEditor.vue"), - }, -]; - -export default children; diff --git a/frontend/src/modules/admin/router/index.ts b/frontend/src/modules/admin/router/index.ts deleted file mode 100644 index a8d6503cf..000000000 --- a/frontend/src/modules/admin/router/index.ts +++ /dev/null @@ -1,18 +0,0 @@ -import requireAuth from "@/router/middleware/requireAuth"; -import children from "./children"; -import type { RouteRecordRaw } from "vue-router"; - -const routes: Readonly = [ - { - path: "/admin", - name: "admin", - redirect: { name: "admin-home" }, - component: () => import("../views/Admin.vue"), - meta: { - middleware: [requireAuth], - }, - children: children, - }, -]; - -export default routes; diff --git a/frontend/src/modules/authentication/components/PasskeyForm.vue b/frontend/src/modules/authentication/components/PasskeyForm.vue deleted file mode 100644 index a0247a7fb..000000000 --- a/frontend/src/modules/authentication/components/PasskeyForm.vue +++ /dev/null @@ -1,24 +0,0 @@ - diff --git a/frontend/src/modules/authentication/components/PasswordForm.vue b/frontend/src/modules/authentication/components/PasswordForm.vue deleted file mode 100644 index aefdbf12b..000000000 --- a/frontend/src/modules/authentication/components/PasswordForm.vue +++ /dev/null @@ -1,75 +0,0 @@ - - - diff --git a/frontend/src/modules/authentication/components/UsernameForm.vue b/frontend/src/modules/authentication/components/UsernameForm.vue deleted file mode 100644 index a1e3620ae..000000000 --- a/frontend/src/modules/authentication/components/UsernameForm.vue +++ /dev/null @@ -1,48 +0,0 @@ - - - diff --git a/frontend/src/modules/authentication/router/index.ts b/frontend/src/modules/authentication/router/index.ts deleted file mode 100644 index 7773ea494..000000000 --- a/frontend/src/modules/authentication/router/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -import type { RouteRecordRaw } from "vue-router"; -import requireNoAuth from "@/router/middleware/requireNoAuth"; - -const routes: Readonly = [ - { - path: "/login", - name: "login", - component: () => import("../views/LoginView.vue"), - meta: { - middleware: [requireNoAuth], - }, - }, -]; - -export default routes; diff --git a/frontend/src/modules/core/router/index.ts b/frontend/src/modules/core/router/index.ts deleted file mode 100644 index e6a139531..000000000 --- a/frontend/src/modules/core/router/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { RouteRecordRaw } from "vue-router"; - -const routes: Readonly = [ - { - path: "/:pathMatch(.*)*", - name: "not-found", - component: () => import("../views/NotFound.vue"), - }, -]; - -export default routes; diff --git a/frontend/src/modules/core/views/NotFound.vue b/frontend/src/modules/core/views/NotFound.vue deleted file mode 100644 index acb38ce69..000000000 --- a/frontend/src/modules/core/views/NotFound.vue +++ /dev/null @@ -1,45 +0,0 @@ - - - diff --git a/frontend/src/modules/help/components/Discord.vue b/frontend/src/modules/help/components/Discord.vue deleted file mode 100644 index 47c8678d8..000000000 --- a/frontend/src/modules/help/components/Discord.vue +++ /dev/null @@ -1,103 +0,0 @@ - - - diff --git a/frontend/src/modules/help/components/Download.vue b/frontend/src/modules/help/components/Download.vue deleted file mode 100644 index d96c5ea19..000000000 --- a/frontend/src/modules/help/components/Download.vue +++ /dev/null @@ -1,21 +0,0 @@ - - - diff --git a/frontend/src/modules/help/components/Jellyfin/Download.vue b/frontend/src/modules/help/components/Jellyfin/Download.vue deleted file mode 100644 index e80b208dd..000000000 --- a/frontend/src/modules/help/components/Jellyfin/Download.vue +++ /dev/null @@ -1,112 +0,0 @@ - - - diff --git a/frontend/src/modules/help/components/Jellyfin/Welcome.vue b/frontend/src/modules/help/components/Jellyfin/Welcome.vue deleted file mode 100644 index af390de61..000000000 --- a/frontend/src/modules/help/components/Jellyfin/Welcome.vue +++ /dev/null @@ -1,19 +0,0 @@ - - - diff --git a/frontend/src/modules/help/components/Plex/Download.vue b/frontend/src/modules/help/components/Plex/Download.vue deleted file mode 100644 index 90ee48464..000000000 --- a/frontend/src/modules/help/components/Plex/Download.vue +++ /dev/null @@ -1,29 +0,0 @@ - diff --git a/frontend/src/modules/help/components/Plex/Welcome.vue b/frontend/src/modules/help/components/Plex/Welcome.vue deleted file mode 100644 index 285c0ee3c..000000000 --- a/frontend/src/modules/help/components/Plex/Welcome.vue +++ /dev/null @@ -1,25 +0,0 @@ - - - diff --git a/frontend/src/modules/help/components/Welcome.vue b/frontend/src/modules/help/components/Welcome.vue deleted file mode 100644 index b918eac62..000000000 --- a/frontend/src/modules/help/components/Welcome.vue +++ /dev/null @@ -1,21 +0,0 @@ - - - diff --git a/frontend/src/modules/help/router/index.ts b/frontend/src/modules/help/router/index.ts deleted file mode 100644 index fcfc24365..000000000 --- a/frontend/src/modules/help/router/index.ts +++ /dev/null @@ -1,20 +0,0 @@ -import openServer from "@/router/middleware/openServer"; -import type { RouteRecordRaw } from "vue-router"; - -const routes: Readonly = [ - { - path: "/help", - name: "help", - component: () => import("../views/Help.vue"), - }, - { - path: "/open", - name: "open", - component: () => "", - meta: { - middleware: [openServer], - }, - }, -]; - -export default routes; diff --git a/frontend/src/modules/help/views/Help.vue b/frontend/src/modules/help/views/Help.vue deleted file mode 100644 index 8a5fd3ef0..000000000 --- a/frontend/src/modules/help/views/Help.vue +++ /dev/null @@ -1,59 +0,0 @@ - - - diff --git a/frontend/src/modules/home/router/index.ts b/frontend/src/modules/home/router/index.ts deleted file mode 100644 index a5c9058cb..000000000 --- a/frontend/src/modules/home/router/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { RouteRecordRaw } from "vue-router"; - -const routes: Readonly = [ - { - path: "/", - name: "home", - component: () => import("../views/Home.vue"), - }, -]; - -export default routes; diff --git a/frontend/src/modules/home/views/Home.vue b/frontend/src/modules/home/views/Home.vue deleted file mode 100644 index 6cddc87db..000000000 --- a/frontend/src/modules/home/views/Home.vue +++ /dev/null @@ -1,41 +0,0 @@ - - - diff --git a/frontend/src/modules/join/events.ts b/frontend/src/modules/join/events.ts deleted file mode 100644 index 52532e3d0..000000000 --- a/frontend/src/modules/join/events.ts +++ /dev/null @@ -1,6 +0,0 @@ -import mitt from "mitt"; -import type { EventRecords } from "./types/EventRecords"; - -const eventBus = mitt(); - -export default eventBus; diff --git a/frontend/src/modules/join/pages/Complete.vue b/frontend/src/modules/join/pages/Complete.vue deleted file mode 100644 index 14aecd994..000000000 --- a/frontend/src/modules/join/pages/Complete.vue +++ /dev/null @@ -1,26 +0,0 @@ - - - diff --git a/frontend/src/modules/join/pages/Error.vue b/frontend/src/modules/join/pages/Error.vue deleted file mode 100644 index 7d6af0ad4..000000000 --- a/frontend/src/modules/join/pages/Error.vue +++ /dev/null @@ -1,38 +0,0 @@ - - - diff --git a/frontend/src/modules/join/pages/Jellyfin/Signup.vue b/frontend/src/modules/join/pages/Jellyfin/Signup.vue deleted file mode 100644 index c06873b82..000000000 --- a/frontend/src/modules/join/pages/Jellyfin/Signup.vue +++ /dev/null @@ -1,60 +0,0 @@ - - - diff --git a/frontend/src/modules/join/pages/JoinForm.vue b/frontend/src/modules/join/pages/JoinForm.vue deleted file mode 100644 index 339f04c21..000000000 --- a/frontend/src/modules/join/pages/JoinForm.vue +++ /dev/null @@ -1,50 +0,0 @@ - - - diff --git a/frontend/src/modules/join/pages/Payment.vue b/frontend/src/modules/join/pages/Payment.vue deleted file mode 100644 index 47f42dbe9..000000000 --- a/frontend/src/modules/join/pages/Payment.vue +++ /dev/null @@ -1,42 +0,0 @@ - - - diff --git a/frontend/src/modules/join/pages/Plex/Signup.vue b/frontend/src/modules/join/pages/Plex/Signup.vue deleted file mode 100644 index 710e621e2..000000000 --- a/frontend/src/modules/join/pages/Plex/Signup.vue +++ /dev/null @@ -1,49 +0,0 @@ - - - diff --git a/frontend/src/modules/join/pages/Signup.vue b/frontend/src/modules/join/pages/Signup.vue deleted file mode 100644 index dc9a18e01..000000000 --- a/frontend/src/modules/join/pages/Signup.vue +++ /dev/null @@ -1,21 +0,0 @@ - - - diff --git a/frontend/src/modules/join/router/index.ts b/frontend/src/modules/join/router/index.ts deleted file mode 100644 index 7530f0f73..000000000 --- a/frontend/src/modules/join/router/index.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { RouteRecordRaw } from "vue-router"; - -const routes: Readonly = [ - { - path: "/j/:invite", - name: "join-invite", - component: () => import("../views/Join.vue"), - }, - { - path: "/join", - name: "join", - component: () => import("../views/Join.vue"), - }, -]; - -export default routes; diff --git a/frontend/src/modules/join/views/Join.vue b/frontend/src/modules/join/views/Join.vue deleted file mode 100644 index 803fceccf..000000000 --- a/frontend/src/modules/join/views/Join.vue +++ /dev/null @@ -1,203 +0,0 @@ - - - diff --git a/frontend/src/modules/settings/components/APIKeys/APIKeys.vue b/frontend/src/modules/settings/components/APIKeys/APIKeys.vue deleted file mode 100644 index d5598a123..000000000 --- a/frontend/src/modules/settings/components/APIKeys/APIKeys.vue +++ /dev/null @@ -1,39 +0,0 @@ - - - diff --git a/frontend/src/modules/settings/components/APIKeys/APIKeysForm.vue b/frontend/src/modules/settings/components/APIKeys/APIKeysForm.vue deleted file mode 100644 index 93e43b9a0..000000000 --- a/frontend/src/modules/settings/components/APIKeys/APIKeysForm.vue +++ /dev/null @@ -1,49 +0,0 @@ - - - diff --git a/frontend/src/modules/settings/components/APIKeys/APIKeysItem.vue b/frontend/src/modules/settings/components/APIKeys/APIKeysItem.vue deleted file mode 100644 index 4ae1436b0..000000000 --- a/frontend/src/modules/settings/components/APIKeys/APIKeysItem.vue +++ /dev/null @@ -1,76 +0,0 @@ - - - diff --git a/frontend/src/modules/settings/components/Forms/MediaForm.vue b/frontend/src/modules/settings/components/Forms/MediaForm.vue deleted file mode 100644 index 54a0ba434..000000000 --- a/frontend/src/modules/settings/components/Forms/MediaForm.vue +++ /dev/null @@ -1,162 +0,0 @@ - - - diff --git a/frontend/src/modules/settings/components/Forms/RequestForm.vue b/frontend/src/modules/settings/components/Forms/RequestForm.vue deleted file mode 100644 index 151e28922..000000000 --- a/frontend/src/modules/settings/components/Forms/RequestForm.vue +++ /dev/null @@ -1,64 +0,0 @@ - - - diff --git a/frontend/src/modules/settings/components/Forms/WebhookForm.vue b/frontend/src/modules/settings/components/Forms/WebhookForm.vue deleted file mode 100644 index ded65d9a5..000000000 --- a/frontend/src/modules/settings/components/Forms/WebhookForm.vue +++ /dev/null @@ -1,31 +0,0 @@ - - - diff --git a/frontend/src/modules/settings/components/Passkeys/Passkeys.vue b/frontend/src/modules/settings/components/Passkeys/Passkeys.vue deleted file mode 100644 index 45ec72dde..000000000 --- a/frontend/src/modules/settings/components/Passkeys/Passkeys.vue +++ /dev/null @@ -1,39 +0,0 @@ - - - diff --git a/frontend/src/modules/settings/components/Passkeys/PasskeysItem.vue b/frontend/src/modules/settings/components/Passkeys/PasskeysItem.vue deleted file mode 100644 index 1612668af..000000000 --- a/frontend/src/modules/settings/components/Passkeys/PasskeysItem.vue +++ /dev/null @@ -1,49 +0,0 @@ - - - diff --git a/frontend/src/modules/settings/components/Requests/Requests.vue b/frontend/src/modules/settings/components/Requests/Requests.vue deleted file mode 100644 index e7da861a5..000000000 --- a/frontend/src/modules/settings/components/Requests/Requests.vue +++ /dev/null @@ -1,39 +0,0 @@ - - - diff --git a/frontend/src/modules/settings/components/Requests/RequestsItem.vue b/frontend/src/modules/settings/components/Requests/RequestsItem.vue deleted file mode 100644 index 52824ed83..000000000 --- a/frontend/src/modules/settings/components/Requests/RequestsItem.vue +++ /dev/null @@ -1,64 +0,0 @@ - - - diff --git a/frontend/src/modules/settings/components/ScanLibraries/ScanLibraries.vue b/frontend/src/modules/settings/components/ScanLibraries/ScanLibraries.vue deleted file mode 100644 index 99bb9cbef..000000000 --- a/frontend/src/modules/settings/components/ScanLibraries/ScanLibraries.vue +++ /dev/null @@ -1,83 +0,0 @@ - - - diff --git a/frontend/src/modules/settings/components/ScanServers/ScanServers.vue b/frontend/src/modules/settings/components/ScanServers/ScanServers.vue deleted file mode 100644 index c5d53da18..000000000 --- a/frontend/src/modules/settings/components/ScanServers/ScanServers.vue +++ /dev/null @@ -1,124 +0,0 @@ - - - diff --git a/frontend/src/modules/settings/components/ScanServers/ScanServersItem.vue b/frontend/src/modules/settings/components/ScanServers/ScanServersItem.vue deleted file mode 100644 index 553d07d1b..000000000 --- a/frontend/src/modules/settings/components/ScanServers/ScanServersItem.vue +++ /dev/null @@ -1,51 +0,0 @@ - - - diff --git a/frontend/src/modules/settings/pages/APIKeys.vue b/frontend/src/modules/settings/pages/APIKeys.vue deleted file mode 100644 index c13663146..000000000 --- a/frontend/src/modules/settings/pages/APIKeys.vue +++ /dev/null @@ -1,30 +0,0 @@ - - - diff --git a/frontend/src/modules/settings/pages/About.vue b/frontend/src/modules/settings/pages/About.vue deleted file mode 100644 index 37650e702..000000000 --- a/frontend/src/modules/settings/pages/About.vue +++ /dev/null @@ -1,48 +0,0 @@ - - - diff --git a/frontend/src/modules/settings/pages/Account.vue b/frontend/src/modules/settings/pages/Account.vue deleted file mode 100644 index 0107a51ed..000000000 --- a/frontend/src/modules/settings/pages/Account.vue +++ /dev/null @@ -1,55 +0,0 @@ - - - diff --git a/frontend/src/modules/settings/pages/Backup.vue b/frontend/src/modules/settings/pages/Backup.vue deleted file mode 100644 index 07ba0a134..000000000 --- a/frontend/src/modules/settings/pages/Backup.vue +++ /dev/null @@ -1,161 +0,0 @@ - - - diff --git a/frontend/src/modules/settings/pages/Main.vue b/frontend/src/modules/settings/pages/Main.vue deleted file mode 100644 index 1b0d1dcec..000000000 --- a/frontend/src/modules/settings/pages/Main.vue +++ /dev/null @@ -1,265 +0,0 @@ - - - diff --git a/frontend/src/modules/settings/pages/Membership.vue b/frontend/src/modules/settings/pages/Membership.vue deleted file mode 100644 index b01a9cf7b..000000000 --- a/frontend/src/modules/settings/pages/Membership.vue +++ /dev/null @@ -1,122 +0,0 @@ - - - diff --git a/frontend/src/modules/settings/pages/Passkeys.vue b/frontend/src/modules/settings/pages/Passkeys.vue deleted file mode 100644 index 893ef2c98..000000000 --- a/frontend/src/modules/settings/pages/Passkeys.vue +++ /dev/null @@ -1,33 +0,0 @@ - - - diff --git a/frontend/src/modules/settings/pages/Requests.vue b/frontend/src/modules/settings/pages/Requests.vue deleted file mode 100644 index 7f447277b..000000000 --- a/frontend/src/modules/settings/pages/Requests.vue +++ /dev/null @@ -1,33 +0,0 @@ - - - diff --git a/frontend/src/modules/settings/pages/Support.vue b/frontend/src/modules/settings/pages/Support.vue deleted file mode 100644 index 27acc7813..000000000 --- a/frontend/src/modules/settings/pages/Support.vue +++ /dev/null @@ -1,87 +0,0 @@ - - - diff --git a/frontend/src/modules/settings/pages/Webhooks.vue b/frontend/src/modules/settings/pages/Webhooks.vue deleted file mode 100644 index 45a905b73..000000000 --- a/frontend/src/modules/settings/pages/Webhooks.vue +++ /dev/null @@ -1,30 +0,0 @@ - - - diff --git a/frontend/src/modules/settings/router/children.ts b/frontend/src/modules/settings/router/children.ts deleted file mode 100644 index 31fc9aaab..000000000 --- a/frontend/src/modules/settings/router/children.ts +++ /dev/null @@ -1,90 +0,0 @@ -import type { RouteRecordRaw } from "vue-router"; - -const children: RouteRecordRaw[] = [ - { - path: "", - name: "admin-settings", - component: () => import("../pages/Main.vue"), - meta: { searchBar: true }, - }, - { - path: "media", - name: "admin-settings-media", - component: () => import("../pages/Media.vue"), - meta: { header: "Manage Media", subheader: "Configure media server" }, - }, - { - path: "requests", - name: "admin-settings-requests", - component: () => import("../pages/Requests.vue"), - meta: { header: "Manage Requests", subheader: "Configure request server" }, - }, - { - path: "apikeys", - name: "admin-settings-apikeys", - component: () => import("../pages/APIKeys.vue"), - meta: { header: "Manage API Keys", subheader: "Configure API keys" }, - }, - { - path: "webhooks", - name: "admin-settings-webhooks", - component: () => import("../pages/Webhooks.vue"), - meta: { header: "Manage Webhooks", subheader: "Configure webhooks" }, - }, - { - path: "account", - name: "admin-settings-account", - component: () => import("../pages/Account.vue"), - meta: { header: "Manage Account", subheader: "Configure your account" }, - }, - { - path: "sessions", - name: "admin-settings-sessions", - component: () => import("../pages/Sessions.vue"), - meta: { header: "Manage Sessions", subheader: "View and revoke your sessions" }, - }, - { - path: "logs", - name: "admin-settings-logs", - component: () => import("../pages/Logs.vue"), - meta: { header: "View Logs", subheader: "View server logs" }, - }, - { - path: "mfa", - name: "admin-settings-mfa", - component: () => import("../pages/Passkeys.vue"), - meta: { header: "Manage MFA", subheader: "Configure multi-factor authentication" }, - }, - { - path: "tasks", - name: "admin-settings-tasks", - component: () => import("../pages/Tasks.vue"), - meta: { header: "Manage Tasks", subheader: "Configure server tasks" }, - }, - { - path: "backup", - name: "admin-settings-backup", - component: () => import("../pages/Backup.vue"), - meta: { header: "Backup Server", subheader: "Backup server data" }, - }, - { - path: "about", - name: "admin-settings-about", - component: () => import("../pages/About.vue"), - meta: { header: "About", subheader: "View server information" }, - }, - { - path: "membership", - name: "admin-settings-membership", - component: () => import("../pages/Membership.vue"), - meta: { header: "Membership", subheader: "View Wizarr Cloud membership" }, - }, - { - path: "support", - name: "admin-settings-support", - component: () => import("../pages/Support.vue"), - meta: { header: "Live Support", subheader: "Get live support" }, - }, -]; - -export default children; diff --git a/frontend/src/modules/settings/router/index.ts b/frontend/src/modules/settings/router/index.ts deleted file mode 100644 index 17de2cd7c..000000000 --- a/frontend/src/modules/settings/router/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -import type { RouteRecordRaw } from "vue-router"; -import children from "./children"; -import requireAuth from "@/router/middleware/requireAuth"; - -const routes: Readonly = [ - { - path: "/admin/settings", - name: "admin-settings", - component: () => import("../views/Settings.vue"), - meta: { - middleware: [requireAuth], - }, - children: children, - }, -]; - -export default routes; diff --git a/frontend/src/modules/setup/pages/Account.vue b/frontend/src/modules/setup/pages/Account.vue deleted file mode 100644 index c0d96a0a1..000000000 --- a/frontend/src/modules/setup/pages/Account.vue +++ /dev/null @@ -1,93 +0,0 @@ - - - diff --git a/frontend/src/modules/setup/pages/Complete.vue b/frontend/src/modules/setup/pages/Complete.vue deleted file mode 100644 index c5dd729f8..000000000 --- a/frontend/src/modules/setup/pages/Complete.vue +++ /dev/null @@ -1,34 +0,0 @@ - - - diff --git a/frontend/src/modules/setup/pages/Database.vue b/frontend/src/modules/setup/pages/Database.vue deleted file mode 100644 index b10762d21..000000000 --- a/frontend/src/modules/setup/pages/Database.vue +++ /dev/null @@ -1,20 +0,0 @@ - - - diff --git a/frontend/src/modules/setup/pages/Restore.vue b/frontend/src/modules/setup/pages/Restore.vue deleted file mode 100644 index 364bd4545..000000000 --- a/frontend/src/modules/setup/pages/Restore.vue +++ /dev/null @@ -1,72 +0,0 @@ - - - diff --git a/frontend/src/modules/setup/router/index.ts b/frontend/src/modules/setup/router/index.ts deleted file mode 100644 index c0378d06d..000000000 --- a/frontend/src/modules/setup/router/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { RouteRecordRaw } from "vue-router"; - -const routes: Readonly = [ - { - path: "/setup", - name: "setup", - component: () => import("../views/Setup.vue"), - }, -]; - -export default routes; diff --git a/frontend/src/modules/setup/views/Setup.vue b/frontend/src/modules/setup/views/Setup.vue deleted file mode 100644 index 2b28f482e..000000000 --- a/frontend/src/modules/setup/views/Setup.vue +++ /dev/null @@ -1,122 +0,0 @@ - - - diff --git a/frontend/src/plugins/analytics.ts b/frontend/src/plugins/analytics.ts deleted file mode 100644 index 732789a00..000000000 --- a/frontend/src/plugins/analytics.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { AnalyticsBrowser } from "@segment/analytics-next"; -import { nanoid } from "nanoid"; - -import type { AnalyticsBrowserSettings, InitOptions } from "@segment/analytics-next"; -import type { App } from "vue"; - -declare module "@vue/runtime-core" { - interface ComponentCustomProperties { - $analytics: AnalyticsBrowser; - } -} - -const vuePluginAnalytics = { - install: (app: App, options?: { settings?: AnalyticsBrowserSettings; options?: InitOptions }): void => { - // Get base URL from localStorage or use window.location.origin - const baseURL = localStorage.getItem("base_url") ?? window.location.origin; - - // Default settings - const defaultSettings: AnalyticsBrowserSettings = { - // cdnURL: baseURL, - // cdnURL: "https://webhook.site/44c93238-6e85-4736-a1f4-90bb007afc0b", - // writeKey: "wizarr", - writeKey: "rAjFFBAQf10L1mwRl4MlwDVYBYLcRdGY", - }; - - // Default options - const defaultOptions: InitOptions = {}; - - // Load analytics - const analytics = AnalyticsBrowser.load(defaultSettings, defaultOptions); - - // Intergate with Vue Router to track page views - app.config.globalProperties.$router.beforeEach((to, from) => { - analytics.page({ path: to.path, referrer: from.path, url: `${baseURL}${to.path}`, title: to.name, search: to.query, id: nanoid() }); - }); - - // Set global properties - app.config.globalProperties.$analytics = analytics; - }, -}; - -export default vuePluginAnalytics; diff --git a/frontend/src/router/middleware/openServer.ts b/frontend/src/router/middleware/openServer.ts deleted file mode 100644 index 5e5c3bdd4..000000000 --- a/frontend/src/router/middleware/openServer.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { useServerStore } from "@/stores/server"; -import type { NavigationGuardNext } from "vue-router"; - -export default async function openServer({ next, authStore }: { next: NavigationGuardNext; authStore: any }) { - try { - const serverStore = useServerStore(); - window.open(serverStore.settings.server_url, "_blank"); - } catch {} - - return next(); -} diff --git a/frontend/src/router/middleware/requireAuth.ts b/frontend/src/router/middleware/requireAuth.ts deleted file mode 100644 index 45f34a767..000000000 --- a/frontend/src/router/middleware/requireAuth.ts +++ /dev/null @@ -1,18 +0,0 @@ -import Auth from "@/api/authentication"; - -import { useRouter } from "vue-router"; -import type { NavigationGuardNext } from "vue-router"; - -const router = useRouter(); - -export default async function requireAuth({ next, authStore }: { next: NavigationGuardNext; authStore: any }) { - try { - const auth = new Auth(); - if (!(await auth.isAuthenticated())) return router.push("/login"); - } catch (error) { - console.error(error); - return next({ name: "login" }); - } - - return next(); -} diff --git a/frontend/src/router/middleware/requireNoAuth.ts b/frontend/src/router/middleware/requireNoAuth.ts deleted file mode 100644 index fbc3080b7..000000000 --- a/frontend/src/router/middleware/requireNoAuth.ts +++ /dev/null @@ -1,15 +0,0 @@ -import Auth from "@/api/authentication"; - -import type { NavigationGuardNext } from "vue-router"; - -export default async function requireAuth({ next, authStore }: { next: NavigationGuardNext; authStore: any }) { - try { - const auth = new Auth(); - if (await auth.isAuthenticated()) return next({ name: "admin" }); - } catch (error) { - console.error(error); - return next(); - } - - return next(); -} diff --git a/frontend/src/shims/aacassandra__vue3-progressbar.d.ts b/frontend/src/shims/aacassandra__vue3-progressbar.d.ts deleted file mode 100644 index 58009bf2a..000000000 --- a/frontend/src/shims/aacassandra__vue3-progressbar.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module "@aacassandra/vue3-progressbar" { - import type { Plugin } from "vue"; - const VueProgressBar: Plugin; - export default VueProgressBar; -} diff --git a/frontend/src/shims/global.d.ts b/frontend/src/shims/global.d.ts deleted file mode 100644 index 1f810146c..000000000 --- a/frontend/src/shims/global.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import "vite-plugin-pwa/client"; -import "vite/client"; diff --git a/frontend/src/shims/shims-vue.d.ts b/frontend/src/shims/shims-vue.d.ts deleted file mode 100644 index 748a94693..000000000 --- a/frontend/src/shims/shims-vue.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import type { AxiosInstance } from "axios"; -import type { Toasts } from "@/assets/ts/utils/Toasts"; -import type { CustomAxiosInstance } from "@/assets/ts/utils/Axios"; - -declare module "*.vue" { - import type { DefineComponent } from "vue"; - const component: DefineComponent<{}, {}, any>; - export default component; -} - -declare module "@vue/runtime-core" { - interface ComponentCustomProperties { - $axios: CustomAxiosInstance; - $toast: Toasts; - $Progress: any; - } -} - -declare module "LINGUAS" { - const LINGUAS: string; - export default LINGUAS; -} diff --git a/frontend/src/shims/v-offline.d.ts b/frontend/src/shims/v-offline.d.ts deleted file mode 100644 index 8d9eda3a3..000000000 --- a/frontend/src/shims/v-offline.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module "v-offline" { - import VOffline from "v-offline/dist/components/VOffline.vue"; - export { default } from "v-offline/dist/install"; - export { VOffline }; -} diff --git a/frontend/src/shims/vue-password-strength-meter.d.ts b/frontend/src/shims/vue-password-strength-meter.d.ts deleted file mode 100644 index 079bc2b2d..000000000 --- a/frontend/src/shims/vue-password-strength-meter.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -declare module "vue-password-strength-meter" { - import Password from "vue-password-strength-meter/dist/vue-password-strength-meter"; - export { Password }; -} diff --git a/frontend/src/shims/vue-ts-responsive-grid-layout.d.ts b/frontend/src/shims/vue-ts-responsive-grid-layout.d.ts deleted file mode 100644 index 16390b017..000000000 --- a/frontend/src/shims/vue-ts-responsive-grid-layout.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module "vue-ts-responsive-grid-layout" { - import { GridItem, GridLayout } from "vue-ts-responsive-grid-layout"; - export const GridLayout: Component; - export const GridItem: Component; -} diff --git a/frontend/src/stores/invitations.ts b/frontend/src/stores/invitations.ts deleted file mode 100644 index 37d8491ec..000000000 --- a/frontend/src/stores/invitations.ts +++ /dev/null @@ -1,77 +0,0 @@ -import type { Invitation, Invitations } from "@/types/api/invitations"; - -import { defineStore } from "pinia"; - -interface InvitationStoreState { - invitations: any[]; -} - -export const useInvitationStore = defineStore("invitations", { - state: (): InvitationStoreState => ({ - invitations: [] as Invitations, - }), - actions: { - async getInvitations() { - // Get invites from API - const invitations = await this.$axios.get("/api/invitations").catch(() => { - this.$toast.error("Could not get invitations"); - return null; - }); - - // If the invites are null, return - if (invitations === null) return; - - // Update the invites that are already in the store - this.invitations.forEach((invite, index) => { - const new_invitation = invitations.data.find((new_invitation: Invitation) => new_invitation.id === invite.id); - if (new_invitation) this.invitations[index] = new_invitation; - }); - - // Add the new invites to the store if they don't exist - invitations.data.forEach((invitation: Invitation) => { - if (!this.invitations.find((old_invitation) => old_invitation.id === invitation.id)) this.invitations.push(invitation); - }); - - // Remove the invites that were not in the response - this.invitations.forEach((invitation, index) => { - if (!invitations.data.find((new_invitation: Invitation) => new_invitation.id === invitation.id)) this.invitations.splice(index, 1); - }); - - // Return the invites - return invitations.data; - }, - async createInvitation(invitation: FormData | Partial) { - // Create the invite - const response = await this.$axios.post("/api/invitations", invitation, { disableErrorToast: true }).catch((err) => { - this.$toast.error("Could not create invitation"); - console.error(err); - return null; - }); - - // If the response is null, return - if (response === null) return; - - // Add the invite to the store - this.invitations.push(response.data as Invitation); - - // Return the invite - return response.data as Invitation; - }, - async deleteInvitation(id: number) { - // Delete the invite from the API - const response = await this.$axios.delete(`/api/invitations/${id}`, { disableInfoToast: true }).catch((err) => { - this.$toast.error("Could not delete invitation"); - console.error(err); - return null; - }); - - // If the response is null, return - if (response === null) return; - - // Remove the invite from the store - const index = this.invitations.findIndex((invitation: Invitation) => invitation.id === id); - if (index !== -1) this.invitations.splice(index, 1); - }, - }, - persist: true, -}); diff --git a/frontend/src/stores/libraries.ts b/frontend/src/stores/libraries.ts deleted file mode 100644 index 130f85320..000000000 --- a/frontend/src/stores/libraries.ts +++ /dev/null @@ -1,95 +0,0 @@ -import { defineStore } from "pinia"; - -export const useLibrariesStore = defineStore("libraries", { - state: () => ({ - libraries: [] as Array<{ id: string; name: string; created: Date }>, - }), - actions: { - async getLibraries() { - // Get the libraries from the API - const response = await this.$axios.get("/api/libraries"); - - // Check if the response is valid - if (!response?.data) { - this.$toast.error("Could not get libraries"); - return; - } - - // Map the libraries to the correct format - this.libraries = response.data.map((library: { id: string; name: string; created: string }) => { - return { - id: library.id, - name: library.name, - created: new Date(library.created), - }; - }); - }, - async saveLibraries(libraries: Array<{ id: string; name: string; selected: boolean }>) { - const formData = new FormData(); - const newLibraries: string[] = []; - - libraries.forEach((library) => { - if (library.selected) { - newLibraries.push(library.id); - } - }); - - formData.append("libraries", JSON.stringify(newLibraries)); - - const response = await this.$axios.post("/api/libraries", formData, { disableInfoToast: true }).catch(() => { - return; - }); - - if (!response?.data?.message) { - this.$toast.error("Could not save libraries"); - return; - } - - this.$toast.info("Successfully saved libraries"); - }, - async scanLibraries() { - // Get the libraries from the API - const libResponse = await this.$axios.get("/api/libraries"); - - // Check if the response is valid - if (!libResponse?.data) { - this.$toast.error("Could not get libraries"); - return; - } - - // Map the libraries to the correct format - const allLibraries = libResponse.data.map((library: { id: string; name: string; created: string }) => { - return { - id: library.id, - name: library.name, - created: new Date(library.created), - }; - }) as Array<{ id: string; name: string; created: Date }>; - - // Update the libraries in the store - this.libraries = allLibraries; - - // Get the libraries from the media server - const scanResponse = await this.$axios.get("/api/scan-libraries"); - - // Check if the response is valid - if (!scanResponse?.data?.libraries) { - this.$toast.error("Could not get libraries"); - return; - } - - // Map the libraries to the correct format - const libraries: [string, string][] = Object.entries(scanResponse.data.libraries); - const newLibraries: Array<{ id: string; name: string; selected: boolean }> = []; - - // Check if the library is selected - for (const [name, id] of libraries) { - const selected = allLibraries.find((library) => library.id === id) !== undefined; - newLibraries.push({ id: id, name: name, selected: selected }); - } - - return newLibraries; - }, - }, - persist: true, -}); diff --git a/frontend/src/stores/server.ts b/frontend/src/stores/server.ts deleted file mode 100644 index 972c9ad13..000000000 --- a/frontend/src/stores/server.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { Server, ServerSettings } from "@/types/api/server"; - -import { defineStore } from "pinia"; - -export const useServerStore = defineStore("server", { - state: () => ({ - settings: {} as ServerSettings, - version: "" as string, - update_available: false as boolean, - debug: false as boolean, - setup_required: false as boolean, - latest_version: "" as string, - latest_beta_version: "" as string, - }), - actions: { - setServerData(server_data: Partial | undefined) { - if (server_data !== undefined) { - Object.keys(server_data).forEach((key: string) => { - if ((this as any)[key] !== undefined) (this as any)[key] = (server_data as { [key: string]: any })[key]; - }); - } - }, - }, - persist: true, -}); diff --git a/frontend/src/stores/sessions.ts b/frontend/src/stores/sessions.ts deleted file mode 100644 index 571385b33..000000000 --- a/frontend/src/stores/sessions.ts +++ /dev/null @@ -1,56 +0,0 @@ -import type { Session, Sessions } from "@/types/api/sessions"; -import { defineStore } from "pinia"; - -interface SessionsStoreState { - sessions: Sessions; -} - -export const useSessionsStore = defineStore("sessions", { - state: (): SessionsStoreState => ({ - sessions: [], - }), - actions: { - async getSessions() { - // Get the sessions from the API - const sessions = await this.$axios.get("/api/sessions").catch((err) => { - this.$toast.error("Could not get sessions"); - return null; - }); - - // If the sessions are null, return - if (sessions === null) return; - - // Update the sessions that are already in the store - this.sessions.forEach((session, index) => { - const new_session = sessions.data.find((new_session: Session) => new_session.id === session.id); - if (new_session) this.sessions[index] = new_session; - }); - - // Add the new sessions to the store if they don't exist - sessions.data.forEach((session: Session) => { - if (!this.sessions.find((old_session) => old_session.id === session.id)) this.sessions.push(session); - }); - - // Remove the sessions that were not in the response - this.sessions.forEach((session, index) => { - if (!sessions.data.find((new_session: Session) => new_session.id === session.id)) this.sessions.splice(index, 1); - }); - }, - async deleteSession(id: number) { - // Delete the session from the API - const response = await this.$axios.delete(`/api/sessions/${id}`).catch((err) => { - this.$toast.error("Could not delete session"); - console.error(err); - return null; - }); - - // If the response is null, return - if (response === null) return; - - // Remove the session from the store - const index = this.sessions.findIndex((session: Session) => session.id === id); - if (index !== -1) this.sessions.splice(index, 1); - }, - }, - persist: true, -}); diff --git a/frontend/src/stores/settings.ts b/frontend/src/stores/settings.ts deleted file mode 100644 index b149170fd..000000000 --- a/frontend/src/stores/settings.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { defineStore } from "pinia"; - -interface SettingsStoreState { - search: string; - header: "search" | "back"; -} - -export const useSettingsStore = defineStore("settings", { - state: (): SettingsStoreState => ({ - search: "", - header: "search", - }), -}); diff --git a/frontend/src/templates/AdminTemplate.vue b/frontend/src/templates/AdminTemplate.vue deleted file mode 100644 index 91fed527d..000000000 --- a/frontend/src/templates/AdminTemplate.vue +++ /dev/null @@ -1,131 +0,0 @@ - - - diff --git a/frontend/src/templates/SettingsTemplate.vue b/frontend/src/templates/SettingsTemplate.vue deleted file mode 100644 index 6d2389d93..000000000 --- a/frontend/src/templates/SettingsTemplate.vue +++ /dev/null @@ -1,55 +0,0 @@ - - - diff --git a/frontend/src/tours/admin-home.ts b/frontend/src/tours/admin-home.ts deleted file mode 100644 index 2e16f9589..000000000 --- a/frontend/src/tours/admin-home.ts +++ /dev/null @@ -1,42 +0,0 @@ -import type { App } from "vue"; -import type { CustomTourGuideOptions } from "@/plugins/tours"; -import type { TourGuideCallbacks } from "."; -import { TourGuideStep } from "@sjmc11/tourguidejs/src/types/TourGuideStep"; - -const steps = (__: (key: string) => string): TourGuideStep[] => [ - { - title: __("Welcome to Wizarr"), - content: __("We want to help you get started with Wizarr as quickly as possible, consider following this tour to get a quick overview."), - }, - { - title: __("Dashboard Widgets"), - content: __("These are your widgets, you can use them to get a quick overview of your Wizarr instance."), - target: ".grid-stack-item:nth-child(2)", - }, - { - title: __("Latest Information"), - content: __("Like this Widget, it shows you the latest information about Wizarr and will be updated regularly by our amazing team."), - target: ".latest-info", - }, - { - title: __("Edit Dashboard"), - content: __("You can also edit your dashboard, delete widgets, add new widgets, and move them around."), - target: "#editDashboard", - }, -]; - -const options = (__: (key: string) => string, app?: App): Partial => { - return { - finishLabel: __("Next Page"), - }; -}; - -const callbacks = (__: (key: string) => string, app?: App): TourGuideCallbacks => { - return { - onFinish: () => { - app?.config.globalProperties.$router.push("/admin/invitations"); - }, - }; -}; - -export { steps, options, callbacks }; diff --git a/frontend/src/tours/admin-invitations.ts b/frontend/src/tours/admin-invitations.ts deleted file mode 100644 index dcaefd436..000000000 --- a/frontend/src/tours/admin-invitations.ts +++ /dev/null @@ -1,33 +0,0 @@ -import type { CustomTourGuideStep, TourGuideCallbacks } from "."; - -import type { App } from "vue"; -import type TourGuideOptions from "@sjmc11/tourguidejs/src/core/options"; - -const steps = (__: (key: string) => string): CustomTourGuideStep[] => [ - { - title: __("Your Invitations"), - content: __("This is where you can manage your invitations, they will appear here in a list. Invitations are used to invite new users to your media server."), - target: document.querySelector("#invitationList > li:nth-child(1)") ?? "#invitationList", - }, - { - title: __("Create Invitation"), - content: __("You can create a new invitation by clicking on the 'Create Invitation' button."), - target: "#createInvitation", - }, -]; - -const options = (__: (key: string) => string, app?: App): Partial => { - return { - finishLabel: __("Next Page"), - }; -}; - -const callbacks = (__: (key: string) => string, app?: App): TourGuideCallbacks => { - return { - onFinish: () => { - app?.config.globalProperties.$router.push("/admin/users"); - }, - }; -}; - -export { steps, options, callbacks }; diff --git a/frontend/src/tours/admin-settings.ts b/frontend/src/tours/admin-settings.ts deleted file mode 100644 index 8ac47cee2..000000000 --- a/frontend/src/tours/admin-settings.ts +++ /dev/null @@ -1,34 +0,0 @@ -import type { CustomTourGuideStep, TourGuideCallbacks } from "."; - -import type { App } from "vue"; - -const steps = (__: (key: string) => string): CustomTourGuideStep[] => [ - { - title: __("Your Settings"), - content: __("All of your media server settings will appear here, we know your going to spend a lot of time here 😝"), - }, - { - title: __("Search Settings"), - content: __("There are a lot of settings, so you can search for them by using the search bar."), - target: "#searchSettings", - }, - { - title: __("Settings Categories"), - content: __("We have categorized all of your settings to make it easier to find them."), - target: "#settingsContainer1", - }, - { - title: __("End of Tour"), - content: __("This is the end of the tour, we hope you enjoyed you found it informative! Please feel free to contact us on Discord and let us know what you think of Wizarr."), - }, -]; - -const callbacks = (__: (key: string) => string, app?: App): TourGuideCallbacks => { - return { - onFinish: () => { - app?.config.globalProperties.$toast.info("Thanks for taking the tour!"); - }, - }; -}; - -export { steps, callbacks }; diff --git a/frontend/src/tours/admin-users.ts b/frontend/src/tours/admin-users.ts deleted file mode 100644 index c4bfbf9d7..000000000 --- a/frontend/src/tours/admin-users.ts +++ /dev/null @@ -1,33 +0,0 @@ -import type { CustomTourGuideStep, TourGuideCallbacks } from "."; - -import type { App } from "vue"; -import type TourGuideOptions from "@sjmc11/tourguidejs/src/core/options"; - -const steps = (__: (key: string) => string): CustomTourGuideStep[] => [ - { - title: __("Your Users"), - content: __("All of your media server users will appear here in a list. You can manage them, edit them, and delete them. Other information like their expiration or creation date will also be displayed here."), - target: document.querySelector("#userList > li:nth-child(1)") ?? "#userList", - }, - { - title: __("Scan for Users"), - content: __("Wizarr will automatically scan your media server for new users, but you can also manually scan for new users by clicking on the 'Scan for Users' button, this is useful if Wizarr has not gotten around to doing it yet."), - target: "#scanUsers", - }, -]; - -const options = (__: (key: string) => string, app?: App): Partial => { - return { - finishLabel: __("Next Page"), - }; -}; - -const callbacks = (__: (key: string) => string, app?: App): TourGuideCallbacks => { - return { - onFinish: () => { - app?.config.globalProperties.$router.push("/admin/settings"); - }, - }; -}; - -export { steps, options, callbacks }; diff --git a/frontend/src/ts/filters/index.ts b/frontend/src/ts/filters/index.ts deleted file mode 100644 index 4be0c2c13..000000000 --- a/frontend/src/ts/filters/index.ts +++ /dev/null @@ -1,21 +0,0 @@ -import titleCase from "./titleCase"; -import underscroreSpaces from "./underscoreSpaces"; -import firstLetterUppercase from "./firstLetterUppercase"; -import removeVersion from "./removeVersion"; -import timeAgo from "./timeAgo"; -import toMinutes from "./toMinutes"; -import isPast from "./isPast"; -import dateLess from "./dateLess"; - -const filters = { - titleCase, - underscroreSpaces, - firstLetterUppercase, - removeVersion, - timeAgo, - toMinutes, - isPast, - dateLess, -}; - -export default filters; diff --git a/frontend/src/ts/utils/axios.ts b/frontend/src/ts/utils/axios.ts deleted file mode 100644 index c872868ff..000000000 --- a/frontend/src/ts/utils/axios.ts +++ /dev/null @@ -1,148 +0,0 @@ -import mainAxios, { Axios, type AxiosRequestConfig, type AxiosResponse, type InternalAxiosRequestConfig } from "axios"; -import cookie from "js-cookie"; -import Auth from "@/api/authentication"; - -import { errorToast, infoToast } from "./toasts"; -import { useAuthStore } from "@/stores/auth"; -import { useToast } from "@/plugins/toasts"; - -export interface CustomAxiosResponse extends AxiosResponse { - config: CustomAxiosRequestConfig & InternalAxiosRequestConfig; -} - -export interface CustomAxiosRequestConfig extends AxiosRequestConfig { - disableInfoToast?: boolean; - disableErrorToast?: boolean; - refresh_header?: boolean; -} - -export interface CustomAxiosInstance extends Axios { - disableInfoToast?: boolean; - disableErrorToast?: boolean; - refresh_header?: boolean; - getUri(config?: CustomAxiosRequestConfig): string; - request, D = any>(config: CustomAxiosRequestConfig): Promise; - get, D = any>(url: string, config?: CustomAxiosRequestConfig): Promise; - delete, D = any>(url: string, config?: CustomAxiosRequestConfig): Promise; - head, D = any>(url: string, config?: CustomAxiosRequestConfig): Promise; - options, D = any>(url: string, config?: CustomAxiosRequestConfig): Promise; - post, D = any>(url: string, data?: D, config?: CustomAxiosRequestConfig): Promise; - put, D = any>(url: string, data?: D, config?: CustomAxiosRequestConfig): Promise; - patch, D = any>(url: string, data?: D, config?: CustomAxiosRequestConfig): Promise; - postForm, D = any>(url: string, data?: D, config?: CustomAxiosRequestConfig): Promise; - putForm, D = any>(url: string, data?: D, config?: CustomAxiosRequestConfig): Promise; - patchForm, D = any>(url: string, data?: D, config?: CustomAxiosRequestConfig): Promise; -} - -class AxiosInterceptor { - // Axios instance and progress store - public axios: CustomAxiosInstance = mainAxios.create(); - - /* - * Constructor to apply interceptors - */ - constructor(axios: CustomAxiosInstance) { - // Apply interceptors - axios.interceptors.response.use(this.resp.bind(this), this.error.bind(this)); - axios.interceptors.request.use(this.req.bind(this), this.error.bind(this)); - axios.defaults.headers.common["X-CSRF-TOKEN"] = cookie.get("csrf_access_token"); - - // If localstorage has a base url, set it - if (typeof window !== "undefined") { - if (localStorage.getItem("base_url")) { - axios.defaults.baseURL = localStorage.getItem("base_url") as string; - } - } - - // Set axios instance - this.axios = axios; - } - - /* - * Interceptor for axios request - * @param config - * @returns {any} - */ - public req(config: InternalAxiosRequestConfig & CustomAxiosRequestConfig) { - // Try to add the authorization header to the request - try { - const authStore = useAuthStore(); - - if (config.refresh_header && (authStore.refresh_token?.length ?? 0) > 0) { - config.headers["Authorization"] = `Bearer ${authStore.refresh_token}`; - } - - if ((authStore.token?.length ?? 0) > 0 && !config.refresh_header && (authStore.refresh_token?.length ?? 0) > 0) { - config.headers["Authorization"] = `Bearer ${authStore.token}`; - } - } catch (e) { - // Do nothing - } - - return config; - } - - /* - * Interceptor for axios response - * @param resp - * @returns {any} - */ - public resp(resp: CustomAxiosResponse) { - // If response has a message, show it - if (!this.axios.disableInfoToast && !resp.config.disableInfoToast) { - if (resp.data?.message) { - infoToast(resp.data.message); - } - } - - return resp; - } - - /* - * Interceptor for axios error - * @param error - * @returns {any} - */ - public async error(error: any) { - if (this.axios.disableErrorToast || error.config.disableErrorToast) { - return Promise.reject(error); - } - - const showErrorToast = (message: string) => errorToast(message); - - const { response } = error; - if (response?.data) { - const { errors, message } = response.data as { errors?: Record; message?: string }; - if (errors) { - Object.values(errors).forEach((errorMessages: string[] | string) => { - if (Array.isArray(errorMessages)) { - errorMessages.forEach((errorMessage: string) => { - showErrorToast(errorMessage); - }); - } else if (typeof errorMessages === "string") { - showErrorToast(errorMessages); - } - }); - } else if (message) { - showErrorToast(message); - } - } - - if (response?.status === 401) { - try { - const auth = new Auth(); - auth.logout(); - } catch (e) { - useToast().error("An unauthenticated request was made, but we failed to log you out. Please refresh the page."); - } - } - - return Promise.reject(error); - } -} - -// Create a new instance of AxiosInterceptor -const axios = () => new AxiosInterceptor(mainAxios).axios; - -export default axios; -export { AxiosInterceptor }; diff --git a/frontend/src/ts/utils/firebase.ts b/frontend/src/ts/utils/firebase.ts deleted file mode 100644 index eb337cc04..000000000 --- a/frontend/src/ts/utils/firebase.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { initializeApp } from "firebase/app"; - -const firebaseConfig = { - apiKey: "AIzaSyCcxBu0jn9Qr7k5UQiJaqgOSSQGAGWuYoc", - authDomain: "wizarr-v3.firebaseapp.com", - projectId: "wizarr-v3", - storageBucket: "wizarr-v3.appspot.com", - messagingSenderId: "163741477369", - appId: "1:163741477369:web:5aee8a3c42835f94d2b528", -}; - -export default initializeApp(firebaseConfig); diff --git a/frontend/src/ts/utils/widgets.ts b/frontend/src/ts/utils/widgets.ts deleted file mode 100644 index 3370b861f..000000000 --- a/frontend/src/ts/utils/widgets.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { defineAsyncComponent, type AsyncComponentLoader } from "vue"; - -import ErrorWidget from "@/widgets/components/ErrorWidget.vue"; -import LoadingWidget from "@/widgets/components/LoadingWidget.vue"; - -export const getWidget = (type: T): AsyncComponentLoader => { - return defineAsyncComponent({ - loader: () => import(`../../widgets/default/${type}.vue`).then((m) => m.default).catch(() => import("@/widgets/components/ErrorWidget.vue")), - errorComponent: ErrorWidget, - loadingComponent: LoadingWidget, - }); -}; diff --git a/frontend/src/widgets/components/ErrorWidget.vue b/frontend/src/widgets/components/ErrorWidget.vue deleted file mode 100644 index 65b1eb9f8..000000000 --- a/frontend/src/widgets/components/ErrorWidget.vue +++ /dev/null @@ -1,15 +0,0 @@ - - - diff --git a/frontend/src/widgets/components/LoadingWidget.vue b/frontend/src/widgets/components/LoadingWidget.vue deleted file mode 100644 index b0241a0e8..000000000 --- a/frontend/src/widgets/components/LoadingWidget.vue +++ /dev/null @@ -1,23 +0,0 @@ - - - diff --git a/frontend/src/widgets/default/ContributorsList.vue b/frontend/src/widgets/default/ContributorsList.vue deleted file mode 100644 index 949049d87..000000000 --- a/frontend/src/widgets/default/ContributorsList.vue +++ /dev/null @@ -1,103 +0,0 @@ - - - diff --git a/frontend/src/widgets/default/InvitesTotal.vue b/frontend/src/widgets/default/InvitesTotal.vue deleted file mode 100644 index 1e82e467c..000000000 --- a/frontend/src/widgets/default/InvitesTotal.vue +++ /dev/null @@ -1,24 +0,0 @@ - - - diff --git a/frontend/src/widgets/default/LatestInfo.vue b/frontend/src/widgets/default/LatestInfo.vue deleted file mode 100644 index 5e5abf262..000000000 --- a/frontend/src/widgets/default/LatestInfo.vue +++ /dev/null @@ -1,50 +0,0 @@ - - - diff --git a/frontend/src/widgets/templates/DefaultWidget.vue b/frontend/src/widgets/templates/DefaultWidget.vue deleted file mode 100644 index 59b9b292a..000000000 --- a/frontend/src/widgets/templates/DefaultWidget.vue +++ /dev/null @@ -1,42 +0,0 @@ - - - diff --git a/frontend/tailwind.config.js b/frontend/tailwind.config.js deleted file mode 100644 index abd83729f..000000000 --- a/frontend/tailwind.config.js +++ /dev/null @@ -1,45 +0,0 @@ -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - "./index.html", // main index.html - "./src/**/*.{vue,js,ts,jsx,tsx}", // vue components - "./node_modules/flowbite/**/*.js", // flowbite components - "./src/formkit.theme.ts", // formkit theme - "./node_modules/@flavorly/vanilla-components/dist/presets/tailwind/all.json", // vanilla components - ], - darkMode: "class", - theme: { - extend: { - colors: { - primary: "#fe4155", - primary_hover: "#e05362", - secondary: "#4B5563", - secondary_hover: "#39414b", - }, - animation: { - wiggle: "wiggle 0.5s ease-in-out infinite", - // animation: shake 0.82s cubic-bezier(.36,.07,.19,.97) both; - shake: "shake 0.82s cubic-bezier(.36,.07,.19,.97) both", - }, - keyframes: { - wiggle: { - "0%, 100%": { transform: "rotate(-0.25deg)" }, - "50%": { transform: "rotate(0.25deg)" }, - }, - shake: { - "10%, 90%": { transform: "translate3d(-1px, 0, 0)" }, - "20%, 80%": { transform: "translate3d(2px, 0, 0)" }, - "30%, 50%, 70%": { transform: "translate3d(-4px, 0, 0)" }, - "40%, 60%": { transform: "translate3d(4px, 0, 0)" }, - }, - }, - }, - }, - plugins: [ - require("flowbite/plugin"), // flowbite - require("tailwindcss-inner-border"), // inner border - require("@formkit/themes/tailwindcss"), // formkit - require("@tailwindcss/forms"), // tailwind forms - require('tailwind-scrollbar'), // scrollbar - ], -}; diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json deleted file mode 100644 index 4616a671c..000000000 --- a/frontend/tsconfig.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "files": [], - "references": [ - { - "path": "./tsconfig.node.json" - }, - { - "path": "./tsconfig.app.json" - }, - { - "path": "./tsconfig.vitest.json" - } - ], - "exclude": [ - "node_modules/@flavorly/vanilla-components/*" - ], - "compilerOptions": { - "ignoreDeprecations": "5.0", - "suppressImplicitAnyIndexErrors": true, - "strict": false, - }, -} \ No newline at end of file diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts deleted file mode 100644 index c5e9d3114..000000000 --- a/frontend/vite.config.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { URL, fileURLToPath } from "node:url"; - -import { VitePWA } from "vite-plugin-pwa"; -// Configs -import VitePWAConfig from "./config/VitePWA.config"; -import ViteSSRConfig from "./config/ViteSSR.config"; -import babel from "vite-plugin-babel"; -import browserSync from "vite-plugin-browser-sync"; -import { defineConfig } from "vite"; -import legacy from "@vitejs/plugin-legacy"; -import ssr from "vite-plugin-ssr/plugin"; -import svgLoader from "vite-svg-loader"; -// Plugins -import vue from "@vitejs/plugin-vue"; -import vueJsx from "@vitejs/plugin-vue-jsx"; - -// https://vitejs.dev/config/ -export default defineConfig({ - plugins: [ - vue(), // Initizalize Vue Plugin - vueJsx(), // Initialize Vue JSX Plugin - // ssr(ViteSSRConfig), // Initialize Vite SSR Plugin (Disabled for now) - VitePWA(VitePWAConfig), // Initialize Vite PWA Plugin - babel(), // Initialize Babel Plugin - // legacy(), // Initialize Legacy Plugin - // browserSync(), // Initialize BrowserSync Plugin - svgLoader(), // Initialize SVG Loader Plugin - ], - build: { - sourcemap: true, - }, - resolve: { - alias: { - "@": fileURLToPath(new URL("./src", import.meta.url)), - }, - }, - server: { - proxy: { - "/api": { - target: "http://127.0.0.1:5000", - changeOrigin: true, - xfwd: true, - }, - "/swaggerui": { - target: "http://127.0.0.1:5000", - changeOrigin: true, - xfwd: true, - }, - "/socket.io": { - target: "ws://127.0.0.1:5000", - changeOrigin: true, - ws: true, - xfwd: true, - }, - }, - }, - // assetsInclude: ["**/*.html"], -}); diff --git a/frontend/vitest.config.ts b/frontend/vitest.config.ts deleted file mode 100644 index df5b9660c..000000000 --- a/frontend/vitest.config.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { fileURLToPath } from "node:url"; -import { configDefaults, defineConfig, mergeConfig } from "vitest/config"; - -import viteConfig from "./vite.config"; - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: "jsdom", - exclude: [...configDefaults.exclude, "e2e/*"], - root: fileURLToPath(new URL("./", import.meta.url)), - }, - }), -); diff --git a/frontend/volar.config.js b/frontend/volar.config.js deleted file mode 100644 index 72c0d78de..000000000 --- a/frontend/volar.config.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports = { - services: [ - require('volar-service-prettyhtml').default({ - printWidth: 10000, - tabWidth: 4, - useTabs: false - }), - ], -}; \ No newline at end of file diff --git a/gunicorn.conf.py b/gunicorn.conf.py deleted file mode 100644 index e3f6ed499..000000000 --- a/gunicorn.conf.py +++ /dev/null @@ -1,9 +0,0 @@ -import multiprocessing - -# gunicorn --worker-class eventlet -w 1 -b 0.0.0.0:5001 --reload run:app -use = "eventlet" -bind = "127.0.0.1:5000" -reload = True -debug = True -# workers = multiprocessing.cpu_count() * 2 + 1 -workers = 1 \ No newline at end of file diff --git a/nx.json b/nx.json new file mode 100644 index 000000000..4499420d1 --- /dev/null +++ b/nx.json @@ -0,0 +1,67 @@ +{ + "$schema": "./node_modules/nx/schemas/nx-schema.json", + "targetDefaults": { + "build": { + "cache": true, + "dependsOn": [ + "^build" + ], + "inputs": [ + "production", + "^production" + ] + }, + "docker": { + "executor": "@nrwl/workspace:run-commands", + "options": { + "command": "docker build -t $npm_package_name .", + "cwd": "$npm_package_name", + "color": "yellow" + }, + "outputs": [ + "$npm_package_name" + ] + }, + "lint": { + "cache": true, + "inputs": [ + "default", + "{workspaceRoot}/.eslintrc.json", + "{workspaceRoot}/.eslintignore", + "{workspaceRoot}/eslint.config.js" + ] + }, + "test": { + "cache": true, + "inputs": [ + "default", + "^production" + ] + }, + "e2e": { + "cache": true, + "inputs": [ + "default", + "^production" + ] + } + }, + "namedInputs": { + "default": [ + "{projectRoot}/**/*", + "sharedGlobals" + ], + "production": [ + "default", + "!{projectRoot}/.eslintrc.json", + "!{projectRoot}/eslint.config.js", + "!{projectRoot}/**/?(*.)+(spec|test).[jt]s?(x)?(.snap)", + "!{projectRoot}/tsconfig.spec.json" + ], + "sharedGlobals": [] + }, + "plugins": [ + "@nxlv/python" + ], + "nxCloudAccessToken": "ZGVkMzdiZGQtZTk3Ny00MDFmLTljNWQtYzQ2Zjk4ZWNkY2VmfHJlYWQtd3JpdGU=" +} \ No newline at end of file diff --git a/frontend/package-lock.json b/package-lock.json similarity index 78% rename from frontend/package-lock.json rename to package-lock.json index 3900a2da2..5e18ac9a6 100644 --- a/frontend/package-lock.json +++ b/package-lock.json @@ -1,12 +1,13 @@ { - "name": "vite-project", + "name": "@wizarrrr/source", "version": "0.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "vite-project", + "name": "@wizarrrr/source", "version": "0.0.0", + "license": "MIT", "dependencies": { "@aacassandra/vue3-progressbar": "^1.0.3", "@flavorly/vanilla-components": "^0.7.63", @@ -59,9 +60,6 @@ "moment": "^2.29.4", "mount-vue-component": "^0.10.2", "nanoid": "^4.0.2", - "ol": "^7.5.2", - "ol-contextmenu": "^5.2.1", - "ol-ext": "^4.0.8", "ping.js": "^0.3.0", "pinia": "^2.1.6", "pinia-plugin-persistedstate": "^3.2.0", @@ -82,6 +80,7 @@ "vue-toastification": "^2.0.0-rc.5", "vue-top-progress": "^0.7.0", "vue-ts-responsive-grid-layout": "^1.2.1", + "vue-tsc": "^1.8.8", "vue3-gettext": "^3.0.0-beta.1", "vue3-openlayers": "^2.0.0", "vue3-popper": "^1.5.0", @@ -91,16 +90,30 @@ "xterm-addon-fit": "^0.7.0" }, "devDependencies": { + "@nx/cypress": "17.0.0", + "@nx/eslint": "17.0.0", + "@nx/eslint-plugin": "17.0.0", + "@nx/js": "17.0.0", + "@nx/vite": "17.0.0", + "@nx/vue": "17.0.0", + "@nx/workspace": "17.0.0", + "@nxlv/python": "^16.1.4", "@rushstack/eslint-patch": "^1.3.2", "@stripe/stripe-js": "^2.1.6", + "@swc-node/register": "~1.6.7", + "@swc/core": "~1.3.85", "@tsconfig/node18": "^18.2.0", "@types/js-cookie": "^3.0.3", "@types/jsdom": "^21.1.1", "@types/node": "^18.17.5", "@types/qrcode": "^1.5.2", + "@typescript-eslint/eslint-plugin": "^5.60.1", + "@typescript-eslint/parser": "^5.60.1", "@vite-pwa/assets-generator": "^0.0.9", "@vitejs/plugin-vue": "^4.3.1", "@vitejs/plugin-vue-jsx": "^3.0.2", + "@vitest/coverage-c8": "~0.32.0", + "@vitest/ui": "~0.32.0", "@vue/eslint-config-prettier": "^8.0.0", "@vue/eslint-config-typescript": "^11.0.3", "@vue/test-utils": "^2.4.1", @@ -113,6 +126,7 @@ "eslint-plugin-vue": "^9.17.0", "jsdom": "^22.1.0", "npm-run-all": "^4.1.5", + "nx": "17.0.0", "postcss": "^8.4.28", "prettier": "3.0.2", "sass": "^1.66.1", @@ -184,41 +198,97 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.10.tgz", - "integrity": "sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "dependencies": { - "@babel/highlight": "^7.22.10", + "@babel/highlight": "^7.22.13", "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.2.tgz", + "integrity": "sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.11.tgz", - "integrity": "sha512-lh7RJrtPdhibbxndr6/xx0w8+CVlY5FJZiaSz908Fpy+G0xkBFTvwLcKJFF4PJxVfGhVWNebikpWGnOoC71juQ==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.2.tgz", + "integrity": "sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", - "@babel/helper-compilation-targets": "^7.22.10", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.11", - "@babel/parser": "^7.22.11", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.11", - "@babel/types": "^7.22.11", - "convert-source-map": "^1.7.0", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.23.0", + "@babel/helpers": "^7.23.2", + "@babel/parser": "^7.23.0", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", @@ -232,12 +302,20 @@ "url": "https://opencollective.com/babel" } }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/generator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz", - "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "dependencies": { - "@babel/types": "^7.22.10", + "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -258,23 +336,23 @@ } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.10.tgz", - "integrity": "sha512-Av0qubwDQxC56DoUReVDeLfMEjYYSN1nZrTUrWkXd7hpU73ymRANkbuDm3yni9npkn+RXy9nNbEJZEzXr7xrfQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", + "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", "dependencies": { - "@babel/types": "^7.22.10" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", - "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", "dependencies": { "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", "browserslist": "^4.21.9", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -283,15 +361,23 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.11.tgz", - "integrity": "sha512-y1grdYL4WzmUDBRGK0pDbIoFd7UZKoDurDzWEoNMYoj1EL+foGRQNyPWDcC+YyegN5y1DUsFFmzjGijB3nSVAQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", + "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.15", "@babel/helper-optimise-call-expression": "^7.22.5", "@babel/helper-replace-supers": "^7.22.9", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", @@ -305,10 +391,18 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz", - "integrity": "sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "regexpu-core": "^5.3.1", @@ -321,10 +415,18 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", - "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz", + "integrity": "sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==", "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-plugin-utils": "^7.22.5", @@ -337,20 +439,20 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" @@ -368,37 +470,37 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", - "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", + "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", - "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz", + "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", "@babel/helper-simple-access": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" + "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -427,13 +529,13 @@ } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz", - "integrity": "sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", + "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-wrap-function": "^7.22.9" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-wrap-function": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -443,12 +545,12 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", - "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", + "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.22.15", "@babel/helper-optimise-call-expression": "^7.22.5" }, "engines": { @@ -500,53 +602,53 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.10.tgz", - "integrity": "sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", + "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", "dependencies": { "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.10" + "@babel/template": "^7.22.15", + "@babel/types": "^7.22.19" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.11.tgz", - "integrity": "sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", + "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.11", - "@babel/types": "^7.22.11" + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.10.tgz", - "integrity": "sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, @@ -554,10 +656,66 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/parser": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.11.tgz", - "integrity": "sha512-R5zb8eJIBPJriQtbH/htEQy4k7E2dHWlD2Y2VT07JCzwYZHBxV5ZYtM0UhXSNMT74LyxuM+b1jdL7pSesXbC/g==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", "bin": { "parser": "bin/babel-parser.js" }, @@ -566,9 +724,9 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", - "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz", + "integrity": "sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -580,13 +738,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", - "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz", + "integrity": "sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5" + "@babel/plugin-transform-optional-chaining": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -595,6 +753,25 @@ "@babel/core": "^7.13.0" } }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.23.2.tgz", + "integrity": "sha512-eR0gJQc830fJVGz37oKLvt9W9uUIQSAovUl0e9sJ3YeO09dlcoBVYD3CLrjCj4qHdXmfiyTyFt8yeQYSN5fxLg==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/plugin-syntax-decorators": "^7.22.10" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-proposal-private-property-in-object": { "version": "7.21.0-placeholder-for-preset-env.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", @@ -617,6 +794,18 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-class-properties": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", @@ -642,6 +831,21 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.22.10.tgz", + "integrity": "sha512-z1KTVemBjnz+kSEilAsI4lbkPOl5TvJH7YDSY1CTIzvLWJ+KHXp+mRe8VPmfnyvqOPqar1V2gid2PleKzRUstQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", @@ -868,13 +1072,13 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.11.tgz", - "integrity": "sha512-0pAlmeRJn6wU84zzZsEOx1JV1Jf8fqO9ok7wofIJwUnplYo247dcd24P+cMJht7ts9xkzdtB0EPHmOb7F+KzXw==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.2.tgz", + "integrity": "sha512-BBYVGxbDVHfoeXbOwcagAkOQAm9NxoTdMGfTqghu1GrvadSaw6iW3Je6IcL5PNOw8VwjxqBECXy50/iCQSY/lQ==", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.9", + "@babel/helper-remap-async-to-generator": "^7.22.20", "@babel/plugin-syntax-async-generators": "^7.8.4" }, "engines": { @@ -915,9 +1119,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.10.tgz", - "integrity": "sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz", + "integrity": "sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -960,17 +1164,17 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", - "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz", + "integrity": "sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-function-name": "^7.22.5", "@babel/helper-optimise-call-expression": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", "@babel/helper-split-export-declaration": "^7.22.6", "globals": "^11.1.0" }, @@ -997,9 +1201,9 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.10.tgz", - "integrity": "sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz", + "integrity": "sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1085,9 +1289,9 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", - "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz", + "integrity": "sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1173,11 +1377,11 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", - "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz", + "integrity": "sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw==", "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.0", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { @@ -1188,11 +1392,11 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.11.tgz", - "integrity": "sha512-o2+bg7GDS60cJMgz9jWqRUsWkMzLCxp+jFDeDUT5sjRlAxcJWZ2ylNdI7QQ2+CH5hWu7OnN+Cv3htt7AkSf96g==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz", + "integrity": "sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==", "dependencies": { - "@babel/helper-module-transforms": "^7.22.9", + "@babel/helper-module-transforms": "^7.23.0", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-simple-access": "^7.22.5" }, @@ -1204,14 +1408,14 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.11.tgz", - "integrity": "sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz", + "integrity": "sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg==", "dependencies": { "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.9", + "@babel/helper-module-transforms": "^7.23.0", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5" + "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -1295,15 +1499,15 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.11.tgz", - "integrity": "sha512-nX8cPFa6+UmbepISvlf5jhQyaC7ASs/7UxHmMkuJ/k5xSHvDPPaibMo+v3TXwU/Pjqhep/nFNpd3zn4YR59pnw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz", + "integrity": "sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==", "dependencies": { "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.10", + "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.5" + "@babel/plugin-transform-parameters": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -1343,9 +1547,9 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.22.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.12.tgz", - "integrity": "sha512-7XXCVqZtyFWqjDsYDY4T45w4mlx1rf7aOgkc/Ww76xkgBiOlmjPkx36PBLHa1k1rwWvVgYMPsbuVnIamx2ZQJw==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz", + "integrity": "sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", @@ -1359,9 +1563,9 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", - "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz", + "integrity": "sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1447,6 +1651,35 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.2.tgz", + "integrity": "sha512-XOntj6icgzMS58jPVtQpiuF6ZFWxQiJavISGx5KGjRj+3gqZr8+N6Kx+N9BApWzgS+DOjIZfXXj0ZesenOWDyA==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.6", + "babel-plugin-polyfill-corejs3": "^0.8.5", + "babel-plugin-polyfill-regenerator": "^0.5.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/plugin-transform-shorthand-properties": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", @@ -1519,13 +1752,13 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.11.tgz", - "integrity": "sha512-0E4/L+7gfvHub7wsbTv03oRtD69X31LByy44fGmFzbZScpupFByMcgCJ0VbBTkzyjSJKuRoGN8tcijOWKTmqOA==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.15.tgz", + "integrity": "sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.11", + "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-typescript": "^7.22.5" }, @@ -1596,16 +1829,16 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.10.tgz", - "integrity": "sha512-riHpLb1drNkpLlocmSyEg4oYJIQFeXAK/d7rI6mbD0XsvoTOOweXDmQPG/ErxsEhWk3rl3Q/3F6RFQlVFS8m0A==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.2.tgz", + "integrity": "sha512-BW3gsuDD+rvHL2VO2SjAUNTBe5YrjsTiDyqamPDWY723na3/yPQ65X5oQkFVJZ0o50/2d+svm1rkPoJeR1KxVQ==", "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.10", + "@babel/compat-data": "^7.23.2", + "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.15", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.15", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", @@ -1626,41 +1859,41 @@ "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.10", + "@babel/plugin-transform-async-generator-functions": "^7.23.2", "@babel/plugin-transform-async-to-generator": "^7.22.5", "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.10", + "@babel/plugin-transform-block-scoping": "^7.23.0", "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.5", - "@babel/plugin-transform-classes": "^7.22.6", + "@babel/plugin-transform-class-static-block": "^7.22.11", + "@babel/plugin-transform-classes": "^7.22.15", "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.10", + "@babel/plugin-transform-destructuring": "^7.23.0", "@babel/plugin-transform-dotall-regex": "^7.22.5", "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.11", "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.5", - "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.11", + "@babel/plugin-transform-for-of": "^7.22.15", "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.11", "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.11", "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.5", - "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.23.0", + "@babel/plugin-transform-modules-commonjs": "^7.23.0", + "@babel/plugin-transform-modules-systemjs": "^7.23.0", "@babel/plugin-transform-modules-umd": "^7.22.5", "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", - "@babel/plugin-transform-numeric-separator": "^7.22.5", - "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11", + "@babel/plugin-transform-numeric-separator": "^7.22.11", + "@babel/plugin-transform-object-rest-spread": "^7.22.15", "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.10", - "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.11", + "@babel/plugin-transform-optional-chaining": "^7.23.0", + "@babel/plugin-transform-parameters": "^7.22.15", "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.11", "@babel/plugin-transform-property-literals": "^7.22.5", "@babel/plugin-transform-regenerator": "^7.22.10", "@babel/plugin-transform-reserved-words": "^7.22.5", @@ -1674,10 +1907,10 @@ "@babel/plugin-transform-unicode-regex": "^7.22.5", "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", "@babel/preset-modules": "0.1.6-no-external-plugins", - "@babel/types": "^7.22.10", - "babel-plugin-polyfill-corejs2": "^0.4.5", - "babel-plugin-polyfill-corejs3": "^0.8.3", - "babel-plugin-polyfill-regenerator": "^0.5.2", + "@babel/types": "^7.23.0", + "babel-plugin-polyfill-corejs2": "^0.4.6", + "babel-plugin-polyfill-corejs3": "^0.8.5", + "babel-plugin-polyfill-regenerator": "^0.5.3", "core-js-compat": "^3.31.0", "semver": "^6.3.1" }, @@ -1688,6 +1921,14 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/preset-modules": { "version": "0.1.6-no-external-plugins", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", @@ -1701,15 +1942,34 @@ "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/@babel/preset-typescript": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.23.2.tgz", + "integrity": "sha512-u4UJc1XsS1GhIGteM8rnGiIvf9rJpiVgMEeCnwlLA7WJPC+jcXWJAGxYmeqs5hOZD8BbAfnV5ezBOxQbb4OUxA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.23.0", + "@babel/plugin-transform-typescript": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/regjsgen": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" }, "node_modules/@babel/runtime": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.11.tgz", - "integrity": "sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", + "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -1717,42 +1977,32 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/standalone": { - "version": "7.22.17", - "resolved": "https://registry.npmjs.org/@babel/standalone/-/standalone-7.22.17.tgz", - "integrity": "sha512-Gr713KRqDclP4r4Ds20c/+tFxeHFe8WDHGhc3Q8tVPaJKkLSjDkZjXqcBZ9jPFf5+qXvaKy2mDuAa57tMPDSPA==", - "optional": true, - "peer": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - }, + "node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.11.tgz", - "integrity": "sha512-mzAenteTfomcB7mfPtyi+4oe5BZ6MXxWcn4CX+h4IRJ+OOGXBrWU6jDQavkQI9Vuc5P+donFabBfFCcmWka9lQ==", - "dependencies": { - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.11", - "@babel/types": "^7.22.11", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -1761,32 +2011,38 @@ } }, "node_modules/@babel/types": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.11.tgz", - "integrity": "sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "dependencies": { "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, "node_modules/@brillout/import": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/@brillout/import/-/import-0.2.3.tgz", "integrity": "sha512-1T8WlD75eeFSMrptGy8jiLHmfHgMmSjWvLOIUvHmSVZt+6k0eQqYUoK4KbmE4T9pVLIfxvZSOm2D68VEqKRHRw==" }, "node_modules/@brillout/json-serializer": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@brillout/json-serializer/-/json-serializer-0.5.5.tgz", - "integrity": "sha512-kvT3sKCujZ2pn0Aq+yR3+JFrpee5UprimYXPO14BpLBWcVnoiGd6vyjubHPH6H5zU9QSJbSZ1/cUFWjYonoSmQ==" + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@brillout/json-serializer/-/json-serializer-0.5.6.tgz", + "integrity": "sha512-48u+Wthh0muDueyooi/Or59DDFCPitnuCN9OkMWoj7MQAbDn5pS/cVBB7ds6ENmtC1Qb0spI4PfKZxQSBEkubg==" }, "node_modules/@brillout/picocolors": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@brillout/picocolors/-/picocolors-1.0.7.tgz", - "integrity": "sha512-VQtuP4T/y9Ba5XgG78AN4vNmkndYm7dR4DzLeYs7SRJcNl3rcMgQUMCYbvSco/QDOKWW6ZmJ7G7wloyAGdbbOA==" + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@brillout/picocolors/-/picocolors-1.0.9.tgz", + "integrity": "sha512-Lt/W5JsA75hcDJ2cOAlE4TqSMl6c9K+rXGRo/cU2fApnmhbRcNdkR4UHQDAwtWfZyUKWaxdwSui+jp+74J1pZg==" }, "node_modules/@brillout/require-shim": { "version": "0.1.2", @@ -1794,9 +2050,9 @@ "integrity": "sha512-3I4LRHnVZXoSAsEoni5mosq9l6eiJED58d9V954W4CIZ88AUfYBanWGBGbJG3NztaRTpFHEA6wB3Hn93BmmJdg==" }, "node_modules/@brillout/vite-plugin-import-build": { - "version": "0.2.18", - "resolved": "https://registry.npmjs.org/@brillout/vite-plugin-import-build/-/vite-plugin-import-build-0.2.18.tgz", - "integrity": "sha512-sedZNrqIboHCeSnN7hwo34xRyP8egfMHcifixQ2YGNnQVb93884drTVE3b0vlSGz7LWumVDochKuHdWQljup9A==", + "version": "0.2.20", + "resolved": "https://registry.npmjs.org/@brillout/vite-plugin-import-build/-/vite-plugin-import-build-0.2.20.tgz", + "integrity": "sha512-/bdw1dg+H1nOYSy2PzYInQoZlIFP2uwyaF2GX64fyBqVAEWGopiMlnx294CbysjmP9Z+fJe48TkMzyogkyIDLw==", "dependencies": { "@brillout/import": "^0.2.3" } @@ -1817,6 +2073,28 @@ "node": ">=0.1.90" } }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "devOptional": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "devOptional": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "node_modules/@cypress/request": { "version": "2.88.12", "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.12.tgz", @@ -1846,6 +2124,35 @@ "node": ">= 6" } }, + "node_modules/@cypress/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/@cypress/request/node_modules/qs": { + "version": "6.10.4", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", + "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/@cypress/xvfb": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", @@ -2211,9 +2518,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.0.tgz", - "integrity": "sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.1.tgz", + "integrity": "sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" @@ -2242,10 +2549,16 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.21.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", - "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -2257,6 +2570,30 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/@eslint/eslintrc/node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -2270,9 +2607,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.48.0.tgz", - "integrity": "sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==", + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.51.0.tgz", + "integrity": "sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2314,9 +2651,9 @@ "integrity": "sha512-iRP+QKI2+oz3UAh4nPEq14CsEjrjD6a5+fuypjScisAh9kXKFvdJOZJDwk7kikLvWVLGEs9+kIUS4LPQV7VZVw==" }, "node_modules/@firebase/app": { - "version": "0.9.18", - "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.9.18.tgz", - "integrity": "sha512-SIJi3B/LzNezaEgbFCFIem12+51khkA3iewYljPQPUArWGSAr1cO9NK8TvtJWax5GMKSmQbJPqgi6a+gxHrWGQ==", + "version": "0.9.20", + "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.9.20.tgz", + "integrity": "sha512-cMTDHr+1GfYyHBSLLvvTE8ywlDCKk/E8cUZmfv0ODmUBB1vXgrICShj7yH9UYf6m7l6pxad8T+qI/oAoAkCp2Q==", "dependencies": { "@firebase/component": "0.6.4", "@firebase/logger": "0.4.0", @@ -2366,11 +2703,11 @@ "integrity": "sha512-uwSUj32Mlubybw7tedRzR24RP8M8JUVR3NPiMk3/Z4bCmgEKTlQBwMXrehDAZ2wF+TsBq0SN1c6ema71U/JPyQ==" }, "node_modules/@firebase/app-compat": { - "version": "0.2.18", - "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.2.18.tgz", - "integrity": "sha512-zUbAAZHhwmMUyaNFiFr+1Z/sfcxSQBFrRhpjzzpQMTfiV2C/+P0mC3BQA0HsysdGSYOlwrCs5rEGOyarhRU9Kw==", + "version": "0.2.20", + "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.2.20.tgz", + "integrity": "sha512-FXgdjgwUruLMZMh0HDwLmbcu2ImckT10HPdXZyzIJoaor9OenoTQO2RLk2xvvOL/JJnszN6kmv56c+8qA4KFXQ==", "dependencies": { - "@firebase/app": "0.9.18", + "@firebase/app": "0.9.20", "@firebase/component": "0.6.4", "@firebase/logger": "0.4.0", "@firebase/util": "1.9.3", @@ -2419,6 +2756,44 @@ "@firebase/app-compat": "0.x" } }, + "node_modules/@firebase/auth-compat/node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/@firebase/auth-compat/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/@firebase/auth-compat/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/@firebase/auth-compat/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/@firebase/auth-interop-types": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.2.1.tgz", @@ -2433,6 +2808,44 @@ "@firebase/util": "1.x" } }, + "node_modules/@firebase/auth/node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/@firebase/auth/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/@firebase/auth/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/@firebase/auth/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/@firebase/component": { "version": "0.6.4", "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.4.tgz", @@ -2478,15 +2891,15 @@ } }, "node_modules/@firebase/firestore": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-4.1.3.tgz", - "integrity": "sha512-3kw/oZrLAIHuSDTAlKguZ1e0hAgWgiBl4QQm2mIPBvBAs++iEkuv9DH2tr6rbYpT6dWtdn6jj0RN0XeqOouJRg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-4.3.0.tgz", + "integrity": "sha512-FwSMCxGdUuA9Su74I9himAKJogzjU41IBjjnNf0+5smORMKtWlNeeXqMpljrhZubj5V+GmWyExf5UD3y1in6FA==", "dependencies": { "@firebase/component": "0.6.4", "@firebase/logger": "0.4.0", "@firebase/util": "1.9.3", - "@firebase/webchannel-wrapper": "0.10.2", - "@grpc/grpc-js": "~1.8.17", + "@firebase/webchannel-wrapper": "0.10.3", + "@grpc/grpc-js": "~1.9.0", "@grpc/proto-loader": "^0.7.8", "node-fetch": "2.6.7", "tslib": "^2.1.0" @@ -2499,12 +2912,12 @@ } }, "node_modules/@firebase/firestore-compat": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.3.17.tgz", - "integrity": "sha512-Qh3tbE4vkn9XvyWnRaJM/v4vhCZ+btk2RZcq037o6oECHohaCFortevd/SKA4vA5yOx0/DwARIEv6XwgHkVucg==", + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.3.19.tgz", + "integrity": "sha512-hRcW9oTyluap8Qko/yqtgk4O/BJmR4FxkvF+P6LVvoqtspKLfQL70jJvzr1gYCCXn2OY8XUI7Q9BVdsTzEEONA==", "dependencies": { "@firebase/component": "0.6.4", - "@firebase/firestore": "4.1.3", + "@firebase/firestore": "4.3.0", "@firebase/firestore-types": "3.0.0", "@firebase/util": "1.9.3", "tslib": "^2.1.0" @@ -2522,6 +2935,44 @@ "@firebase/util": "1.x" } }, + "node_modules/@firebase/firestore/node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/@firebase/firestore/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/@firebase/firestore/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/@firebase/firestore/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/@firebase/functions": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.10.0.tgz", @@ -2559,6 +3010,44 @@ "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.6.0.tgz", "integrity": "sha512-hfEw5VJtgWXIRf92ImLkgENqpL6IWpYaXVYiRkFY1jJ9+6tIhWM7IzzwbevwIIud/jaxKVdRzD7QBWfPmkwCYw==" }, + "node_modules/@firebase/functions/node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/@firebase/functions/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/@firebase/functions/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/@firebase/functions/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/@firebase/installations": { "version": "0.6.4", "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.6.4.tgz", @@ -2759,38 +3248,76 @@ "@firebase/util": "1.x" } }, - "node_modules/@firebase/util": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.3.tgz", - "integrity": "sha512-DY02CRhOZwpzO36fHpuVysz6JZrscPiBXD0fXp6qSrL9oNOx5KWICKdR95C0lSITzxp0TZosVyHqzatE8JbcjA==", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/@firebase/webchannel-wrapper": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.10.2.tgz", - "integrity": "sha512-xDxhD9++451HuCv3xKBEdSYaArX9NcokODXZYH/MxGw1XFFOz7OKkTRItZ5wf6npBN/inwp8dUZCP7SpAg46yQ==" - }, - "node_modules/@flavorly/vanilla-components": { - "version": "0.7.63", - "resolved": "https://registry.npmjs.org/@flavorly/vanilla-components/-/vanilla-components-0.7.63.tgz", - "integrity": "sha512-vDDZfcSdB/rr9IX+WDOZ+TRpIUqNn81gizNZnk+GYrOzmN4aXa0CocsKN6zYG/N9cHNm3o1/geCT//4w2zHINw==", + "node_modules/@firebase/storage/node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "dependencies": { - "@headlessui/vue": "^1.7.4", - "@popperjs/core": "^2.11.6" + "whatwg-url": "^5.0.0" }, "engines": { - "node": ">=16" - }, - "optionalDependencies": { - "v-calendar": "^3.0.3" + "node": "4.x || >=6.0.0" }, "peerDependencies": { - "@headlessui/vue": "^1.7.0", - "@popperjs/core": "^2.11.6", - "v-calendar": "^3.0.3", - "vue": "^3.2.45" + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/@firebase/storage/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/@firebase/storage/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/@firebase/storage/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/@firebase/util": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.3.tgz", + "integrity": "sha512-DY02CRhOZwpzO36fHpuVysz6JZrscPiBXD0fXp6qSrL9oNOx5KWICKdR95C0lSITzxp0TZosVyHqzatE8JbcjA==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/webchannel-wrapper": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.10.3.tgz", + "integrity": "sha512-+ZplYUN3HOpgCfgInqgdDAbkGGVzES1cs32JJpeqoh87SkRobGXElJx+1GZSaDqzFL+bYiX18qEcBK76mYs8uA==" + }, + "node_modules/@flavorly/vanilla-components": { + "version": "0.7.65", + "resolved": "https://registry.npmjs.org/@flavorly/vanilla-components/-/vanilla-components-0.7.65.tgz", + "integrity": "sha512-qgXio7iR83WoR+PD6htb+7PReG9AJ8yAngmtjAyKYeMJKo7Dvxm4Wgi6NrwskqtyuS45MQvrfEr4+uAJLjwPbA==", + "dependencies": { + "@headlessui/vue": "^1.7.4", + "@popperjs/core": "^2.11.6" + }, + "engines": { + "node": ">=16" + }, + "optionalDependencies": { + "v-calendar": "^3.0.3" + }, + "peerDependencies": { + "@headlessui/vue": "^1.7.0", + "@popperjs/core": "^2.11.6", + "v-calendar": "^3.0.3", + "vue": "^3.2.45" } }, "node_modules/@floating-ui/core": { @@ -2802,11 +3329,12 @@ } }, "node_modules/@floating-ui/dom": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.1.1.tgz", - "integrity": "sha512-TpIO93+DIujg3g7SykEAGZMDtbJRrmnYRCNYSjJlvIbGhBjRSNTLVbNeDQBrzy9qDgUbiWdc7KA0uZHZ2tJmiw==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.3.tgz", + "integrity": "sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==", "dependencies": { - "@floating-ui/core": "^1.1.0" + "@floating-ui/core": "^1.4.2", + "@floating-ui/utils": "^0.1.3" } }, "node_modules/@floating-ui/utils": { @@ -2815,148 +3343,83 @@ "integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==" }, "node_modules/@formkit/core": { - "version": "0.19.3", - "resolved": "https://registry.npmjs.org/@formkit/core/-/core-0.19.3.tgz", - "integrity": "sha512-6AFthe72r8JeO4C2XwZ2ETcPPzL5HArgh7zKFJHhPAQHA5pTcoyNC/LkwytMGQy8Zr19s9W51ZAGeu4wydUwLw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@formkit/core/-/core-1.2.2.tgz", + "integrity": "sha512-aJoZW7ZWXdwVBdw2acv62aPaecZ44PnK9eyp/hdMrMxT9xW3I84MytCdII8DYpxLmloaE+NoUANZIvlkTRGlHg==", "dependencies": { - "@formkit/utils": "0.19.3" + "@formkit/utils": "1.2.2" } }, "node_modules/@formkit/dev": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@formkit/dev/-/dev-1.0.0.tgz", - "integrity": "sha512-ESX58BklYH1x9312xgyLTJ97wumOfPH98d2F3EL5M6erwHbBssBxBuKqsJkVoBo5Natgtm1VUDd9akA2Qc3dZQ==", - "dependencies": { - "@formkit/core": "1.0.0", - "@formkit/utils": "1.0.0" - } - }, - "node_modules/@formkit/dev/node_modules/@formkit/core": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@formkit/core/-/core-1.0.0.tgz", - "integrity": "sha512-rDFVwNngLcakltasYzmyYDPAYoCoakK+7h4/5V1bE1FQDabhVvJIc5EDH8U80RAKNLGS9xiQ1JK4FHGcZ3K+oQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@formkit/dev/-/dev-1.2.2.tgz", + "integrity": "sha512-C3KzolVAQE732W2aCKgLDXyhnxCNFtWQEPvs677ZAEciMBrZEgU6ZDleb8XTX7FIF4m4PWszfheQIbdy4p0K+Q==", "dependencies": { - "@formkit/utils": "1.0.0" + "@formkit/core": "1.2.2", + "@formkit/utils": "1.2.2" } }, - "node_modules/@formkit/dev/node_modules/@formkit/utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@formkit/utils/-/utils-1.0.0.tgz", - "integrity": "sha512-5T8PbHOajP/eJuoEeLgxA0g25nyVUZKfy2V2mW8idoph+9PT0nZUoIP+KA/PJ2mmexqtuykMT0A5knW8MiXqsw==" - }, "node_modules/@formkit/i18n": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@formkit/i18n/-/i18n-1.0.0.tgz", - "integrity": "sha512-Q2jvwy54NufxGplzyuykowTSuqSMZsCRPJqV+taa/2V8J7EJh3YKiyWP69eKKlHtX9rMmjrlFSTbG4a0AJxdRw==", - "dependencies": { - "@formkit/core": "1.0.0", - "@formkit/utils": "1.0.0", - "@formkit/validation": "1.0.0" - } - }, - "node_modules/@formkit/i18n/node_modules/@formkit/core": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@formkit/core/-/core-1.0.0.tgz", - "integrity": "sha512-rDFVwNngLcakltasYzmyYDPAYoCoakK+7h4/5V1bE1FQDabhVvJIc5EDH8U80RAKNLGS9xiQ1JK4FHGcZ3K+oQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@formkit/i18n/-/i18n-1.2.2.tgz", + "integrity": "sha512-HABPlja6xQk0JztvQnbnhVzFqhgM6XqlqOzGNOtCOcOpMUSY3okT7NSMPTK/Zq4Yq4XQmbJgi/toGfYakqLfhA==", "dependencies": { - "@formkit/utils": "1.0.0" + "@formkit/core": "1.2.2", + "@formkit/utils": "1.2.2", + "@formkit/validation": "1.2.2" } }, - "node_modules/@formkit/i18n/node_modules/@formkit/utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@formkit/utils/-/utils-1.0.0.tgz", - "integrity": "sha512-5T8PbHOajP/eJuoEeLgxA0g25nyVUZKfy2V2mW8idoph+9PT0nZUoIP+KA/PJ2mmexqtuykMT0A5knW8MiXqsw==" - }, "node_modules/@formkit/icons": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@formkit/icons/-/icons-1.0.0.tgz", - "integrity": "sha512-VbY1BCVL5keh+spVeB+06dtq+YSEb1Nm/76nEtb4sbirTzdqWrMnTvji4GtsT9Os8EnoM95CovH10B0D2SLaJg==", - "dependencies": { - "@formkit/core": "1.0.0" - } - }, - "node_modules/@formkit/icons/node_modules/@formkit/core": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@formkit/core/-/core-1.0.0.tgz", - "integrity": "sha512-rDFVwNngLcakltasYzmyYDPAYoCoakK+7h4/5V1bE1FQDabhVvJIc5EDH8U80RAKNLGS9xiQ1JK4FHGcZ3K+oQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@formkit/icons/-/icons-1.2.2.tgz", + "integrity": "sha512-u9QkOaXLoSwCaiqDRhDYhhKLaSM0k5E+yQP43rJPJ/kHiPHfKQ2UoiDyvcB9EKkh9CDYVB8/6A5IMsUp4n0Uyg==", "dependencies": { - "@formkit/utils": "1.0.0" + "@formkit/core": "1.2.2" } }, - "node_modules/@formkit/icons/node_modules/@formkit/utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@formkit/utils/-/utils-1.0.0.tgz", - "integrity": "sha512-5T8PbHOajP/eJuoEeLgxA0g25nyVUZKfy2V2mW8idoph+9PT0nZUoIP+KA/PJ2mmexqtuykMT0A5knW8MiXqsw==" - }, "node_modules/@formkit/inputs": { - "version": "0.19.3", - "resolved": "https://registry.npmjs.org/@formkit/inputs/-/inputs-0.19.3.tgz", - "integrity": "sha512-M/Rtrc9UyHiwk4QgK3pzwWJiDZarfDvKvMQ5R+4Li5wgP9n+C4QDre47eccQlBYaFK0jWC2B/N7qzHxGz+8z9g==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@formkit/inputs/-/inputs-1.2.2.tgz", + "integrity": "sha512-apVGQ+9eHRD8qi9h0LRvaI9UrumDUwXQSw3gMQfDvfCjkqZXY4+m/WS3FraqHH4Mqs7cjryYRYrHYpAaVQtqKQ==", "dependencies": { - "@formkit/core": "0.19.3", - "@formkit/utils": "0.19.3" + "@formkit/core": "1.2.2", + "@formkit/utils": "1.2.2" } }, "node_modules/@formkit/observer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@formkit/observer/-/observer-1.0.0.tgz", - "integrity": "sha512-fKo2TX5MK6L4Nc0YWIcg2Qhp2Rz0pnQg4j541Pwd3tyQ+auHYKD8wnPkq46XHQUAWaq4HJ4WchpPiPSqXpcXAQ==", - "dependencies": { - "@formkit/core": "1.0.0", - "@formkit/utils": "1.0.0" - } - }, - "node_modules/@formkit/observer/node_modules/@formkit/core": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@formkit/core/-/core-1.0.0.tgz", - "integrity": "sha512-rDFVwNngLcakltasYzmyYDPAYoCoakK+7h4/5V1bE1FQDabhVvJIc5EDH8U80RAKNLGS9xiQ1JK4FHGcZ3K+oQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@formkit/observer/-/observer-1.2.2.tgz", + "integrity": "sha512-D9bVRfs2FEuzuIdC2BFSpayV4xyIexbRc2JTLkdwgsx9rROz9bh67M+VZ7zmrONuikgrD+dfaopIXK5sRZPGSQ==", "dependencies": { - "@formkit/utils": "1.0.0" + "@formkit/core": "1.2.2", + "@formkit/utils": "1.2.2" } }, - "node_modules/@formkit/observer/node_modules/@formkit/utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@formkit/utils/-/utils-1.0.0.tgz", - "integrity": "sha512-5T8PbHOajP/eJuoEeLgxA0g25nyVUZKfy2V2mW8idoph+9PT0nZUoIP+KA/PJ2mmexqtuykMT0A5knW8MiXqsw==" - }, "node_modules/@formkit/pro": { - "version": "0.115.2", - "resolved": "https://registry.npmjs.org/@formkit/pro/-/pro-0.115.2.tgz", - "integrity": "sha512-rNgjA35MFJja7j1a4pBJUFP3ovM0THaSJgbbVL4rGJGPkpldI89h+G8oRo7FVZ8te78iEAxbc5QsnvoxoFXSPQ==", + "version": "0.115.10", + "resolved": "https://registry.npmjs.org/@formkit/pro/-/pro-0.115.10.tgz", + "integrity": "sha512-ecMFnNmU9kL+C3d1X12GwVKG7wJUwEiP/yBEfiDwBDimaJc+u3nuyMfXJ1C6/nWTVI1vA19COmEz3J4o2Zro7g==", "dependencies": { - "@formkit/core": "^0.19.0", - "@formkit/inputs": "^0.19.0" + "@formkit/core": "^1.0.0", + "@formkit/inputs": "^1.0.0" } }, "node_modules/@formkit/rules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@formkit/rules/-/rules-1.0.0.tgz", - "integrity": "sha512-q9ENjQFEsku8v9M9jybtDh8TVgz4WFrm0wj6v8w8KXqDxdEU6HZ7+IWuF8/0Rh8SwVZLTYTv+dqtw8Xs5Z/b6g==", - "dependencies": { - "@formkit/core": "1.0.0", - "@formkit/utils": "1.0.0", - "@formkit/validation": "1.0.0" - } - }, - "node_modules/@formkit/rules/node_modules/@formkit/core": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@formkit/core/-/core-1.0.0.tgz", - "integrity": "sha512-rDFVwNngLcakltasYzmyYDPAYoCoakK+7h4/5V1bE1FQDabhVvJIc5EDH8U80RAKNLGS9xiQ1JK4FHGcZ3K+oQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@formkit/rules/-/rules-1.2.2.tgz", + "integrity": "sha512-WfDZfDDuX9lAyvCvxLwTeszQNd59Ztnyxx6zjRvzF6zHMD4g5swb3Jv6jy0Jwic0nl4+04IEhpBM4Cl5kQuAvA==", "dependencies": { - "@formkit/utils": "1.0.0" + "@formkit/core": "1.2.2", + "@formkit/utils": "1.2.2", + "@formkit/validation": "1.2.2" } }, - "node_modules/@formkit/rules/node_modules/@formkit/utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@formkit/utils/-/utils-1.0.0.tgz", - "integrity": "sha512-5T8PbHOajP/eJuoEeLgxA0g25nyVUZKfy2V2mW8idoph+9PT0nZUoIP+KA/PJ2mmexqtuykMT0A5knW8MiXqsw==" - }, "node_modules/@formkit/themes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@formkit/themes/-/themes-1.0.0.tgz", - "integrity": "sha512-A5fseWPLp2SWnLpl966vzIIpGDIpZ4FSa4HXaA1PwLg69JVHzoeuls8vd90z7a4VALlslnVUwSm26WWr1BxJgA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@formkit/themes/-/themes-1.2.2.tgz", + "integrity": "sha512-YxNmReXkvuF9OP6wAHVyJvTZ+hd+zRfOyTjie75fQ1EkWCjcn2jk+DCY4U+IkgOnq6A/vcKjP5vyuQqsglUgAA==", "dependencies": { - "@formkit/core": "1.0.0" + "@formkit/core": "1.2.2" }, "peerDependencies": { "tailwindcss": "^3.2.0", @@ -2975,86 +3438,38 @@ } } }, - "node_modules/@formkit/themes/node_modules/@formkit/core": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@formkit/core/-/core-1.0.0.tgz", - "integrity": "sha512-rDFVwNngLcakltasYzmyYDPAYoCoakK+7h4/5V1bE1FQDabhVvJIc5EDH8U80RAKNLGS9xiQ1JK4FHGcZ3K+oQ==", - "dependencies": { - "@formkit/utils": "1.0.0" - } - }, - "node_modules/@formkit/themes/node_modules/@formkit/utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@formkit/utils/-/utils-1.0.0.tgz", - "integrity": "sha512-5T8PbHOajP/eJuoEeLgxA0g25nyVUZKfy2V2mW8idoph+9PT0nZUoIP+KA/PJ2mmexqtuykMT0A5knW8MiXqsw==" - }, "node_modules/@formkit/utils": { - "version": "0.19.3", - "resolved": "https://registry.npmjs.org/@formkit/utils/-/utils-0.19.3.tgz", - "integrity": "sha512-S7iSnFxM/mYpVxMe550oUYJGiW3KTaovylsXXWXe29h2RGnxIumsmGEi3bpmhkA3QtsL4DvsU10fGGL2nVP0gA==" + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@formkit/utils/-/utils-1.2.2.tgz", + "integrity": "sha512-4EGm4nfZGSJik0QRAEybxO52F3QhbOfX/KgtWfB3/dDUEOCx5RWDxIs/CU2yI4bceDl2aK8l/yDYwCYK9SO5MA==" }, "node_modules/@formkit/validation": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@formkit/validation/-/validation-1.0.0.tgz", - "integrity": "sha512-XRFbPw/YlOWqDyrZb6qtETFjohgOrBfhhsVM6B7qm4xyXx2pa53zf+RjDD4+aUXjZTif+qKZA8xuK3Z3shGuZQ==", - "dependencies": { - "@formkit/core": "1.0.0", - "@formkit/observer": "1.0.0", - "@formkit/utils": "1.0.0" - } - }, - "node_modules/@formkit/validation/node_modules/@formkit/core": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@formkit/core/-/core-1.0.0.tgz", - "integrity": "sha512-rDFVwNngLcakltasYzmyYDPAYoCoakK+7h4/5V1bE1FQDabhVvJIc5EDH8U80RAKNLGS9xiQ1JK4FHGcZ3K+oQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@formkit/validation/-/validation-1.2.2.tgz", + "integrity": "sha512-jUfEjh3HAWlPmcuI+c7ullWKbm3oIRlQvbqN1r2GDqMWWLZ47+k6PVELV/eU7gxrF0mpQcQY5r8zvA1IFocCGA==", "dependencies": { - "@formkit/utils": "1.0.0" + "@formkit/core": "1.2.2", + "@formkit/observer": "1.2.2", + "@formkit/utils": "1.2.2" } }, - "node_modules/@formkit/validation/node_modules/@formkit/utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@formkit/utils/-/utils-1.0.0.tgz", - "integrity": "sha512-5T8PbHOajP/eJuoEeLgxA0g25nyVUZKfy2V2mW8idoph+9PT0nZUoIP+KA/PJ2mmexqtuykMT0A5knW8MiXqsw==" - }, "node_modules/@formkit/vue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@formkit/vue/-/vue-1.0.0.tgz", - "integrity": "sha512-TJ4DIPEI7EgxZ/olXpnyHmezm75acllzbCIHgXB4ckd1AxC2pb0T2Z17B4VK/jYz7Xdkc6apAvYosgVbupbnfw==", - "dependencies": { - "@formkit/core": "1.0.0", - "@formkit/dev": "1.0.0", - "@formkit/i18n": "1.0.0", - "@formkit/inputs": "1.0.0", - "@formkit/observer": "1.0.0", - "@formkit/rules": "1.0.0", - "@formkit/themes": "1.0.0", - "@formkit/utils": "1.0.0", - "@formkit/validation": "1.0.0", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@formkit/vue/-/vue-1.2.2.tgz", + "integrity": "sha512-UH7CrEfsj1otO+EMgLYFWsLp1A8s3GYiRik3YPII6sVuImXYuLCtz++oT3JrnM5hmUJWmEjxZoi5gRYJzxa0ow==", + "dependencies": { + "@formkit/core": "1.2.2", + "@formkit/dev": "1.2.2", + "@formkit/i18n": "1.2.2", + "@formkit/inputs": "1.2.2", + "@formkit/observer": "1.2.2", + "@formkit/rules": "1.2.2", + "@formkit/themes": "1.2.2", + "@formkit/utils": "1.2.2", + "@formkit/validation": "1.2.2", "vue": "^3.3.4" } }, - "node_modules/@formkit/vue/node_modules/@formkit/core": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@formkit/core/-/core-1.0.0.tgz", - "integrity": "sha512-rDFVwNngLcakltasYzmyYDPAYoCoakK+7h4/5V1bE1FQDabhVvJIc5EDH8U80RAKNLGS9xiQ1JK4FHGcZ3K+oQ==", - "dependencies": { - "@formkit/utils": "1.0.0" - } - }, - "node_modules/@formkit/vue/node_modules/@formkit/inputs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@formkit/inputs/-/inputs-1.0.0.tgz", - "integrity": "sha512-fP8kBshH3SD19mei6nAqTq6LTHI4/C1eAP4BYMHBuLwKYMq4SrfPKTCrTNefz+DF3yRaUzUqRg5TgBGgt6wtTw==", - "dependencies": { - "@formkit/core": "1.0.0", - "@formkit/utils": "1.0.0" - } - }, - "node_modules/@formkit/vue/node_modules/@formkit/utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@formkit/utils/-/utils-1.0.0.tgz", - "integrity": "sha512-5T8PbHOajP/eJuoEeLgxA0g25nyVUZKfy2V2mW8idoph+9PT0nZUoIP+KA/PJ2mmexqtuykMT0A5knW8MiXqsw==" - }, "node_modules/@fortawesome/fontawesome-common-types": { "version": "6.4.2", "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.4.2.tgz", @@ -3122,11 +3537,11 @@ } }, "node_modules/@grpc/grpc-js": { - "version": "1.8.21", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.8.21.tgz", - "integrity": "sha512-KeyQeZpxeEBSqFVTi3q2K7PiPXmgBfECc4updA1ejCLjYmoAlvvM3ZMp5ztTDUCUQmoY3CpDxvchjO1+rFkoHg==", + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.7.tgz", + "integrity": "sha512-yMaA/cIsRhGzW3ymCNpdlPcInXcovztlgu/rirThj2b87u3RzWUszliOqZ/pldy7yhmJPS8uwog+kZSTa4A0PQ==", "dependencies": { - "@grpc/proto-loader": "^0.7.0", + "@grpc/proto-loader": "^0.7.8", "@types/node": ">=12.12.47" }, "engines": { @@ -3134,9 +3549,9 @@ } }, "node_modules/@grpc/proto-loader": { - "version": "0.7.9", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.9.tgz", - "integrity": "sha512-YJsOehVXzgurc+lLAxYnlSMc1p/Gu6VAvnfx0ATi2nzvr0YZcjhmZDeY8SeAKv1M7zE3aEJH0Xo9mK1iZ8GYoQ==", + "version": "0.7.10", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.10.tgz", + "integrity": "sha512-CAqDfoaQ8ykFd9zqBDn4k6iWT9loLAlc2ETmDFS9JCD70gDcnA4L3AFEo2iV7KyAtAAHFW9ftq1Fz+Vsgq80RQ==", "dependencies": { "lodash.camelcase": "^4.3.0", "long": "^5.0.0", @@ -3177,12 +3592,12 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "version": "0.11.12", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.12.tgz", + "integrity": "sha512-NlGesA1usRNn6ctHCZ21M4/dKPgW9Nn1FypRdIKKgZOKzkVV4T1FlK5mBiLhHBCDmEbdQG0idrcXlbZfksJ+RA==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", + "@humanwhocodes/object-schema": "^2.0.0", "debug": "^4.1.1", "minimatch": "^3.0.5" }, @@ -3204,746 +3619,1870 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.0.tgz", + "integrity": "sha512-9S9QrXY2K0L4AGDcSgTi9vgiCcG8VcBv4Mp7/1hDPYoswIy6Z6KO5blYto82BT8M0MZNRWmCFLpCs3HlpYGGdw==", "dev": true }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.27.8" + "node_modules/@iarna/toml": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", + "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", + "dev": true + }, + "node_modules/@interactjs/actions": { + "version": "1.10.19", + "resolved": "https://registry.npmjs.org/@interactjs/actions/-/actions-1.10.19.tgz", + "integrity": "sha512-mZyx1MZx5/IoLj9zg/5IZ8LmO98XGUQ3IJoDfSM7sY5yTo/WgHY0v4fdLCy8ssx5X2n1VEPV889J7u8+42kavw==", + "optionalDependencies": { + "@interactjs/interact": "1.10.19" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "peerDependencies": { + "@interactjs/core": "1.10.19", + "@interactjs/utils": "1.10.19" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "node_modules/@interactjs/auto-scroll": { + "version": "1.10.19", + "resolved": "https://registry.npmjs.org/@interactjs/auto-scroll/-/auto-scroll-1.10.19.tgz", + "integrity": "sha512-zbU8fzhKgVlbNcU9CYCciFVeyCcxd+5Ny9lexsOh6Q2Ra7hXf/bW6LXitylLE22PPlY76kVK3+4yQD2d7Fb7rA==", + "optionalDependencies": { + "@interactjs/interact": "1.10.19" }, - "engines": { - "node": ">=6.0.0" + "peerDependencies": { + "@interactjs/utils": "1.10.19" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "engines": { - "node": ">=6.0.0" + "node_modules/@interactjs/auto-start": { + "version": "1.10.19", + "resolved": "https://registry.npmjs.org/@interactjs/auto-start/-/auto-start-1.10.19.tgz", + "integrity": "sha512-WifIomXIV9MWWHEz3zrMN6n+wl+9IshMVIUsbvx13AM4oiL4832A0JUNrCkL5m6BUTn7iw5CpIdwtnBh+OCYSQ==", + "optionalDependencies": { + "@interactjs/interact": "1.10.19" + }, + "peerDependencies": { + "@interactjs/core": "1.10.19", + "@interactjs/utils": "1.10.19" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "engines": { - "node": ">=6.0.0" + "node_modules/@interactjs/core": { + "version": "1.10.19", + "resolved": "https://registry.npmjs.org/@interactjs/core/-/core-1.10.19.tgz", + "integrity": "sha512-4Mq7+pXFq7aCJXh0RRdS9j+PJPi5yHbZsOLpryWFQMQ6GeKPaiu3d97rY4gjhW7SVa+l82QGCMEI0T7ib4DqsA==", + "peerDependencies": { + "@interactjs/utils": "1.10.19" } }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "node_modules/@interactjs/dev-tools": { + "version": "1.10.19", + "resolved": "https://registry.npmjs.org/@interactjs/dev-tools/-/dev-tools-1.10.19.tgz", + "integrity": "sha512-FfsOp8nQ/Gduhz25axLzezOnrMl1V+1gkKBCIXaEwlBzFOycJ+YOjgolajPVgC/26UjHMSKy4vIXfD6hLTJpfw==", + "optionalDependencies": { + "@interactjs/interact": "1.10.19" + }, + "peerDependencies": { + "@interactjs/modifiers": "1.10.19", + "@interactjs/utils": "1.10.19" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + "node_modules/@interactjs/inertia": { + "version": "1.10.19", + "resolved": "https://registry.npmjs.org/@interactjs/inertia/-/inertia-1.10.19.tgz", + "integrity": "sha512-A01Ddqb/6vqWcYaFcW1rwB8e+W1YGY9mR6D6ECt2w3ndmQbMBGWLYvf/smM8kAkL0daqzeCT2uI/n6EHS+sQXQ==", + "dependencies": { + "@interactjs/offset": "1.10.19" + }, + "optionalDependencies": { + "@interactjs/interact": "1.10.19" + }, + "peerDependencies": { + "@interactjs/core": "1.10.19", + "@interactjs/modifiers": "1.10.19", + "@interactjs/utils": "1.10.19" + } }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "node_modules/@interactjs/interact": { + "version": "1.10.19", + "resolved": "https://registry.npmjs.org/@interactjs/interact/-/interact-1.10.19.tgz", + "integrity": "sha512-PS89zWBgv8nfMKAxP41SPC/M4Uk6aXfzXTHDStu0j/Og2+hM8U0PAUcQ5VVyZoIczssM0iPi8SP59kuTp0IVrg==", "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "@interactjs/core": "1.10.19", + "@interactjs/utils": "1.10.19" } }, - "node_modules/@lukeed/csprng": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz", - "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==", - "engines": { - "node": ">=8" + "node_modules/@interactjs/interactjs": { + "version": "1.10.19", + "resolved": "https://registry.npmjs.org/@interactjs/interactjs/-/interactjs-1.10.19.tgz", + "integrity": "sha512-3Vgwj/i2wyKBEs7ms1SB+GImNqbavoE5+5xFq0Ui+JU9QAqblaRLcslWbuOROho6ejx5/lQjxQ0iEr2oI7gwJA==", + "dependencies": { + "@interactjs/actions": "1.10.19", + "@interactjs/auto-scroll": "1.10.19", + "@interactjs/auto-start": "1.10.19", + "@interactjs/core": "1.10.19", + "@interactjs/dev-tools": "1.10.19", + "@interactjs/inertia": "1.10.19", + "@interactjs/interact": "1.10.19", + "@interactjs/modifiers": "1.10.19", + "@interactjs/offset": "1.10.19", + "@interactjs/pointer-events": "1.10.19", + "@interactjs/reflow": "1.10.19", + "@interactjs/utils": "1.10.19" } }, - "node_modules/@lukeed/uuid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@lukeed/uuid/-/uuid-2.0.1.tgz", - "integrity": "sha512-qC72D4+CDdjGqJvkFMMEAtancHUQ7/d/tAiHf64z8MopFDmcrtbcJuerDtFceuAfQJ2pDSfCKCtbqoGBNnwg0w==", + "node_modules/@interactjs/modifiers": { + "version": "1.10.19", + "resolved": "https://registry.npmjs.org/@interactjs/modifiers/-/modifiers-1.10.19.tgz", + "integrity": "sha512-qkUHwgTxlC4W4rLFaz64WyBOo/laVz+s0uUJsHDCzdzAz5ZGguMM6Cvnt8EJ04eZWqrZ2zGAF1dzHFe07XB6Qg==", "dependencies": { - "@lukeed/csprng": "^1.1.0" + "@interactjs/snappers": "1.10.19" }, - "engines": { - "node": ">=8" + "optionalDependencies": { + "@interactjs/interact": "1.10.19" + }, + "peerDependencies": { + "@interactjs/core": "1.10.19", + "@interactjs/utils": "1.10.19" } }, - "node_modules/@mapbox/jsonlint-lines-primitives": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz", - "integrity": "sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==", - "engines": { - "node": ">= 0.6" + "node_modules/@interactjs/offset": { + "version": "1.10.19", + "resolved": "https://registry.npmjs.org/@interactjs/offset/-/offset-1.10.19.tgz", + "integrity": "sha512-3fa0/BbAyGqkjghTTIs4HTlhGDL5Nh6GtCUk9QQE+BVnTl6b7iaVumvvOij6ih6IMqBRf5ignRIbt6ndZe75/g==", + "optionalDependencies": { + "@interactjs/interact": "1.10.19" + }, + "peerDependencies": { + "@interactjs/core": "1.10.19", + "@interactjs/utils": "1.10.19" } }, - "node_modules/@mapbox/mapbox-gl-style-spec": { - "version": "13.28.0", - "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-style-spec/-/mapbox-gl-style-spec-13.28.0.tgz", - "integrity": "sha512-B8xM7Fp1nh5kejfIl4SWeY0gtIeewbuRencqO3cJDrCHZpaPg7uY+V8abuR+esMeuOjRl5cLhVTP40v+1ywxbg==", - "dependencies": { - "@mapbox/jsonlint-lines-primitives": "~2.0.2", - "@mapbox/point-geometry": "^0.1.0", - "@mapbox/unitbezier": "^0.0.0", - "csscolorparser": "~1.0.2", - "json-stringify-pretty-compact": "^2.0.0", - "minimist": "^1.2.6", - "rw": "^1.3.3", - "sort-object": "^0.3.2" + "node_modules/@interactjs/pointer-events": { + "version": "1.10.19", + "resolved": "https://registry.npmjs.org/@interactjs/pointer-events/-/pointer-events-1.10.19.tgz", + "integrity": "sha512-Pp8sFW9V5krHUcNs9321RG+F6ylgHAjsefEBpAV15zqxEkcyutiOguTCDuXlZ2lewrfT4G2skRKv5p5lMJ6taw==", + "optionalDependencies": { + "@interactjs/interact": "1.10.19" }, - "bin": { - "gl-style-composite": "bin/gl-style-composite.js", - "gl-style-format": "bin/gl-style-format.js", - "gl-style-migrate": "bin/gl-style-migrate.js", - "gl-style-validate": "bin/gl-style-validate.js" + "peerDependencies": { + "@interactjs/core": "1.10.19", + "@interactjs/utils": "1.10.19" } }, - "node_modules/@mapbox/point-geometry": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", - "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==" + "node_modules/@interactjs/reflow": { + "version": "1.10.19", + "resolved": "https://registry.npmjs.org/@interactjs/reflow/-/reflow-1.10.19.tgz", + "integrity": "sha512-0MAZTs/3Gss2SECdDY2fzCU+mzXBmuOIBDrMsEg1c18DDq+fkeS6Ny9wQ5YR8iyTgv+xZEy+PG8Q9tv6BQhatg==", + "optionalDependencies": { + "@interactjs/interact": "1.10.19" + }, + "peerDependencies": { + "@interactjs/core": "1.10.19", + "@interactjs/utils": "1.10.19" + } }, - "node_modules/@mapbox/unitbezier": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz", - "integrity": "sha512-HPnRdYO0WjFjRTSwO3frz1wKaU649OBFPX3Zo/2WZvuRi6zMiRGui8SnPQiQABgqCf8YikDe5t3HViTVw1WUzA==" + "node_modules/@interactjs/snappers": { + "version": "1.10.19", + "resolved": "https://registry.npmjs.org/@interactjs/snappers/-/snappers-1.10.19.tgz", + "integrity": "sha512-JZUSecoiSx96Z1x8BYg8ZPPicgFt6KKHAQ578x4oEuqMQqpHz9SbWk2PdW9b0JcrkdxPx42Ot01eTDFyGmPq3g==", + "optionalDependencies": { + "@interactjs/interact": "1.10.19" + }, + "peerDependencies": { + "@interactjs/utils": "1.10.19" + } }, - "node_modules/@nanogiants/vue3-longpress": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@nanogiants/vue3-longpress/-/vue3-longpress-1.0.8.tgz", - "integrity": "sha512-yrqqhrjMKJ/18A+Iq+68E1C1ZrzJeA2ya2y16Zba2kr8ktBgIeQpthIBeXl5wG5B8T5LrDnSy0DjsL1VxC0uCA==" + "node_modules/@interactjs/utils": { + "version": "1.10.19", + "resolved": "https://registry.npmjs.org/@interactjs/utils/-/utils-1.10.19.tgz", + "integrity": "sha512-jfMCmSkVgzb6g2L1kyUNJWqRRajMQgmv0yLJwVNHjeQAe9Hxe5b+iAQUYUan4XtrtWuruXz8VAF9P3RH9qOGpQ==" }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" }, "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" }, "engines": { - "node": ">= 8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@nuxt/kit": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.7.1.tgz", - "integrity": "sha512-8k4q+92qLz5z7RdSOKrEJIjM63xXBg0z/WhTtZgXv1R5ULZ77usdTMjQYhQ+Kgd1NMkpIXeKaAO6903xrSt53Q==", - "optional": true, - "peer": true, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, "dependencies": { - "@nuxt/schema": "3.7.1", - "c12": "^1.4.2", - "consola": "^3.2.3", - "defu": "^6.1.2", - "globby": "^13.2.2", - "hash-sum": "^2.0.0", - "ignore": "^5.2.4", - "jiti": "^1.19.3", - "knitwork": "^1.0.0", - "mlly": "^1.4.2", - "pathe": "^1.1.1", - "pkg-types": "^1.0.3", - "scule": "^1.0.0", - "semver": "^7.5.4", - "ufo": "^1.3.0", - "unctx": "^2.3.1", - "unimport": "^3.3.0", - "untyped": "^1.4.0" + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" }, "engines": { - "node": "^14.18.0 || >=16.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@nuxt/kit/node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "optional": true, - "peer": true, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@nuxt/kit/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "optional": true, - "peer": true, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, "dependencies": { - "yallist": "^4.0.0" + "jest-get-type": "^29.6.3" }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@nuxt/kit/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "optional": true, - "peer": true, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": ">=10" - } - }, - "node_modules/@nuxt/kit/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "optional": true, - "peer": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@nuxt/kit/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "optional": true, - "peer": true - }, - "node_modules/@nuxt/schema": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@nuxt/schema/-/schema-3.7.1.tgz", - "integrity": "sha512-+0W/oos7Ktm3eTwQ/78PrcAObR0+yQzHIUzbQ7HgUnEEntRGVxp4hnfng5dmhvVjJqQvpuGZHa3yIS/g41vE6A==", - "optional": true, - "peer": true, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, "dependencies": { - "@nuxt/ui-templates": "^1.3.1", - "defu": "^6.1.2", - "hookable": "^5.5.3", - "pathe": "^1.1.1", - "pkg-types": "^1.0.3", - "postcss-import-resolver": "^2.0.0", - "std-env": "^3.4.3", - "ufo": "^1.3.0", - "unimport": "^3.3.0", - "untyped": "^1.4.0" + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" }, "engines": { - "node": "^14.18.0 || >=16.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@nuxt/ui-templates": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@nuxt/ui-templates/-/ui-templates-1.3.1.tgz", - "integrity": "sha512-5gc02Pu1HycOVUWJ8aYsWeeXcSTPe8iX8+KIrhyEtEoOSkY0eMBuo0ssljB8wALuEmepv31DlYe5gpiRwkjESA==", - "optional": true, - "peer": true - }, - "node_modules/@one-ini/wasm": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz", - "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==", - "dev": true - }, - "node_modules/@passwordless-id/webauthn": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@passwordless-id/webauthn/-/webauthn-1.2.6.tgz", - "integrity": "sha512-KkP9CTAo3+0E99/otSkzPmhvhfXvdvITzXdhGy8wtNb45fC1QT9ljnuAlkp8Db+brFHgb97m8+42U+2oonrosA==" - }, - "node_modules/@petamoriken/float16": { - "version": "3.8.4", - "resolved": "https://registry.npmjs.org/@petamoriken/float16/-/float16-3.8.4.tgz", - "integrity": "sha512-kB+NJ5Br56ZhElKsf0pM7/PQfrDdDVMRz8f0JM6eVOGE+L89z9hwcst9QvWBBnazzuqGTGtPsJNZoQ1JdNiGSQ==" - }, - "node_modules/@pkgr/utils": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", - "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", "dev": true, "dependencies": { - "cross-spawn": "^7.0.3", - "fast-glob": "^3.3.0", - "is-glob": "^4.0.3", - "open": "^9.1.0", - "picocolors": "^1.0.0", - "tslib": "^2.6.0" + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" }, "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://opencollective.com/unts" + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/@polka/url": { - "version": "1.0.0-next.21", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", - "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==" - }, - "node_modules/@popperjs/core": { - "version": "2.11.8", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", - "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/popperjs" + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" - }, - "node_modules/@rocket.chat/sdk": { - "version": "0.2.9-2", - "resolved": "https://registry.npmjs.org/@rocket.chat/sdk/-/sdk-0.2.9-2.tgz", - "integrity": "sha512-T8No2GI9Zez2638n79GtTkE73P4A0QdHhsh/G1ioNjpcEYmjWy8bbtGiBZcFNLTy4CaJSWj81zZ7eoaUUYr2MQ==", + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, "dependencies": { - "@types/lru-cache": "^4.1.0", - "@types/node": "^9.4.6", - "asteroid": "github:rocketchat/asteroid", - "lru-cache": "^4.1.1", - "node-rest-client": "^3.1.0" + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" }, "engines": { - "node": "> 8.0.0", - "npm": "> 5.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@rocket.chat/sdk/node_modules/@types/node": { - "version": "9.6.61", - "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.61.tgz", - "integrity": "sha512-/aKAdg5c8n468cYLy2eQrcR5k6chlbNwZNGUj3TboyPa2hcO2QAJcfymlqPzMiRj8B6nYKXjzQz36minFE0RwQ==" - }, - "node_modules/@rocket.chat/sdk/node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@rocket.chat/sdk/node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" - }, - "node_modules/@rollup/pluginutils": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", - "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, "dependencies": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" }, "engines": { - "node": ">= 8.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.3.3.tgz", - "integrity": "sha512-0xd7qez0AQ+MbHatZTlI1gu5vkG8r7MYRUJAHPAHJBmGLs16zpkrpAVLvjQKQOqaXPDUBwOiJzNc00znHSCVBw==", - "dev": true - }, - "node_modules/@segment/analytics-core": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@segment/analytics-core/-/analytics-core-1.3.1.tgz", - "integrity": "sha512-KGblJ8WQNC4t0j31zeyYBm2thHWuPULNAoP7waU5ts7Asz9ipvGoHqFSLG6warqvcnBdkiRbNam242zmxX53oA==", + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, "dependencies": { - "@lukeed/uuid": "^2.0.0", - "dset": "^3.1.2", - "tslib": "^2.4.1" + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@segment/analytics-next": { - "version": "1.55.0", - "resolved": "https://registry.npmjs.org/@segment/analytics-next/-/analytics-next-1.55.0.tgz", - "integrity": "sha512-Ae6LpLW2U/rDwCAGrw7XHMjulk8becxEE0Nu45f0sE7b/+iy/c6NuxomzdhL5Vnp2WETDtv62M2pQtrfQ+XX7w==", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dependencies": { - "@lukeed/uuid": "^2.0.0", - "@segment/analytics-core": "1.3.1", - "@segment/analytics.js-video-plugins": "^0.2.1", - "@segment/facade": "^3.4.9", - "@segment/tsub": "^2.0.0", - "dset": "^3.1.2", - "js-cookie": "3.0.1", - "node-fetch": "^2.6.7", - "spark-md5": "^3.0.1", - "tslib": "^2.4.1", - "unfetch": "^4.1.0" - } - }, - "node_modules/@segment/analytics-next/node_modules/js-cookie": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.1.tgz", - "integrity": "sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw==", + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, "engines": { - "node": ">=12" + "node": ">=6.0.0" } }, - "node_modules/@segment/analytics.js-video-plugins": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@segment/analytics.js-video-plugins/-/analytics.js-video-plugins-0.2.1.tgz", - "integrity": "sha512-lZwCyEXT4aaHBLNK433okEKdxGAuyrVmop4BpQqQSJuRz0DglPZgd9B/XjiiWs1UyOankg2aNYMN3VcS8t4eSQ==", - "dependencies": { - "unfetch": "^3.1.1" + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@segment/analytics.js-video-plugins/node_modules/unfetch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-3.1.2.tgz", - "integrity": "sha512-L0qrK7ZeAudGiKYw6nzFjnJ2D5WHblUBwmHIqtPS6oKUd+Hcpk7/hKsSmcHsTlpd1TbTNsiRBUKRq3bHLNIqIw==" - }, - "node_modules/@segment/facade": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/@segment/facade/-/facade-3.4.10.tgz", - "integrity": "sha512-xVQBbB/lNvk/u8+ey0kC/+g8pT3l0gCT8O2y9Z+StMMn3KAFAQ9w8xfgef67tJybktOKKU7pQGRPolRM1i1pdA==", - "dependencies": { - "@segment/isodate-traverse": "^1.1.1", - "inherits": "^2.0.4", - "new-date": "^1.0.3", - "obj-case": "0.2.1" + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@segment/isodate": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@segment/isodate/-/isodate-1.0.3.tgz", - "integrity": "sha512-BtanDuvJqnACFkeeYje7pWULVv8RgZaqKHWwGFnL/g/TH/CcZjkIVTfGDp/MAxmilYHUkrX70SqwnYSTNEaN7A==" - }, - "node_modules/@segment/isodate-traverse": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@segment/isodate-traverse/-/isodate-traverse-1.1.1.tgz", - "integrity": "sha512-+G6e1SgAUkcq0EDMi+SRLfT48TNlLPF3QnSgFGVs0V9F3o3fq/woQ2rHFlW20W0yy5NnCUH0QGU3Am2rZy/E3w==", + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", "dependencies": { - "@segment/isodate": "^1.0.3" + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" } }, - "node_modules/@segment/tsub": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@segment/tsub/-/tsub-2.0.0.tgz", - "integrity": "sha512-NzkBK8GwPsyQ74AceLjENbUoaFrObnzEKOX4ko2wZDuIyK+DnDm3B//8xZYI2LCKt+wUD55l6ygfjCoVs8RMWw==", - "dependencies": { - "@stdlib/math-base-special-ldexp": "^0.0.5", - "dlv": "^1.1.3", - "dset": "^3.1.1", - "tiny-hashes": "^1.0.1" - }, - "bin": { - "tsub": "dist/index.js" - } + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, - "node_modules/@sentry-internal/tracing": { - "version": "7.64.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.64.0.tgz", - "integrity": "sha512-1XE8W6ki7hHyBvX9hfirnGkKDBKNq3bDJyXS86E0bYVDl94nvbRM9BD9DHsCFetqYkVm1yDGEK+6aUVs4CztoQ==", + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", "dependencies": { - "@sentry/core": "7.64.0", - "@sentry/types": "7.64.0", - "@sentry/utils": "7.64.0", - "tslib": "^2.4.1 || ^1.9.3" - }, - "engines": { - "node": ">=8" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@sentry/browser": { - "version": "7.64.0", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.64.0.tgz", - "integrity": "sha512-lB2IWUkZavEDclxfLBp554dY10ZNIEvlDZUWWathW+Ws2wRb6PNLtuPUNu12R7Q7z0xpkOLrM1kRNN0OdldgKA==", - "dependencies": { - "@sentry-internal/tracing": "7.64.0", - "@sentry/core": "7.64.0", - "@sentry/replay": "7.64.0", - "@sentry/types": "7.64.0", - "@sentry/utils": "7.64.0", - "tslib": "^2.4.1 || ^1.9.3" - }, + "node_modules/@lukeed/csprng": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz", + "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==", "engines": { "node": ">=8" } }, - "node_modules/@sentry/core": { - "version": "7.64.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.64.0.tgz", - "integrity": "sha512-IzmEyl5sNG7NyEFiyFHEHC+sizsZp9MEw1+RJRLX6U5RITvcsEgcajSkHQFafaBPzRrcxZMdm47Cwhl212LXcw==", + "node_modules/@lukeed/uuid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@lukeed/uuid/-/uuid-2.0.1.tgz", + "integrity": "sha512-qC72D4+CDdjGqJvkFMMEAtancHUQ7/d/tAiHf64z8MopFDmcrtbcJuerDtFceuAfQJ2pDSfCKCtbqoGBNnwg0w==", "dependencies": { - "@sentry/types": "7.64.0", - "@sentry/utils": "7.64.0", - "tslib": "^2.4.1 || ^1.9.3" + "@lukeed/csprng": "^1.1.0" }, "engines": { "node": ">=8" } }, - "node_modules/@sentry/replay": { - "version": "7.64.0", - "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.64.0.tgz", - "integrity": "sha512-alaMCZDZhaAVmEyiUnszZnvfdbiZx5MmtMTGrlDd7tYq3K5OA9prdLqqlmfIJYBfYtXF3lD0iZFphOZQD+4CIw==", + "node_modules/@nanogiants/vue3-longpress": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@nanogiants/vue3-longpress/-/vue3-longpress-1.0.8.tgz", + "integrity": "sha512-yrqqhrjMKJ/18A+Iq+68E1C1ZrzJeA2ya2y16Zba2kr8ktBgIeQpthIBeXl5wG5B8T5LrDnSy0DjsL1VxC0uCA==" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dependencies": { - "@sentry/core": "7.64.0", - "@sentry/types": "7.64.0", - "@sentry/utils": "7.64.0" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": ">=12" + "node": ">= 8" } }, - "node_modules/@sentry/types": { - "version": "7.64.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.64.0.tgz", - "integrity": "sha512-LqjQprWXjUFRmzIlUjyA+KL+38elgIYmAeoDrdyNVh8MK5IC1W2Lh1Q87b4yOiZeMiIhIVNBd7Ecoh2rodGrGA==", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/@sentry/utils": { - "version": "7.64.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.64.0.tgz", - "integrity": "sha512-HRlM1INzK66Gt+F4vCItiwGKAng4gqzCR4C5marsL3qv6SrKH98dQnCGYgXluSWaaa56h97FRQu7TxCk6jkSvQ==", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dependencies": { - "@sentry/types": "7.64.0", - "tslib": "^2.4.1 || ^1.9.3" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/@sentry/vue": { - "version": "7.64.0", - "resolved": "https://registry.npmjs.org/@sentry/vue/-/vue-7.64.0.tgz", - "integrity": "sha512-GBWdWEK+pTbq3qhF3FYJ1gDK1m2mqIVPT3kMtWNV2qmkhn+iqQ+ud3cT43shWvaHBE/TLZsrD6V20EEqBdnP2w==", - "dependencies": { - "@sentry/browser": "7.64.0", - "@sentry/core": "7.64.0", - "@sentry/types": "7.64.0", - "@sentry/utils": "7.64.0", - "tslib": "^2.4.1 || ^1.9.3" - }, - "engines": { - "node": ">=8" - }, - "peerDependencies": { - "vue": "2.x || 3.x" + "node_modules/@nrwl/cypress": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nrwl/cypress/-/cypress-17.0.0.tgz", + "integrity": "sha512-p7LcNa6q1yZXSp1BOlMrn79QB4BEioAwWzAyqbtsrOd+5JkgQwAetwI7VFktjXohbH0SmVASqXhVJgXacoPgOA==", + "dev": true, + "dependencies": { + "@nx/cypress": "17.0.0" } }, - "node_modules/@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", - "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", + "node_modules/@nrwl/devkit": { + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-16.10.0.tgz", + "integrity": "sha512-fRloARtsDQoQgQ7HKEy0RJiusg/HSygnmg4gX/0n/Z+SUS+4KoZzvHjXc6T5ZdEiSjvLypJ+HBM8dQzIcVACPQ==", "dev": true, + "peer": true, "dependencies": { - "@hapi/hoek": "^9.0.0" + "@nx/devkit": "16.10.0" } }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", - "dev": true + "node_modules/@nrwl/eslint-plugin-nx": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nrwl/eslint-plugin-nx/-/eslint-plugin-nx-17.0.0.tgz", + "integrity": "sha512-kOYPAQMdS9qDkOG5CyAjerBN4UwxUipqZjjahVyA3GS5JwRe9DQUZ0vrFtMp5DSfJ+Cs9fNd4voHvZQEKanq2Q==", + "dev": true, + "dependencies": { + "@nx/eslint-plugin": "17.0.0" + } }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "dev": true + "node_modules/@nrwl/jest": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nrwl/jest/-/jest-17.0.0.tgz", + "integrity": "sha512-j+7SM/y63c5zET9YQ6TAt8W6bxxagu3e3zIV68ccEq3pF1jdGnmx9r9RMaiFRo5LWA5gsIayDQDtJ8vpdH2M2g==", + "dev": true, + "dependencies": { + "@nx/jest": "17.0.0" + } }, - "node_modules/@simplewebauthn/browser": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@simplewebauthn/browser/-/browser-8.0.2.tgz", - "integrity": "sha512-VZ/PZuRErAP2P95f3l1do9XcyB4tSwuSFPSaPCB/YTFQ+/IuTdBv5j44KG1fLxHF3CI8IPyHAmD5//17GCaxLg==", + "node_modules/@nrwl/js": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nrwl/js/-/js-17.0.0.tgz", + "integrity": "sha512-Qjl21rnmwOzDmqAzBOLOQHgggGNpNXzRLTuV9fNGWSH/hMmYxC7oFqViaUVf53aTHpXgD5a/G6aj3hxThZWbdA==", + "dev": true, "dependencies": { - "@simplewebauthn/typescript-types": "^8.0.0" + "@nx/js": "17.0.0" } }, - "node_modules/@simplewebauthn/typescript-types": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@simplewebauthn/typescript-types/-/typescript-types-8.0.0.tgz", - "integrity": "sha512-d7Izb2H+LZJteXMkS8DmpAarD6mZdpIOu/av/yH4/u/3Pd6DKFLyBM3j8BMmUvUqpzvJvHARNrRfQYto58mtTQ==" + "node_modules/@nrwl/tao": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-17.0.0.tgz", + "integrity": "sha512-ujvXd8yde1faH0zHKWWnZUhSym/+5SJT6NctBKNQTe8FVm0yBErsbxv8kdvVg/bizsRv+fbOkLdII0xX0aMkKQ==", + "dev": true, + "dependencies": { + "nx": "17.0.0", + "tslib": "^2.3.0" + }, + "bin": { + "tao": "index.js" + } }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true + "node_modules/@nrwl/vite": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nrwl/vite/-/vite-17.0.0.tgz", + "integrity": "sha512-oMHsTbHs9W2bPNFiJz+GztkWvOCDYG18xQILduF4uNMF3Xa2EQL4M57UnKzheigDYUfgMbZyWGvtO3iBykhr3Q==", + "dev": true, + "dependencies": { + "@nx/vite": "17.0.0" + } }, - "node_modules/@sjmc11/tourguidejs": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/@sjmc11/tourguidejs/-/tourguidejs-0.0.10.tgz", - "integrity": "sha512-TnEL+ygzv5W73McwzuIoWQNK9HJ1/Wk4/lLHYtQlNpP4kx/Pv9CieI+zakxkgouQAgQX7WL92fZU1p2KPLvvbA==", + "node_modules/@nrwl/web": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nrwl/web/-/web-17.0.0.tgz", + "integrity": "sha512-Kj6S5M9KA5/UVgAf0E/AqQXyDDpbNxdZeXsWoT1CDD7w3GewWOMh/BxDZyMKQ/GIZfX1yFCbPj5+zCtpQCk3jQ==", + "dev": true, "dependencies": { - "@floating-ui/dom": "^1.0.3", - "sass": "^1.55.0" + "@nx/web": "17.0.0" } }, - "node_modules/@socket.io/component-emitter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", - "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==" + "node_modules/@nrwl/workspace": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nrwl/workspace/-/workspace-17.0.0.tgz", + "integrity": "sha512-kh30WXFmrKnrFYuk/zo7yByDjo9JWwJ3SbgdXf1S4RtZXtiDcDpat2UQ2oOe8bB6fYLrGjudsVTIWmnNKTjmNw==", + "dev": true, + "dependencies": { + "@nx/workspace": "17.0.0" + } }, - "node_modules/@stdlib/array-float32": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@stdlib/array-float32/-/array-float32-0.0.6.tgz", - "integrity": "sha512-QgKT5UaE92Rv7cxfn7wBKZAlwFFHPla8eXsMFsTGt5BiL4yUy36lwinPUh4hzybZ11rw1vifS3VAPuk6JP413Q==", - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], + "node_modules/@nx/cypress": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nx/cypress/-/cypress-17.0.0.tgz", + "integrity": "sha512-HDNMG/IazDaftBRRAsAVpaXo3QN6F8FjbdpWmx2vcbaG0fS0teHcQxPpHJqaT5jg/V17VEailepGOA+BoI4PWg==", + "dev": true, "dependencies": { - "@stdlib/assert-has-float32array-support": "^0.0.x" + "@nrwl/cypress": "17.0.0", + "@nx/devkit": "17.0.0", + "@nx/eslint": "17.0.0", + "@nx/js": "17.0.0", + "@phenomnomnominal/tsquery": "~5.0.1", + "detect-port": "^1.5.1", + "semver": "7.5.3", + "tslib": "^2.3.0" }, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" + "peerDependencies": { + "cypress": ">= 3 < 14" }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/athan" + "peerDependenciesMeta": { + "cypress": { + "optional": true + } } }, - "node_modules/@stdlib/array-float64": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@stdlib/array-float64/-/array-float64-0.0.6.tgz", - "integrity": "sha512-oE8y4a84LyBF1goX5//sU1mOjet8gLI0/6wucZcjg+j/yMmNV1xFu84Az9GOGmFSE6Ze6lirGOhfBeEWNNNaJg==", - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], + "node_modules/@nx/cypress/node_modules/@nrwl/devkit": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-17.0.0.tgz", + "integrity": "sha512-HvV4GrohNxmN5niRu+XRWuy/gNXFkCLJTNqS3eeZ1h96BnVIiGQL6qHkXvwt0HShcse+Bn55BijKNO7JSo7oIQ==", + "dev": true, "dependencies": { - "@stdlib/assert-has-float64array-support": "^0.0.x" - }, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/athan" + "@nx/devkit": "17.0.0" } }, - "node_modules/@stdlib/array-uint16": { + "node_modules/@nx/cypress/node_modules/@nx/devkit": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-17.0.0.tgz", + "integrity": "sha512-NqN+I3R+Gxuy+gf04cdMg1Wo29CyhT2F87Yvu2JU355BfB3MOAFfOrQpPQt5sPlZRloZCrz0K3c2uftNkGSMUg==", + "dev": true, + "dependencies": { + "@nrwl/devkit": "17.0.0", + "ejs": "^3.1.7", + "enquirer": "~2.3.6", + "ignore": "^5.0.4", + "semver": "7.5.3", + "tmp": "~0.2.1", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "nx": ">= 16 <= 18" + } + }, + "node_modules/@nx/devkit": { + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-16.10.0.tgz", + "integrity": "sha512-IvKQqRJFDDiaj33SPfGd3ckNHhHi6ceEoqCbAP4UuMXOPPVOX6H0KVk+9tknkPb48B7jWIw6/AgOeWkBxPRO5w==", + "dev": true, + "peer": true, + "dependencies": { + "@nrwl/devkit": "16.10.0", + "ejs": "^3.1.7", + "enquirer": "~2.3.6", + "ignore": "^5.0.4", + "semver": "7.5.3", + "tmp": "~0.2.1", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "nx": ">= 15 <= 17" + } + }, + "node_modules/@nx/eslint": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nx/eslint/-/eslint-17.0.0.tgz", + "integrity": "sha512-GWoEoxKgKrjwIB38a8JPhE6MM6wacaZfYZCAb5N2F8+7GPQUJxNW8gyhaCbLIrUglSJL+SLFtE91txOwHnDsBQ==", + "dev": true, + "dependencies": { + "@nx/devkit": "17.0.0", + "@nx/js": "17.0.0", + "@nx/linter": "17.0.0", + "tslib": "^2.3.0", + "typescript": "~5.1.3" + }, + "peerDependencies": { + "eslint": "^8.0.0" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/@nx/eslint-plugin": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nx/eslint-plugin/-/eslint-plugin-17.0.0.tgz", + "integrity": "sha512-q1kUSPRGHhbaXwJq+JthprIDVjL9mVaPeB/2mFmMFdsU6RPZsud8oJoQCamMKkGMMcN/VrtAm3L680EYv/abQw==", + "dev": true, + "dependencies": { + "@nrwl/eslint-plugin-nx": "17.0.0", + "@nx/devkit": "17.0.0", + "@nx/js": "17.0.0", + "@typescript-eslint/type-utils": "^5.60.1", + "@typescript-eslint/utils": "^5.60.1", + "chalk": "^4.1.0", + "confusing-browser-globals": "^1.0.9", + "jsonc-eslint-parser": "^2.1.0", + "semver": "7.5.3", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.60.1", + "eslint-config-prettier": "^9.0.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/@nx/eslint-plugin/node_modules/@nrwl/devkit": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-17.0.0.tgz", + "integrity": "sha512-HvV4GrohNxmN5niRu+XRWuy/gNXFkCLJTNqS3eeZ1h96BnVIiGQL6qHkXvwt0HShcse+Bn55BijKNO7JSo7oIQ==", + "dev": true, + "dependencies": { + "@nx/devkit": "17.0.0" + } + }, + "node_modules/@nx/eslint-plugin/node_modules/@nx/devkit": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-17.0.0.tgz", + "integrity": "sha512-NqN+I3R+Gxuy+gf04cdMg1Wo29CyhT2F87Yvu2JU355BfB3MOAFfOrQpPQt5sPlZRloZCrz0K3c2uftNkGSMUg==", + "dev": true, + "dependencies": { + "@nrwl/devkit": "17.0.0", + "ejs": "^3.1.7", + "enquirer": "~2.3.6", + "ignore": "^5.0.4", + "semver": "7.5.3", + "tmp": "~0.2.1", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "nx": ">= 16 <= 18" + } + }, + "node_modules/@nx/eslint/node_modules/@nrwl/devkit": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-17.0.0.tgz", + "integrity": "sha512-HvV4GrohNxmN5niRu+XRWuy/gNXFkCLJTNqS3eeZ1h96BnVIiGQL6qHkXvwt0HShcse+Bn55BijKNO7JSo7oIQ==", + "dev": true, + "dependencies": { + "@nx/devkit": "17.0.0" + } + }, + "node_modules/@nx/eslint/node_modules/@nx/devkit": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-17.0.0.tgz", + "integrity": "sha512-NqN+I3R+Gxuy+gf04cdMg1Wo29CyhT2F87Yvu2JU355BfB3MOAFfOrQpPQt5sPlZRloZCrz0K3c2uftNkGSMUg==", + "dev": true, + "dependencies": { + "@nrwl/devkit": "17.0.0", + "ejs": "^3.1.7", + "enquirer": "~2.3.6", + "ignore": "^5.0.4", + "semver": "7.5.3", + "tmp": "~0.2.1", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "nx": ">= 16 <= 18" + } + }, + "node_modules/@nx/jest": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nx/jest/-/jest-17.0.0.tgz", + "integrity": "sha512-ITl074j0tdDkPxMtwFQWWC+Zp23wklxlHjLfhf0CUbPqzQnofEToUd7MiuKkjzvVjXJxD/zYX9sMl6iXmFpGiA==", + "dev": true, + "dependencies": { + "@jest/reporters": "^29.4.1", + "@jest/test-result": "^29.4.1", + "@nrwl/jest": "17.0.0", + "@nx/devkit": "17.0.0", + "@nx/js": "17.0.0", + "@phenomnomnominal/tsquery": "~5.0.1", + "chalk": "^4.1.0", + "identity-obj-proxy": "3.0.0", + "jest-config": "^29.4.1", + "jest-resolve": "^29.4.1", + "jest-util": "^29.4.1", + "resolve.exports": "1.1.0", + "tslib": "^2.3.0" + } + }, + "node_modules/@nx/jest/node_modules/@nrwl/devkit": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-17.0.0.tgz", + "integrity": "sha512-HvV4GrohNxmN5niRu+XRWuy/gNXFkCLJTNqS3eeZ1h96BnVIiGQL6qHkXvwt0HShcse+Bn55BijKNO7JSo7oIQ==", + "dev": true, + "dependencies": { + "@nx/devkit": "17.0.0" + } + }, + "node_modules/@nx/jest/node_modules/@nx/devkit": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-17.0.0.tgz", + "integrity": "sha512-NqN+I3R+Gxuy+gf04cdMg1Wo29CyhT2F87Yvu2JU355BfB3MOAFfOrQpPQt5sPlZRloZCrz0K3c2uftNkGSMUg==", + "dev": true, + "dependencies": { + "@nrwl/devkit": "17.0.0", + "ejs": "^3.1.7", + "enquirer": "~2.3.6", + "ignore": "^5.0.4", + "semver": "7.5.3", + "tmp": "~0.2.1", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "nx": ">= 16 <= 18" + } + }, + "node_modules/@nx/js": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nx/js/-/js-17.0.0.tgz", + "integrity": "sha512-j0YzvINQWH7OseoJp6zlbIioOKRDQ746MKROCDBx50uRkkJ2FlpHPYkLwv0M721JHJqf0dM0sBDa+HTxFHPcIg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.22.9", + "@babel/plugin-proposal-decorators": "^7.22.7", + "@babel/plugin-transform-runtime": "^7.22.9", + "@babel/preset-env": "^7.22.9", + "@babel/preset-typescript": "^7.22.5", + "@babel/runtime": "^7.22.6", + "@nrwl/js": "17.0.0", + "@nx/devkit": "17.0.0", + "@nx/workspace": "17.0.0", + "@phenomnomnominal/tsquery": "~5.0.1", + "babel-plugin-const-enum": "^1.0.1", + "babel-plugin-macros": "^2.8.0", + "babel-plugin-transform-typescript-metadata": "^0.3.1", + "chalk": "^4.1.0", + "columnify": "^1.6.0", + "detect-port": "^1.5.1", + "fast-glob": "3.2.7", + "fs-extra": "^11.1.0", + "ignore": "^5.0.4", + "js-tokens": "^4.0.0", + "minimatch": "3.0.5", + "npm-package-arg": "11.0.1", + "npm-run-path": "^4.0.1", + "ora": "5.3.0", + "semver": "7.5.3", + "source-map-support": "0.5.19", + "ts-node": "10.9.1", + "tsconfig-paths": "^4.1.2", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "verdaccio": "^5.0.4" + }, + "peerDependenciesMeta": { + "verdaccio": { + "optional": true + } + } + }, + "node_modules/@nx/js/node_modules/@nrwl/devkit": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-17.0.0.tgz", + "integrity": "sha512-HvV4GrohNxmN5niRu+XRWuy/gNXFkCLJTNqS3eeZ1h96BnVIiGQL6qHkXvwt0HShcse+Bn55BijKNO7JSo7oIQ==", + "dev": true, + "dependencies": { + "@nx/devkit": "17.0.0" + } + }, + "node_modules/@nx/js/node_modules/@nx/devkit": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-17.0.0.tgz", + "integrity": "sha512-NqN+I3R+Gxuy+gf04cdMg1Wo29CyhT2F87Yvu2JU355BfB3MOAFfOrQpPQt5sPlZRloZCrz0K3c2uftNkGSMUg==", + "dev": true, + "dependencies": { + "@nrwl/devkit": "17.0.0", + "ejs": "^3.1.7", + "enquirer": "~2.3.6", + "ignore": "^5.0.4", + "semver": "7.5.3", + "tmp": "~0.2.1", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "nx": ">= 16 <= 18" + } + }, + "node_modules/@nx/js/node_modules/babel-plugin-macros": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", + "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.7.2", + "cosmiconfig": "^6.0.0", + "resolve": "^1.12.0" + } + }, + "node_modules/@nx/js/node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@nx/linter": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nx/linter/-/linter-17.0.0.tgz", + "integrity": "sha512-4rDylew15CAlAsFxYvXzY6EvmGqG7uE7qWtBlkGFoDnGCNfVakzTpU6b4GJGLE1QMToKFgehrxOHL1SVzdkogg==", + "dev": true, + "dependencies": { + "@nx/eslint": "17.0.0" + } + }, + "node_modules/@nx/nx-darwin-arm64": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-17.0.0.tgz", + "integrity": "sha512-ZPW6uTVskpIbNJrH3I60lmYgXBnbszsmIX6haEhb4NKCwgPdZzMdbPqNNjIxKn6eL1A6FGKZYFh519OM8+z91A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-darwin-x64": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-17.0.0.tgz", + "integrity": "sha512-pAPqfyfhSIogaUfsp5P3rbha5Xa4yZ3bHG5agi6AE9P62N/Om4r8utdZpHPKyXbWywsJZM0lL5llSfiruuO+fg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-freebsd-x64": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-17.0.0.tgz", + "integrity": "sha512-DbbsthLTE+cKVUP6HDE6sza/8wRey2vy/6HfNuVnu7A/ZQaxWJUudkKviQidh7QEhHWiJoyEkjskExYTow6OoQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-arm-gnueabihf": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-17.0.0.tgz", + "integrity": "sha512-ZYgYLscl4Zj/Ux7N5DJ0it9sTODEiqZjfx80w05q18GjXUWAcozFp/CZgXdT7AxONtESl/ZKDdqM+p8Hv0rI2Q==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-arm64-gnu": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-17.0.0.tgz", + "integrity": "sha512-Mb0ffRV3X43OQtY5sY9wuAxFZ8VUQGM5LPwX908M2gAJH8FYtnWl06rfJAGhFAMf1Dt3bWsNebMC5iJprtF3SQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-arm64-musl": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-17.0.0.tgz", + "integrity": "sha512-Xwzy3QysngtXVCJ3YRJ9rl8JL13yqluknftwxiHsMaYD7BMlh2YXdyt5D7g4yvLywq+6SezKS6cB+X4/OQlQUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-x64-gnu": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-17.0.0.tgz", + "integrity": "sha512-KNbLZCNhFK/cRMavh5b7ruWX2J6KA1rR1LV5rF/liDM0scyARkJzy5PcwwhXqxaUPQD+EXWWiRkKKRYk+mwVLA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-x64-musl": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-17.0.0.tgz", + "integrity": "sha512-T8xJTO+kac3l8528YxpAjOeke3QbRYmdSY09E6f0OrSL43D3sfJcWB8NNatx3k5q0bJ9TVl7VVJG/3Rwux/99A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-win32-arm64-msvc": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-17.0.0.tgz", + "integrity": "sha512-Y/g9w6lLWMKvr9htS3ZD3jbVzMVWPq01+Bw440E5gBexAp1mvrv1cih0lKkduuIAlVppyjJu+htpEdp2wxUv9Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-win32-x64-msvc": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-17.0.0.tgz", + "integrity": "sha512-VIF01yfR2jSMQi/1x04TqJxhbKCzrdRG6QBjPCXTl6ZLnb7eGolKVPxDJd3blhYtRsS3pp20u2ra6i7C1oRrMQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/vite": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nx/vite/-/vite-17.0.0.tgz", + "integrity": "sha512-vSmqcA9T+bkePUcd9Sb2lPkyDx6axcwL04xVN77X01Po6vnaZ0YcPUdQH5VV9hJu9TAAtt3tyOoO3mjYTM1Xlw==", + "dev": true, + "dependencies": { + "@nrwl/vite": "17.0.0", + "@nx/devkit": "17.0.0", + "@nx/js": "17.0.0", + "@phenomnomnominal/tsquery": "~5.0.1", + "@swc/helpers": "~0.5.0", + "enquirer": "~2.3.6", + "tsconfig-paths": "^4.1.2" + }, + "peerDependencies": { + "vite": "^4.3.4", + "vitest": ">=0.31.0 <1.0.0" + } + }, + "node_modules/@nx/vite/node_modules/@nrwl/devkit": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-17.0.0.tgz", + "integrity": "sha512-HvV4GrohNxmN5niRu+XRWuy/gNXFkCLJTNqS3eeZ1h96BnVIiGQL6qHkXvwt0HShcse+Bn55BijKNO7JSo7oIQ==", + "dev": true, + "dependencies": { + "@nx/devkit": "17.0.0" + } + }, + "node_modules/@nx/vite/node_modules/@nx/devkit": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-17.0.0.tgz", + "integrity": "sha512-NqN+I3R+Gxuy+gf04cdMg1Wo29CyhT2F87Yvu2JU355BfB3MOAFfOrQpPQt5sPlZRloZCrz0K3c2uftNkGSMUg==", + "dev": true, + "dependencies": { + "@nrwl/devkit": "17.0.0", + "ejs": "^3.1.7", + "enquirer": "~2.3.6", + "ignore": "^5.0.4", + "semver": "7.5.3", + "tmp": "~0.2.1", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "nx": ">= 16 <= 18" + } + }, + "node_modules/@nx/vue": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nx/vue/-/vue-17.0.0.tgz", + "integrity": "sha512-ZCiHPyz5JycpoOkjp8afo0XPkszh/aIbeu+BjDCpQzzhu3JdB0mzssvtCuD33wr/5AOvWSZXB4szdFZ3t4zhWQ==", + "dev": true, + "dependencies": { + "@nx/devkit": "17.0.0", + "@nx/eslint": "17.0.0", + "@nx/jest": "17.0.0", + "@nx/js": "17.0.0", + "@nx/vite": "17.0.0", + "@nx/web": "17.0.0", + "@phenomnomnominal/tsquery": "~5.0.1", + "minimatch": "3.0.5", + "tslib": "^2.3.0" + } + }, + "node_modules/@nx/vue/node_modules/@nrwl/devkit": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-17.0.0.tgz", + "integrity": "sha512-HvV4GrohNxmN5niRu+XRWuy/gNXFkCLJTNqS3eeZ1h96BnVIiGQL6qHkXvwt0HShcse+Bn55BijKNO7JSo7oIQ==", + "dev": true, + "dependencies": { + "@nx/devkit": "17.0.0" + } + }, + "node_modules/@nx/vue/node_modules/@nx/devkit": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-17.0.0.tgz", + "integrity": "sha512-NqN+I3R+Gxuy+gf04cdMg1Wo29CyhT2F87Yvu2JU355BfB3MOAFfOrQpPQt5sPlZRloZCrz0K3c2uftNkGSMUg==", + "dev": true, + "dependencies": { + "@nrwl/devkit": "17.0.0", + "ejs": "^3.1.7", + "enquirer": "~2.3.6", + "ignore": "^5.0.4", + "semver": "7.5.3", + "tmp": "~0.2.1", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "nx": ">= 16 <= 18" + } + }, + "node_modules/@nx/web": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nx/web/-/web-17.0.0.tgz", + "integrity": "sha512-H8R3QRs7nBKFei+KBvn4D8h9b4YEH8v4vfigFFD2Px1WCi0S8fWUqr9mF/EUUt6pUAf7Qgq3qp+EHArQ19X8MA==", + "dev": true, + "dependencies": { + "@nrwl/web": "17.0.0", + "@nx/devkit": "17.0.0", + "@nx/js": "17.0.0", + "chalk": "^4.1.0", + "detect-port": "^1.5.1", + "http-server": "^14.1.0", + "tslib": "^2.3.0" + } + }, + "node_modules/@nx/web/node_modules/@nrwl/devkit": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-17.0.0.tgz", + "integrity": "sha512-HvV4GrohNxmN5niRu+XRWuy/gNXFkCLJTNqS3eeZ1h96BnVIiGQL6qHkXvwt0HShcse+Bn55BijKNO7JSo7oIQ==", + "dev": true, + "dependencies": { + "@nx/devkit": "17.0.0" + } + }, + "node_modules/@nx/web/node_modules/@nx/devkit": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-17.0.0.tgz", + "integrity": "sha512-NqN+I3R+Gxuy+gf04cdMg1Wo29CyhT2F87Yvu2JU355BfB3MOAFfOrQpPQt5sPlZRloZCrz0K3c2uftNkGSMUg==", + "dev": true, + "dependencies": { + "@nrwl/devkit": "17.0.0", + "ejs": "^3.1.7", + "enquirer": "~2.3.6", + "ignore": "^5.0.4", + "semver": "7.5.3", + "tmp": "~0.2.1", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "nx": ">= 16 <= 18" + } + }, + "node_modules/@nx/workspace": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nx/workspace/-/workspace-17.0.0.tgz", + "integrity": "sha512-7rG+7S7f6CyxrvLSduSyvJZ4DYfpCO1WZkEfZDpp9cuQVJudeZqrXqolupkmQqymTTWyNSRASvLbL1GBRLtU3w==", + "dev": true, + "dependencies": { + "@nrwl/workspace": "17.0.0", + "@nx/devkit": "17.0.0", + "chalk": "^4.1.0", + "enquirer": "~2.3.6", + "nx": "17.0.0", + "tslib": "^2.3.0", + "yargs-parser": "21.1.1" + } + }, + "node_modules/@nx/workspace/node_modules/@nrwl/devkit": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-17.0.0.tgz", + "integrity": "sha512-HvV4GrohNxmN5niRu+XRWuy/gNXFkCLJTNqS3eeZ1h96BnVIiGQL6qHkXvwt0HShcse+Bn55BijKNO7JSo7oIQ==", + "dev": true, + "dependencies": { + "@nx/devkit": "17.0.0" + } + }, + "node_modules/@nx/workspace/node_modules/@nx/devkit": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-17.0.0.tgz", + "integrity": "sha512-NqN+I3R+Gxuy+gf04cdMg1Wo29CyhT2F87Yvu2JU355BfB3MOAFfOrQpPQt5sPlZRloZCrz0K3c2uftNkGSMUg==", + "dev": true, + "dependencies": { + "@nrwl/devkit": "17.0.0", + "ejs": "^3.1.7", + "enquirer": "~2.3.6", + "ignore": "^5.0.4", + "semver": "7.5.3", + "tmp": "~0.2.1", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "nx": ">= 16 <= 18" + } + }, + "node_modules/@nxlv/python": { + "version": "16.1.4", + "resolved": "https://registry.npmjs.org/@nxlv/python/-/python-16.1.4.tgz", + "integrity": "sha512-IVkxc1dLmxQStloJvLFfVRgwIUi8Sxl9pi8TYq6e4Gn36XtvG9eADtB9r9AxziEQpPvQFNfmraOU1X3s7yItvg==", + "dev": true, + "dependencies": { + "@iarna/toml": "^2.2.5", + "chalk": "^4.1.1", + "command-exists": "^1.2.9", + "cross-spawn": "^7.0.3", + "file-uri-to-path": "^2.0.0", + "fs-extra": "^11.1.0", + "lodash": "4.17.21", + "tslib": "^2.3.0", + "uuid": "^9.0.0" + }, + "peerDependencies": { + "@nx/devkit": "^16.0.0" + } + }, + "node_modules/@nxlv/python/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@one-ini/wasm": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz", + "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==", + "dev": true + }, + "node_modules/@parcel/watcher": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz", + "integrity": "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "node-addon-api": "^3.2.1", + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@passwordless-id/webauthn": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@passwordless-id/webauthn/-/webauthn-1.3.0.tgz", + "integrity": "sha512-Kpoy4NHCDkKn9WrDPjnqKfohfzQFifAwgmpnPcDCEei1mc3K/0bWznxDi4EH1eVdubY5pOn8cNOWilLPCxkqxA==" + }, + "node_modules/@petamoriken/float16": { + "version": "3.8.4", + "resolved": "https://registry.npmjs.org/@petamoriken/float16/-/float16-3.8.4.tgz", + "integrity": "sha512-kB+NJ5Br56ZhElKsf0pM7/PQfrDdDVMRz8f0JM6eVOGE+L89z9hwcst9QvWBBnazzuqGTGtPsJNZoQ1JdNiGSQ==" + }, + "node_modules/@phenomnomnominal/tsquery": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@phenomnomnominal/tsquery/-/tsquery-5.0.1.tgz", + "integrity": "sha512-3nVv+e2FQwsW8Aw6qTU6f+1rfcJ3hrcnvH/mu9i8YhxO+9sqbOfpL8m6PbET5+xKOlz/VSbp0RoYWYCtIsnmuA==", + "dev": true, + "dependencies": { + "esquery": "^1.4.0" + }, + "peerDependencies": { + "typescript": "^3 || ^4 || ^5" + } + }, + "node_modules/@pkgr/utils": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", + "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "fast-glob": "^3.3.0", + "is-glob": "^4.0.3", + "open": "^9.1.0", + "picocolors": "^1.0.0", + "tslib": "^2.6.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@pkgr/utils/node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@pkgr/utils/node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/@pkgr/utils/node_modules/open": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", + "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", + "dev": true, + "dependencies": { + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.23", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.23.tgz", + "integrity": "sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==" + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, + "node_modules/@rocket.chat/sdk": { + "version": "0.2.9-2", + "resolved": "https://registry.npmjs.org/@rocket.chat/sdk/-/sdk-0.2.9-2.tgz", + "integrity": "sha512-T8No2GI9Zez2638n79GtTkE73P4A0QdHhsh/G1ioNjpcEYmjWy8bbtGiBZcFNLTy4CaJSWj81zZ7eoaUUYr2MQ==", + "dependencies": { + "@types/lru-cache": "^4.1.0", + "@types/node": "^9.4.6", + "asteroid": "github:rocketchat/asteroid", + "lru-cache": "^4.1.1", + "node-rest-client": "^3.1.0" + }, + "engines": { + "node": "> 8.0.0", + "npm": "> 5.0.0" + } + }, + "node_modules/@rocket.chat/sdk/node_modules/@types/node": { + "version": "9.6.61", + "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.61.tgz", + "integrity": "sha512-/aKAdg5c8n468cYLy2eQrcR5k6chlbNwZNGUj3TboyPa2hcO2QAJcfymlqPzMiRj8B6nYKXjzQz36minFE0RwQ==" + }, + "node_modules/@rocket.chat/sdk/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/@rocket.chat/sdk/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" + }, + "node_modules/@rollup/pluginutils": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "dev": true, + "dependencies": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.5.1.tgz", + "integrity": "sha512-6i/8UoL0P5y4leBIGzvkZdS85RDMG9y1ihZzmTZQ5LdHUYmZ7pKFoj8X0236s3lusPs1Fa5HTQUpwI+UfTcmeA==", + "dev": true + }, + "node_modules/@segment/analytics-core": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@segment/analytics-core/-/analytics-core-1.3.2.tgz", + "integrity": "sha512-NpeBCfOyMdO2/BDKfhCUNHcEwxg88N2iTnswBoEMh38rtsQ03TWLVYwgiTakPjNQFezdKkR6jq3JhQ3WWgq67g==", + "dependencies": { + "@lukeed/uuid": "^2.0.0", + "dset": "^3.1.2", + "tslib": "^2.4.1" + } + }, + "node_modules/@segment/analytics-next": { + "version": "1.58.0", + "resolved": "https://registry.npmjs.org/@segment/analytics-next/-/analytics-next-1.58.0.tgz", + "integrity": "sha512-Wh+/D3QsjbO42N6O542FCf74wnL5JMj9HWq309NGcNbjo7WwIGHOHgE+tUFm1b0CsBL5zWI+mGJBU+U6PBaNWw==", + "dependencies": { + "@lukeed/uuid": "^2.0.0", + "@segment/analytics-core": "1.3.2", + "@segment/analytics.js-video-plugins": "^0.2.1", + "@segment/facade": "^3.4.9", + "@segment/tsub": "^2.0.0", + "dset": "^3.1.2", + "js-cookie": "3.0.1", + "node-fetch": "^2.6.7", + "spark-md5": "^3.0.1", + "tslib": "^2.4.1", + "unfetch": "^4.1.0" + } + }, + "node_modules/@segment/analytics-next/node_modules/js-cookie": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.1.tgz", + "integrity": "sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/@segment/analytics.js-video-plugins": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@segment/analytics.js-video-plugins/-/analytics.js-video-plugins-0.2.1.tgz", + "integrity": "sha512-lZwCyEXT4aaHBLNK433okEKdxGAuyrVmop4BpQqQSJuRz0DglPZgd9B/XjiiWs1UyOankg2aNYMN3VcS8t4eSQ==", + "dependencies": { + "unfetch": "^3.1.1" + } + }, + "node_modules/@segment/analytics.js-video-plugins/node_modules/unfetch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-3.1.2.tgz", + "integrity": "sha512-L0qrK7ZeAudGiKYw6nzFjnJ2D5WHblUBwmHIqtPS6oKUd+Hcpk7/hKsSmcHsTlpd1TbTNsiRBUKRq3bHLNIqIw==" + }, + "node_modules/@segment/facade": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/@segment/facade/-/facade-3.4.10.tgz", + "integrity": "sha512-xVQBbB/lNvk/u8+ey0kC/+g8pT3l0gCT8O2y9Z+StMMn3KAFAQ9w8xfgef67tJybktOKKU7pQGRPolRM1i1pdA==", + "dependencies": { + "@segment/isodate-traverse": "^1.1.1", + "inherits": "^2.0.4", + "new-date": "^1.0.3", + "obj-case": "0.2.1" + } + }, + "node_modules/@segment/isodate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@segment/isodate/-/isodate-1.0.3.tgz", + "integrity": "sha512-BtanDuvJqnACFkeeYje7pWULVv8RgZaqKHWwGFnL/g/TH/CcZjkIVTfGDp/MAxmilYHUkrX70SqwnYSTNEaN7A==" + }, + "node_modules/@segment/isodate-traverse": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@segment/isodate-traverse/-/isodate-traverse-1.1.1.tgz", + "integrity": "sha512-+G6e1SgAUkcq0EDMi+SRLfT48TNlLPF3QnSgFGVs0V9F3o3fq/woQ2rHFlW20W0yy5NnCUH0QGU3Am2rZy/E3w==", + "dependencies": { + "@segment/isodate": "^1.0.3" + } + }, + "node_modules/@segment/tsub": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@segment/tsub/-/tsub-2.0.0.tgz", + "integrity": "sha512-NzkBK8GwPsyQ74AceLjENbUoaFrObnzEKOX4ko2wZDuIyK+DnDm3B//8xZYI2LCKt+wUD55l6ygfjCoVs8RMWw==", + "dependencies": { + "@stdlib/math-base-special-ldexp": "^0.0.5", + "dlv": "^1.1.3", + "dset": "^3.1.1", + "tiny-hashes": "^1.0.1" + }, + "bin": { + "tsub": "dist/index.js" + } + }, + "node_modules/@sentry-internal/tracing": { + "version": "7.74.1", + "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.74.1.tgz", + "integrity": "sha512-nNaiZreQxCitG2PzYPaC7XtyA9OMsETGYMKAtiK4p62/uTmeYbsBva9BoNx1XeiHRwbrVQYRMKQ9nV5e2jS4/A==", + "dependencies": { + "@sentry/core": "7.74.1", + "@sentry/types": "7.74.1", + "@sentry/utils": "7.74.1", + "tslib": "^2.4.1 || ^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/browser": { + "version": "7.74.1", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.74.1.tgz", + "integrity": "sha512-OYWNne/KO60lOvkIpIlJUyiJt/9j8DGI57thSDFEYSmmbNqMitczUTBOaEStouvHKyfchqLZm1CZfWKt+z0VOA==", + "dependencies": { + "@sentry-internal/tracing": "7.74.1", + "@sentry/core": "7.74.1", + "@sentry/replay": "7.74.1", + "@sentry/types": "7.74.1", + "@sentry/utils": "7.74.1", + "tslib": "^2.4.1 || ^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/core": { + "version": "7.74.1", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.74.1.tgz", + "integrity": "sha512-LvEhOSfdIvwkr+PdlrT/aA/iOLhkXrSkvjqAQyogE4ddCWeYfS0NoirxNt1EaxMBAWKhYZRqzkA7WA4LDLbzlA==", + "dependencies": { + "@sentry/types": "7.74.1", + "@sentry/utils": "7.74.1", + "tslib": "^2.4.1 || ^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/replay": { + "version": "7.74.1", + "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.74.1.tgz", + "integrity": "sha512-qmbOl+jYdyhoHFbPp9WemKx8UojID5hVmuVLxNIP0ANqAwmE9OQEK9YFg2cf7L/TpKb1tqz0qLgi5MYIdcdpgQ==", + "dependencies": { + "@sentry/core": "7.74.1", + "@sentry/types": "7.74.1", + "@sentry/utils": "7.74.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@sentry/types": { + "version": "7.74.1", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.74.1.tgz", + "integrity": "sha512-2jIuPc+YKvXqZETwr2E8VYnsH1zsSUR/wkIvg1uTVeVNyoowJv+YsOtCdeGyL2AwiotUBSPKu7O1Lz0kq5rMOQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/utils": { + "version": "7.74.1", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.74.1.tgz", + "integrity": "sha512-qUsqufuHYcy5gFhLZslLxA5kcEOkkODITXW3c7D+x+8iP/AJqa8v8CeUCVNS7RetHCuIeWAbbTClC4c411EwQg==", + "dependencies": { + "@sentry/types": "7.74.1", + "tslib": "^2.4.1 || ^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/vue": { + "version": "7.74.1", + "resolved": "https://registry.npmjs.org/@sentry/vue/-/vue-7.74.1.tgz", + "integrity": "sha512-t74d7ZkgQSHAgyaV+sDNFAWMOBl6CPFhBlzplzCvmgaUf5rj5kAlElztm2KFqOFplfPSyJx20wc741exjfuQOw==", + "dependencies": { + "@sentry/browser": "7.74.1", + "@sentry/core": "7.74.1", + "@sentry/types": "7.74.1", + "@sentry/utils": "7.74.1", + "tslib": "^2.4.1 || ^1.9.3" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "vue": "2.x || 3.x" + } + }, + "node_modules/@sideway/address": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", + "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", + "dev": true, + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", + "dev": true + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "dev": true + }, + "node_modules/@simplewebauthn/browser": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/@simplewebauthn/browser/-/browser-8.3.1.tgz", + "integrity": "sha512-bMW7oOkxX4ydRAkkPtJ1do2k9yOoIGc/hZYebcuEOVdJoC6wwVpu97mYY7Mz8B9hLlcaR5WFgBsLl5tSJVzm8A==", + "dependencies": { + "@simplewebauthn/typescript-types": "^8.0.0" + } + }, + "node_modules/@simplewebauthn/typescript-types": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@simplewebauthn/typescript-types/-/typescript-types-8.0.0.tgz", + "integrity": "sha512-d7Izb2H+LZJteXMkS8DmpAarD6mZdpIOu/av/yH4/u/3Pd6DKFLyBM3j8BMmUvUqpzvJvHARNrRfQYto58mtTQ==" + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@sjmc11/tourguidejs": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/@sjmc11/tourguidejs/-/tourguidejs-0.0.10.tgz", + "integrity": "sha512-TnEL+ygzv5W73McwzuIoWQNK9HJ1/Wk4/lLHYtQlNpP4kx/Pv9CieI+zakxkgouQAgQX7WL92fZU1p2KPLvvbA==", + "dependencies": { + "@floating-ui/dom": "^1.0.3", + "sass": "^1.55.0" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", + "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==" + }, + "node_modules/@stdlib/array-float32": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@stdlib/array-float32/-/array-float32-0.0.6.tgz", + "integrity": "sha512-QgKT5UaE92Rv7cxfn7wBKZAlwFFHPla8eXsMFsTGt5BiL4yUy36lwinPUh4hzybZ11rw1vifS3VAPuk6JP413Q==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-has-float32array-support": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/array-float64": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@stdlib/array-float64/-/array-float64-0.0.6.tgz", + "integrity": "sha512-oE8y4a84LyBF1goX5//sU1mOjet8gLI0/6wucZcjg+j/yMmNV1xFu84Az9GOGmFSE6Ze6lirGOhfBeEWNNNaJg==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/assert-has-float64array-support": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stdlib/array-uint16": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/@stdlib/array-uint16/-/array-uint16-0.0.6.tgz", "integrity": "sha512-/A8Tr0CqJ4XScIDRYQawosko8ha1Uy+50wsTgJhjUtXDpPRp7aUjmxvYkbe7Rm+ImYYbDQVix/uCiPAFQ8ed4Q==", @@ -6735,60 +8274,337 @@ "url": "https://www.patreon.com/athan" } }, - "node_modules/@stdlib/utils-type-of": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/@stdlib/utils-type-of/-/utils-type-of-0.0.8.tgz", - "integrity": "sha512-b4xqdy3AnnB7NdmBBpoiI67X4vIRxvirjg3a8BfhM5jPr2k0njby1jAbG9dUxJvgAV6o32S4kjUgfIdjEYpTNQ==", + "node_modules/@stdlib/utils-type-of": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@stdlib/utils-type-of/-/utils-type-of-0.0.8.tgz", + "integrity": "sha512-b4xqdy3AnnB7NdmBBpoiI67X4vIRxvirjg3a8BfhM5jPr2k0njby1jAbG9dUxJvgAV6o32S4kjUgfIdjEYpTNQ==", + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "dependencies": { + "@stdlib/utils-constructor-name": "^0.0.x", + "@stdlib/utils-global": "^0.0.x" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/athan" + } + }, + "node_modules/@stripe/stripe-js": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@stripe/stripe-js/-/stripe-js-2.1.9.tgz", + "integrity": "sha512-0RSvCJrzEVx52e8hbSAcZ2vv6OzoFj5fe5XC50GSrcev1Y4t2XDE6W5CIhR/Y6l3CPgO/P4luqoLWuvpUkBhig==", + "dev": true + }, + "node_modules/@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "dev": true, + "dependencies": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + } + }, + "node_modules/@surma/rollup-plugin-off-main-thread/node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/@swc-node/core": { + "version": "1.10.6", + "resolved": "https://registry.npmjs.org/@swc-node/core/-/core-1.10.6.tgz", + "integrity": "sha512-lDIi/rPosmKIknWzvs2/Fi9zWRtbkx8OJ9pQaevhsoGzJSal8Pd315k1W5AIrnknfdAB4HqRN12fk6AhqnrEEw==", + "dev": true, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@swc/core": ">= 1.3" + } + }, + "node_modules/@swc-node/register": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@swc-node/register/-/register-1.6.8.tgz", + "integrity": "sha512-74ijy7J9CWr1Z88yO+ykXphV29giCrSpANQPQRooE0bObpkTO1g4RzQovIfbIaniBiGDDVsYwDoQ3FIrCE8HcQ==", + "dev": true, + "dependencies": { + "@swc-node/core": "^1.10.6", + "@swc-node/sourcemap-support": "^0.3.0", + "colorette": "^2.0.19", + "debug": "^4.3.4", + "pirates": "^4.0.5", + "tslib": "^2.5.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@swc/core": ">= 1.3", + "typescript": ">= 4.3" + } + }, + "node_modules/@swc-node/sourcemap-support": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@swc-node/sourcemap-support/-/sourcemap-support-0.3.0.tgz", + "integrity": "sha512-gqBJSmJMWomZFxlppaKea7NeAqFrDrrS0RMt24No92M3nJWcyI9YKGEQKl+EyJqZ5gh6w1s0cTklMHMzRwA1NA==", + "dev": true, + "dependencies": { + "source-map-support": "^0.5.21", + "tslib": "^2.5.0" + } + }, + "node_modules/@swc-node/sourcemap-support/node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/@swc/core": { + "version": "1.3.93", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.93.tgz", + "integrity": "sha512-690GRr1wUGmGYZHk7fUduX/JUwViMF2o74mnZYIWEcJaCcd9MQfkhsxPBtjeg6tF+h266/Cf3RPYhsFBzzxXcA==", + "devOptional": true, + "hasInstallScript": true, + "dependencies": { + "@swc/counter": "^0.1.1", + "@swc/types": "^0.1.5" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.3.93", + "@swc/core-darwin-x64": "1.3.93", + "@swc/core-linux-arm-gnueabihf": "1.3.93", + "@swc/core-linux-arm64-gnu": "1.3.93", + "@swc/core-linux-arm64-musl": "1.3.93", + "@swc/core-linux-x64-gnu": "1.3.93", + "@swc/core-linux-x64-musl": "1.3.93", + "@swc/core-win32-arm64-msvc": "1.3.93", + "@swc/core-win32-ia32-msvc": "1.3.93", + "@swc/core-win32-x64-msvc": "1.3.93" + }, + "peerDependencies": { + "@swc/helpers": "^0.5.0" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.3.93", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.93.tgz", + "integrity": "sha512-gEKgk7FVIgltnIfDO6GntyuQBBlAYg5imHpRgLxB1zSI27ijVVkksc6QwISzFZAhKYaBWIsFSVeL9AYSziAF7A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.3.93", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.93.tgz", + "integrity": "sha512-ZQPxm/fXdDQtn3yrYSL/gFfA8OfZ5jTi33yFQq6vcg/Y8talpZ+MgdSlYM0FkLrZdMTYYTNFiuBQuuvkA+av+Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.3.93", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.93.tgz", + "integrity": "sha512-OYFMMI2yV+aNe3wMgYhODxHdqUB/jrK0SEMHHS44GZpk8MuBXEF+Mcz4qjkY5Q1EH7KVQqXb/gVWwdgTHpjM2A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.3.93", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.93.tgz", + "integrity": "sha512-BT4dT78odKnJMNiq5HdjBsv29CiIdcCcImAPxeFqAeFw1LL6gh9nzI8E96oWc+0lVT5lfhoesCk4Qm7J6bty8w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.3.93", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.93.tgz", + "integrity": "sha512-yH5fWEl1bktouC0mhh0Chuxp7HEO4uCtS/ly1Vmf18gs6wZ8DOOkgAEVv2dNKIryy+Na++ljx4Ym7C8tSJTrLw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.3.93", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.93.tgz", + "integrity": "sha512-OFUdx64qvrGJhXKEyxosHxgoUVgba2ztYh7BnMiU5hP8lbI8G13W40J0SN3CmFQwPP30+3oEbW7LWzhKEaYjlg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.3.93", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.93.tgz", + "integrity": "sha512-4B8lSRwEq1XYm6xhxHhvHmKAS7pUp1Q7E33NQ2TlmFhfKvCOh86qvThcjAOo57x8DRwmpvEVrqvpXtYagMN6Ig==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.3.93", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.93.tgz", + "integrity": "sha512-BHShlxtkven8ZjjvZ5QR6sC5fZCJ9bMujEkiha6W4cBUTY7ce7qGFyHmQd+iPC85d9kD/0cCiX/Xez8u0BhO7w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.3.93", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.93.tgz", + "integrity": "sha512-nEwNWnz4JzYAK6asVvb92yeylfxMYih7eMQOnT7ZVlZN5ba9WF29xJ6kcQKs9HRH6MvWhz9+wRgv3FcjlU6HYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.3.93", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.93.tgz", + "integrity": "sha512-jibQ0zUr4kwJaQVwgmH+svS04bYTPnPw/ZkNInzxS+wFAtzINBYcU8s2PMWbDb2NGYiRSEeoSGyAvS9H+24JFA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" + "win32" ], - "dependencies": { - "@stdlib/utils-constructor-name": "^0.0.x", - "@stdlib/utils-global": "^0.0.x" - }, "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/athan" + "node": ">=10" } }, - "node_modules/@stripe/stripe-js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@stripe/stripe-js/-/stripe-js-2.1.6.tgz", - "integrity": "sha512-QSzqQIcowgap7a40f3a7oUR+59Xet/i8fp1EsnzzwxK5oPRQsCbbLQ4Cd6qM0y1pdZMonFnCrAWayWdE9Lr0iA==", - "dev": true + "node_modules/@swc/counter": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.2.tgz", + "integrity": "sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw==", + "devOptional": true }, - "node_modules/@surma/rollup-plugin-off-main-thread": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", - "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "node_modules/@swc/helpers": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.3.tgz", + "integrity": "sha512-FaruWX6KdudYloq1AHD/4nU+UsMTdNE8CKyrseXWEcgjDAbvkwJg2QGPAnfIJLIWsjZOSPLOAykK6fuYp4vp4A==", "dev": true, "dependencies": { - "ejs": "^3.1.6", - "json5": "^2.2.0", - "magic-string": "^0.25.0", - "string.prototype.matchall": "^4.0.6" + "tslib": "^2.4.0" } }, - "node_modules/@surma/rollup-plugin-off-main-thread/node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.8" - } + "node_modules/@swc/types": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.5.tgz", + "integrity": "sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==", + "devOptional": true }, "node_modules/@tailwindcss/aspect-ratio": { "version": "0.4.2", @@ -6861,16 +8677,81 @@ "node": ">=10.13.0" } }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "devOptional": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "devOptional": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "devOptional": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "devOptional": true + }, "node_modules/@tsconfig/node18": { - "version": "18.2.1", - "resolved": "https://registry.npmjs.org/@tsconfig/node18/-/node18-18.2.1.tgz", - "integrity": "sha512-RDDZFuofwkcKpl8Vpj5wFbY+H53xOtqK7ckEL1sXsbPwvKwDdjQf3LkHbtt9sxIHn9nWIEwkmCwBRZ6z5TKU2A==", + "version": "18.2.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node18/-/node18-18.2.2.tgz", + "integrity": "sha512-d6McJeGsuoRlwWZmVIeE8CUA27lu6jLjvv1JzqmpsytOYYbVi1tHZEnwCNVOXnj4pyLvneZlFlpXUK+X9wBWyw==", "dev": true }, + "node_modules/@types/babel__core": { + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.3.tgz", + "integrity": "sha512-54fjTSeSHwfan8AyHWrKbfBWiEUrNTZsUwPTDSNaaP1QDQIZbeNUg3a59E9D+375MzUw/x1vx2/0F5LBz+AeYA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.6", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.6.tgz", + "integrity": "sha512-66BXMKb/sUWbMdBNdMvajU7i/44RkrA3z/Yt1c7R5xejt8qh84iU54yUWCtm0QwGJlDcf/gg4zd/x4mpLAlb/w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.3.tgz", + "integrity": "sha512-ciwyCLeuRfxboZ4isgdNZi/tkt06m8Tw6uGbBSBgWrnnZGNXiEyM27xc/PjXGQLqlZ6ylbgHMnm7ccF9tCkOeQ==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.3.tgz", + "integrity": "sha512-Lsh766rGEFbaxMIDH7Qa+Yha8cMVI3qAK6CHt3OR0YfxOIn5Z54iHiyDRycHrBqeIiqGa20Kpsv1cavfBKkRSw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, "node_modules/@types/browser-sync": { - "version": "2.27.0", - "resolved": "https://registry.npmjs.org/@types/browser-sync/-/browser-sync-2.27.0.tgz", - "integrity": "sha512-CQc8mggMZpKsUAdjm7jyR8uWcFnxuly8xw76ZY4jSLugsZWHLcv7mLVVY591XPaZ2BqbFZT1fxov3hrQFistNg==", + "version": "2.27.3", + "resolved": "https://registry.npmjs.org/@types/browser-sync/-/browser-sync-2.27.3.tgz", + "integrity": "sha512-AG4+p6Wfg99BtiGTBIWN4u6JHm0nEG74krPU06pWoCFnMhNcpLfurfg5zcPUe8tNqhxJ3ZppZ6D5vxq+CCqbGQ==", "dev": true, "dependencies": { "@types/micromatch": "^2", @@ -6880,38 +8761,38 @@ } }, "node_modules/@types/chai": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz", - "integrity": "sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==", + "version": "4.3.9", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.9.tgz", + "integrity": "sha512-69TtiDzu0bcmKQv3yg1Zx409/Kd7r0b5F1PfpYJfSHzLGtB53547V4u+9iqKYsTu/O2ai6KTb0TInNpvuQ3qmg==", "dev": true }, "node_modules/@types/chai-subset": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz", - "integrity": "sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.4.tgz", + "integrity": "sha512-CCWNXrJYSUIojZ1149ksLl3AN9cmZ5djf+yUoVVV+NuYrtydItQVlL2ZDqyC6M6O9LWRnVf8yYDxbXHO2TfQZg==", "dev": true, "dependencies": { "@types/chai": "*" } }, "node_modules/@types/cookie": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.5.1.tgz", - "integrity": "sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==" + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.5.3.tgz", + "integrity": "sha512-SLg07AS9z1Ab2LU+QxzU8RCmzsja80ywjf/t5oqw+4NSH20gIGlhLOrBDm1L3PBWzPa4+wkgFQVZAjE6Ioj2ug==" }, "node_modules/@types/cors": { - "version": "2.8.13", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", - "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", + "version": "2.8.15", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.15.tgz", + "integrity": "sha512-n91JxbNLD8eQIuXDIChAN1tCKNWCEgpceU9b7ZMbFA+P+Q4yIeh80jizFLEvolRPc1ES0VdwFlGv+kJTSirogw==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/eslint": { - "version": "8.44.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.2.tgz", - "integrity": "sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==", + "version": "8.44.6", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.6.tgz", + "integrity": "sha512-P6bY56TVmX8y9J87jHNgQh43h6VVU+6H7oN7hgvivV81K2XY8qJZ5vqPy/HdUoVIelii2kChYVzQanlswPWVFw==", "dev": true, "dependencies": { "@types/estree": "*", @@ -6919,9 +8800,9 @@ } }, "node_modules/@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.3.tgz", + "integrity": "sha512-CS2rOaoQ/eAgAfcTfq6amKG7bsN+EMcgGY4FAFQdvSj2y1ixvOZTUA9mOtCai7E1SYu283XNw7urKK30nP3wkQ==", "dev": true }, "node_modules/@types/glob": { @@ -6933,22 +8814,55 @@ "@types/node": "*" } }, + "node_modules/@types/graceful-fs": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.8.tgz", + "integrity": "sha512-NhRH7YzWq8WiNKVavKPBmtLYZHxNY19Hh+az28O/phfp68CF45pMFud+ZzJ8ewnxnC5smIdF3dqFeiSUQ5I+pw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.3.tgz", + "integrity": "sha512-pP0P/9BnCj1OVvQR2lF41EkDG/lWWnDyA203b/4Fmi2eTyORnBtcDoKDwjWQthELrBvWkMOrvSOnZ8OVlW6tXA==", "dev": true }, - "node_modules/@types/js-cookie": { + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-zONci81DZYCZjiLe0r6equvZut0b+dBRPBN5kBDjsONnutYNtJMoWQ9uR2RkL1gLG9NMTzvf+29e5RFfPbeKhQ==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.2.tgz", + "integrity": "sha512-8toY6FgdltSdONav1XtUHl4LN1yTmLza+EuDazb/fEmRNCwjyqNVIQWs2IfC74IqjHkREs/nQ2FWq5kZU9IC0w==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-3.0.3.tgz", - "integrity": "sha512-Xe7IImK09HP1sv2M/aI+48a20VX+TdRJucfq4vfRVy6nWN8PYPOEnlMRSgxJAgYQIXJVL8dZ4/ilAM7dWNaOww==", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.3.tgz", + "integrity": "sha512-1nESsePMBlf0RPRffLZi5ujYh7IH1BWL4y9pr+Bn3cJBdxz+RTP8bUFljLz9HvzhhOSWKdyBZ4DIivdL6rvgZg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/js-cookie": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-3.0.5.tgz", + "integrity": "sha512-dtLshqoiGRDHbHueIT9sjkd2F4tW1qPSX2xKAQK8p1e6pM+Z913GM1shv7dOqqasEMYbC5zEaClJomQe8OtQLA==", "dev": true }, "node_modules/@types/jsdom": { - "version": "21.1.2", - "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-21.1.2.tgz", - "integrity": "sha512-bGj+7TaCkOwkJfx7HtS9p22Ij0A2aKMuz8a1+owpkxa1wU/HUBy/WAXhdv90uDdVI9rSjGvUrXmLSeA9VP3JeA==", + "version": "21.1.4", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-21.1.4.tgz", + "integrity": "sha512-NzAMLEV0KQ4cBaDx3Ls8VfJUElyDUm1xrtYRmcMK0gF8L5xYbujFVaQlJ50yinQ/d47j2rEP1XUzkiYrw4YRFA==", "dev": true, "dependencies": { "@types/node": "*", @@ -6957,15 +8871,15 @@ } }, "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.14.tgz", + "integrity": "sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==", "dev": true }, "node_modules/@types/lodash": { - "version": "4.14.198", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.198.tgz", - "integrity": "sha512-trNJ/vtMZYMLhfN45uLq4ShQSw0/S7xCTLLVM+WM1rmFpba/VS42jVUgaO3w/NOLiWR/09lnYk0yMaA/atdIsg==", + "version": "4.14.200", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.200.tgz", + "integrity": "sha512-YI/M/4HRImtNf3pJgbF+W6FrXovqj+T+/HpENLTooK9PnkacBsDpeP3IpHab40CClUfhNmdM2WTNP2sa2dni5Q==", "optional": true }, "node_modules/@types/lru-cache": { @@ -6974,18 +8888,18 @@ "integrity": "sha512-QjCOmf5kYwekcsfEKhcEHMK8/SvgnneuSDXFERBuC/DPca2KJIO/gpChTsVb35BoWLBpEAJWz1GFVEArSdtKtw==" }, "node_modules/@types/micromatch": { - "version": "2.3.31", - "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-2.3.31.tgz", - "integrity": "sha512-17WSoNz/GKLSfcomM8cMoJJQG2cDKvsoDFTtbwjEMxcizGb0HT6EBRi8qR7NW+XSaVdxHzq/WV/TUOm5f/ksag==", + "version": "2.3.33", + "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-2.3.33.tgz", + "integrity": "sha512-jgUM0r/NgVdakSese7wLBk8dYZMUfJUMd3ByAiA1w4b+M3DNgdiqqK4Y4fdhDuTWY5CzxvUZzW6dceIGNrlVVg==", "dev": true, "dependencies": { "@types/parse-glob": "*" } }, "node_modules/@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.3.tgz", + "integrity": "sha512-i8MBln35l856k5iOhKk2XJ4SeAWg75mLIpZB4v6imOagKL6twsukBZGDMNhdOVk7yRFTMPpfILocMos59Q1otQ==", "dev": true }, "node_modules/@types/minimatch": { @@ -6994,20 +8908,20 @@ "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" }, "node_modules/@types/node": { - "version": "18.17.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.11.tgz", - "integrity": "sha512-r3hjHPBu+3LzbGBa8DHnr/KAeTEEOrahkcL+cZc4MaBMTM+mk8LtXR+zw+nqfjuDZZzYTYgTcpHuP+BEQk069g==" + "version": "18.18.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.6.tgz", + "integrity": "sha512-wf3Vz+jCmOQ2HV1YUJuCWdL64adYxumkrxtc+H1VUQlnQI04+5HtH+qZCOE21lBE7gIrt+CwX2Wv8Acrw5Ak6w==" }, "node_modules/@types/parse-glob": { - "version": "3.0.29", - "resolved": "https://registry.npmjs.org/@types/parse-glob/-/parse-glob-3.0.29.tgz", - "integrity": "sha512-OFwMPH5eJOhtwR92GMjTNWukaKTdWQC12cBgRvrTQl5CwhruSq6734wi1CTSh5Qjm/pMJWaKOOPKZOp6FpIkXQ==", + "version": "3.0.31", + "resolved": "https://registry.npmjs.org/@types/parse-glob/-/parse-glob-3.0.31.tgz", + "integrity": "sha512-83YRiYrTOabm7i0bVYuXBgBTZR5acCBUgNmR4LEihR/vXvujTtiyRzWDTAMh7qicFqlhV+6ItebPRkf4yK64Xg==", "dev": true }, "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.1.tgz", + "integrity": "sha512-3YmXzzPAdOTVljVMkTMBdBEvlOLg2cDQaDhnnhT3nT9uDbnJzjWhKlzb+desT12Y7tGqaN6d+AbozcKzyL36Ng==" }, "node_modules/@types/parse5": { "version": "5.0.3", @@ -7015,24 +8929,24 @@ "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" }, "node_modules/@types/qrcode": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@types/qrcode/-/qrcode-1.5.2.tgz", - "integrity": "sha512-W4KDz75m7rJjFbyCctzCtRzZUj+PrUHV+YjqDp50sSRezTbrtEAIq2iTzC6lISARl3qw+8IlcCyljdcVJE0Wug==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/qrcode/-/qrcode-1.5.4.tgz", + "integrity": "sha512-ufYqUO7wUBq49hugJry+oIYKscvxIQerJSmXeny215aJKfrepN04DDZP8FCgxvV82kOqKPULCE4PIW3qUmZrRA==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/raf": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.0.tgz", - "integrity": "sha512-taW5/WYqo36N7V39oYyHP9Ipfd5pNFvGTIQsNGj86xV88YQ7GnI30/yMfKDF7Zgin0m3e+ikX88FvImnK4RjGw==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.2.tgz", + "integrity": "sha512-sM4HyDVlDFl4goOXPF+g9nNHJFZQGot+HgySjM4cRjqXzjdatcEvYrtG4Ia8XumR9T6k8G2tW9B7hnUj51Uf0A==", "optional": true }, "node_modules/@types/resize-observer-browser": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/@types/resize-observer-browser/-/resize-observer-browser-0.1.7.tgz", - "integrity": "sha512-G9eN0Sn0ii9PWQ3Vl72jDPgeJwRWhv2Qk/nQkJuWmRmOB4HX3/BhD5SE1dZs/hzPZL/WKnvF0RHdTSG54QJFyg==", + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/@types/resize-observer-browser/-/resize-observer-browser-0.1.9.tgz", + "integrity": "sha512-ZwouFyOzXjycRUA+30EJM+8f8OPjKtrod8g0NY27v07r3IxDFG+3Ux3LMOajX8/hxUwOmS50duuPEe3+P9SKDQ==", "optional": true }, "node_modules/@types/resolve": { @@ -7045,15 +8959,15 @@ } }, "node_modules/@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==", "dev": true }, "node_modules/@types/serve-static": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.2.tgz", - "integrity": "sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==", + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.4.tgz", + "integrity": "sha512-aqqNfs1XTF0HDrFdlY//+SGUxmdSUbjeRXb5iaZc3x0/vMbYmdw9qvOgHWOyyLFxSSRnUuP5+724zBgfw8/WAw==", "dev": true, "dependencies": { "@types/http-errors": "*", @@ -7068,32 +8982,53 @@ "dev": true }, "node_modules/@types/sizzle": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", - "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.5.tgz", + "integrity": "sha512-tAe4Q+OLFOA/AMD+0lq8ovp8t3ysxAOeaScnfNdZpUxaGl51ZMDEITxkvFl1STudQ58mz6gzVGl9VhMKhwRnZQ==", + "dev": true + }, + "node_modules/@types/stack-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.2.tgz", + "integrity": "sha512-g7CK9nHdwjK2n0ymT2CW698FuWJRIx+RP6embAzZ2Qi8/ilIrA1Imt2LVSeHUzKvpoi7BhmmQcXz95eS0f2JXw==", "dev": true }, "node_modules/@types/tough-cookie": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", - "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.4.tgz", + "integrity": "sha512-95Sfz4nvMAb0Nl9DTxN3j64adfwfbBPEYq14VN7zT5J5O2M9V6iZMIIQU1U+pJyl9agHYHNCqhCXgyEtIRRa5A==", "dev": true }, "node_modules/@types/trusted-types": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz", - "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.5.tgz", + "integrity": "sha512-I3pkr8j/6tmQtKV/ZzHtuaqYSQvyjGRKH4go60Rr0IDLlFxuRT5V32uvB1mecM5G1EVAUyF/4r4QZ1GHgz+mxA==", "dev": true }, "node_modules/@types/web-bluetooth": { - "version": "0.0.17", - "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.17.tgz", - "integrity": "sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==" + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.18.tgz", + "integrity": "sha512-v/ZHEj9xh82usl8LMR3GarzFY1IrbXJw5L4QfQhokjRV91q+SelFqxQWSep1ucXEZ22+dSTwLFkXeur25sPIbw==" + }, + "node_modules/@types/yargs": { + "version": "17.0.29", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.29.tgz", + "integrity": "sha512-nacjqA3ee9zRF/++a3FUY1suHTFKZeHba2n8WeDw9cCVdmzmHpIxyzOJBcpHvvEmS8E9KqWlSnWHUkOrkhWcvA==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.2", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.2.tgz", + "integrity": "sha512-5qcvofLPbfjmBfKaLfj/+f+Sbd6pN4zl7w7VSVI5uz7m9QZTuB2aZAa2uo1wHFBNN2x6g/SoTkXmd8mQnQF2Cw==", + "dev": true }, "node_modules/@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.2.tgz", + "integrity": "sha512-Km7XAtUIduROw7QPgvcft0lIupeG8a8rdKL8RiSyKvlE7dYY31fEn41HVuQsRFDuROA8tA4K2UVL+WdfFmErBA==", "dev": true, "optional": true, "dependencies": { @@ -7134,39 +9069,6 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@typescript-eslint/parser": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", @@ -7278,39 +9180,6 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@typescript-eslint/utils": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", @@ -7337,39 +9206,6 @@ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@typescript-eslint/visitor-keys": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", @@ -7440,9 +9276,9 @@ "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "node_modules/@vitejs/plugin-vue": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.3.3.tgz", - "integrity": "sha512-ssxyhIAZqB0TrpUg6R0cBpCuMk9jTIlO1GNSKKQD6S8VjnXi6JXKfUXjSsxey9IwQiaRGsO1WnW9Rkl1L6AJVw==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.4.0.tgz", + "integrity": "sha512-xdguqb+VUwiRpSg+nsc2HtbAUSGak25DXYvpQQi4RVU1Xq1uworyoH/md9Rfd8zMmPR/pSghr309QNcftUVseg==", "dev": true, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -7470,29 +9306,77 @@ "vue": "^3.0.0" } }, + "node_modules/@vitest/coverage-c8": { + "version": "0.32.4", + "resolved": "https://registry.npmjs.org/@vitest/coverage-c8/-/coverage-c8-0.32.4.tgz", + "integrity": "sha512-ahJowPxgSBnaI2J+L/xmzM2oWFkk/+HtjnRfkQZrZd7H80JyG1/D6Xp6UPSZk8MXnoa90NThoyXRDBt12tNBRg==", + "deprecated": "v8 coverage is moved to @vitest/coverage-v8 package", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.1", + "c8": "^7.14.0", + "magic-string": "^0.30.0", + "picocolors": "^1.0.0", + "std-env": "^3.3.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "vitest": ">=0.30.0 <1" + } + }, "node_modules/@vitest/expect": { - "version": "0.34.3", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.34.3.tgz", - "integrity": "sha512-F8MTXZUYRBVsYL1uoIft1HHWhwDbSzwAU9Zgh8S6WFC3YgVb4AnFV2GXO3P5Em8FjEYaZtTnQYoNwwBrlOMXgg==", + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.34.6.tgz", + "integrity": "sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==", + "dev": true, + "dependencies": { + "@vitest/spy": "0.34.6", + "@vitest/utils": "0.34.6", + "chai": "^4.3.10" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/expect/node_modules/@vitest/utils": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.6.tgz", + "integrity": "sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==", + "dev": true, + "dependencies": { + "diff-sequences": "^29.4.3", + "loupe": "^2.3.6", + "pretty-format": "^29.5.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.34.6.tgz", + "integrity": "sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==", "dev": true, "dependencies": { - "@vitest/spy": "0.34.3", - "@vitest/utils": "0.34.3", - "chai": "^4.3.7" + "@vitest/utils": "0.34.6", + "p-limit": "^4.0.0", + "pathe": "^1.1.1" }, "funding": { "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitest/runner": { - "version": "0.34.3", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.34.3.tgz", - "integrity": "sha512-lYNq7N3vR57VMKMPLVvmJoiN4bqwzZ1euTW+XXYH5kzr3W/+xQG3b41xJn9ChJ3AhYOSoweu974S1V3qDcFESA==", + "node_modules/@vitest/runner/node_modules/@vitest/utils": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.6.tgz", + "integrity": "sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==", "dev": true, "dependencies": { - "@vitest/utils": "0.34.3", - "p-limit": "^4.0.0", - "pathe": "^1.1.1" + "diff-sequences": "^29.4.3", + "loupe": "^2.3.6", + "pretty-format": "^29.5.0" }, "funding": { "url": "https://opencollective.com/vitest" @@ -7526,9 +9410,9 @@ } }, "node_modules/@vitest/snapshot": { - "version": "0.34.3", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.34.3.tgz", - "integrity": "sha512-QyPaE15DQwbnIBp/yNJ8lbvXTZxS00kRly0kfFgAD5EYmCbYcA+1EEyRalc93M0gosL/xHeg3lKAClIXYpmUiQ==", + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.34.6.tgz", + "integrity": "sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==", "dev": true, "dependencies": { "magic-string": "^0.30.1", @@ -7540,9 +9424,9 @@ } }, "node_modules/@vitest/spy": { - "version": "0.34.3", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.34.3.tgz", - "integrity": "sha512-N1V0RFQ6AI7CPgzBq9kzjRdPIgThC340DGjdKdPSE8r86aUSmeliTUgkTqLSgtEwWWsGfBQ+UetZWhK0BgJmkQ==", + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.34.6.tgz", + "integrity": "sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==", "dev": true, "dependencies": { "tinyspy": "^2.1.1" @@ -7551,10 +9435,47 @@ "url": "https://opencollective.com/vitest" } }, + "node_modules/@vitest/ui": { + "version": "0.32.4", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-0.32.4.tgz", + "integrity": "sha512-92y7bkjf55L08nomvHHYQkDWQEIkb36dJkgi+F/zpO5cFbrmk1pv/dYiaZKQ772uP96fAWinmux6sXNMNUh16w==", + "dev": true, + "dependencies": { + "@vitest/utils": "0.32.4", + "fast-glob": "^3.2.12", + "fflate": "^0.8.0", + "flatted": "^3.2.7", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "sirv": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "vitest": ">=0.30.1 <1" + } + }, + "node_modules/@vitest/ui/node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, "node_modules/@vitest/utils": { - "version": "0.34.3", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.3.tgz", - "integrity": "sha512-kiSnzLG6m/tiT0XEl4U2H8JDBjFtwVlaE8I3QfGiMFR0QvnRDfYfdP3YvTBWM/6iJDAyaPY6yVQiCTUc7ZzTHA==", + "version": "0.32.4", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.32.4.tgz", + "integrity": "sha512-Gwnl8dhd1uJ+HXrYyV0eRqfmk9ek1ASE/LWfTCuWMw+d07ogHqp4hEAV28NiecimK6UY9DpSEPh+pXBA5gtTBg==", "dev": true, "dependencies": { "diff-sequences": "^29.4.3", @@ -7566,30 +9487,30 @@ } }, "node_modules/@volar/language-core": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-1.10.1.tgz", - "integrity": "sha512-JnsM1mIPdfGPxmoOcK1c7HYAsL6YOv0TCJ4aW3AXPZN/Jb4R77epDyMZIVudSGjWMbvv/JfUa+rQ+dGKTmgwBA==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-1.10.4.tgz", + "integrity": "sha512-Na69qA6uwVIdA0rHuOc2W3pHtVQQO8hCNim7FOaKNpRJh0oAFnu5r9i7Oopo5C4cnELZkPNjTrbmpcCTiW+CMQ==", "dev": true, "dependencies": { - "@volar/source-map": "1.10.1" + "@volar/source-map": "1.10.4" } }, "node_modules/@volar/source-map": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-1.10.1.tgz", - "integrity": "sha512-3/S6KQbqa7pGC8CxPrg69qHLpOvkiPHGJtWPkI/1AXCsktkJ6gIk/5z4hyuMp8Anvs6eS/Kvp/GZa3ut3votKA==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-1.10.4.tgz", + "integrity": "sha512-RxZdUEL+pV8p+SMqnhVjzy5zpb1QRZTlcwSk4bdcBO7yOu4rtEWqDGahVCEj4CcXour+0yJUMrMczfSCpP9Uxg==", "dev": true, "dependencies": { "muggle-string": "^0.3.1" } }, "node_modules/@volar/typescript": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-1.10.1.tgz", - "integrity": "sha512-+iiO9yUSRHIYjlteT+QcdRq8b44qH19/eiUZtjNtuh6D9ailYM7DVR0zO2sEgJlvCaunw/CF9Ov2KooQBpR4VQ==", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-1.10.4.tgz", + "integrity": "sha512-BCCUEBASBEMCrz7qmNSi2hBEWYsXD0doaktRKpmmhvb6XntM2sAWYu6gbyK/MluLDgluGLFiFRpWgobgzUqolg==", "dev": true, "dependencies": { - "@volar/language-core": "1.10.1" + "@volar/language-core": "1.10.4" } }, "node_modules/@vue-flow/background": { @@ -7609,9 +9530,9 @@ } }, "node_modules/@vue-flow/core": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/@vue-flow/core/-/core-1.22.3.tgz", - "integrity": "sha512-1Hz7cnomzbUuBYOghtb+ZUunUAD8UXJC/PrUUjjQQa2HEcaRK9KK3c4sE1QMBbhQh5umcuwjRH/XVJhOVDoIOQ==", + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/@vue-flow/core/-/core-1.23.0.tgz", + "integrity": "sha512-jfzQNWy5+JVgAmopJciK1acKQcDtPDwu7UM5FUlVXyzNaJgsAJR/8C5guOq7NPzfACz5TodDrBzbDePF40NQZg==", "dependencies": { "@vueuse/core": "^10.1.2", "d3-drag": "^3.0.0", @@ -7660,6 +9581,18 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@vue/babel-plugin-jsx/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@vue/compiler-core": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.4.tgz", @@ -7707,9 +9640,9 @@ } }, "node_modules/@vue/devtools-api": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.0.tgz", - "integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==" + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.1.tgz", + "integrity": "sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==" }, "node_modules/@vue/eslint-config-prettier": { "version": "8.0.0", @@ -7762,17 +9695,17 @@ } }, "node_modules/@vue/language-core": { - "version": "1.8.8", - "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.8.tgz", - "integrity": "sha512-i4KMTuPazf48yMdYoebTkgSOJdFraE4pQf0B+FTOFkbB+6hAfjrSou/UmYWRsWyZV6r4Rc6DDZdI39CJwL0rWw==", + "version": "1.8.19", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.19.tgz", + "integrity": "sha512-nt3dodGs97UM6fnxeQBazO50yYCKBK53waFWB3qMbLmR6eL3aUryZgQtZoBe1pye17Wl8fs9HysV3si6xMgndQ==", "dev": true, "dependencies": { - "@volar/language-core": "~1.10.0", - "@volar/source-map": "~1.10.0", + "@volar/language-core": "~1.10.4", + "@volar/source-map": "~1.10.4", "@vue/compiler-dom": "^3.3.0", "@vue/reactivity": "^3.3.0", "@vue/shared": "^3.3.0", - "minimatch": "^9.0.0", + "minimatch": "^9.0.3", "muggle-string": "^0.3.1", "vue-template-compiler": "^2.7.14" }, @@ -7891,42 +9824,67 @@ "dev": true }, "node_modules/@vue/typescript": { - "version": "1.8.8", - "resolved": "https://registry.npmjs.org/@vue/typescript/-/typescript-1.8.8.tgz", - "integrity": "sha512-jUnmMB6egu5wl342eaUH236v8tdcEPXXkPgj+eI/F6JwW/lb+yAU6U07ZbQ3MVabZRlupIlPESB7ajgAGixhow==", + "version": "1.8.19", + "resolved": "https://registry.npmjs.org/@vue/typescript/-/typescript-1.8.19.tgz", + "integrity": "sha512-k/SHeeQROUgqsxyHQ8Cs3Zz5TnX57p7BcBDVYR2E0c61QL2DJ2G8CsaBremmNGuGE6o1R5D50IHIxFmroMz8iw==", "dev": true, "dependencies": { - "@volar/typescript": "~1.10.0", - "@vue/language-core": "1.8.8" + "@volar/typescript": "~1.10.4", + "@vue/language-core": "1.8.19" } }, "node_modules/@vueform/multiselect": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/@vueform/multiselect/-/multiselect-2.6.2.tgz", - "integrity": "sha512-4BFvXyzyi0Pqi/lsYdGwONsQy+ypiVzuQbmoDUlttTxuoujFtf9AdeHi1ZhfIorXG9BiysK1HcQSfYB6USgwfQ==" + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/@vueform/multiselect/-/multiselect-2.6.6.tgz", + "integrity": "sha512-JDWesVRmyGz9HmHp2Ooy1cb8XgKohiztwMDtjm8c0/Th+7wEZENZuYa0iY5CTvaJNANl3LVqh9BNnCc/YlM/Bg==" }, "node_modules/@vueuse/core": { - "version": "10.4.1", - "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.4.1.tgz", - "integrity": "sha512-DkHIfMIoSIBjMgRRvdIvxsyboRZQmImofLyOHADqiVbQVilP8VVHDhBX2ZqoItOgu7dWa8oXiNnScOdPLhdEXg==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.5.0.tgz", + "integrity": "sha512-z/tI2eSvxwLRjOhDm0h/SXAjNm8N5ld6/SC/JQs6o6kpJ6Ya50LnEL8g5hoYu005i28L0zqB5L5yAl8Jl26K3A==", "dependencies": { - "@types/web-bluetooth": "^0.0.17", - "@vueuse/metadata": "10.4.1", - "@vueuse/shared": "10.4.1", - "vue-demi": ">=0.14.5" + "@types/web-bluetooth": "^0.0.18", + "@vueuse/metadata": "10.5.0", + "@vueuse/shared": "10.5.0", + "vue-demi": ">=0.14.6" }, "funding": { "url": "https://github.com/sponsors/antfu" } }, + "node_modules/@vueuse/core/node_modules/vue-demi": { + "version": "0.14.6", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", + "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, "node_modules/@vueuse/integrations": { - "version": "10.4.1", - "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-10.4.1.tgz", - "integrity": "sha512-uRBPyG5Lxoh1A/J+boiioPT3ELEAPEo4t8W6Mr4yTKIQBeW/FcbsotZNPr4k9uz+3QEksMmflWloS9wCnypM7g==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-10.5.0.tgz", + "integrity": "sha512-fm5sXLCK0Ww3rRnzqnCQRmfjDURaI4xMsx+T+cec0ngQqHx/JgUtm8G0vRjwtonIeTBsH1Q8L3SucE+7K7upJQ==", "dependencies": { - "@vueuse/core": "10.4.1", - "@vueuse/shared": "10.4.1", - "vue-demi": ">=0.14.5" + "@vueuse/core": "10.5.0", + "@vueuse/shared": "10.5.0", + "vue-demi": ">=0.14.6" }, "funding": { "url": "https://github.com/sponsors/antfu" @@ -7984,25 +9942,112 @@ } } }, + "node_modules/@vueuse/integrations/node_modules/vue-demi": { + "version": "0.14.6", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", + "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, "node_modules/@vueuse/metadata": { - "version": "10.4.1", - "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.4.1.tgz", - "integrity": "sha512-2Sc8X+iVzeuMGHr6O2j4gv/zxvQGGOYETYXEc41h0iZXIRnRbJZGmY/QP8dvzqUelf8vg0p/yEA5VpCEu+WpZg==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.5.0.tgz", + "integrity": "sha512-fEbElR+MaIYyCkeM0SzWkdoMtOpIwO72x8WsZHRE7IggiOlILttqttM69AS13nrDxosnDBYdyy3C5mR1LCxHsw==", "funding": { "url": "https://github.com/sponsors/antfu" } }, "node_modules/@vueuse/shared": { - "version": "10.4.1", - "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.4.1.tgz", - "integrity": "sha512-vz5hbAM4qA0lDKmcr2y3pPdU+2EVw/yzfRsBdu+6+USGa4PxqSQRYIUC9/NcT06y+ZgaTsyURw2I9qOFaaXHAg==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.5.0.tgz", + "integrity": "sha512-18iyxbbHYLst9MqU1X1QNdMHIjks6wC7XTVf0KNOv5es/Ms6gjVFCAAWTVP2JStuGqydg3DT+ExpFORUEi9yhg==", "dependencies": { - "vue-demi": ">=0.14.5" + "vue-demi": ">=0.14.6" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared/node_modules/vue-demi": { + "version": "0.14.6", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", + "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true + }, + "node_modules/@yarnpkg/parsers": { + "version": "3.0.0-rc.46", + "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz", + "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==", + "dev": true, + "dependencies": { + "js-yaml": "^3.10.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=14.15.0" + } + }, + "node_modules/@zkochan/js-yaml": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz", + "integrity": "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, + "node_modules/@zkochan/js-yaml/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, "node_modules/abab": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", @@ -8052,11 +10097,20 @@ "version": "8.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.4.0" } }, + "node_modules/address": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/after": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", @@ -8066,7 +10120,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "devOptional": true, + "dev": true, "dependencies": { "debug": "4" }, @@ -8136,14 +10190,17 @@ } }, "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/any-promise": { @@ -8184,15 +10241,19 @@ ] }, "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "devOptional": true }, "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } }, "node_modules/array-back": { "version": "3.1.0", @@ -8225,14 +10286,15 @@ } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", - "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.0", "call-bind": "^1.0.2", "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "get-intrinsic": "^1.2.1", "is-array-buffer": "^3.0.2", "is-shared-array-buffer": "^1.0.2" @@ -8341,9 +10403,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.15", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.15.tgz", - "integrity": "sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==", + "version": "10.4.16", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", + "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", "dev": true, "funding": [ { @@ -8361,8 +10423,8 @@ ], "dependencies": { "browserslist": "^4.21.10", - "caniuse-lite": "^1.0.30001520", - "fraction.js": "^4.2.0", + "caniuse-lite": "^1.0.30001538", + "fraction.js": "^4.3.6", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", "postcss-value-parser": "^4.2.0" @@ -8382,117 +10444,263 @@ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", "dev": true, - "engines": { - "node": ">= 0.4" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "dev": true + }, + "node_modules/axios": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.1.tgz", + "integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axios-cache-interceptor": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/axios-cache-interceptor/-/axios-cache-interceptor-1.3.1.tgz", + "integrity": "sha512-nu78dBlzQbELLEd/DhzIBFEha5xZwQ1KMEu6iy49HaYbKoFFDRHMaukJFjpj0Sp0kET+u3TjwQh549DfPh13hA==", + "dependencies": { + "cache-parser": "^1.2.4", + "fast-defer": "^1.1.7", + "object-code": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/arthurfiorette/axios-cache-interceptor?sponsor=1" + }, + "peerDependencies": { + "axios": "^1" + } + }, + "node_modules/b4a": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", + "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==", + "dev": true + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-const-enum": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-const-enum/-/babel-plugin-const-enum-1.2.0.tgz", + "integrity": "sha512-o1m/6iyyFnp9MRsK1dHF3bneqyf3AlM2q3A/YbgQr2pCat6B6XJVDv2TXqzfY2RYUi4mak6WAksSBPlyYGx9dg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-typescript": "^7.3.3", + "@babel/traverse": "^7.16.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8" } }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/aws4": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", - "dev": true - }, - "node_modules/axios": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz", - "integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==", - "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" + "node_modules/babel-plugin-istanbul/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/axios-cache-interceptor": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/axios-cache-interceptor/-/axios-cache-interceptor-1.2.0.tgz", - "integrity": "sha512-tJUOVOlKt1akqU7xFEGVRd3g6JtipxP/34bKKFhZLr7hpE/n3a/KqyInWuetzTDgweopVVGhAoycbS33Brb8yw==", + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, "dependencies": { - "cache-parser": "^1.2.4", - "fast-defer": "^1.1.7", - "object-code": "^1.2.4" + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/arthurfiorette/axios-cache-interceptor?sponsor=1" - }, - "peerDependencies": { - "axios": "^1" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/axios/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dev": true, + "optional": true, + "peer": true, "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" }, "engines": { - "node": ">= 6" + "node": ">=10", + "npm": ">=6" } }, - "node_modules/axios/node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "node_modules/b4a": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", - "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==", - "dev": true - }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", - "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==", + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz", + "integrity": "sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==", "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.2", + "@babel/helper-define-polyfill-provider": "^0.4.3", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz", - "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==", + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.5.tgz", + "integrity": "sha512-Q6CdATeAvbScWPNLB8lzSO7fgUVBkQt6zLgNlfyeCr/EQaEQR+bWiBYYPYAFyE528BMjRhL+1QBMOI4jc/c5TA==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.2", - "core-js-compat": "^3.31.0" + "@babel/helper-define-polyfill-provider": "^0.4.3", + "core-js-compat": "^3.32.2" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz", - "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz", + "integrity": "sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.2" + "@babel/helper-define-polyfill-provider": "^0.4.3" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/babel-plugin-transform-typescript-metadata": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-typescript-metadata/-/babel-plugin-transform-typescript-metadata-0.3.2.tgz", + "integrity": "sha512-mWEvCQTgXQf48yDqgN7CH50waTyYBeP2Lpqx4nNWab9sxEpdXVeKgfj1qYI2/TgUPQtNFZ85i3PemRtnXVYYJg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/backo2": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", @@ -8504,9 +10712,10 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base64-arraybuffer": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", - "integrity": "sha512-a1eIFi4R9ySrbiMuyTGx5e92uRH5tQY6kArNcFaKBUleIoLjdjBg7Zxm3Mqm3Kmkf27HLR/1fnxX9q8GQ7Iavg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", + "optional": true, "engines": { "node": ">= 0.6.0" } @@ -8540,6 +10749,18 @@ "node": "^4.5.0 || >= 5.9" } }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dev": true, + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", @@ -8682,193 +10903,74 @@ "etag": "^1.8.1", "fresh": "^0.5.2", "fs-extra": "3.0.1", - "http-proxy": "^1.18.1", - "immutable": "^3", - "localtunnel": "^2.0.1", - "micromatch": "^4.0.2", - "opn": "5.3.0", - "portscanner": "2.2.0", - "raw-body": "^2.3.2", - "resp-modifier": "6.0.2", - "rx": "4.1.0", - "send": "0.16.2", - "serve-index": "1.9.1", - "serve-static": "1.13.2", - "server-destroy": "1.0.1", - "socket.io": "^4.4.1", - "ua-parser-js": "^1.0.33", - "yargs": "^17.3.1" - }, - "bin": { - "browser-sync": "dist/bin.js" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/browser-sync-client": { - "version": "2.29.3", - "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.29.3.tgz", - "integrity": "sha512-4tK5JKCl7v/3aLbmCBMzpufiYLsB1+UI+7tUXCCp5qF0AllHy/jAqYu6k7hUF3hYtlClKpxExWaR+rH+ny07wQ==", - "dev": true, - "dependencies": { - "etag": "1.8.1", - "fresh": "0.5.2", - "mitt": "^1.1.3" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/browser-sync-client/node_modules/mitt": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz", - "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==", - "dev": true - }, - "node_modules/browser-sync-ui": { - "version": "2.29.3", - "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.29.3.tgz", - "integrity": "sha512-kBYOIQjU/D/3kYtUIJtj82e797Egk1FB2broqItkr3i4eF1qiHbFCG6srksu9gWhfmuM/TNG76jMfzAdxEPakg==", - "dev": true, - "dependencies": { - "async-each-series": "0.1.1", - "chalk": "4.1.2", - "connect-history-api-fallback": "^1", - "immutable": "^3", - "server-destroy": "1.0.1", - "socket.io-client": "^4.4.1", - "stream-throttle": "^0.1.3" - } - }, - "node_modules/browser-sync-ui/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/browser-sync-ui/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/browser-sync-ui/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/browser-sync-ui/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/browser-sync-ui/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-sync-ui/node_modules/immutable": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", - "integrity": "sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/browser-sync-ui/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" + "http-proxy": "^1.18.1", + "immutable": "^3", + "localtunnel": "^2.0.1", + "micromatch": "^4.0.2", + "opn": "5.3.0", + "portscanner": "2.2.0", + "raw-body": "^2.3.2", + "resp-modifier": "6.0.2", + "rx": "4.1.0", + "send": "0.16.2", + "serve-index": "1.9.1", + "serve-static": "1.13.2", + "server-destroy": "1.0.1", + "socket.io": "^4.4.1", + "ua-parser-js": "^1.0.33", + "yargs": "^17.3.1" + }, + "bin": { + "browser-sync": "dist/bin.js" }, "engines": { - "node": ">=8" + "node": ">= 8.0.0" } }, - "node_modules/browser-sync/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/browser-sync-client": { + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.29.3.tgz", + "integrity": "sha512-4tK5JKCl7v/3aLbmCBMzpufiYLsB1+UI+7tUXCCp5qF0AllHy/jAqYu6k7hUF3hYtlClKpxExWaR+rH+ny07wQ==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "etag": "1.8.1", + "fresh": "0.5.2", + "mitt": "^1.1.3" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=8.0.0" } }, - "node_modules/browser-sync/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/browser-sync-client/node_modules/mitt": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz", + "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==", + "dev": true + }, + "node_modules/browser-sync-ui": { + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.29.3.tgz", + "integrity": "sha512-kBYOIQjU/D/3kYtUIJtj82e797Egk1FB2broqItkr3i4eF1qiHbFCG6srksu9gWhfmuM/TNG76jMfzAdxEPakg==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "async-each-series": "0.1.1", + "chalk": "4.1.2", + "connect-history-api-fallback": "^1", + "immutable": "^3", + "server-destroy": "1.0.1", + "socket.io-client": "^4.4.1", + "stream-throttle": "^0.1.3" } }, - "node_modules/browser-sync/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/browser-sync-ui/node_modules/immutable": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", + "integrity": "sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==", "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, "engines": { - "node": ">=7.0.0" + "node": ">=0.10.0" } }, - "node_modules/browser-sync/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/browser-sync/node_modules/fs-extra": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", @@ -8880,15 +10982,6 @@ "universalify": "^0.1.0" } }, - "node_modules/browser-sync/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/browser-sync/node_modules/immutable": { "version": "3.8.2", "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", @@ -8907,18 +11000,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/browser-sync/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/browser-sync/node_modules/universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -8929,9 +11010,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", "funding": [ { "type": "opencollective", @@ -8947,10 +11028,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" + "update-browserslist-db": "^1.0.13" }, "bin": { "browserslist": "cli.js" @@ -8965,6 +11046,15 @@ "integrity": "sha512-BXvDkqhDNxXEjeGM8LFkSbR+jzmP/CYpCiVKYn+soB1dDldeU15EBNDkwVXndKuX35wnNUaPd0qSoQEAkmQtMw==", "dev": true }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, "node_modules/btoa": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", @@ -9026,6 +11116,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "dependencies": { + "semver": "^7.0.0" + } + }, "node_modules/bundle-name": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", @@ -9050,24 +11149,114 @@ "node": ">= 0.8" } }, - "node_modules/c12": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/c12/-/c12-1.4.2.tgz", - "integrity": "sha512-3IP/MuamSVRVw8W8+CHWAz9gKN4gd+voF2zm/Ln6D25C2RhytEZ1ABbC8MjKr4BR9rhoV1JQ7jJA158LDiTkLg==", - "optional": true, - "peer": true, + "node_modules/c8": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/c8/-/c8-7.14.0.tgz", + "integrity": "sha512-i04rtkkcNcCf7zsQcSv/T9EbUn4RXQ6mropeMcjFOsQXQ0iGLAr/xT6TImQg4+U9hmNpN9XdvPkjUL1IzbgxJw==", + "dev": true, "dependencies": { - "chokidar": "^3.5.3", - "defu": "^6.1.2", - "dotenv": "^16.3.1", - "giget": "^1.1.2", - "jiti": "^1.18.2", - "mlly": "^1.4.0", - "ohash": "^1.1.2", - "pathe": "^1.1.1", - "perfect-debounce": "^1.0.0", - "pkg-types": "^1.0.3", - "rc9": "^2.1.1" + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.3", + "find-up": "^5.0.0", + "foreground-child": "^2.0.0", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.1.4", + "rimraf": "^3.0.2", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.0.0", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9" + }, + "bin": { + "c8": "bin/c8.js" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/c8/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/c8/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/c8/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/c8/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/c8/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/c8/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" } }, "node_modules/cac": { @@ -9098,13 +11287,14 @@ "integrity": "sha512-B5Gzp1Z+KASQX+LdUNb5fjFvv2ONhLet4vGV6wJbvw0fFSPPW/vbundamN6vJ6RZEghiR8n09vsKLMX+f5sFpQ==" }, "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.4.tgz", + "integrity": "sha512-e68w37XfAb5fL5M3NTxqKLcXRUkL2/kFlQjQjE/8jvPMBKmO5ZDycRkS/DrZRXjegOzwWzEwW88m+8r+D0PUUA==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -9119,15 +11309,11 @@ } }, "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, "node_modules/camelcase-css": { @@ -9139,9 +11325,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001523", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001523.tgz", - "integrity": "sha512-I5q5cisATTPZ1mc588Z//pj/Ox80ERYDfR71YnvY7raS/NOk8xXlZcB0sF7JdqaV//kOaa6aus7lRfpdnt1eBA==", + "version": "1.0.30001551", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001551.tgz", + "integrity": "sha512-vtBAez47BoGMMzlbYhfXrMV1kvRF2WP/lqiMuDu1Sb4EE4LKEgjopFDSRtZfdVnslNRpOqV/woE+Xgrwj6VQlg==", "funding": [ { "type": "opencollective", @@ -9189,34 +11375,45 @@ "dev": true }, "node_modules/chai": { - "version": "4.3.8", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.8.tgz", - "integrity": "sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ==", + "version": "4.3.10", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz", + "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==", "dev": true, "dependencies": { "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^4.1.2", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", "pathval": "^1.1.1", - "type-detect": "^4.0.5" + "type-detect": "^4.0.8" }, "engines": { "node": ">=4" } }, "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" } }, "node_modules/chart.js": { @@ -9225,10 +11422,13 @@ "integrity": "sha512-Ro2JbLmvg83gXF5F4sniaQ+lTbSv18E+TIf2cOeiH1Iqd2PGFOtem+DUufMZsCJwFE7ywPOpfXFBwRTGq7dh6w==" }, "node_modules/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", "dev": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, "engines": { "node": "*" } @@ -9262,21 +11462,10 @@ "readdirp": "~3.6.0" }, "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, "node_modules/chownr": { @@ -9286,9 +11475,9 @@ "dev": true }, "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true, "funding": [ { @@ -9300,6 +11489,12 @@ "node": ">=8" } }, + "node_modules/cjs-module-lexer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", + "dev": true + }, "node_modules/classnames": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", @@ -9326,6 +11521,18 @@ "node": ">=8" } }, + "node_modules/cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/cli-table3": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", @@ -9370,6 +11577,31 @@ "node": ">=12" } }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, "node_modules/color": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", @@ -9384,17 +11616,20 @@ } }, "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { - "color-name": "1.1.3" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/color-string": { "version": "1.9.1", @@ -9406,30 +11641,25 @@ "simple-swizzle": "^0.2.2" } }, - "node_modules/color/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/columnify": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", + "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", "dev": true, "dependencies": { - "color-name": "~1.1.4" + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=8.0.0" } }, - "node_modules/color/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "devOptional": true - }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -9441,6 +11671,12 @@ "node": ">= 0.8" } }, + "node_modules/command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "dev": true + }, "node_modules/command-line-args": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", @@ -9509,6 +11745,12 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "dev": true + }, "node_modules/connect": { "version": "3.6.6", "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", @@ -9552,15 +11794,15 @@ "version": "3.2.3", "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz", "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==", - "devOptional": true, + "dev": true, "engines": { "node": "^14.18.0 || >=16.10.0" } }, "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" }, "node_modules/cookie": { "version": "0.5.0", @@ -9571,9 +11813,9 @@ } }, "node_modules/core-js": { - "version": "3.32.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.32.1.tgz", - "integrity": "sha512-lqufgNn9NLnESg5mQeYsxQP5w7wrViSj0jr/kv6ECQiByzQkrn1MKvV0L3acttpDqfQrHLwr2KCMgX5b8X+lyQ==", + "version": "3.33.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.33.0.tgz", + "integrity": "sha512-HoZr92+ZjFEKar5HS6MC776gYslNOKHt75mEBKWKnPeFDpZ6nH5OeF3S6HFT1mUAUZKrzkez05VboaX8myjSuw==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -9581,11 +11823,11 @@ } }, "node_modules/core-js-compat": { - "version": "3.32.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.32.1.tgz", - "integrity": "sha512-GSvKDv4wE0bPnQtjklV101juQ85g6H3rm5PDP20mqlS5j0kXF3pP97YvAu5hl+uFHqMictp3b2VxOHljWMAtuA==", + "version": "3.33.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.0.tgz", + "integrity": "sha512-0w4LcLXsVEuNkIqwjjf9rjCoPhK8uqA4tMRh4Ge26vfLtUutshn+aRJU21I9LCJlh2QQHfisNToLjw1XEJLTWw==", "dependencies": { - "browserslist": "^4.21.10" + "browserslist": "^4.22.1" }, "funding": { "type": "opencollective", @@ -9596,7 +11838,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "devOptional": true + "dev": true }, "node_modules/cors": { "version": "2.8.5", @@ -9611,6 +11853,15 @@ "node": ">= 0.10" } }, + "node_modules/corser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", + "integrity": "sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/cosmiconfig": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", @@ -9626,30 +11877,11 @@ "node": ">=10" } }, - "node_modules/cosmiconfig/node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cosmiconfig/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "engines": { - "node": ">= 6" - } + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "devOptional": true }, "node_modules/cross-spawn": { "version": "7.0.3", @@ -9729,11 +11961,6 @@ "url": "https://github.com/sponsors/fb55" } }, - "node_modules/csscolorparser": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/csscolorparser/-/csscolorparser-1.0.3.tgz", - "integrity": "sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w==" - }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -9859,108 +12086,32 @@ } }, "node_modules/cypress/node_modules/@types/node": { - "version": "16.18.46", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.46.tgz", - "integrity": "sha512-Mnq3O9Xz52exs3mlxMcQuA7/9VFe/dXcrgAyfjLkABIqxXKOgBRjyazTxUbjsxDa4BP7hhPliyjVTP9RDP14xg==", + "version": "16.18.59", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.59.tgz", + "integrity": "sha512-PJ1w2cNeKUEdey4LiPra0ZuxZFOGvetswE8qHRriV/sUkL5Al4tTmPV9D2+Y/TPIxTHHgxTfRjZVKWhPw/ORhQ==", "dev": true }, - "node_modules/cypress/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/cypress/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/cypress/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/cypress/node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cypress/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" } }, - "node_modules/cypress/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/cypress/node_modules/proxy-from-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", "dev": true }, - "node_modules/cypress/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cypress/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cypress/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/cypress/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -9976,12 +12127,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/cypress/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/d3-color": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", @@ -10121,18 +12266,18 @@ } }, "node_modules/date-fns-tz": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/date-fns-tz/-/date-fns-tz-1.3.8.tgz", - "integrity": "sha512-qwNXUFtMHTTU6CFSFjoJ80W8Fzzp24LntbjFFBgL/faqds4e5mo9mftoRLgr3Vi1trISsg4awSpYVsOQCRnapQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/date-fns-tz/-/date-fns-tz-2.0.0.tgz", + "integrity": "sha512-OAtcLdB9vxSXTWHdT8b398ARImVwQMyjfYGkKD2zaGpHseG2UPHbHjXELReErZFxWdSLph3c2zOaaTyHfOhERQ==", "optional": true, "peerDependencies": { "date-fns": ">=2.0.0" } }, "node_modules/dayjs": { - "version": "1.11.9", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz", - "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==", + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==", "dev": true }, "node_modules/ddp.js": { @@ -10223,6 +12368,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/dedent": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", + "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, "node_modules/deep-eql": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", @@ -10415,24 +12574,48 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, - "engines": { - "node": ">=12" + "dependencies": { + "clone": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "dependencies": { + "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" }, @@ -10447,7 +12630,7 @@ "version": "6.1.2", "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.2.tgz", "integrity": "sha512-+uO4+qr7msjNNWKYPHqN/3+Dx3NFkmIzayk2L1MyZQlvgZb/J1A0fo410dpKrN2SnqFjt8n4JL8fDJE0wIgjFQ==", - "devOptional": true + "dev": true }, "node_modules/delayed-stream": { "version": "1.0.0", @@ -10466,13 +12649,6 @@ "node": ">= 0.8" } }, - "node_modules/destr": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.1.tgz", - "integrity": "sha512-M1Ob1zPSIvlARiJUkKqvAZ3VAqQY6Jcuth/pBKQ2b1dX/Qx0OnJ8Vux6J2H5PTMQeRzWrrbTu70VxBfv/OPDJA==", - "optional": true, - "peer": true - }, "node_modules/destroy": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", @@ -10488,6 +12664,29 @@ "node": ">=8" } }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-port": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", + "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", + "dev": true, + "dependencies": { + "address": "^1.0.1", + "debug": "4" + }, + "bin": { + "detect": "bin/detect-port.js", + "detect-port": "bin/detect-port.js" + } + }, "node_modules/dev-ip": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", @@ -10505,6 +12704,15 @@ "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "devOptional": true, + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/diff-sequences": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", @@ -10523,7 +12731,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "devOptional": true, + "dev": true, "dependencies": { "path-type": "^4.0.0" }, @@ -10625,8 +12833,7 @@ "version": "16.3.1", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", - "optional": true, - "peer": true, + "dev": true, "engines": { "node": ">=12" }, @@ -10634,6 +12841,15 @@ "url": "https://github.com/motdotla/dotenv?sponsor=1" } }, + "node_modules/dotenv-expand": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", + "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/dset": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.2.tgz", @@ -10677,583 +12893,791 @@ "node": ">= 0.8.0" } }, - "node_modules/eazy-logger/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/editorconfig": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.4.tgz", + "integrity": "sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==", + "dev": true, + "dependencies": { + "@one-ini/wasm": "0.1.1", + "commander": "^10.0.0", + "minimatch": "9.0.1", + "semver": "^7.5.3" }, - "engines": { - "node": ">=8" + "bin": { + "editorconfig": "bin/editorconfig" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "engines": { + "node": ">=14" } }, - "node_modules/eazy-logger/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/editorconfig/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "balanced-match": "^1.0.0" + } + }, + "node_modules/editorconfig/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/editorconfig/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/eazy-logger/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "node_modules/ejs": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", + "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", "dev": true, "dependencies": { - "color-name": "~1.1.4" + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" }, "engines": { - "node": ">=7.0.0" + "node": ">=0.10.0" } }, - "node_modules/eazy-logger/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "node_modules/electron-to-chromium": { + "version": "1.4.561", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.561.tgz", + "integrity": "sha512-eS5t4ulWOBfVHdq9SW2dxEaFarj1lPjvJ8PaYMOjY0DecBaj/t4ARziL2IPpDr4atyWwjLFGQ2vo/VCgQFezVQ==" }, - "node_modules/eazy-logger/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/element-resize-detector": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/element-resize-detector/-/element-resize-detector-1.2.4.tgz", + "integrity": "sha512-Fl5Ftk6WwXE0wqCgNoseKWndjzZlDCwuPTcoVZfCP9R3EHQF8qUtr3YUPNETegRBOKqQKPW3n4kiIWngGi8tKg==", + "dependencies": { + "batch-processor": "1.0.0" + } + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" } }, - "node_modules/eazy-logger/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/encode-utf8": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", + "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">= 0.8" } }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "once": "^1.4.0" } }, - "node_modules/editorconfig": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.4.tgz", - "integrity": "sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==", + "node_modules/engine.io": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.3.tgz", + "integrity": "sha512-IML/R4eG/pUS5w7OfcDE0jKrljWS9nwnEfsxWCIJF5eO6AHo6+Hlv+lQbdlAYsiJPHzUthLm1RUjnBzWOs45cw==", "dev": true, "dependencies": { - "@one-ini/wasm": "0.1.1", - "commander": "^10.0.0", - "minimatch": "9.0.1", - "semver": "^7.5.3" + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.11.0" }, - "bin": { - "editorconfig": "bin/editorconfig" + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/engine.io-client": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.2.tgz", + "integrity": "sha512-CQZqbrpEYnrpGqC07a9dJDz4gePZUgTPMU3NKJPSeQOyw27Tst4Pl3FemKoFGAlHzgZmKjoRmiJvbWfhCXUlIg==", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.11.0", + "xmlhttprequest-ssl": "~2.0.0" + } + }, + "node_modules/engine.io-client/node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "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 + } + } + }, + "node_modules/engine.io-parser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.1.tgz", + "integrity": "sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==", "engines": { - "node": ">=14" + "node": ">=10.0.0" + } + }, + "node_modules/engine.io/node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "dev": true + }, + "node_modules/engine.io/node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/engine.io/node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/editorconfig/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0" + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" } }, - "node_modules/editorconfig/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, "engines": { - "node": ">=14" + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/editorconfig/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "is-arrayish": "^0.2.1" } }, - "node_modules/editorconfig/node_modules/minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "node_modules/es-abstract": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.2.tgz", + "integrity": "sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==", "dev": true, "dependencies": { - "brace-expansion": "^2.0.1" + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.1", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.12", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.11" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/editorconfig/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "node_modules/es-module-lexer": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz", + "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==" + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" } }, - "node_modules/editorconfig/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true - }, - "node_modules/ejs": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", - "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "dependencies": { - "jake": "^10.8.5" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "hasInstallScript": true, "bin": { - "ejs": "bin/cli.js" + "esbuild": "bin/esbuild" }, "engines": { - "node": ">=0.10.0" + "node": ">=12" + }, + "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" } }, - "node_modules/electron-to-chromium": { - "version": "1.4.503", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.503.tgz", - "integrity": "sha512-LF2IQit4B0VrUHFeQkWhZm97KuJSGF2WJqq1InpY+ECpFRkXd8yTIaTtJxsO0OKDmiBYwWqcrNaXOurn2T2wiA==" - }, - "node_modules/element-resize-detector": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/element-resize-detector/-/element-resize-detector-1.2.4.tgz", - "integrity": "sha512-Fl5Ftk6WwXE0wqCgNoseKWndjzZlDCwuPTcoVZfCP9R3EHQF8qUtr3YUPNETegRBOKqQKPW3n4kiIWngGi8tKg==", - "dependencies": { - "batch-processor": "1.0.0" + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" } }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/encode-utf8": { + "node_modules/escape-html": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", - "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==" + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.51.0.tgz", + "integrity": "sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==", "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.51.0", + "@humanwhocodes/config-array": "^0.11.11", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.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" + }, + "bin": { + "eslint": "bin/eslint.js" + }, "engines": { - "node": ">= 0.8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "node_modules/eslint-config-prettier": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz", + "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-cypress": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-2.15.1.tgz", + "integrity": "sha512-eLHLWP5Q+I4j2AWepYq0PgFEei9/s5LvjuSqWrxurkg1YZ8ltxdvMNmdSf0drnsNo57CTgYY/NIHHLRSWejR7w==", "dev": true, "dependencies": { - "once": "^1.4.0" + "globals": "^13.20.0" + }, + "peerDependencies": { + "eslint": ">= 3.2.1" } }, - "node_modules/engine.io": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.2.tgz", - "integrity": "sha512-IXsMcGpw/xRfjra46sVZVHiSWo/nJ/3g1337q9KNXtS6YRzbW5yIzTCb9DjhrBe7r3GZQR0I4+nq+4ODk5g/cA==", + "node_modules/eslint-plugin-cypress/node_modules/globals": { + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", "dev": true, "dependencies": { - "@types/cookie": "^0.4.1", - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.2.1", - "ws": "~8.11.0" + "type-fest": "^0.20.2" }, "engines": { - "node": ">=10.2.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/engine.io-client": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.2.tgz", - "integrity": "sha512-CQZqbrpEYnrpGqC07a9dJDz4gePZUgTPMU3NKJPSeQOyw27Tst4Pl3FemKoFGAlHzgZmKjoRmiJvbWfhCXUlIg==", - "dependencies": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1", - "engine.io-parser": "~5.2.1", - "ws": "~8.11.0", - "xmlhttprequest-ssl": "~2.0.0" + "node_modules/eslint-plugin-cypress/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/engine.io-client/node_modules/ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "node_modules/eslint-plugin-prettier": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.1.tgz", + "integrity": "sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.5" + }, "engines": { - "node": ">=10.0.0" + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/prettier" }, "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "prettier": ">=3.0.0" }, "peerDependenciesMeta": { - "bufferutil": { + "@types/eslint": { "optional": true }, - "utf-8-validate": { + "eslint-config-prettier": { "optional": true } } }, - "node_modules/engine.io-parser": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.1.tgz", - "integrity": "sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==", + "node_modules/eslint-plugin-vue": { + "version": "9.17.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.17.0.tgz", + "integrity": "sha512-r7Bp79pxQk9I5XDP0k2dpUC7Ots3OSWgvGZNu3BxmKK6Zg7NgVtcOB6OCna5Kb9oQwJPl5hq183WD0SY5tZtIQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^6.0.13", + "semver": "^7.5.4", + "vue-eslint-parser": "^9.3.1", + "xml-name-validator": "^4.0.0" + }, "engines": { - "node": ">=10.0.0" + "node": "^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/engine.io/node_modules/@types/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", - "dev": true - }, - "node_modules/engine.io/node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "node_modules/eslint-plugin-vue/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=10" } }, - "node_modules/engine.io/node_modules/ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "node_modules/eslint-plugin-vue/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, - "engines": { - "node": ">=10.0.0" + "dependencies": { + "lru-cache": "^6.0.0" }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "bin": { + "semver": "bin/semver.js" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "engines": { + "node": ">=10" } }, - "node_modules/enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "optional": true, - "peer": true, + "node_modules/eslint-plugin-vue/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, "dependencies": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" }, "engines": { - "node": ">=6.9.0" + "node": ">=8.0.0" } }, - "node_modules/enquirer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" - }, "engines": { - "node": ">=8.6" + "node": ">=4.0" } }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "engines": { - "node": ">=0.12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "url": "https://opencollective.com/eslint" } }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "optional": true, - "peer": true, - "dependencies": { - "prr": "~1.0.1" + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" }, - "bin": { - "errno": "cli.js" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, "dependencies": { - "is-arrayish": "^0.2.1" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/es-abstract": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", - "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.1", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.1", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.0", - "safe-array-concat": "^1.0.0", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.10" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/es-module-lexer": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", - "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==" - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" + "is-glob": "^4.0.3" }, "engines": { - "node": ">= 0.4" + "node": ">=10.13.0" } }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "node_modules/eslint/node_modules/globals": { + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", "dev": true, "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "type-fest": "^0.20.2" }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", - "hasInstallScript": true, + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, "bin": { - "esbuild": "bin/esbuild" + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" }, "engines": { - "node": ">=12" + "node": ">=10" }, - "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" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=6" + "node": "*" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.48.0.tgz", - "integrity": "sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==", + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.48.0", - "@humanwhocodes/config-array": "^0.11.10", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.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" - }, - "bin": { - "eslint": "bin/eslint.js" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -11262,987 +13686,1094 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-config-prettier": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz", - "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==", + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, "bin": { - "eslint-config-prettier": "bin/cli.js" + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, - "peerDependencies": { - "eslint": ">=7.0.0" + "engines": { + "node": ">=4" } }, - "node_modules/eslint-plugin-cypress": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-2.14.0.tgz", - "integrity": "sha512-eW6tv7iIg7xujleAJX4Ujm649Bf5jweqa4ObPEIuueYRyLZt7qXGWhCY/n4bfeFW/j6nQZwbIBHKZt6EKcL/cg==", + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "dependencies": { - "globals": "^13.20.0" + "estraverse": "^5.1.0" }, - "peerDependencies": { - "eslint": ">= 3.2.1" + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-stream": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", + "dev": true, + "dependencies": { + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", + "pause-stream": "0.0.11", + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" } }, - "node_modules/eslint-plugin-cypress/node_modules/globals": { - "version": "13.21.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", - "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "node_modules/eventemitter2": { + "version": "6.4.7", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", + "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", + "dev": true + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", "dev": true, "dependencies": { - "type-fest": "^0.20.2" + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/eslint-plugin-cypress/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/executable": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", "dev": true, - "engines": { - "node": ">=10" + "dependencies": { + "pify": "^2.2.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=4" } }, - "node_modules/eslint-plugin-prettier": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.0.tgz", - "integrity": "sha512-AgaZCVuYDXHUGxj/ZGu1u8H8CYgDY3iG6w5kUFw4AzMVXzB7VvbKgYR4nATIN+OvUrghMbiDLeimVjVY5ilq3w==", + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", "dev": true, - "dependencies": { - "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.8.5" - }, "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/prettier" - }, - "peerDependencies": { - "@types/eslint": ">=8.0.0", - "eslint": ">=8.0.0", - "prettier": ">=3.0.0" - }, - "peerDependenciesMeta": { - "@types/eslint": { - "optional": true - }, - "eslint-config-prettier": { - "optional": true - } + "node": ">= 0.8.0" } }, - "node_modules/eslint-plugin-vue": { - "version": "9.17.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.17.0.tgz", - "integrity": "sha512-r7Bp79pxQk9I5XDP0k2dpUC7Ots3OSWgvGZNu3BxmKK6Zg7NgVtcOB6OCna5Kb9oQwJPl5hq183WD0SY5tZtIQ==", + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "natural-compare": "^1.4.0", - "nth-check": "^2.1.1", - "postcss-selector-parser": "^6.0.13", - "semver": "^7.5.4", - "vue-eslint-parser": "^9.3.1", - "xml-name-validator": "^4.0.0" - }, "engines": { - "node": "^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" + "node": ">=6" } }, - "node_modules/eslint-plugin-vue/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/eslint-plugin-vue/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" }, "bin": { - "semver": "bin/semver.js" + "extract-zip": "cli.js" }, "engines": { - "node": ">=10" + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" } }, - "node_modules/eslint-plugin-vue/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "node_modules/fast-defer": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/fast-defer/-/fast-defer-1.1.7.tgz", + "integrity": "sha512-tJ01ulDWT2WhqxMKS20nXX6wyX2iInBYpbN3GO7yjKwXMY4qvkdBRxak9IFwBLlFDESox+SwSvqMCZDfe1tqeg==" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", "dev": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" }, "engines": { - "node": ">=8.0.0" + "node": ">=8" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dependencies": { + "reusify": "^1.0.4" } }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dependencies": { - "color-convert": "^2.0.1" + "websocket-driver": ">=0.5.1" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=0.8.0" } }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "bser": "2.1.1" } }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dev": true, "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "pend": "~1.2.0" } }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/feather-icons": { + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/feather-icons/-/feather-icons-4.29.1.tgz", + "integrity": "sha512-P1we61haGTds6lKWe6CCVPsNULb8tHr1y6S9gXEpU+lNR1Ja7GdV0A1l2hTNmzXv+0Stix/3YMWMAn7n1Qtd6A==", + "dependencies": { + "classnames": "^2.2.5", + "core-js": "^3.1.3" + } + }, + "node_modules/fflate": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.1.tgz", + "integrity": "sha512-/exOvEuc+/iaUm105QIiOt4LpBdMTWsXxqR0HDF35vx3fmaKzw7354gTilCh5rkzEt8WYyG//ku3h3nRmd7CHQ==", "dev": true }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "flat-cache": "^3.0.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/file-saver": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" + }, + "node_modules/file-uri-to-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz", + "integrity": "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==", "dev": true, "engines": { - "node": ">=4.0" + "node": ">= 6" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.21.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", - "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "minimatch": "^5.0.1" } }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "brace-expansion": "^2.0.1" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "to-regex-range": "^5.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=8" } }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "node_modules/finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha512-ejnvM9ZXYzp6PUPUyQBMBf0Co5VX2gr5H2VQe2Ui2jWXNlxv+PYZo8wpAymJNJdLsG1R4p+M4aynF8KuoUEwRw==", "dev": true, "dependencies": { - "estraverse": "^5.1.0" + "debug": "2.6.9", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" }, "engines": { - "node": ">=0.10" + "node": ">= 0.8" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "engines": { - "node": ">=4.0" + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", "dependencies": { - "estraverse": "^5.2.0" + "array-back": "^3.0.1" }, "engines": { - "node": ">=4.0" + "node": ">=4.0.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, "engines": { - "node": ">=4.0" + "node": ">=8" } }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" + "node_modules/firebase": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/firebase/-/firebase-10.5.0.tgz", + "integrity": "sha512-ROwoOFQa7tZret/giHtVJH4YCRLCuKpN386mxzXd0likAVmv+38YGkJiqfkmZju7dIQ+QJOvBScXVf27Kvob0g==", + "dependencies": { + "@firebase/analytics": "0.10.0", + "@firebase/analytics-compat": "0.2.6", + "@firebase/app": "0.9.20", + "@firebase/app-check": "0.8.0", + "@firebase/app-check-compat": "0.3.7", + "@firebase/app-compat": "0.2.20", + "@firebase/app-types": "0.9.0", + "@firebase/auth": "1.3.0", + "@firebase/auth-compat": "0.4.6", + "@firebase/database": "1.0.1", + "@firebase/database-compat": "1.0.1", + "@firebase/firestore": "4.3.0", + "@firebase/firestore-compat": "0.3.19", + "@firebase/functions": "0.10.0", + "@firebase/functions-compat": "0.3.5", + "@firebase/installations": "0.6.4", + "@firebase/installations-compat": "0.2.4", + "@firebase/messaging": "0.12.4", + "@firebase/messaging-compat": "0.2.4", + "@firebase/performance": "0.6.4", + "@firebase/performance-compat": "0.2.4", + "@firebase/remote-config": "0.4.4", + "@firebase/remote-config-compat": "0.2.4", + "@firebase/storage": "0.11.2", + "@firebase/storage-compat": "0.3.2", + "@firebase/util": "1.9.3" } }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "node_modules/flat-cache": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", + "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, "engines": { - "node": ">= 0.6" + "node": ">=12.0.0" } }, - "node_modules/event-stream": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", - "dev": true, + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true + }, + "node_modules/floating-vue": { + "version": "2.0.0-beta.24", + "resolved": "https://registry.npmjs.org/floating-vue/-/floating-vue-2.0.0-beta.24.tgz", + "integrity": "sha512-URSzP6YXaF4u1oZ9XGL8Sn8puuM7ivp5jkOUrpy5Q1mfo9BfGppJOn+ierTmsSUfJEeHBae8KT7r5DeI3vQIEw==", "dependencies": { - "duplexer": "~0.1.1", - "from": "~0", - "map-stream": "~0.1.0", - "pause-stream": "0.0.11", - "split": "0.3", - "stream-combiner": "~0.0.4", - "through": "~2.3.1" + "@floating-ui/dom": "~1.1.1", + "vue-resize": "^2.0.0-alpha.1" + }, + "peerDependencies": { + "@nuxt/kit": "^3.2.0", + "vue": "^3.2.0" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + } + } + }, + "node_modules/floating-vue/node_modules/@floating-ui/dom": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.1.1.tgz", + "integrity": "sha512-TpIO93+DIujg3g7SykEAGZMDtbJRrmnYRCNYSjJlvIbGhBjRSNTLVbNeDQBrzy9qDgUbiWdc7KA0uZHZ2tJmiw==", + "dependencies": { + "@floating-ui/core": "^1.1.0" } }, - "node_modules/eventemitter2": { - "version": "6.4.7", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", - "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", - "dev": true + "node_modules/flowbite": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/flowbite/-/flowbite-1.8.1.tgz", + "integrity": "sha512-lXTcO8a6dRTPFpINyOLcATCN/pK1Of/jY4PryklPllAiqH64tSDUsOdQpar3TO59ZXWwugm2e92oaqwH6X90Xg==", + "dependencies": { + "@popperjs/core": "^2.9.3", + "mini-svg-data-uri": "^1.4.3" + } }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true + "node_modules/follow-redirects": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "is-callable": "^1.1.3" } }, - "node_modules/executable": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", - "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "node_modules/foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", "dev": true, "dependencies": { - "pify": "^2.2.0" + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": ">=4" + "node": ">=8.0.0" } }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", "dev": true, "engines": { - "node": ">=6" + "node": "*" } }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" }, "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" + "node": ">= 6" } }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", "dev": true, - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-defer": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/fast-defer/-/fast-defer-1.1.7.tgz", - "integrity": "sha512-tJ01ulDWT2WhqxMKS20nXX6wyX2iInBYpbN3GO7yjKwXMY4qvkdBRxak9IFwBLlFDESox+SwSvqMCZDfe1tqeg==" - }, - "node_modules/fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true - }, - "node_modules/fast-fifo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, "engines": { - "node": ">=8.6.0" + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" } }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, "engines": { - "node": ">= 6" + "node": ">= 0.6" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "node_modules/from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", "dev": true }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, "dependencies": { - "websocket-driver": ">=0.5.1" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=0.8.0" + "node": ">=14.14" } }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "dependencies": { - "pend": "~1.2.0" - } + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, - "node_modules/feather-icons": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/feather-icons/-/feather-icons-4.29.1.tgz", - "integrity": "sha512-P1we61haGTds6lKWe6CCVPsNULb8tHr1y6S9gXEpU+lNR1Ja7GdV0A1l2hTNmzXv+0Stix/3YMWMAn7n1Qtd6A==", - "dependencies": { - "classnames": "^2.2.5", - "core-js": "^3.1.3" + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/fflate": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.4.8.tgz", - "integrity": "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==" - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, "dependencies": { - "flat-cache": "^3.0.4" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/file-saver": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", - "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" - }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, - "dependencies": { - "minimatch": "^5.0.1" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" } }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, + "node_modules/geotiff": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/geotiff/-/geotiff-2.0.7.tgz", + "integrity": "sha512-FKvFTNowMU5K6lHYY2f83d4lS2rsCNdpUC28AX61x9ZzzqPNaWFElWv93xj0eJFaNyOYA63ic5OzJ88dHpoA5Q==", "dependencies": { - "brace-expansion": "^2.0.1" + "@petamoriken/float16": "^3.4.7", + "lerc": "^3.0.0", + "pako": "^2.0.4", + "parse-headers": "^2.0.2", + "quick-lru": "^6.1.1", + "web-worker": "^1.2.0", + "xml-utils": "^1.0.2" }, "engines": { - "node": ">=10" + "node": ">=10.19" } }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "engines": { - "node": ">=8" + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/finalhandler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha512-ejnvM9ZXYzp6PUPUyQBMBf0Co5VX2gr5H2VQe2Ui2jWXNlxv+PYZo8wpAymJNJdLsG1R4p+M4aynF8KuoUEwRw==", + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.1", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.3.1", - "unpipe": "~1.0.0" - }, "engines": { - "node": ">= 0.8" + "node": "*" } }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dev": true, "dependencies": { - "ms": "2.0.0" + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", "dev": true }, - "node_modules/find-replace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", - "dependencies": { - "array-back": "^3.0.1" - }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, "engines": { - "node": ">=4.0.0" + "node": ">=8.0.0" } }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "pump": "^3.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/firebase": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/firebase/-/firebase-10.3.1.tgz", - "integrity": "sha512-lUk1X0SQocShyIwz5x9mj829Yn1y4Y9KWriGLZ0/Pbwqt4ZxElx8rI1p/YAi4MZTtT1qi0wazo7dAlmuF6J0Aw==", + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, "dependencies": { - "@firebase/analytics": "0.10.0", - "@firebase/analytics-compat": "0.2.6", - "@firebase/app": "0.9.18", - "@firebase/app-check": "0.8.0", - "@firebase/app-check-compat": "0.3.7", - "@firebase/app-compat": "0.2.18", - "@firebase/app-types": "0.9.0", - "@firebase/auth": "1.3.0", - "@firebase/auth-compat": "0.4.6", - "@firebase/database": "1.0.1", - "@firebase/database-compat": "1.0.1", - "@firebase/firestore": "4.1.3", - "@firebase/firestore-compat": "0.3.17", - "@firebase/functions": "0.10.0", - "@firebase/functions-compat": "0.3.5", - "@firebase/installations": "0.6.4", - "@firebase/installations-compat": "0.2.4", - "@firebase/messaging": "0.12.4", - "@firebase/messaging-compat": "0.2.4", - "@firebase/performance": "0.6.4", - "@firebase/performance-compat": "0.2.4", - "@firebase/remote-config": "0.4.4", - "@firebase/remote-config-compat": "0.2.4", - "@firebase/storage": "0.11.2", - "@firebase/storage-compat": "0.3.2", - "@firebase/util": "1.9.3" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "optional": true, - "peer": true, - "bin": { - "flat": "cli.js" + "node_modules/getos": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", + "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", + "dev": true, + "dependencies": { + "async": "^3.2.0" } }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", "dev": true, "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" + "assert-plus": "^1.0.0" + } + }, + "node_modules/gettext-extractor": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/gettext-extractor/-/gettext-extractor-3.8.0.tgz", + "integrity": "sha512-i/3mDQufQoJd2/EKm/B+VlaYrt3yGjVfLZu8DQpESKH29klNiW6z2S89FVCIEB85bDNgtGCeM/3A/yR1njr/Lw==", + "dependencies": { + "@types/glob": "5 - 7", + "@types/parse5": "^5", + "css-selector-parser": "^1.3", + "glob": "5 - 7", + "parse5": "5 - 6", + "pofile": "1.0.x", + "typescript": "4 - 5" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=6" } }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "node_modules/gettext-extractor/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "node_modules/gettext-extractor/node_modules/pofile": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pofile/-/pofile-1.0.11.tgz", + "integrity": "sha512-Vy9eH1dRD9wHjYt/QqXcTz+RnX/zg53xK+KljFSX30PvdDMb2z+c6uDUeblUGqqJgz3QFsdlA0IJvHziPmWtQg==" + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", "dev": true }, - "node_modules/floating-vue": { - "version": "2.0.0-beta.24", - "resolved": "https://registry.npmjs.org/floating-vue/-/floating-vue-2.0.0-beta.24.tgz", - "integrity": "sha512-URSzP6YXaF4u1oZ9XGL8Sn8puuM7ivp5jkOUrpy5Q1mfo9BfGppJOn+ierTmsSUfJEeHBae8KT7r5DeI3vQIEw==", + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dependencies": { - "@floating-ui/dom": "~1.1.1", - "vue-resize": "^2.0.0-alpha.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, - "peerDependencies": { - "@nuxt/kit": "^3.2.0", - "vue": "^3.2.0" + "engines": { + "node": "*" }, - "peerDependenciesMeta": { - "@nuxt/kit": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/flowbite": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/flowbite/-/flowbite-1.8.1.tgz", - "integrity": "sha512-lXTcO8a6dRTPFpINyOLcATCN/pK1Of/jY4PryklPllAiqH64tSDUsOdQpar3TO59ZXWwugm2e92oaqwH6X90Xg==", + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dependencies": { - "@popperjs/core": "^2.9.3", - "mini-svg-data-uri": "^1.4.3" + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "engines": { + "node": "*" } }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "node_modules/global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", "dev": true, "dependencies": { - "is-callable": "^1.1.3" + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "dev": true, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "engines": { - "node": "*" + "node": ">=4" } }, - "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", "dev": true, "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "define-properties": "^1.1.3" }, "engines": { - "node": ">= 0.12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fraction.js": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.1.tgz", - "integrity": "sha512-/KxoyCnPM0GwYI4NN0Iag38Tqt+od3/mLuguepLgCAKPn0ZhC544nssAW0tG2/00zXEYl9W+7hwAIpLHo6Oc7Q==", + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, "engines": { - "node": "*" + "node": ">=10" }, "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "node_modules/globby/node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, "engines": { - "node": ">= 0.6" + "node": ">=8.6.0" } }, - "node_modules/from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, - "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, + "node_modules/gridstack": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/gridstack/-/gridstack-9.4.0.tgz", + "integrity": "sha512-4dcXGT5IzWfLxJIj4oGZPohgYfHrbdNHenRwwApzialkG2bVd9J9NmcdZsRFX6Q4cANqR0M56yF2Km2FAQkVCw==", + "funding": [ + { + "type": "paypal", + "url": "https://www.paypal.me/alaind831" + }, + { + "type": "venmo", + "url": "https://www.venmo.com/adumesny" + } + ] + }, + "node_modules/harmony-reflect": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", + "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", + "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", "engines": { - "node": ">=10" + "node": ">= 0.4.0" } }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "optional": true, - "peer": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "optional": true, - "peer": true, + "node_modules/has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" + "isarray": "2.0.1" } }, - "node_modules/fs-minipass/node_modules/yallist": { + "node_modules/has-binary2/node_modules/isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha512-c2cu3UxbI+b6kR3fy0nRnAhodsvR9dx7U5+znCOzdj6IfP3upFURTr0Xl5BlQZNKZjEtxrmVyfSdeE3O57smoQ==" + }, + "node_modules/has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha512-g5VNKdkFuUuVCP9gYfDJHjK2nqdQJ7aDLTnycnc2+RvsOQbuLdF5pm7vuE5J76SEBIQjs4kQY/BWq74JUmjbXA==" + }, + "node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "optional": true, - "peer": true + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } }, - "node_modules/fs.realpath": { + "node_modules/has-property-descriptors": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, "engines": { "node": ">= 0.4" }, @@ -12250,96 +14781,74 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fuse.js": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.6.2.tgz", - "integrity": "sha512-cJaJkxCCxC8qIIcPBF9yGxY0W/tVZS3uEISDxhYIdtk8OL93pe+6Zj7LjCqVV4dzbqcriOZ+kQ/NE4RXZHsIGA==", - "optional": true, - "peer": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "engines": { - "node": ">=6.9.0" + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" } }, - "node_modules/geotiff": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/geotiff/-/geotiff-2.0.7.tgz", - "integrity": "sha512-FKvFTNowMU5K6lHYY2f83d4lS2rsCNdpUC28AX61x9ZzzqPNaWFElWv93xj0eJFaNyOYA63ic5OzJ88dHpoA5Q==", + "node_modules/hosted-git-info": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz", + "integrity": "sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==", + "dev": true, "dependencies": { - "@petamoriken/float16": "^3.4.7", - "lerc": "^3.0.0", - "pako": "^2.0.4", - "parse-headers": "^2.0.2", - "quick-lru": "^6.1.1", - "web-worker": "^1.2.0", - "xml-utils": "^1.0.2" + "lru-cache": "^10.0.1" }, "engines": { - "node": ">=10.19" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", + "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", "dev": true, "engines": { - "node": "*" + "node": "14 || >=16.14" } }, - "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "whatwg-encoding": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=12" } }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, "engines": { "node": ">=8" }, @@ -12347,321 +14856,353 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, + "node_modules/html2canvas": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz", + "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==", + "optional": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "css-line-break": "^2.1.0", + "text-segmentation": "^1.0.3" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8.0.0" } }, - "node_modules/getos": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", - "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, "dependencies": { - "async": "^3.2.0" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" } }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" + "engines": { + "node": ">= 0.8" } }, - "node_modules/gettext-extractor": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/gettext-extractor/-/gettext-extractor-3.8.0.tgz", - "integrity": "sha512-i/3mDQufQoJd2/EKm/B+VlaYrt3yGjVfLZu8DQpESKH29klNiW6z2S89FVCIEB85bDNgtGCeM/3A/yR1njr/Lw==", + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, "dependencies": { - "@types/glob": "5 - 7", - "@types/parse5": "^5", - "css-selector-parser": "^1.3", - "glob": "5 - 7", - "parse5": "5 - 6", - "pofile": "1.0.x", - "typescript": "4 - 5" + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" }, "engines": { - "node": ">=6" + "node": ">=8.0.0" } }, - "node_modules/gettext-extractor/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 6" } }, - "node_modules/gettext-extractor/node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + "node_modules/http-server": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz", + "integrity": "sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==", + "dev": true, + "dependencies": { + "basic-auth": "^2.0.1", + "chalk": "^4.1.2", + "corser": "^2.0.1", + "he": "^1.2.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy": "^1.18.1", + "mime": "^1.6.0", + "minimist": "^1.2.6", + "opener": "^1.5.1", + "portfinder": "^1.0.28", + "secure-compare": "3.0.1", + "union": "~0.5.0", + "url-join": "^4.0.1" + }, + "bin": { + "http-server": "bin/http-server" + }, + "engines": { + "node": ">=12" + } }, - "node_modules/gettext-extractor/node_modules/pofile": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pofile/-/pofile-1.0.11.tgz", - "integrity": "sha512-Vy9eH1dRD9wHjYt/QqXcTz+RnX/zg53xK+KljFSX30PvdDMb2z+c6uDUeblUGqqJgz3QFsdlA0IJvHziPmWtQg==" + "node_modules/http-signature": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", + "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.14.1" + }, + "engines": { + "node": ">=0.10" + } }, - "node_modules/giget": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/giget/-/giget-1.1.2.tgz", - "integrity": "sha512-HsLoS07HiQ5oqvObOI+Qb2tyZH4Gj5nYGfF9qQcZNrPw+uEFhdXtgJr01aO2pWadGHucajYDLxxbtQkm97ON2A==", - "optional": true, - "peer": true, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, "dependencies": { - "colorette": "^2.0.19", - "defu": "^6.1.2", - "https-proxy-agent": "^5.0.1", - "mri": "^1.2.0", - "node-fetch-native": "^1.0.2", - "pathe": "^1.1.0", - "tar": "^6.1.13" + "agent-base": "6", + "debug": "4" }, - "bin": { - "giget": "dist/cli.mjs" + "engines": { + "node": ">= 6" } }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/ico-endec": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ico-endec/-/ico-endec-0.1.6.tgz", + "integrity": "sha512-ZdLU38ZoED3g1j3iEyzcQj+wAkY2xfWNkymszfJPoxucIUhK7NayQ+/C4Kv0nDFMIsbtbEHldv3V8PU494/ueQ==", "dev": true }, - "node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=0.10.0" } }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "node_modules/idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==" + }, + "node_modules/identity-obj-proxy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", + "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", + "dev": true, "dependencies": { - "is-glob": "^4.0.3" + "harmony-reflect": "^1.4.6" }, "engines": { - "node": ">=10.13.0" + "node": ">=4" } }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "node_modules/glob/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, "engines": { - "node": ">=10" + "node": ">= 4" } }, - "node_modules/global-dirs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", - "dev": true, + "node_modules/immutable": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", + "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dependencies": { - "ini": "2.0.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "engines": { "node": ">=4" } }, - "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, - "dependencies": { - "define-properties": "^1.1.3" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.8.19" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, + "node_modules/indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha512-i0G7hLJ1z0DE8dsqJa2rycj9dBmNKgXBvotXtZYXakU9oivfB9Uj2ZBC27qqef2U58/ZLwalxa1X/RDCdkHtVg==" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "devOptional": true - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/gridstack": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/gridstack/-/gridstack-9.2.0.tgz", - "integrity": "sha512-+uWb4p1Za3j6OfvumXzuWQ4EcDh3kZZFLr0vONLPdrtGPJuxb73TjqttEu4igW7iP2Y80kewfYnNT6kQ0blJQQ==", - "funding": [ - { - "type": "paypal", - "url": "https://www.paypal.me/alaind831" - }, - { - "type": "venmo", - "url": "https://www.venmo.com/adumesny" - } - ] + "node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true, + "engines": { + "node": ">=10" + } }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "node_modules/internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, "dependencies": { - "function-bind": "^1.1.1" + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" }, "engines": { - "node": ">= 0.4.0" + "node": ">= 0.4" } }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-binary2": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", - "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, "dependencies": { - "isarray": "2.0.1" + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-binary2/node_modules/isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha512-c2cu3UxbI+b6kR3fy0nRnAhodsvR9dx7U5+znCOzdj6IfP3upFURTr0Xl5BlQZNKZjEtxrmVyfSdeE3O57smoQ==" - }, - "node_modules/has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha512-g5VNKdkFuUuVCP9gYfDJHjK2nqdQJ7aDLTnycnc2+RvsOQbuLdF5pm7vuE5J76SEBIQjs4kQY/BWq74JUmjbXA==" - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, "engines": { "node": ">= 0.4" @@ -12670,25 +15211,36 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", "dev": true, - "engines": { - "node": ">= 0.4" + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "dependencies": { + "has": "^1.0.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, "dependencies": { - "has-symbols": "^1.0.2" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -12697,52 +15249,14 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hash-sum": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", - "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", - "optional": true, - "peer": true - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, "bin": { - "he": "bin/he" - } - }, - "node_modules/hookable": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", - "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", - "optional": true, - "peer": true - }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", - "dev": true, - "dependencies": { - "whatwg-encoding": "^2.0.0" + "is-docker": "cli.js" }, - "engines": { - "node": ">=12" - } - }, - "node_modules/html-tags": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", - "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", - "dev": true, "engines": { "node": ">=8" }, @@ -12750,293 +15264,229 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/html2canvas": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz", - "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==", - "optional": true, - "dependencies": { - "css-line-break": "^2.1.0", - "text-segmentation": "^1.0.3" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "engines": { - "node": ">= 0.8" + "node": ">=0.10.0" } }, - "node_modules/http-errors/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "engines": { - "node": ">= 0.8" + "node": ">=8" } }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, "engines": { - "node": ">=8.0.0" + "node": ">=6" } }, - "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" + "is-extglob": "^2.1.1" }, "engines": { - "node": ">= 6" + "node": ">=0.10.0" } }, - "node_modules/http-signature": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", - "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", "dev": true, "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^2.0.2", - "sshpk": "^1.14.1" + "is-docker": "^3.0.0" }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "devOptional": true, - "dependencies": { - "agent-base": "6", - "debug": "4" + "bin": { + "is-inside-container": "cli.js" }, "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/ico-endec": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ico-endec/-/ico-endec-0.1.6.tgz", - "integrity": "sha512-ZdLU38ZoED3g1j3iEyzcQj+wAkY2xfWNkymszfJPoxucIUhK7NayQ+/C4Kv0nDFMIsbtbEHldv3V8PU494/ueQ==", - "dev": true - }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "node": ">=14.16" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/idb": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", - "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==" - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "devOptional": true, + "node_modules/is-inside-container/node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, "engines": { - "node": ">= 4" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/immutable": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", - "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==" - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dev": true, "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, "engines": { - "node": ">=0.8.19" + "node": ">=8" } }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha512-i0G7hLJ1z0DE8dsqJa2rycj9dBmNKgXBvotXtZYXakU9oivfB9Uj2ZBC27qqef2U58/ZLwalxa1X/RDCdkHtVg==" + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "node_modules/is-number-like": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", + "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", + "dev": true, "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "lodash.isfinite": "^3.3.2" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", "dev": true, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dev": true, "dependencies": { - "has-bigints": "^1.0.1" + "call-bind": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dependencies": { - "binary-extensions": "^2.0.0" - }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" }, "engines": { @@ -13046,11 +15496,14 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, "engines": { "node": ">= 0.4" }, @@ -13058,506 +15511,718 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", "dev": true, "dependencies": { - "ci-info": "^3.2.0" + "which-typed-array": "^1.1.11" }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", - "dependencies": { - "has": "^1.0.3" + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, "engines": { "node": ">=8" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/istanbul-lib-instrument": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", + "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", + "dev": true, "dependencies": { - "is-extglob": "^2.1.1" + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "node_modules/istanbul-lib-instrument/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" + "yallist": "^4.0.0" }, "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10" } }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "node_modules/istanbul-lib-instrument/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, - "engines": { - "node": ">= 0.4" + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=10" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, "engines": { - "node": ">=0.12.0" + "node": ">=10" } }, - "node_modules/is-number-like": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", - "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", + "node_modules/istanbul-reports": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", "dev": true, "dependencies": { - "lodash.isfinite": "^3.3.2" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "node_modules/jake": { + "version": "10.8.7", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", + "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" }, - "engines": { - "node": ">= 0.4" + "bin": { + "jake": "bin/cli.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=10" } }, - "node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "node_modules/jake/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=0.10.0" + "node": "*" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "node_modules/jenesius-vue-modal": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/jenesius-vue-modal/-/jenesius-vue-modal-1.9.2.tgz", + "integrity": "sha512-RQJEQv61CijrSoEcEqz4g3KFQqSTNG5J4PsO7kt4u2qhh63Q5iWI0ZmqeJjQUmbG+KUHvZjzgtI7UbqxwNtTtA==", + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } } }, - "node_modules/is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, "dependencies": { - "call-bind": "^1.0.2" + "detect-newline": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, "dependencies": { - "has-symbols": "^1.0.2" + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" }, "engines": { - "node": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, "dependencies": { - "which-typed-array": "^1.1.11" + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, - "engines": { - "node": ">=10" + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, "dependencies": { - "call-bind": "^1.0.2" + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, "dependencies": { - "is-docker": "^2.0.0" + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-wsl/node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, - "bin": { - "is-docker": "cli.js" - }, "engines": { - "node": ">=8" + "node": ">=6" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } } }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/jake": { - "version": "10.8.7", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", - "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "bin": { - "jake": "bin/cli.js" + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve/node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, "engines": { "node": ">=10" } }, - "node_modules/jake/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jake/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/jest-runner/node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jake/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, "dependencies": { - "color-name": "~1.1.4" + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" }, "engines": { - "node": ">=7.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jake/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jake/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jake/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jenesius-vue-modal": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/jenesius-vue-modal/-/jenesius-vue-modal-1.9.2.tgz", - "integrity": "sha512-RQJEQv61CijrSoEcEqz4g3KFQqSTNG5J4PsO7kt4u2qhh63Q5iWI0ZmqeJjQUmbG+KUHvZjzgtI7UbqxwNtTtA==", - "peerDependencies": { - "vue": "^3.0.0" + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" }, "engines": { - "node": ">= 10.13.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-worker/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/jiti": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.19.3.tgz", - "integrity": "sha512-5eEbBDQT/jF1xg6l36P+mWGGoH9Spuy0PCdSr2dtWRDGC6ph/w9ZCL4lmESW8f8F7MwT3XKescfP0wnZWAKL9w==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.20.0.tgz", + "integrity": "sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==", "bin": { "jiti": "bin/jiti.js" } }, "node_modules/joi": { - "version": "17.9.2", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.9.2.tgz", - "integrity": "sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw==", + "version": "17.11.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.11.0.tgz", + "integrity": "sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ==", "dev": true, "dependencies": { "@hapi/hoek": "^9.0.0", @@ -13573,18 +16238,58 @@ "integrity": "sha512-coM7xq1syLcMyuVGyToxcj2AlzhkDjmfklL8r0JgJ7A76wyGMpJ1oA35mr4APdYNO/o/4YY8H54NQIJzhMbhBg==", "dev": true, "dependencies": { - "config-chain": "^1.1.13", - "editorconfig": "^1.0.3", - "glob": "^8.1.0", - "nopt": "^6.0.0" - }, - "bin": { - "css-beautify": "js/bin/css-beautify.js", - "html-beautify": "js/bin/html-beautify.js", - "js-beautify": "js/bin/js-beautify.js" + "config-chain": "^1.1.13", + "editorconfig": "^1.0.3", + "glob": "^8.1.0", + "nopt": "^6.0.0" + }, + "bin": { + "css-beautify": "js/bin/css-beautify.js", + "html-beautify": "js/bin/html-beautify.js", + "js-beautify": "js/bin/js-beautify.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/js-beautify/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/js-beautify/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/js-beautify/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=12" + "node": ">=10" } }, "node_modules/js-cookie": { @@ -13601,12 +16306,13 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "dependencies": { - "argparse": "^2.0.1" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" @@ -13660,20 +16366,6 @@ } } }, - "node_modules/jsdom/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -13685,6 +16377,12 @@ "node": ">=4" } }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, "node_modules/json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -13714,11 +16412,6 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, - "node_modules/json-stringify-pretty-compact": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-2.0.0.tgz", - "integrity": "sha512-WRitRfs6BGq4q8gTgOy4ek7iPFXjbra0H3PmDLKm2xnZ+Gh1HUhiKGgCZkSPNULlP7mvfu6FV/mOLhCarspADQ==" - }, "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -13736,11 +16429,29 @@ "node": ">=6" } }, + "node_modules/jsonc-eslint-parser": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.3.0.tgz", + "integrity": "sha512-9xZPKVYp9DxnM3sd1yAsh/d59iIaswDkai8oTxbursfKYbg/ibjX0IzFt35+VZ8iEW453TVTXztnRvYUQlAfUQ==", + "dev": true, + "dependencies": { + "acorn": "^8.5.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + } + }, "node_modules/jsonc-parser": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "devOptional": true + "dev": true }, "node_modules/jsonfile": { "version": "6.1.0", @@ -13780,6 +16491,11 @@ "html2canvas": "^1.0.0-rc.5" } }, + "node_modules/jspdf/node_modules/fflate": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.4.8.tgz", + "integrity": "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==" + }, "node_modules/jsprim": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", @@ -13800,12 +16516,14 @@ "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz", "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==" }, - "node_modules/knitwork": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/knitwork/-/knitwork-1.0.0.tgz", - "integrity": "sha512-dWl0Dbjm6Xm+kDxhPQJsCBTxrJzuGl0aP9rhr+TG8D3l+GL90N8O8lYUi7dTSAN2uuDqCtNgb6aEuQH5wsiV8Q==", - "optional": true, - "peer": true + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } }, "node_modules/kolorist": { "version": "1.8.0", @@ -13864,9 +16582,13 @@ "dev": true }, "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", + "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } }, "node_modules/listr2": { "version": "3.14.0", @@ -13910,6 +16632,19 @@ "node": ">=4" } }, + "node_modules/load-json-file/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/load-json-file/node_modules/pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", @@ -13919,11 +16654,20 @@ "node": ">=4" } }, + "node_modules/load-json-file/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/local-pkg": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", - "devOptional": true, + "dev": true, "engines": { "node": ">=14" }, @@ -14014,18 +16758,14 @@ } }, "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dependencies": { - "p-locate": "^5.0.0" + "p-locate": "^4.1.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/lodash": { @@ -14098,76 +16838,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/log-update": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", @@ -14186,39 +16856,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-update/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-update/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-update/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/log-update/node_modules/slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", @@ -14256,12 +16893,12 @@ "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" }, "node_modules/loupe": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", - "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", "dev": true, "dependencies": { - "get-func-name": "^2.0.0" + "get-func-name": "^2.0.1" } }, "node_modules/lru-cache": { @@ -14273,9 +16910,9 @@ } }, "node_modules/magic-string": { - "version": "0.30.3", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.3.tgz", - "integrity": "sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==", + "version": "0.30.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", + "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" }, @@ -14283,77 +16920,48 @@ "node": ">=12" } }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "devOptional": true + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, "node_modules/map-stream": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==", "dev": true }, - "node_modules/mapbox-to-css-font": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/mapbox-to-css-font/-/mapbox-to-css-font-2.4.2.tgz", - "integrity": "sha512-f+NBjJJY4T3dHtlEz1wCG7YFlkODEjFIYlxDdLIDMNpkSksqTt+l/d4rjuwItxuzkuMFvPyrjzV2lxRM4ePcIA==" - }, "node_modules/mdn-data": { "version": "2.0.30", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", "dev": true }, - "node_modules/memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "optional": true, - "peer": true, - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - }, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, - "node_modules/memory-fs/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "optional": true, - "peer": true - }, - "node_modules/memory-fs/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "optional": true, - "peer": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/memory-fs/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "optional": true, - "peer": true - }, - "node_modules/memory-fs/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "optional": true, - "peer": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/memorystream": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", @@ -14395,12 +17003,15 @@ } }, "node_modules/mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, "bin": { "mime": "cli.js" + }, + "engines": { + "node": ">=4" } }, "node_modules/mime-db": { @@ -14450,11 +17061,11 @@ "bin": { "mini-svg-data-uri": "cli.js" } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + }, + "node_modules/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -14470,55 +17081,23 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "optional": true, - "peer": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "optional": true, - "peer": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "optional": true, - "peer": true - }, "node_modules/mitt": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==" }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, "node_modules/mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", @@ -14529,7 +17108,7 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.4.2.tgz", "integrity": "sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==", - "devOptional": true, + "dev": true, "dependencies": { "acorn": "^8.10.0", "pathe": "^1.1.1", @@ -14550,16 +17129,6 @@ "resolved": "https://registry.npmjs.org/mount-vue-component/-/mount-vue-component-0.10.2.tgz", "integrity": "sha512-oighx0My03ArLOoTV/kLTJnrBwKdQMvn8uRP+u02rGkgkLiX1LycaHzFGib7mUwkyjp3q3uzVgwHjLZqM6rxyA==" }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, "node_modules/mrmime": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", @@ -14648,9 +17217,9 @@ "dev": true }, "node_modules/node-abi": { - "version": "3.47.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.47.0.tgz", - "integrity": "sha512-2s6B2CWZM//kPgwnuI0KrYwNjfdByE25zvAaEpq9IH4zcNsarH8Ihu/UuX6XMPEogDAxkuUFeZn60pXNHAqn3A==", + "version": "3.51.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.51.0.tgz", + "integrity": "sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA==", "dev": true, "dependencies": { "semver": "^7.3.5" @@ -14659,49 +17228,16 @@ "node": ">=10" } }, - "node_modules/node-abi/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-abi/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-abi/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/node-addon-api": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", - "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", "dev": true }, "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -14717,13 +17253,6 @@ } } }, - "node_modules/node-fetch-native": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.4.0.tgz", - "integrity": "sha512-F5kfEj95kX8tkDhUCYdV8dg3/8Olx/94zB8+ZNthFs6Bz31UpUi8Xh40TN3thLwXgrwXry1pEg9lJ++tLWTcqA==", - "optional": true, - "peer": true - }, "node_modules/node-fetch/node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -14743,6 +17272,29 @@ "webidl-conversions": "^3.0.0" } }, + "node_modules/node-gyp-build": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.1.tgz", + "integrity": "sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==", + "dev": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-machine-id": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/node-machine-id/-/node-machine-id-1.1.12.tgz", + "integrity": "sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==", + "dev": true + }, "node_modules/node-releases": { "version": "2.0.13", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", @@ -14788,6 +17340,12 @@ "validate-npm-package-license": "^3.0.1" } }, + "node_modules/normalize-package-data/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, "node_modules/normalize-package-data/node_modules/semver": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", @@ -14814,6 +17372,21 @@ "node": ">=0.10.0" } }, + "node_modules/npm-package-arg": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.1.tgz", + "integrity": "sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ==", + "dev": true, + "dependencies": { + "hosted-git-info": "^7.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, "node_modules/npm-run-all": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", @@ -14839,6 +17412,47 @@ "node": ">= 4" } }, + "node_modules/npm-run-all/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/npm-run-all/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, "node_modules/npm-run-all/node_modules/cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -14855,6 +17469,15 @@ "node": ">=4.8" } }, + "node_modules/npm-run-all/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/npm-run-all/node_modules/path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", @@ -14894,6 +17517,18 @@ "node": ">=0.10.0" } }, + "node_modules/npm-run-all/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/npm-run-all/node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -14936,6 +17571,114 @@ "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", "dev": true }, + "node_modules/nx": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/nx/-/nx-17.0.0.tgz", + "integrity": "sha512-FLRcKQyrwauwyeb/biBctKFAOkjjnfXQ2hE7uNuitDxWEdD7mejrrsZYOr++KUyjkbxmq/t3TtBQiZXHosShaA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@nrwl/tao": "17.0.0", + "@parcel/watcher": "2.0.4", + "@yarnpkg/lockfile": "^1.1.0", + "@yarnpkg/parsers": "3.0.0-rc.46", + "@zkochan/js-yaml": "0.0.6", + "axios": "^1.5.1", + "chalk": "^4.1.0", + "cli-cursor": "3.1.0", + "cli-spinners": "2.6.1", + "cliui": "^8.0.1", + "dotenv": "~16.3.1", + "dotenv-expand": "~10.0.0", + "enquirer": "~2.3.6", + "figures": "3.2.0", + "flat": "^5.0.2", + "fs-extra": "^11.1.0", + "glob": "7.1.4", + "ignore": "^5.0.4", + "jest-diff": "^29.4.1", + "js-yaml": "4.1.0", + "jsonc-parser": "3.2.0", + "lines-and-columns": "~2.0.3", + "minimatch": "3.0.5", + "node-machine-id": "1.1.12", + "npm-run-path": "^4.0.1", + "open": "^8.4.0", + "semver": "7.5.3", + "string-width": "^4.2.3", + "strong-log-transformer": "^2.1.0", + "tar-stream": "~2.2.0", + "tmp": "~0.2.1", + "tsconfig-paths": "^4.1.2", + "tslib": "^2.3.0", + "v8-compile-cache": "2.3.0", + "yargs": "^17.6.2", + "yargs-parser": "21.1.1" + }, + "bin": { + "nx": "bin/nx.js", + "nx-cloud": "bin/nx-cloud.js" + }, + "optionalDependencies": { + "@nx/nx-darwin-arm64": "17.0.0", + "@nx/nx-darwin-x64": "17.0.0", + "@nx/nx-freebsd-x64": "17.0.0", + "@nx/nx-linux-arm-gnueabihf": "17.0.0", + "@nx/nx-linux-arm64-gnu": "17.0.0", + "@nx/nx-linux-arm64-musl": "17.0.0", + "@nx/nx-linux-x64-gnu": "17.0.0", + "@nx/nx-linux-x64-musl": "17.0.0", + "@nx/nx-win32-arm64-msvc": "17.0.0", + "@nx/nx-win32-x64-msvc": "17.0.0" + }, + "peerDependencies": { + "@swc-node/register": "^1.6.7", + "@swc/core": "^1.3.85" + }, + "peerDependenciesMeta": { + "@swc-node/register": { + "optional": true + }, + "@swc/core": { + "optional": true + } + } + }, + "node_modules/nx/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/nx/node_modules/glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/nx/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/obj-case": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/obj-case/-/obj-case-0.2.1.tgz", @@ -14963,9 +17706,9 @@ } }, "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -14998,21 +17741,13 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ohash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/ohash/-/ohash-1.1.3.tgz", - "integrity": "sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==", - "optional": true, - "peer": true - }, "node_modules/ol": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/ol/-/ol-7.5.2.tgz", - "integrity": "sha512-HJbb3CxXrksM6ct367LsP3N+uh+iBBMdP3DeGGipdV9YAYTP0vTJzqGnoqQ6C2IW4qf8krw9yuyQbc9fjOIaOQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/ol/-/ol-8.1.0.tgz", + "integrity": "sha512-cx3SH2plpFS9fM8pp1nCypgQXGJD7Mcb1E3mEySmy5XEw1DUEo+kkNzgtAZz5qupekqi7aU9iBJEjCoMfqvO2Q==", "dependencies": { "earcut": "^2.2.3", "geotiff": "^2.0.7", - "ol-mapbox-style": "^10.1.0", "pbf": "3.2.1", "rbush": "^3.0.1" }, @@ -15022,38 +17757,28 @@ } }, "node_modules/ol-contextmenu": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ol-contextmenu/-/ol-contextmenu-5.2.1.tgz", - "integrity": "sha512-By1ShS/BkzQjGoE3aBOzAc5CELSdymjqokwdBrGLC4C6UBmxD8pRVWGcqMZWfsNWNkk4bYYy/osNfFr3DOScVQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ol-contextmenu/-/ol-contextmenu-5.3.0.tgz", + "integrity": "sha512-AO9rGKaQpLAzqpEva7mukhkWrGkL/o1s8tXPsYuYBGMoiTBbXffgTikXjTmq1m7l3gDwXWWWi6R2ROda5lgXNw==", "dependencies": { "tiny-emitter": "^2.1.0" }, "engines": { - "node": "^16 || ^18", + "node": ">=16", "npm": ">=8" }, "peerDependencies": { - "ol": "^7.1.0" + "ol": "> 7.x <= 8.x" } }, "node_modules/ol-ext": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/ol-ext/-/ol-ext-4.0.8.tgz", - "integrity": "sha512-O0q4HmvrB+r0VOC3SAp9jEYSFN6Z3j1kSxRZxPK3VadArWjF27PXF+TGHj7HidzBy84jEre5/vDSv8oJbECbyA==", + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/ol-ext/-/ol-ext-4.0.11.tgz", + "integrity": "sha512-zorUn71RsahiA/kbf+tRDbv19wqdLCclxd3gkjsFMnqCbdgl+P59CSJCqMO4O7b2bvaHrw5FEmep7FNFnGGQXg==", "peerDependencies": { "ol": ">= 5.3.0" } }, - "node_modules/ol-mapbox-style": { - "version": "10.7.0", - "resolved": "https://registry.npmjs.org/ol-mapbox-style/-/ol-mapbox-style-10.7.0.tgz", - "integrity": "sha512-S/UdYBuOjrotcR95Iq9AejGYbifKeZE85D9VtH11ryJLQPTZXZSW1J5bIXcr4AlAH6tyjPPHTK34AdkwB32Myw==", - "dependencies": { - "@mapbox/mapbox-gl-style-spec": "^13.23.1", - "mapbox-to-css-font": "^2.4.1", - "ol": "^7.3.0" - } - }, "node_modules/on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -15090,23 +17815,31 @@ } }, "node_modules/open": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", - "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "dev": true, "dependencies": { - "default-browser": "^4.0.0", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", "is-wsl": "^2.2.0" }, "engines": { - "node": ">=14.16" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true, + "bin": { + "opener": "bin/opener-bin.js" + } + }, "node_modules/openurl": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", @@ -15148,7 +17881,29 @@ "type-check": "^0.4.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", + "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "log-symbols": "^4.0.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ospath": { @@ -15173,15 +17928,25 @@ } }, "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dependencies": { - "p-limit": "^3.0.2" + "p-limit": "^2.2.0" }, "engines": { - "node": ">=10" + "node": ">=8" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -15232,18 +17997,27 @@ "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==" }, "node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "dev": true, + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dependencies": { + "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/parse-json/node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, "node_modules/parse5": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", @@ -15330,7 +18104,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==", - "devOptional": true + "dev": true }, "node_modules/pathval": { "version": "1.1.1", @@ -15368,13 +18142,6 @@ "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", "dev": true }, - "node_modules/perfect-debounce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", - "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", - "optional": true, - "peer": true - }, "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -15423,9 +18190,9 @@ "integrity": "sha512-qisFwio7j0cwYbOcRL4BlTdxKALcpGPTkpl8ichGASgkrVqfI3sZfQDsP8wETR5rfutXZJLjlJ117aLkRnk2mA==" }, "node_modules/pinia": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.1.6.tgz", - "integrity": "sha512-bIU6QuE5qZviMmct5XwCesXelb5VavdOWKWaB17ggk++NUwQWWbP5YnsONTk3b752QkW9sACiR81rorpeOMSvQ==", + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.1.7.tgz", + "integrity": "sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==", "dependencies": { "@vue/devtools-api": "^6.5.0", "vue-demi": ">=0.14.5" @@ -15455,6 +18222,31 @@ "pinia": "^2.0.0" } }, + "node_modules/pinia/node_modules/vue-demi": { + "version": "0.14.6", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", + "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, "node_modules/pirates": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", @@ -15467,7 +18259,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", - "devOptional": true, + "dev": true, "dependencies": { "jsonc-parser": "^3.2.0", "mlly": "^1.2.0", @@ -15503,6 +18295,38 @@ "resolved": "https://registry.npmjs.org/pofile/-/pofile-1.1.4.tgz", "integrity": "sha512-r6Q21sKsY1AjTVVjOuU02VYKVNQGJNQHjTIvs4dEbeuuYfxgYk/DGD2mqqq4RDaVkwdSq0VEtmQUOPe/wH8X3g==" }, + "node_modules/portfinder": { + "version": "1.0.32", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", + "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", + "dev": true, + "dependencies": { + "async": "^2.6.4", + "debug": "^3.2.7", + "mkdirp": "^0.5.6" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/portfinder/node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, "node_modules/portscanner": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz", @@ -15527,9 +18351,9 @@ } }, "node_modules/postcss": { - "version": "8.4.28", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.28.tgz", - "integrity": "sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==", + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", "funding": [ { "type": "opencollective", @@ -15569,16 +18393,6 @@ "postcss": "^8.0.0" } }, - "node_modules/postcss-import-resolver": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-import-resolver/-/postcss-import-resolver-2.0.0.tgz", - "integrity": "sha512-y001XYgGvVwgxyxw9J1a5kqM/vtmIQGzx34g0A0Oy44MFcy/ZboZw1hu/iN3VYFjSTRzbvd7zZJJz0Kh0AGkTw==", - "optional": true, - "peer": true, - "dependencies": { - "enhanced-resolve": "^4.1.1" - } - }, "node_modules/postcss-js": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", @@ -15625,6 +18439,14 @@ } } }, + "node_modules/postcss-load-config/node_modules/yaml": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.3.tgz", + "integrity": "sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==", + "engines": { + "node": ">= 14" + } + }, "node_modules/postcss-nested": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", @@ -15715,22 +18537,6 @@ "tar-stream": "^2.1.4" } }, - "node_modules/prebuild-install/node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -15780,9 +18586,9 @@ } }, "node_modules/pretty-format": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz", - "integrity": "sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { "@jest/schemas": "^29.6.3", @@ -15805,6 +18611,15 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -15814,20 +18629,13 @@ "node": ">= 0.6.0" } }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "optional": true, - "peer": true - }, "node_modules/proj4": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/proj4/-/proj4-2.9.0.tgz", - "integrity": "sha512-BoDXEzCVnRJVZoOKA0QHTFtYoE8lUxtX1jST38DJ8U+v1ixY70Kpwi0Llu6YqSWEH2xqu4XMEBNGcgeRIEywoA==", + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/proj4/-/proj4-2.9.1.tgz", + "integrity": "sha512-hhquvYHnqz8nf8U9CODRLGSL7bUg4p5oVkZI4oWxX7whNcSbn2xdNA1WnF1jye+ezrtuSiPVao9LEHlKeQA5uA==", "dependencies": { "mgrs": "1.0.0", - "wkt-parser": "^1.3.1" + "wkt-parser": "^1.3.3" } }, "node_modules/proto-list": { @@ -15865,17 +18673,9 @@ "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==" }, "node_modules/proxy-from-env": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", - "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", - "dev": true - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "optional": true, - "peer": true + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, "node_modules/ps-tree": { "version": "1.2.0", @@ -15922,6 +18722,22 @@ "node": ">=6" } }, + "node_modules/pure-rand": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", + "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, "node_modules/q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", @@ -15948,28 +18764,6 @@ "node": ">=10.13.0" } }, - "node_modules/qrcode/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/qrcode/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "engines": { - "node": ">=6" - } - }, "node_modules/qrcode/node_modules/cliui": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", @@ -15980,70 +18774,6 @@ "wrap-ansi": "^6.2.0" } }, - "node_modules/qrcode/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/qrcode/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/qrcode/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/qrcode/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/qrcode/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/qrcode/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/qrcode/node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -16096,9 +18826,9 @@ } }, "node_modules/qs": { - "version": "6.10.4", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", - "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", "dev": true, "dependencies": { "side-channel": "^1.0.4" @@ -16249,18 +18979,6 @@ "node": ">=0.10.0" } }, - "node_modules/rc9": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.1.tgz", - "integrity": "sha512-lNeOl38Ws0eNxpO3+wD1I9rkHGQyj1NU1jlzv4go2CtEnEQEUfqnIvZG7W+bC/aXdJ27n5x/yUjb6RoT9tko+Q==", - "optional": true, - "peer": true, - "dependencies": { - "defu": "^6.1.2", - "destr": "^2.0.0", - "flat": "^5.0.2" - } - }, "node_modules/react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", @@ -16341,9 +19059,9 @@ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", "dependencies": { "regenerate": "^1.4.2" }, @@ -16365,14 +19083,14 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", - "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" + "set-function-name": "^2.0.0" }, "engines": { "node": ">= 0.4" @@ -16459,9 +19177,9 @@ "integrity": "sha512-R/tCuvuOHQ8o2boRP6vgx8hXCCy87H1eY9V5imBYeVNyNVpuL9ciReSccLj2gDcax9+2weXy3bc8Vv+NRXeEvQ==" }, "node_modules/resolve": { - "version": "1.22.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", - "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -16475,11 +19193,12 @@ } }, "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/resolve-protobuf-schema": { @@ -16490,6 +19209,15 @@ "protocol-buffers-schema": "^3.3.1" } }, + "node_modules/resolve.exports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", + "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/resp-modifier": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz", @@ -16570,30 +19298,10 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/rollup": { - "version": "3.28.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.28.1.tgz", - "integrity": "sha512-R9OMQmIHJm9znrU3m3cpE8uhN0fGdXiawME7aZIpQqvpS/85+Vt1Hq1/yVIcYfOmaQiHjvXkQAoJukvLpau6Yw==", + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", "bin": { "rollup": "dist/bin/rollup" }, @@ -16692,11 +19400,6 @@ "queue-microtask": "^1.2.2" } }, - "node_modules/rw": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", - "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" - }, "node_modules/rx": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", @@ -16713,13 +19416,13 @@ } }, "node_modules/safe-array-concat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", - "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", + "get-intrinsic": "^1.2.1", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -16731,23 +19434,9 @@ } }, "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/safe-regex-test": { "version": "1.0.0", @@ -16770,9 +19459,9 @@ "dev": true }, "node_modules/sass": { - "version": "1.66.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.66.1.tgz", - "integrity": "sha512-50c+zTsZOJVgFfTgwwEzkjA3/QACgdNsKueWPyAR0mRINIvLAStVQBbPg14iuqEQ74NPDbXzJARJ/O4SI1zftA==", + "version": "1.69.4", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.4.tgz", + "integrity": "sha512-+qEreVhqAy8o++aQfCJwp0sklr2xyEzkm9Pp/Igu9wNPoe7EZEQ8X/MBvvXggI2ql607cxKg/RKOwDj6pp2XDA==", "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -16802,21 +19491,45 @@ "node": ">=v12.22.7" } }, - "node_modules/scule": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/scule/-/scule-1.0.0.tgz", - "integrity": "sha512-4AsO/FrViE/iDNEPaAQlb77tf0csuq27EsVpy6ett584EcRTp6pTDLoGWVxCD77y5iU5FauOvhsI4o1APwPoSQ==", - "optional": true, - "peer": true + "node_modules/secure-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz", + "integrity": "sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==", + "dev": true }, "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/send": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", @@ -16880,6 +19593,15 @@ "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", "dev": true }, + "node_modules/send/node_modules/mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true, + "bin": { + "mime": "cli.js" + } + }, "node_modules/send/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -17014,6 +19736,35 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, + "node_modules/set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -17021,9 +19772,9 @@ "dev": true }, "node_modules/sharp": { - "version": "0.32.5", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.5.tgz", - "integrity": "sha512-0dap3iysgDkNaPOaOL4X/0akdu0ma62GcdC2NBQ+93eqpePdDdr2/LM0sFdDSMmN7yS+odyZtPsb7tx/cYBKnQ==", + "version": "0.32.6", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz", + "integrity": "sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -17066,6 +19817,12 @@ "node": ">=10" } }, + "node_modules/sharp/node_modules/node-addon-api": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", + "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", + "dev": true + }, "node_modules/sharp/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", @@ -17239,39 +19996,6 @@ "node": ">=8" } }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/socket.io": { "version": "4.7.2", "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.2.tgz", @@ -17346,49 +20070,17 @@ "node": ">=10.0.0" } }, - "node_modules/sort-asc": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/sort-asc/-/sort-asc-0.1.0.tgz", - "integrity": "sha512-jBgdDd+rQ+HkZF2/OHCmace5dvpos/aWQpcxuyRs9QUbPRnkEJmYVo81PIGpjIdpOcsnJ4rGjStfDHsbn+UVyw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sort-desc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/sort-desc/-/sort-desc-0.1.1.tgz", - "integrity": "sha512-jfZacW5SKOP97BF5rX5kQfJmRVZP5/adDUTY8fCSPvNcXDVpUEe2pr/iKGlcyZzchRJZrswnp68fgk3qBXgkJw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sort-object": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/sort-object/-/sort-object-0.3.2.tgz", - "integrity": "sha512-aAQiEdqFTTdsvUFxXm3umdo04J7MRljoVGbBlkH7BgNsMvVNAJyGj7C/wV1A8wHWAJj/YikeZbfuCKqhggNWGA==", - "dependencies": { - "sort-asc": "^0.1.0", - "sort-desc": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/sortablejs": { "version": "1.14.0", "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.14.0.tgz", "integrity": "sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==" }, "node_modules/source-map": { - "version": "0.8.0-beta.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", - "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", - "dev": true, - "dependencies": { - "whatwg-url": "^7.0.0" - }, + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "engines": { - "node": ">= 8" + "node": ">=0.10.0" } }, "node_modules/source-map-js": { @@ -17400,48 +20092,15 @@ } }, "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map/node_modules/tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/source-map/node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "node_modules/source-map/node_modules/whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, - "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, "node_modules/sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", @@ -17481,9 +20140,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", + "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", "dev": true }, "node_modules/split": { @@ -17498,10 +20157,16 @@ "node": "*" } }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, "node_modules/sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", "dev": true, "dependencies": { "asn1": "~0.2.3", @@ -17523,6 +20188,27 @@ "node": ">=0.10.0" } }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/stackback": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", @@ -17539,9 +20225,9 @@ } }, "node_modules/start-server-and-test": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-2.0.0.tgz", - "integrity": "sha512-UqKLw0mJbfrsG1jcRLTUlvuRi9sjNuUiDOLI42r7R5fA9dsFoywAy9DoLXNYys9B886E4RCKb+qM1Gzu96h7DQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-2.0.1.tgz", + "integrity": "sha512-8PFo4DLLLCDMuS51/BEEtE1m9CAXw1LNVtZSS1PzkYQh6Qf9JUwM4huYeSoUumaaoAyuwYBwCa9OsrcpMqcOdQ==", "dev": true, "dependencies": { "arg": "^5.0.2", @@ -17559,9 +20245,15 @@ "start-test": "src/bin/start.js" }, "engines": { - "node": ">=6" + "node": ">=16" } }, + "node_modules/start-server-and-test/node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, "node_modules/start-server-and-test/node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -17619,7 +20311,7 @@ "version": "3.4.3", "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.4.3.tgz", "integrity": "sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q==", - "devOptional": true + "dev": true }, "node_modules/stream-combiner": { "version": "0.0.4", @@ -17662,13 +20354,46 @@ "queue-tick": "^1.0.1" } }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, "dependencies": { - "safe-buffer": "~5.2.0" + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" } }, "node_modules/string-width": { @@ -17685,18 +20410,19 @@ } }, "node_modules/string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", + "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", + "internal-slot": "^1.0.5", + "regexp.prototype.flags": "^1.5.0", + "set-function-name": "^2.0.0", "side-channel": "^1.0.4" }, "funding": { @@ -17704,14 +20430,14 @@ } }, "node_modules/string.prototype.padend": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.4.tgz", - "integrity": "sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.5.tgz", + "integrity": "sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" @@ -17721,14 +20447,14 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" @@ -17738,28 +20464,28 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -17791,12 +20517,12 @@ } }, "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/strip-comments": { @@ -17833,7 +20559,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.3.0.tgz", "integrity": "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==", - "devOptional": true, + "dev": true, "dependencies": { "acorn": "^8.10.0" }, @@ -17841,6 +20567,23 @@ "url": "https://github.com/sponsors/antfu" } }, + "node_modules/strong-log-transformer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", + "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", + "dev": true, + "dependencies": { + "duplexer": "^0.1.1", + "minimist": "^1.2.0", + "through": "^2.3.4" + }, + "bin": { + "sl-log-transformer": "bin/sl-log-transformer.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/sucrase": { "version": "3.34.0", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", @@ -17889,15 +20632,20 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/sucrase/node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/supports-preserve-symlinks-flag": { @@ -18047,32 +20795,46 @@ "tailwindcss": ">=3" } }, - "node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "optional": true, - "peer": true, + "node_modules/tailwindcss/node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, + "node_modules/tailwindcss/node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, "engines": { - "node": ">=6" + "node": ">=8.6.0" } }, - "node_modules/tar": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", - "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", - "optional": true, - "peer": true, + "node_modules/tailwindcss/node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=10" + "node": ">= 6" + } + }, + "node_modules/tailwindcss/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" } }, "node_modules/tar-fs": { @@ -18086,7 +20848,7 @@ "tar-stream": "^3.1.5" } }, - "node_modules/tar-stream": { + "node_modules/tar-fs/node_modules/tar-stream": { "version": "3.1.6", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz", "integrity": "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==", @@ -18097,36 +20859,22 @@ "streamx": "^2.15.0" } }, - "node_modules/tar/node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "optional": true, - "peer": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "optional": true, - "peer": true, - "bin": { - "mkdirp": "bin/cmd.js" + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" }, "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "optional": true, - "peer": true - }, "node_modules/temp-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", @@ -18167,9 +20915,9 @@ } }, "node_modules/terser": { - "version": "5.19.3", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.3.tgz", - "integrity": "sha512-pQzJ9UJzM0IgmT4FAtYI6+VqFf0lj/to58AV0Xfgg0Up37RyPG7Al+1cepC6/BVuAxR9oNb41/DL4DEoHJvTdg==", + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.22.0.tgz", + "integrity": "sha512-hHZVLgRA2z4NWcN6aS5rQDc+7Dcy58HOf2zbYwmFcQ+ua3h6eEFf5lIDKTzbWwlazPyOZsFQO8V80/IjVNExEw==", "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -18188,6 +20936,29 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, + "node_modules/terser/node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/text-segmentation": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz", @@ -18245,9 +21016,9 @@ "integrity": "sha512-knIN5zj4fl7kW4EBU5sLP20DWUvi/rVouvJezV0UAym2DkQaqm365Nyc8F3QEiOvunNDMxR8UhcXd1d5g+Wg1g==" }, "node_modules/tinybench": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.5.0.tgz", - "integrity": "sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.5.1.tgz", + "integrity": "sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==", "dev": true }, "node_modules/tinypool": { @@ -18260,9 +21031,9 @@ } }, "node_modules/tinyspy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.1.1.tgz", - "integrity": "sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.0.tgz", + "integrity": "sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==", "dev": true, "engines": { "node": ">=14.0.0" @@ -18292,6 +21063,12 @@ "node": ">=8.17.0" } }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, "node_modules/to-array": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", @@ -18380,6 +21157,72 @@ "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" }, + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "devOptional": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/tsconfig-paths": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "dev": true, + "dependencies": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", @@ -18543,9 +21386,9 @@ } }, "node_modules/ua-parser-js": { - "version": "1.0.35", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.35.tgz", - "integrity": "sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA==", + "version": "1.0.36", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.36.tgz", + "integrity": "sha512-znuyCIXzl8ciS3+y3fHJI/2OhQIXbXw9MWC/o3qwyR+RGppjZHrM27CGFSKCJXi2Kctiz537iOu2KnXs1lMQhw==", "dev": true, "funding": [ { @@ -18555,6 +21398,10 @@ { "type": "paypal", "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" } ], "engines": { @@ -18562,10 +21409,10 @@ } }, "node_modules/ufo": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.0.tgz", - "integrity": "sha512-bRn3CsoojyNStCZe0BG0Mt4Nr/4KF+rhFlnNXybgqt5pXHNFRlqinSoQaTrGyzE4X8aHplSb+TorH+COin9Yxw==", - "devOptional": true + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.1.tgz", + "integrity": "sha512-uY/99gMLIOlJPwATcMVYfqDSxUR9//AUcgZMzwfSTJPDKzA1S8mX4VLqa+fiAtveraQUBCz4FFcwVZBGbwBXIw==", + "dev": true }, "node_modules/unbox-primitive": { "version": "1.0.2", @@ -18583,50 +21430,20 @@ } }, "node_modules/unconfig": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/unconfig/-/unconfig-0.3.10.tgz", - "integrity": "sha512-tj317lhIq2iZF/NXrJnU1t2UaGUKKz1eL1sK2t63Oq66V9BxqvZV12m55fp/fpQJ+DDmVlLgo7cnLVOZkhlO/A==", + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/unconfig/-/unconfig-0.3.11.tgz", + "integrity": "sha512-bV/nqePAKv71v3HdVUn6UefbsDKQWRX+bJIkiSm0+twIds6WiD2bJLWWT3i214+J/B4edufZpG2w7Y63Vbwxow==", "dev": true, "dependencies": { - "@antfu/utils": "^0.7.5", + "@antfu/utils": "^0.7.6", "defu": "^6.1.2", - "jiti": "^1.19.1", - "mlly": "^1.4.0" + "jiti": "^1.20.0", + "mlly": "^1.4.2" }, "funding": { "url": "https://github.com/sponsors/antfu" } }, - "node_modules/unctx": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/unctx/-/unctx-2.3.1.tgz", - "integrity": "sha512-PhKke8ZYauiqh3FEMVNm7ljvzQiph0Mt3GBRve03IJm7ukfaON2OBK795tLwhbyfzknuRRkW0+Ze+CQUmzOZ+A==", - "optional": true, - "peer": true, - "dependencies": { - "acorn": "^8.8.2", - "estree-walker": "^3.0.3", - "magic-string": "^0.30.0", - "unplugin": "^1.3.1" - } - }, - "node_modules/unctx/node_modules/@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", - "optional": true, - "peer": true - }, - "node_modules/unctx/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "optional": true, - "peer": true, - "dependencies": { - "@types/estree": "^1.0.0" - } - }, "node_modules/unfetch": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", @@ -18662,73 +21479,22 @@ }, "node_modules/unicode-property-aliases-ecmascript": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unimport": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/unimport/-/unimport-3.3.0.tgz", - "integrity": "sha512-3jhq3ZG5hFZzrWGDCpx83kjPzefP/EeuKkIO1T0MA4Zwj+dO/Og1mFvZ4aZ5WSDm0FVbbdVIRH1zKBG7c4wOpg==", - "optional": true, - "peer": true, - "dependencies": { - "@rollup/pluginutils": "^5.0.4", - "escape-string-regexp": "^5.0.0", - "fast-glob": "^3.3.1", - "local-pkg": "^0.4.3", - "magic-string": "^0.30.3", - "mlly": "^1.4.1", - "pathe": "^1.1.1", - "pkg-types": "^1.0.3", - "scule": "^1.0.0", - "strip-literal": "^1.3.0", - "unplugin": "^1.4.0" - } - }, - "node_modules/unimport/node_modules/@rollup/pluginutils": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.4.tgz", - "integrity": "sha512-0KJnIoRI8A+a1dqOYLxH8vBf8bphDmty5QvIm2hqm7oFCFYKCAZWWd2hXgMibaPsNDhI0AtpYfQZJG47pt/k4g==", - "optional": true, - "peer": true, - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/unimport/node_modules/@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", - "optional": true, - "peer": true - }, - "node_modules/unimport/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "optional": true, - "peer": true, + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "engines": { - "node": ">=12" + "node": ">=4" + } + }, + "node_modules/union": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz", + "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==", + "dev": true, + "dependencies": { + "qs": "^6.4.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 0.8.0" } }, "node_modules/unique-string": { @@ -18744,9 +21510,9 @@ } }, "node_modules/universal-cookie": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/universal-cookie/-/universal-cookie-6.1.0.tgz", - "integrity": "sha512-QBpQWkFJyH9D6nP1ZjPuLDdrgYr3y9ti8OTWf6uWcZwtY06de5f10GPYv3v68LIYWU0a9J2ZF5xFR5gOdD5ZaQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/universal-cookie/-/universal-cookie-6.1.1.tgz", + "integrity": "sha512-33S9x3CpdUnnjwTNs2Fgc41WGve2tdLtvaK2kPSbZRc5pGpz2vQFbRWMxlATsxNNe/Cy8SzmnmbuBM85jpZPtA==", "dependencies": { "@types/cookie": "^0.5.1", "cookie": "^0.5.0" @@ -18770,19 +21536,6 @@ "node": ">= 0.8" } }, - "node_modules/unplugin": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.4.0.tgz", - "integrity": "sha512-5x4eIEL6WgbzqGtF9UV8VEC/ehKptPXDS6L2b0mv4FRMkJxRtjaJfOWDd6a8+kYbqsjklix7yWP0N3SUepjXcg==", - "optional": true, - "peer": true, - "dependencies": { - "acorn": "^8.9.0", - "chokidar": "^3.5.3", - "webpack-sources": "^3.2.3", - "webpack-virtual-modules": "^0.5.0" - } - }, "node_modules/untildify": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", @@ -18792,25 +21545,6 @@ "node": ">=8" } }, - "node_modules/untyped": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/untyped/-/untyped-1.4.0.tgz", - "integrity": "sha512-Egkr/s4zcMTEuulcIb7dgURS6QpN7DyqQYdf+jBtiaJvQ+eRsrtWUoX84SbvQWuLkXsOjM+8sJC9u6KoMK/U7Q==", - "optional": true, - "peer": true, - "dependencies": { - "@babel/core": "^7.22.9", - "@babel/standalone": "^7.22.9", - "@babel/types": "^7.22.5", - "defu": "^6.1.2", - "jiti": "^1.19.1", - "mri": "^1.2.0", - "scule": "^1.0.0" - }, - "bin": { - "untyped": "dist/cli.mjs" - } - }, "node_modules/upath": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", @@ -18822,9 +21556,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "funding": [ { "type": "opencollective", @@ -18859,6 +21593,12 @@ "punycode": "^2.1.0" } }, + "node_modules/url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", + "dev": true + }, "node_modules/url-parse": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", @@ -18892,15 +21632,6 @@ "base64-arraybuffer": "^1.0.2" } }, - "node_modules/utrie/node_modules/base64-arraybuffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", - "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", - "optional": true, - "engines": { - "node": ">= 0.6.0" - } - }, "node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", @@ -18911,15 +21642,15 @@ } }, "node_modules/v-calendar": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/v-calendar/-/v-calendar-3.0.3.tgz", - "integrity": "sha512-Skpp/nMoFqFadm94aWj0oOfazoux5T5Ug3/pbRbdolkoDrnVcL7Ronw1/SGFRUPGOwnLdYwhKPhrhSE1segW6w==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/v-calendar/-/v-calendar-3.1.2.tgz", + "integrity": "sha512-QDWrnp4PWCpzUblctgo4T558PrHgHzDtQnTeUNzKxfNf29FkCeFpwGd9bKjAqktaa2aJLcyRl45T5ln1ku34kg==", "optional": true, "dependencies": { "@types/lodash": "^4.14.165", "@types/resize-observer-browser": "^0.1.7", "date-fns": "^2.16.1", - "date-fns-tz": "^1.0.12", + "date-fns-tz": "^2.0.0", "lodash": "^4.17.20", "vue-screen-utils": "^1.0.0-beta.13" }, @@ -18944,6 +21675,32 @@ "vue": "^3.2.47" } }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "devOptional": true + }, + "node_modules/v8-to-istanbul": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz", + "integrity": "sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -18954,6 +21711,18 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dev": true, + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -18978,9 +21747,9 @@ } }, "node_modules/vite": { - "version": "4.4.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz", - "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.0.tgz", + "integrity": "sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==", "dependencies": { "esbuild": "^0.18.10", "postcss": "^8.4.27", @@ -19032,9 +21801,9 @@ } }, "node_modules/vite-node": { - "version": "0.34.3", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.34.3.tgz", - "integrity": "sha512-+0TzJf1g0tYXj6tR2vEyiA42OPq68QkRZCu/ERSo2PtsDJfBpDyEfuKbRvLmZqi/CgC7SCBtyC+WjTGNMRIaig==", + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.34.6.tgz", + "integrity": "sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==", "dev": true, "dependencies": { "cac": "^6.7.14", @@ -19042,7 +21811,7 @@ "mlly": "^1.4.0", "pathe": "^1.1.1", "picocolors": "^1.0.0", - "vite": "^3.0.0 || ^4.0.0" + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0-0" }, "bin": { "vite-node": "vite-node.mjs" @@ -19112,14 +21881,14 @@ } }, "node_modules/vite-plugin-pwa": { - "version": "0.16.4", - "resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-0.16.4.tgz", - "integrity": "sha512-lmwHFIs9zI2H9bXJld/zVTbCqCQHZ9WrpyDMqosICDV0FVnCJwniX1NMDB79HGTIZzOQkY4gSZaVTJTw6maz/Q==", + "version": "0.16.5", + "resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-0.16.5.tgz", + "integrity": "sha512-Ahol4dwhMP2UHPQXkllSlXbihOaDFnvBIDPmAxoSZ1EObBUJGP4CMRyCyAVkIHjd6/H+//vH0DM2ON+XxHr81g==", "dev": true, "dependencies": { "debug": "^4.3.4", - "fast-glob": "^3.2.12", - "pretty-bytes": "^6.0.0", + "fast-glob": "^3.3.1", + "pretty-bytes": "^6.1.1", "workbox-build": "^7.0.0", "workbox-window": "^7.0.0" }, @@ -19135,6 +21904,22 @@ "workbox-window": "^7.0.0" } }, + "node_modules/vite-plugin-pwa/node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, "node_modules/vite-plugin-pwa/node_modules/pretty-bytes": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.1.tgz", @@ -19148,13 +21933,13 @@ } }, "node_modules/vite-plugin-ssr": { - "version": "0.4.140", - "resolved": "https://registry.npmjs.org/vite-plugin-ssr/-/vite-plugin-ssr-0.4.140.tgz", - "integrity": "sha512-UcUOszxAdf2Kau4VbVeNRZwVvINtrQIuI8NzuwXXW41nq2f2ej9T/+8uRF6ICUi99Y0HwiK1kZX0+Ox7oY17gg==", + "version": "0.4.142", + "resolved": "https://registry.npmjs.org/vite-plugin-ssr/-/vite-plugin-ssr-0.4.142.tgz", + "integrity": "sha512-ZDgpocnTEUmhYxGgMah8ZNK1Sfy5CFVcdXu+Ll3zRtGIPyWT5vYvASs2BLYEneqantHpde2b31Khzb0hxmP62w==", "dependencies": { "@brillout/import": "0.2.3", - "@brillout/json-serializer": "^0.5.4", - "@brillout/picocolors": "^1.0.7", + "@brillout/json-serializer": "^0.5.6", + "@brillout/picocolors": "^1.0.9", "@brillout/require-shim": "^0.1.2", "@brillout/vite-plugin-import-build": "^0.2.18", "acorn": "^8.8.2", @@ -19547,6 +22332,30 @@ "@esbuild/win32-x64": "0.17.19" } }, + "node_modules/vite-plugin-ssr/node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/vite-plugin-ssr/node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "node_modules/vite-svg-loader": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/vite-svg-loader/-/vite-svg-loader-4.0.0.tgz", @@ -19558,23 +22367,23 @@ } }, "node_modules/vitest": { - "version": "0.34.3", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.34.3.tgz", - "integrity": "sha512-7+VA5Iw4S3USYk+qwPxHl8plCMhA5rtfwMjgoQXMT7rO5ldWcdsdo3U1QD289JgglGK4WeOzgoLTsGFu6VISyQ==", + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.34.6.tgz", + "integrity": "sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==", "dev": true, "dependencies": { "@types/chai": "^4.3.5", "@types/chai-subset": "^1.3.3", "@types/node": "*", - "@vitest/expect": "0.34.3", - "@vitest/runner": "0.34.3", - "@vitest/snapshot": "0.34.3", - "@vitest/spy": "0.34.3", - "@vitest/utils": "0.34.3", + "@vitest/expect": "0.34.6", + "@vitest/runner": "0.34.6", + "@vitest/snapshot": "0.34.6", + "@vitest/spy": "0.34.6", + "@vitest/utils": "0.34.6", "acorn": "^8.9.0", "acorn-walk": "^8.2.0", "cac": "^6.7.14", - "chai": "^4.3.7", + "chai": "^4.3.10", "debug": "^4.3.4", "local-pkg": "^0.4.3", "magic-string": "^0.30.1", @@ -19584,8 +22393,8 @@ "strip-literal": "^1.0.1", "tinybench": "^2.5.0", "tinypool": "^0.7.0", - "vite": "^3.0.0 || ^4.0.0", - "vite-node": "0.34.3", + "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0", + "vite-node": "0.34.6", "why-is-node-running": "^2.2.2" }, "bin": { @@ -19634,6 +22443,20 @@ } } }, + "node_modules/vitest/node_modules/@vitest/utils": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.6.tgz", + "integrity": "sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==", + "dev": true, + "dependencies": { + "diff-sequences": "^29.4.3", + "loupe": "^2.3.6", + "pretty-format": "^29.5.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, "node_modules/vue": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz", @@ -19654,6 +22477,14 @@ "socket.io-client": "^2.1.1" } }, + "node_modules/vue-3-socket.io/node_modules/base64-arraybuffer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", + "integrity": "sha512-a1eIFi4R9ySrbiMuyTGx5e92uRH5tQY6kArNcFaKBUleIoLjdjBg7Zxm3Mqm3Kmkf27HLR/1fnxX9q8GQ7Iavg==", + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/vue-3-socket.io/node_modules/debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", @@ -19774,9 +22605,9 @@ } }, "node_modules/vue-collapsed": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/vue-collapsed/-/vue-collapsed-1.2.7.tgz", - "integrity": "sha512-N9sEPAkH04DZ3K8f2augLTaox/2qSwSvQivguzBjLVeQAXYKe/u1lfms+xNnwULtuxgaPo+Ufnb2WK9lav2CJQ==" + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/vue-collapsed/-/vue-collapsed-1.2.9.tgz", + "integrity": "sha512-Ie/+eAWCL57gH0LYDaYEYRqG6qAzEbJsoI8Z1hmJnOtwHbXhYJy5d05D3tb1sDcuPE19rHxgSOEExczNu3QhqA==" }, "node_modules/vue-component-type-helpers": { "version": "1.8.4", @@ -19795,35 +22626,10 @@ "vue": "^3.2.1" } }, - "node_modules/vue-demi": { - "version": "0.14.6", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", - "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", - "hasInstallScript": true, - "bin": { - "vue-demi-fix": "bin/vue-demi-fix.js", - "vue-demi-switch": "bin/vue-demi-switch.js" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@vue/composition-api": "^1.0.0-rc.1", - "vue": "^3.0.0-0 || ^2.6.0" - }, - "peerDependenciesMeta": { - "@vue/composition-api": { - "optional": true - } - } - }, "node_modules/vue-eslint-parser": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.3.1.tgz", - "integrity": "sha512-Clr85iD2XFZ3lJ52/ppmUDG/spxQu6+MAeHXjjyI4I1NUYZ9xmenQp4N0oaHJhrA8OOxltCVxMRfANGa70vU0g==", + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.3.2.tgz", + "integrity": "sha512-q7tWyCVaV9f8iQyIA5Mkj/S6AoJ9KBN8IeUSf3XEmBrOtxOZnfTg5s4KClbZBCK3GtnT/+RyCLZyDHuZwTuBjg==", "dev": true, "dependencies": { "debug": "^4.3.4", @@ -19860,48 +22666,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/vue-eslint-parser/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/vue-eslint-parser/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/vue-eslint-parser/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/vue-eslint-parser/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/vue-feather": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/vue-feather/-/vue-feather-2.0.0.tgz", @@ -19920,9 +22684,9 @@ } }, "node_modules/vue-router": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.2.4.tgz", - "integrity": "sha512-9PISkmaCO02OzPVOMq2w82ilty6+xJmQrarYZDkjZBfl4RvYAlt4PKnEX21oW4KTtWfa9OuO/b3qk1Od3AEdCQ==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.2.5.tgz", + "integrity": "sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==", "dependencies": { "@vue/devtools-api": "^6.5.0" }, @@ -19977,9 +22741,9 @@ "integrity": "sha512-pkZQuT3yxkRtB3QvrL2eF1h/F01JbJaI3eqdiM4CGZbsexLKJctYRolGHzK87c11moyx+aK8lwzeq8aPPoNOqA==" }, "node_modules/vue-ts-responsive-grid-layout": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/vue-ts-responsive-grid-layout/-/vue-ts-responsive-grid-layout-1.2.1.tgz", - "integrity": "sha512-ugh995mC35BJ+u//X9CcWvnkqxXF593Uevd0y6SYX8Z1DEZYU5cPgSTvqTvI9cFScKy2uHJCVRZ5cEug15MgHg==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/vue-ts-responsive-grid-layout/-/vue-ts-responsive-grid-layout-1.2.2.tgz", + "integrity": "sha512-fY19e4hYYr5/6ALVcahfS2sBLH/ki5p1LgVbG2lbkOojqOkdroPO2zrNZSwpKBK54DuWANuF1GGYVwFfPSVPXg==", "dependencies": { "@interactjs/actions": "^1.10.17", "@interactjs/auto-scroll": "^1.10.17", @@ -19991,191 +22755,25 @@ "mitt": "^3.0.0" }, "engines": { - "node": ">= 14.18.0" - }, - "funding": { - "type": "paypal", - "url": "https://paypal.me/gwinnem" - }, - "peerDependencies": { - "vue": "^3.0.0" - } - }, - "node_modules/vue-ts-responsive-grid-layout/node_modules/@interactjs/actions": { - "version": "1.10.18", - "resolved": "https://registry.npmjs.org/@interactjs/actions/-/actions-1.10.18.tgz", - "integrity": "sha512-3hsDg87HNZUNE2G3heshSdyrUu4yd2I3b4hb5yz3pLIqvHoPyqZSreOs1l5Rb5NfecS1SNwR0Gygoyy/F3qGZA==", - "optionalDependencies": { - "@interactjs/interact": "1.10.18" - }, - "peerDependencies": { - "@interactjs/core": "1.10.18", - "@interactjs/utils": "1.10.18" - } - }, - "node_modules/vue-ts-responsive-grid-layout/node_modules/@interactjs/auto-scroll": { - "version": "1.10.18", - "resolved": "https://registry.npmjs.org/@interactjs/auto-scroll/-/auto-scroll-1.10.18.tgz", - "integrity": "sha512-1rj8O/0cweCyuwlvULC6fF20uAKwsrWKlhOrWYbuRIl0+IJTJa/vpOuIUFUhppG+ELqkwp0u2vOCtMWfVUMqrA==", - "optionalDependencies": { - "@interactjs/interact": "1.10.18" - }, - "peerDependencies": { - "@interactjs/utils": "1.10.18" - } - }, - "node_modules/vue-ts-responsive-grid-layout/node_modules/@interactjs/auto-start": { - "version": "1.10.18", - "resolved": "https://registry.npmjs.org/@interactjs/auto-start/-/auto-start-1.10.18.tgz", - "integrity": "sha512-LNItRKgMI68P3JGFfwRulkhsDfCjN0AYguKehWNkTlmtzWHtHK4GRwr4rpHoCqSZJHM/GBZOZQSq/0g9d/Hzow==", - "optionalDependencies": { - "@interactjs/interact": "1.10.18" - }, - "peerDependencies": { - "@interactjs/core": "1.10.18", - "@interactjs/utils": "1.10.18" - } - }, - "node_modules/vue-ts-responsive-grid-layout/node_modules/@interactjs/core": { - "version": "1.10.18", - "resolved": "https://registry.npmjs.org/@interactjs/core/-/core-1.10.18.tgz", - "integrity": "sha512-shXHL+U5BMLtWMY84Bpo7OCMEueQdj0NgDGZDPzXMrmxriz1Ovn8fw2VmI18xFWryTbKJc2RwRDK/NJ6Vg+tNg==", - "peerDependencies": { - "@interactjs/utils": "1.10.18" - } - }, - "node_modules/vue-ts-responsive-grid-layout/node_modules/@interactjs/dev-tools": { - "version": "1.10.18", - "resolved": "https://registry.npmjs.org/@interactjs/dev-tools/-/dev-tools-1.10.18.tgz", - "integrity": "sha512-E/VcI8ZA9nwjUCsAyT5dNYmVYH3alCoRhgTmhuNyjMFUgwzw1owEkUSmnS8nzhsW30indlMvtFJVR/9+Onbp0A==", - "optionalDependencies": { - "@interactjs/interact": "1.10.18" - }, - "peerDependencies": { - "@interactjs/modifiers": "1.10.18", - "@interactjs/utils": "1.10.18" - } - }, - "node_modules/vue-ts-responsive-grid-layout/node_modules/@interactjs/inertia": { - "version": "1.10.18", - "resolved": "https://registry.npmjs.org/@interactjs/inertia/-/inertia-1.10.18.tgz", - "integrity": "sha512-68BNYAzRKK2LyhyLKwnX3hyRuVX9FYK4V8HcwGrztwP6fe3nkuUhjHeNRh1T7Lpt9n2P+UIvZZT86ZqYCa7Mew==", - "dependencies": { - "@interactjs/offset": "1.10.18" - }, - "optionalDependencies": { - "@interactjs/interact": "1.10.18" - }, - "peerDependencies": { - "@interactjs/core": "1.10.18", - "@interactjs/modifiers": "1.10.18", - "@interactjs/utils": "1.10.18" - } - }, - "node_modules/vue-ts-responsive-grid-layout/node_modules/@interactjs/interact": { - "version": "1.10.18", - "resolved": "https://registry.npmjs.org/@interactjs/interact/-/interact-1.10.18.tgz", - "integrity": "sha512-09H1uUK3Ly25+DZAuocYee5TET08LfwcvtFOkr+MvdWETjAED5ZVQwrD+LzyUpJ7pQ1WOFGk03nF/QmnPDO43w==", - "dependencies": { - "@interactjs/core": "1.10.18", - "@interactjs/utils": "1.10.18" - } - }, - "node_modules/vue-ts-responsive-grid-layout/node_modules/@interactjs/interactjs": { - "version": "1.10.18", - "resolved": "https://registry.npmjs.org/@interactjs/interactjs/-/interactjs-1.10.18.tgz", - "integrity": "sha512-0Kb6VL9kcum/YP0GjCy8lgQbfgs6KCBaz8AouMwUSN4Owx8D3YSOqxM4pHnYJbStufp4SkHcsspJy5nKGyk28Q==", - "dependencies": { - "@interactjs/actions": "1.10.18", - "@interactjs/auto-scroll": "1.10.18", - "@interactjs/auto-start": "1.10.18", - "@interactjs/core": "1.10.18", - "@interactjs/dev-tools": "1.10.18", - "@interactjs/inertia": "1.10.18", - "@interactjs/interact": "1.10.18", - "@interactjs/modifiers": "1.10.18", - "@interactjs/offset": "1.10.18", - "@interactjs/pointer-events": "1.10.18", - "@interactjs/reflow": "1.10.18", - "@interactjs/utils": "1.10.18" - } - }, - "node_modules/vue-ts-responsive-grid-layout/node_modules/@interactjs/modifiers": { - "version": "1.10.18", - "resolved": "https://registry.npmjs.org/@interactjs/modifiers/-/modifiers-1.10.18.tgz", - "integrity": "sha512-Ahf/cOfUrpbjSaLzDdOECEITeEZuvA9ImWfGSdZaFmuPP3wDEIaY+oLa1A26y79XxGBMKsbB/2wIrLePcLq3Pg==", - "dependencies": { - "@interactjs/snappers": "1.10.18" - }, - "optionalDependencies": { - "@interactjs/interact": "1.10.18" - }, - "peerDependencies": { - "@interactjs/core": "1.10.18", - "@interactjs/utils": "1.10.18" - } - }, - "node_modules/vue-ts-responsive-grid-layout/node_modules/@interactjs/offset": { - "version": "1.10.18", - "resolved": "https://registry.npmjs.org/@interactjs/offset/-/offset-1.10.18.tgz", - "integrity": "sha512-oM2JbGpwuV67HUBNOx6cb/5iXIE+NRUGkO694/9EhY7C3VnAHusZbFpEMo6IvzoPu0BWhMsss6apE3V6FHMMFQ==", - "optionalDependencies": { - "@interactjs/interact": "1.10.18" - }, - "peerDependencies": { - "@interactjs/core": "1.10.18", - "@interactjs/utils": "1.10.18" - } - }, - "node_modules/vue-ts-responsive-grid-layout/node_modules/@interactjs/pointer-events": { - "version": "1.10.18", - "resolved": "https://registry.npmjs.org/@interactjs/pointer-events/-/pointer-events-1.10.18.tgz", - "integrity": "sha512-QPRgNXP5rVuBqFFUxfj3S+ZQ9e5OWIgmhz6lS4+kezqcMoa1p1lZ3c5FIs+Enfn4TvEkUuxKT9cqmJP9oi6YOA==", - "optionalDependencies": { - "@interactjs/interact": "1.10.18" - }, - "peerDependencies": { - "@interactjs/core": "1.10.18", - "@interactjs/utils": "1.10.18" - } - }, - "node_modules/vue-ts-responsive-grid-layout/node_modules/@interactjs/reflow": { - "version": "1.10.18", - "resolved": "https://registry.npmjs.org/@interactjs/reflow/-/reflow-1.10.18.tgz", - "integrity": "sha512-1VpKaWmh5oSjSH6VYpUiFScwK9cX3cu7HvX0vguzI3NjtvvRNrU8cqhPdWr9AE8FQlBf3lQ9ptgVbU9oh/SQyw==", - "optionalDependencies": { - "@interactjs/interact": "1.10.18" + "node": ">= 14.18.0" }, - "peerDependencies": { - "@interactjs/core": "1.10.18", - "@interactjs/utils": "1.10.18" - } - }, - "node_modules/vue-ts-responsive-grid-layout/node_modules/@interactjs/snappers": { - "version": "1.10.18", - "resolved": "https://registry.npmjs.org/@interactjs/snappers/-/snappers-1.10.18.tgz", - "integrity": "sha512-FI6FkJCYrMgctZFX1A9YPC+GVaSJPKUsKgcs5lp+AShfhsuNXvXLAmfWV7JecO/GXfoNTbjmEWUqrKLTAyCYWw==", - "optionalDependencies": { - "@interactjs/interact": "1.10.18" + "funding": { + "type": "paypal", + "url": "https://paypal.me/gwinnem" }, "peerDependencies": { - "@interactjs/utils": "1.10.18" + "vue": "^3.0.0" } }, - "node_modules/vue-ts-responsive-grid-layout/node_modules/@interactjs/utils": { - "version": "1.10.18", - "resolved": "https://registry.npmjs.org/@interactjs/utils/-/utils-1.10.18.tgz", - "integrity": "sha512-nt+uQat9pbjzNeP8I2X7rjBmmuoNwMCgXb+5Vl6zHHlOzM3Y6RATwsciR65E1X8Q/OrKtH2G49C1Zy1RoGw3UQ==" - }, "node_modules/vue-tsc": { - "version": "1.8.8", - "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.8.8.tgz", - "integrity": "sha512-bSydNFQsF7AMvwWsRXD7cBIXaNs/KSjvzWLymq/UtKE36697sboX4EccSHFVxvgdBlI1frYPc/VMKJNB7DFeDQ==", + "version": "1.8.19", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.8.19.tgz", + "integrity": "sha512-tacMQLQ0CXAfbhRycCL5sWIy1qujXaIEtP1hIQpzHWOUuICbtTj9gJyFf91PvzG5KCNIkA5Eg7k2Fmgt28l5DQ==", "dev": true, "dependencies": { - "@vue/language-core": "1.8.8", - "@vue/typescript": "1.8.8", - "semver": "^7.3.8" + "@vue/language-core": "1.8.19", + "@vue/typescript": "1.8.19", + "semver": "^7.5.4" }, "bin": { "vue-tsc": "bin/vue-tsc.js" @@ -20244,137 +22842,31 @@ "vue": ">=3.0.0" } }, - "node_modules/vue3-gettext/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/vue3-gettext/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/vue3-gettext/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/vue3-gettext/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/vue3-gettext/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/vue3-gettext/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, "node_modules/vue3-gettext/node_modules/parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" }, - "node_modules/vue3-gettext/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/vue3-openlayers": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/vue3-openlayers/-/vue3-openlayers-2.0.0.tgz", - "integrity": "sha512-zOy0yuBeFdogiEN3PNQdiXXUkBOmxAvvOqjvLugpdxjBlcschtNw4xJXTP0bxfEqIArxChHGkxgvp7AjyH5mvA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/vue3-openlayers/-/vue3-openlayers-2.0.1.tgz", + "integrity": "sha512-I9p8cjBvj9yzpwKN43BZrdxOAF74e2v1DKh95ul6zU4BIY+P0X8tL5HKfUC91MHEMw2JuFZJ2yv9DxDfUQko9w==", "dependencies": { "file-saver": "^2.0.5", "jspdf": "^2.5.1", "ol": "^8.0.0", - "ol-contextmenu": "^5.2.1", + "ol-contextmenu": "^5.3.0", "ol-ext": "^4.0.11", "proj4": "^2.9.0", "vue": "^3.0.0" }, "peerDependencies": { "ol": "^8.0.0", - "ol-contextmenu": "^5.2.1", + "ol-contextmenu": "^5.3.0", "ol-ext": "^4.0.11", "vue": "^3.0.0" } }, - "node_modules/vue3-openlayers/node_modules/ol": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/ol/-/ol-8.1.0.tgz", - "integrity": "sha512-cx3SH2plpFS9fM8pp1nCypgQXGJD7Mcb1E3mEySmy5XEw1DUEo+kkNzgtAZz5qupekqi7aU9iBJEjCoMfqvO2Q==", - "dependencies": { - "earcut": "^2.2.3", - "geotiff": "^2.0.7", - "pbf": "3.2.1", - "rbush": "^3.0.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/openlayers" - } - }, - "node_modules/vue3-openlayers/node_modules/ol-ext": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/ol-ext/-/ol-ext-4.0.11.tgz", - "integrity": "sha512-zorUn71RsahiA/kbf+tRDbv19wqdLCclxd3gkjsFMnqCbdgl+P59CSJCqMO4O7b2bvaHrw5FEmep7FNFnGGQXg==", - "peerDependencies": { - "ol": ">= 5.3.0" - } - }, "node_modules/vue3-popper": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/vue3-popper/-/vue3-popper-1.5.0.tgz", @@ -20455,18 +22947,22 @@ "form-data": "^4.0.0" } }, - "node_modules/wait-on/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" + "makeerror": "1.0.12" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" } }, "node_modules/web-worker": { @@ -20483,23 +22979,6 @@ "node": ">=12" } }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "optional": true, - "peer": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack-virtual-modules": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz", - "integrity": "sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==", - "optional": true, - "peer": true - }, "node_modules/websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", @@ -20592,13 +23071,13 @@ "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" }, "node_modules/which-typed-array": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", "dev": true, "dependencies": { "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "call-bind": "^1.0.4", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-tostringtag": "^1.0.0" @@ -20788,6 +23267,12 @@ "rollup": "^1.20.0||^2.0.0" } }, + "node_modules/workbox-build/node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, "node_modules/workbox-build/node_modules/ajv": { "version": "8.12.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", @@ -20810,24 +23295,33 @@ "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", "dev": true }, - "node_modules/workbox-build/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/workbox-build/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": "*" + "node": ">=10" + } + }, + "node_modules/workbox-build/node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">= 10.13.0" } }, "node_modules/workbox-build/node_modules/json-schema-traverse": { @@ -20876,6 +23370,44 @@ "rollup": "^2.0.0" } }, + "node_modules/workbox-build/node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dev": true, + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/workbox-build/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/workbox-build/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "node_modules/workbox-build/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, "node_modules/workbox-cacheable-response": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-7.0.0.tgz", @@ -21016,45 +23548,28 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, "dependencies": { - "color-name": "~1.1.4" + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" }, "engines": { - "node": ">=7.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, "node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", + "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", "dev": true, "engines": { "node": ">=10.0.0" @@ -21121,9 +23636,9 @@ } }, "node_modules/xterm": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/xterm/-/xterm-5.2.1.tgz", - "integrity": "sha512-cs5Y1fFevgcdoh2hJROMVIWwoBHD80P1fIP79gopLHJIE4kTzzblanoivxTiQ4+92YM9IxS36H1q0MxIJXQBcA==" + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/xterm/-/xterm-5.3.0.tgz", + "integrity": "sha512-8QqjlekLUFTrU6x7xck1MsPzPA571K5zNqWm0M0oroYEWVOptZ0+ubQSkQ3uxIEhcIHRujJy6emDWX4A7qyFzg==" }, "node_modules/xterm-addon-fit": { "version": "0.7.0", @@ -21147,11 +23662,11 @@ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "node_modules/yaml": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", - "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "engines": { - "node": ">= 14" + "node": ">= 6" } }, "node_modules/yargs": { @@ -21194,6 +23709,15 @@ "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", "integrity": "sha512-8HFIh676uyGYP6wP13R/j6OJ/1HwJ46snpvzE7aHAN3Ryqh2yX6Xox2B4CUmTwwOIzlG3Bs7ocsP5dZH/R1Qbg==" }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "devOptional": true, + "engines": { + "node": ">=6" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/frontend/package.json b/package.json similarity index 84% rename from frontend/package.json rename to package.json index 9989aa9c2..0a92fa811 100644 --- a/frontend/package.json +++ b/package.json @@ -1,21 +1,11 @@ { - "name": "vite-project", + "name": "@wizarrrr/source", "version": "0.0.0", - "private": true, + "license": "MIT", "scripts": { - "dev": "vite", - "build": "run-p type-check build-only", - "preview": "vite preview", - "test:unit": "vitest", - "test:e2e": "start-server-and-test preview http://localhost:4173 'cypress run --e2e'", - "test:e2e:dev": "start-server-and-test 'vite dev --port 4173' http://localhost:4173 'cypress open --e2e'", - "build-only": "vite build", - "type-check": "vue-tsc --noEmit -p tsconfig.vitest.json --composite false", - "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore", - "format": "prettier --write src/", - "gettext:extract": "vue-gettext-extract", - "gettext:compile": "vue-gettext-compile" + "start:wizarr": "nx run-many --parallel --target=serve --projects=wizarr-frontend,wizarr-backend" }, + "private": true, "dependencies": { "@aacassandra/vue3-progressbar": "^1.0.3", "@flavorly/vanilla-components": "^0.7.63", @@ -68,9 +58,6 @@ "moment": "^2.29.4", "mount-vue-component": "^0.10.2", "nanoid": "^4.0.2", - "ol": "^7.5.2", - "ol-contextmenu": "^5.2.1", - "ol-ext": "^4.0.8", "ping.js": "^0.3.0", "pinia": "^2.1.6", "pinia-plugin-persistedstate": "^3.2.0", @@ -91,6 +78,7 @@ "vue-toastification": "^2.0.0-rc.5", "vue-top-progress": "^0.7.0", "vue-ts-responsive-grid-layout": "^1.2.1", + "vue-tsc": "^1.8.8", "vue3-gettext": "^3.0.0-beta.1", "vue3-openlayers": "^2.0.0", "vue3-popper": "^1.5.0", @@ -100,16 +88,30 @@ "xterm-addon-fit": "^0.7.0" }, "devDependencies": { + "@nx/cypress": "17.0.0", + "@nx/eslint": "17.0.0", + "@nx/eslint-plugin": "17.0.0", + "@nx/js": "17.0.0", + "@nx/vite": "17.0.0", + "@nx/vue": "17.0.0", + "@nx/workspace": "17.0.0", + "@nxlv/python": "^16.1.4", "@rushstack/eslint-patch": "^1.3.2", "@stripe/stripe-js": "^2.1.6", + "@swc-node/register": "~1.6.7", + "@swc/core": "~1.3.85", "@tsconfig/node18": "^18.2.0", "@types/js-cookie": "^3.0.3", "@types/jsdom": "^21.1.1", "@types/node": "^18.17.5", "@types/qrcode": "^1.5.2", + "@typescript-eslint/eslint-plugin": "^5.60.1", + "@typescript-eslint/parser": "^5.60.1", "@vite-pwa/assets-generator": "^0.0.9", "@vitejs/plugin-vue": "^4.3.1", "@vitejs/plugin-vue-jsx": "^3.0.2", + "@vitest/coverage-c8": "~0.32.0", + "@vitest/ui": "~0.32.0", "@vue/eslint-config-prettier": "^8.0.0", "@vue/eslint-config-typescript": "^11.0.3", "@vue/test-utils": "^2.4.1", @@ -122,6 +124,7 @@ "eslint-plugin-vue": "^9.17.0", "jsdom": "^22.1.0", "npm-run-all": "^4.1.5", + "nx": "17.0.0", "postcss": "^8.4.28", "prettier": "3.0.2", "sass": "^1.66.1", @@ -141,4 +144,4 @@ "vue-stripe-js": "^1.0.1", "vue-tsc": "^1.8.8" } -} +} \ No newline at end of file diff --git a/tsconfig.base.json b/tsconfig.base.json new file mode 100644 index 000000000..d2fb473e4 --- /dev/null +++ b/tsconfig.base.json @@ -0,0 +1,20 @@ +{ + "compileOnSave": false, + "compilerOptions": { + "rootDir": ".", + "sourceMap": true, + "declaration": false, + "moduleResolution": "node", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "importHelpers": true, + "target": "es2015", + "module": "esnext", + "lib": ["es2020", "dom"], + "skipLibCheck": true, + "skipDefaultLibCheck": true, + "baseUrl": ".", + "paths": {} + }, + "exclude": ["node_modules", "tmp"] +} diff --git a/unraid.xml b/unraid.xml deleted file mode 100644 index b26cb5076..000000000 --- a/unraid.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - Wizarr V3 Vue Beta - ghcr.io/wizarrrr/wizarr - https://github.com/wizarrrr/wizarr/pkgs/container/wizarr - https://github.com/Wizarrrr/wizarr/blob/master/unraid.xml - bridge - false - bash - https://github.com/Wizarrrr/wizarr/discussions - https://github.com/wizarrrr/wizarr - The official Wizarr Container. Wizarr is a automatic user invitation system for Plex. Create a unique link and share it to a user and they will automatically be invited to your Plex Server! - MediaServer:Other - http://[IP]:[PORT:5690]/ - https://github.com/Wizarrrr/wizarr/raw/master/screenshots/wizard.png - --restart unless-stopped - - bridge - - - 5690 - 5690 - tcp - - - - - - /mnt/user/appdata/wizarr - /data/database - rw - - - - - - - diff --git a/wizarr.code-workspace b/wizarr.code-workspace index bc2d73f70..ef9f5d275 100644 --- a/wizarr.code-workspace +++ b/wizarr.code-workspace @@ -1,33 +1,7 @@ { "folders": [ - { - "name": "Frontend", - "path": "frontend" - }, - { - "name": "Documentation", - "path": "docs" - }, - { - "name": "Backend", - "path": "backend" - }, - { - "name": "Other", - "path": "./" - } - ], - "launch": { - "version": "0.2.0", - "compounds": [ { - "name": "Run All", - "configurations": [ - "Run Backend: dev", - "Run Frontend: dev" - ] + "path": "." } - ] - }, - "settings": {} - } \ No newline at end of file + ] +} \ No newline at end of file diff --git a/workspace.code-workspace b/workspace.code-workspace new file mode 100644 index 000000000..56af51bf6 --- /dev/null +++ b/workspace.code-workspace @@ -0,0 +1,16 @@ +{ + "folders": [ + { + "name": "Wizarr Monorepo", + "path": "./" + }, + { + "name": "Wizarr [Frontend]", + "path": "./apps/wizarr" + }, + { + "name": "Wizarr [Backend]", + "path": "./apps/wizarr-backend" + } + ] +} \ No newline at end of file From cc77a43f2db96342262ba0aeef400a816137046d Mon Sep 17 00:00:00 2001 From: Ashley Date: Sat, 21 Oct 2023 19:05:29 +0100 Subject: [PATCH 35/48] update --- .github/workflows/beta-ci.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/beta-ci.yml b/.github/workflows/beta-ci.yml index 0ddaa57ec..05cade054 100644 --- a/.github/workflows/beta-ci.yml +++ b/.github/workflows/beta-ci.yml @@ -3,7 +3,7 @@ name: Docker Build and Push Beta on: push: branches: - - 'v3-beta' + - 'v3-mono' paths-ignore: - '**.md' - '**/.github/**' @@ -17,7 +17,7 @@ env: GHCR_REGISTRY: ghcr.io DH_REGISTRY: docker.io IMAGE_NAME: wizarrrr/wizarr - IMAGE_TAG: v3-beta + IMAGE_TAG: v3-mono concurrency: group: ${{ github.ref }} @@ -77,7 +77,7 @@ jobs: uses: docker/build-push-action@v5 with: context: . - dockerfile: ./dockerfiles/wizarr/Dockerfile + file: ./dockerfiles/wizarr/Dockerfile push: true platforms: ${{ matrix.platform }} labels: ${{ steps.meta.outputs.labels }} @@ -198,7 +198,7 @@ jobs: uses: docker/build-push-action@v5 with: context: . - dockerfile: ./dockerfiles/wizarr/Dockerfile + file: ./dockerfiles/wizarr/Dockerfile push: true platforms: ${{ matrix.platform }} labels: ${{ steps.meta.outputs.labels }} From d6b6b8ebbe65476643c59f746eb9146ab7fedef6 Mon Sep 17 00:00:00 2001 From: Ashley Date: Sat, 21 Oct 2023 21:39:59 +0100 Subject: [PATCH 36/48] Refactor YAML and Nginx config files - Change the runs-on value in beta-ci.yml to "self-hosted" in two jobs - Update the root directory in nginx-main.conf from "/data/frontend" to "/wizarr/frontend" --- .github/workflows/beta-ci.yml | 4 ++-- files/nginx-main.conf | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/beta-ci.yml b/.github/workflows/beta-ci.yml index 05cade054..73ad0d720 100644 --- a/.github/workflows/beta-ci.yml +++ b/.github/workflows/beta-ci.yml @@ -37,7 +37,7 @@ jobs: build_ghcr: name: Build Digest for GHCR - runs-on: ubuntu-latest + runs-on: self-hosted needs: - before_build strategy: @@ -158,7 +158,7 @@ jobs: build_dh: name: Build Digest for Docker Hub - runs-on: ubuntu-latest + runs-on: self-hosted needs: - before_build strategy: diff --git a/files/nginx-main.conf b/files/nginx-main.conf index 2b7cdeea0..6a72d5372 100644 --- a/files/nginx-main.conf +++ b/files/nginx-main.conf @@ -3,7 +3,7 @@ log_format main '"$request" $status $body_bytes_sent "$http_referer"'; server { listen 5690; - root /data/frontend; + root /wizarr/frontend; index index.html; location / { From 7488f413e4807eec8eb8e7d0330200d2fbbd1d9c Mon Sep 17 00:00:00 2001 From: Ashley Date: Sat, 21 Oct 2023 22:37:32 +0100 Subject: [PATCH 37/48] feat: Update GitHub Actions workflow and app configuration - Change runs-on value for build_ghcr and build_dh jobs in the beta-ci.yml GitHub Actions workflow from "self-hosted" to "ubuntu-latest" for consistency and reliability. - Update the session file and upload folder paths in the app configuration file to use the definitions from the definitions module for better maintainability. - Update the path to the latest file in the get_current_version function in the migrator module to use the LATEST_FILE definition for clarity and simplicity. - Update the path to the latest file in the get_current_version function in the software_lifecycle module to use the LATEST_FILE definition for consistency and readability. - Add new definitions to the definitions module for ROOT_DIR, LATEST_FILE, and DATABASE_DIR to improve configuration flexibility in different environments. - Update the environment variable names in the Dockerfile for wizarr-backend and wizarr to use DATABASE_DIR and LATEST_FILE for consistency with the definitions module. - Add a new environment variable LATEST_FILE to the Dockerfile for wizarr-frontend for consistency with the other Dockerfiles. --- .github/workflows/beta-ci.yml | 4 ++-- apps/wizarr-backend/wizarr_backend/app/config.py | 11 ++++------- .../wizarr_backend/app/migrator/__init__.py | 7 ++----- .../wizarr_backend/app/utils/software_lifecycle.py | 5 ++--- apps/wizarr-backend/wizarr_backend/definitions.py | 6 ++++-- dockerfiles/wizarr-backend/Dockerfile | 3 ++- dockerfiles/wizarr-frontend/Dockerfile | 3 +++ dockerfiles/wizarr/Dockerfile | 3 ++- 8 files changed, 21 insertions(+), 21 deletions(-) diff --git a/.github/workflows/beta-ci.yml b/.github/workflows/beta-ci.yml index 73ad0d720..05cade054 100644 --- a/.github/workflows/beta-ci.yml +++ b/.github/workflows/beta-ci.yml @@ -37,7 +37,7 @@ jobs: build_ghcr: name: Build Digest for GHCR - runs-on: self-hosted + runs-on: ubuntu-latest needs: - before_build strategy: @@ -158,7 +158,7 @@ jobs: build_dh: name: Build Digest for Docker Hub - runs-on: self-hosted + runs-on: ubuntu-latest needs: - before_build strategy: diff --git a/apps/wizarr-backend/wizarr_backend/app/config.py b/apps/wizarr-backend/wizarr_backend/app/config.py index fd5c863c0..c6386304d 100644 --- a/apps/wizarr-backend/wizarr_backend/app/config.py +++ b/apps/wizarr-backend/wizarr_backend/app/config.py @@ -1,18 +1,15 @@ from datetime import timedelta -from os import environ, getenv, path - +from os import environ, path from flask import Flask - from app.security import secret_key, SchedulerAuth +from definitions import DATABASE_DIR def create_config(app: Flask): config = {} - base_dir = path.abspath(path.join(path.dirname(__file__), "../")) - config["SESSION_TYPE"] = "filesystem" - config["SESSION_FILE_DIR"] = path.join(base_dir, "../", "database", "sessions") + config["SESSION_FILE_DIR"] = path.join(DATABASE_DIR, "sessions") config["PERMANENT_SESSION_LIFETIME"] = timedelta(hours=5) - config["UPLOAD_FOLDER"] = path.join(base_dir, "../", "database", "uploads") + config["UPLOAD_FOLDER"] = path.join(DATABASE_DIR, "uploads") config["SWAGGER_UI_DOC_EXPANSION"] = "list" config["SERVER_NAME"] = "127.0.0.1:5000" config["APPLICATION_ROOT"] = "/" diff --git a/apps/wizarr-backend/wizarr_backend/app/migrator/__init__.py b/apps/wizarr-backend/wizarr_backend/app/migrator/__init__.py index 4f8ca5be0..69e8c3ecb 100644 --- a/apps/wizarr-backend/wizarr_backend/app/migrator/__init__.py +++ b/apps/wizarr-backend/wizarr_backend/app/migrator/__init__.py @@ -5,14 +5,11 @@ from packaging.version import parse from datetime import datetime, timedelta -from definitions import ROOT_DIR +from definitions import LATEST_FILE def get_current_version(): - # File path to the version file - version_file = path.abspath(path.join(ROOT_DIR, "../", "../", "latest")) - # Read the current version - with open(version_file, "r") as f: + with open(LATEST_FILE, "r") as f: current_version = parse(f.read()) return current_version diff --git a/apps/wizarr-backend/wizarr_backend/app/utils/software_lifecycle.py b/apps/wizarr-backend/wizarr_backend/app/utils/software_lifecycle.py index 6a55a8849..0d9e53138 100644 --- a/apps/wizarr-backend/wizarr_backend/app/utils/software_lifecycle.py +++ b/apps/wizarr-backend/wizarr_backend/app/utils/software_lifecycle.py @@ -5,7 +5,7 @@ from json import load from app.models.database.base import db_dir -from definitions import ROOT_DIR +from definitions import LATEST_FILE session = CachedSession(cache_name=path.join(db_dir, "wizarr_cache"), backend="sqlite", expire_after=3600, cache_control=True, stale_if_error=True, allowable_codes=[200]) @@ -35,8 +35,7 @@ def get_latest_beta_version(): return None def get_current_version(): - package = path.abspath(path.join(ROOT_DIR, "../", "../", "latest")) - with open(package, "r", encoding="utf-8") as f: + with open(LATEST_FILE, "r", encoding="utf-8") as f: return parse(f.read()) diff --git a/apps/wizarr-backend/wizarr_backend/definitions.py b/apps/wizarr-backend/wizarr_backend/definitions.py index 8f1f0f11d..0c150f55f 100644 --- a/apps/wizarr-backend/wizarr_backend/definitions.py +++ b/apps/wizarr-backend/wizarr_backend/definitions.py @@ -1,3 +1,5 @@ -from os import path, environ +from os import path, getenv -ROOT_DIR = path.dirname(path.join(path.abspath(__file__), "../", "../")) +ROOT_DIR = getenv("ROOT_DIR", path.abspath(path.join(path.abspath(__file__), "../"))) +LATEST_FILE = getenv("LATEST_FILE", path.join(ROOT_DIR, "../", "../", "../", "latest")) +DATABASE_DIR = getenv("DATABASE_DIR", path.join(ROOT_DIR, "../", "database")) diff --git a/dockerfiles/wizarr-backend/Dockerfile b/dockerfiles/wizarr-backend/Dockerfile index b5c0bc85f..184f76582 100644 --- a/dockerfiles/wizarr-backend/Dockerfile +++ b/dockerfiles/wizarr-backend/Dockerfile @@ -70,7 +70,8 @@ RUN chmod +x /root/.bashrc COPY ../../latest / # Environment Variables -ENV DB_DIR=/data/database +ENV DATABASE_DIR=/data/database +ENV LATEST_FILE=/latest # Set Entrypoint ENTRYPOINT ["/docker-entrypoint.sh"] diff --git a/dockerfiles/wizarr-frontend/Dockerfile b/dockerfiles/wizarr-frontend/Dockerfile index fd2b2479c..00786e108 100644 --- a/dockerfiles/wizarr-frontend/Dockerfile +++ b/dockerfiles/wizarr-frontend/Dockerfile @@ -46,5 +46,8 @@ RUN chmod +x /root/.bashrc # Copy latest file COPY ../../latest / +# Environment Variables +ENV LATEST_FILE=/latest + # Set Entrypoint ENTRYPOINT ["/docker-entrypoint.sh"] \ No newline at end of file diff --git a/dockerfiles/wizarr/Dockerfile b/dockerfiles/wizarr/Dockerfile index 40717d259..e9b1688f0 100644 --- a/dockerfiles/wizarr/Dockerfile +++ b/dockerfiles/wizarr/Dockerfile @@ -74,7 +74,8 @@ RUN chmod +x /root/.bashrc COPY ../../latest / # Environment Variables -ENV DB_DIR=/data/database +ENV DATABASE_DIR=/data/database +ENV LATEST_FILE=/latest # Set Entrypoint ENTRYPOINT ["/docker-entrypoint.sh"] From 9447049b75a8773fb21b630accfb507ea20f7f52 Mon Sep 17 00:00:00 2001 From: Ashley Date: Sat, 21 Oct 2023 22:40:50 +0100 Subject: [PATCH 38/48] Refactored database file path handling and backup location. - Replace environment variable check with a direct import from the definitions file. - Update the database file path in the `db_file` variable. - Update the backup location in the `backup_location` variable. - Improvements made to code readability and maintainability. --- .../wizarr_backend/app/models/database/base.py | 12 +++--------- .../wizarr_backend/app/utils/backup.py | 5 +++-- .../wizarr_backend/app/utils/software_lifecycle.py | 6 ++---- 3 files changed, 8 insertions(+), 15 deletions(-) diff --git a/apps/wizarr-backend/wizarr_backend/app/models/database/base.py b/apps/wizarr-backend/wizarr_backend/app/models/database/base.py index e0b2f9c9a..4c82d984b 100644 --- a/apps/wizarr-backend/wizarr_backend/app/models/database/base.py +++ b/apps/wizarr-backend/wizarr_backend/app/models/database/base.py @@ -1,14 +1,8 @@ from peewee import Model, SqliteDatabase -from os import path, environ - -current_dir = path.dirname(path.realpath(__file__)) -base_dir = path.abspath(path.join(current_dir, "../", "../", "../", "../")) - -db_dir = environ["DB_DIR"] or path.join(base_dir, "database") -db_file = path.join(db_dir, "database.db") - -print(db_file) +from os import path +from definitions import DATABASE_DIR +db_file = path.join(DATABASE_DIR, "database.db") db = SqliteDatabase(db_file) class BaseModel(Model): diff --git a/apps/wizarr-backend/wizarr_backend/app/utils/backup.py b/apps/wizarr-backend/wizarr_backend/app/utils/backup.py index 418a69113..e0b870379 100644 --- a/apps/wizarr-backend/wizarr_backend/app/utils/backup.py +++ b/apps/wizarr-backend/wizarr_backend/app/utils/backup.py @@ -1,9 +1,10 @@ -from app.models.database.base import db, db_file, db_dir +from app.models.database.base import db, db_file from cryptography.fernet import Fernet from base64 import urlsafe_b64encode from json import dumps, loads from datetime import datetime from os import system, path +from definitions import DATABASE_DIR def backup_database(): # Backup dictionary @@ -37,7 +38,7 @@ def backup_database(): def restore_database(backup: dict): # Create a backup of the database file before restoring backup_filename = datetime.now().strftime("%Y-%m-%d_%H-%M-%S") - backup_location = path.join(db_dir, "backups") + backup_location = path.join(DATABASE_DIR, "backups") system(f"cp {db_file} {path.join(backup_location, backup_filename)}") # Loop through all tables in the backup dictionary and restore them diff --git a/apps/wizarr-backend/wizarr_backend/app/utils/software_lifecycle.py b/apps/wizarr-backend/wizarr_backend/app/utils/software_lifecycle.py index 0d9e53138..bae9d25f1 100644 --- a/apps/wizarr-backend/wizarr_backend/app/utils/software_lifecycle.py +++ b/apps/wizarr-backend/wizarr_backend/app/utils/software_lifecycle.py @@ -3,11 +3,9 @@ from packaging.version import parse from os import path from json import load -from app.models.database.base import db_dir +from definitions import LATEST_FILE, DATABASE_DIR -from definitions import LATEST_FILE - -session = CachedSession(cache_name=path.join(db_dir, "wizarr_cache"), backend="sqlite", expire_after=3600, cache_control=True, stale_if_error=True, allowable_codes=[200]) +session = CachedSession(cache_name=path.join(DATABASE_DIR, "wizarr_cache"), backend="sqlite", expire_after=3600, cache_control=True, stale_if_error=True, allowable_codes=[200]) def get_latest_version(): try: From ede9d2b815f94bb200e4d0348f18618c3d17e240 Mon Sep 17 00:00:00 2001 From: Ashley Date: Sat, 21 Oct 2023 22:46:47 +0100 Subject: [PATCH 39/48] Refactor logging and security configuration code - Moves the file logger path to refer to the correct database directory - Updates the secret key file path to use the correct database directory. --- apps/wizarr-backend/wizarr_backend/app/logging.py | 4 ++-- apps/wizarr-backend/wizarr_backend/app/security.py | 10 ++++------ 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/apps/wizarr-backend/wizarr_backend/app/logging.py b/apps/wizarr-backend/wizarr_backend/app/logging.py index 147b8a755..6ab2081ea 100644 --- a/apps/wizarr-backend/wizarr_backend/app/logging.py +++ b/apps/wizarr-backend/wizarr_backend/app/logging.py @@ -1,8 +1,8 @@ import logging from logging.handlers import WatchedFileHandler from os import path - import coloredlogs +from definitions import DATABASE_DIR # Configure the root logger logging.basicConfig(level=logging.DEBUG, format="%(asctime)s %(levelname)s %(message)s", datefmt="%H:%M:%S") @@ -32,7 +32,7 @@ def filter(self, record): werkzeug = logging.getLogger("werkzeug") # Create a file handler for logging to a file -file_log_handler = WatchedFileHandler(path.join(path.dirname(path.abspath(__file__)), "../", "../", "database", "logs.log"), mode="a", encoding="utf-8") +file_log_handler = WatchedFileHandler(path.join(DATABASE_DIR, "logs.log"), mode="a", encoding="utf-8") file_log_handler.addFilter(ExcludeLoggerFilter("peewee")) file_log_handler.addFilter(ExcludeFilter("socket.io")) file_log_handler.setFormatter(coloredlogs.ColoredFormatter("%(asctime)s %(levelname)s %(message)s", datefmt="%H:%M:%S")) diff --git a/apps/wizarr-backend/wizarr_backend/app/security.py b/apps/wizarr-backend/wizarr_backend/app/security.py index 0131588db..6a574d966 100644 --- a/apps/wizarr-backend/wizarr_backend/app/security.py +++ b/apps/wizarr-backend/wizarr_backend/app/security.py @@ -3,13 +3,11 @@ from flask import request from flask_jwt_extended import verify_jwt_in_request from playhouse.shortcuts import model_to_dict - from app.models.database import Sessions, Settings, Accounts, APIKeys +from definitions import DATABASE_DIR # Yh this code looks messy but it works so ill tidy it up later -database_dir = path.abspath(path.join(__file__, "../", "../", "../", "database")) -database_file = path.join(database_dir, "database.db") -secret_key_file = path.join(database_dir, "secret.key") +secret_key_file = path.join(DATABASE_DIR, "secret.key") # Class to handle authentication for the scheduler class SchedulerAuth: @@ -28,8 +26,8 @@ def server_verified(): def secret_key(length: int = 32) -> str: # Check if the database directory exists - if not path.exists(database_dir): - mkdir(database_dir) + if not path.exists(DATABASE_DIR): + mkdir(DATABASE_DIR) # Check if the secret key file exists if not path.exists(secret_key_file): From 8a204c00ef9a2bbbc94d78292b07ecd7e2f7345b Mon Sep 17 00:00:00 2001 From: Ashley Date: Sat, 21 Oct 2023 22:49:52 +0100 Subject: [PATCH 40/48] Refactor logging and database directory paths - Refactored the logging and database directory paths to use a constant from `definitions.py`. - Updated the paths in `logging_api.py`, `globals.py`, and `clear_logs.py` to use the constant. - This change improves code readability and maintainability. --- apps/wizarr-backend/wizarr_backend/api/routes/logging_api.py | 3 ++- apps/wizarr-backend/wizarr_backend/app/globals.py | 5 ++--- apps/wizarr-backend/wizarr_backend/app/utils/clear_logs.py | 5 +++-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/apps/wizarr-backend/wizarr_backend/api/routes/logging_api.py b/apps/wizarr-backend/wizarr_backend/api/routes/logging_api.py index 056786103..fa20456d5 100644 --- a/apps/wizarr-backend/wizarr_backend/api/routes/logging_api.py +++ b/apps/wizarr-backend/wizarr_backend/api/routes/logging_api.py @@ -6,9 +6,10 @@ from app.extensions import socketio from termcolor import colored from time import sleep +from definitions import DATABASE_DIR api = Namespace("Logging", description="Logging related operations", path="/logging") -log_file = path.abspath(path.join(path.dirname(__file__), "../", "../", "../", "database", "logs.log")) +log_file = path.abspath(path.join(DATABASE_DIR, "logs.log")) task = None def watch_log_file(file_path): diff --git a/apps/wizarr-backend/wizarr_backend/app/globals.py b/apps/wizarr-backend/wizarr_backend/app/globals.py index e3d03a600..0f1a1a0fe 100644 --- a/apps/wizarr-backend/wizarr_backend/app/globals.py +++ b/apps/wizarr-backend/wizarr_backend/app/globals.py @@ -1,11 +1,10 @@ from os import getenv, path from flask import Flask from app.utils.software_lifecycle import is_stable, need_update, get_current_version +from definitions import DATABASE_DIR def create_globals(app: Flask): globals_config = {} - base_dir = path.abspath(path.join(path.dirname(__file__), "../")) - globals_config["APP_NAME"] = "Wizarr" globals_config["APP_VERSION"] = get_current_version() globals_config["APP_GITHUB_URL"] = "https://github.com/Wizarrrr/wizarr" @@ -15,7 +14,7 @@ def create_globals(app: Flask): globals_config["APP_RELEASED"] = is_stable() globals_config["APP_LANG"] = "en" globals_config["TIMEZONE"] = getenv("TZ", "UTC") - globals_config["DATA_DIRECTORY"] = path.abspath(path.join(base_dir, "../", "database")) + globals_config["DATA_DIRECTORY"] = DATABASE_DIR globals_config["APP_UPDATE"] = need_update() globals_config["DISABLE_BUILTIN_AUTH"] = bool(str(getenv("DISABLE_BUILTIN_AUTH", "False")).lower() == "true") globals_config["LANGUAGES"] = app.config["LANGUAGES"] diff --git a/apps/wizarr-backend/wizarr_backend/app/utils/clear_logs.py b/apps/wizarr-backend/wizarr_backend/app/utils/clear_logs.py index bc6b7736a..c444395b0 100644 --- a/apps/wizarr-backend/wizarr_backend/app/utils/clear_logs.py +++ b/apps/wizarr-backend/wizarr_backend/app/utils/clear_logs.py @@ -1,12 +1,13 @@ from flask_restx import Api from json import dumps from os import path +from definitions import DATABASE_DIR def clear_logs(): """Clear the logs.log file on startup""" base_dir = path.dirname(path.dirname(path.dirname(path.abspath(__file__)))) # Clear log file contents on startup - if path.exists(path.join(base_dir, "../", "database", "logs.log")): - with open(path.join(base_dir, "../", "database", "logs.log"), "w", encoding="utf-8") as f: + if path.exists(path.join(DATABASE_DIR, "logs.log")): + with open(path.join(DATABASE_DIR, "logs.log"), "w", encoding="utf-8") as f: f.write("") From 45176cf9b6498b70df7be34d1d175cb2d9e0bed1 Mon Sep 17 00:00:00 2001 From: Ashley Date: Sun, 22 Oct 2023 00:10:13 +0100 Subject: [PATCH 41/48] Delete old workflow runs and cleanup untagged images in the repository. Update the Dockerfile for Wizarr backend to copy package files and install dependencies. --- .github/workflows/delete-old-workflow.yml | 19 ------------------- .github/workflows/delete-tag.yml | 22 ---------------------- dockerfiles/wizarr/Dockerfile | 14 +++++++++++--- 3 files changed, 11 insertions(+), 44 deletions(-) delete mode 100644 .github/workflows/delete-old-workflow.yml delete mode 100644 .github/workflows/delete-tag.yml diff --git a/.github/workflows/delete-old-workflow.yml b/.github/workflows/delete-old-workflow.yml deleted file mode 100644 index 8c3f92d19..000000000 --- a/.github/workflows/delete-old-workflow.yml +++ /dev/null @@ -1,19 +0,0 @@ -name: Delete old workflow runs - -on: - push: - -jobs: - delete-workflow-runs: - runs-on: ubuntu-latest - name: Delete old workflow runs - steps: - - name: Delete workflow runs - uses: MajorScruffy/delete-old-workflow-runs@v0.2.0 - id: delete-old-workflow-runs - with: - repository: wizarrrr/wizarr - workflow: ".github/workflows/tailwindcss.yml" - what-if: true - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/delete-tag.yml b/.github/workflows/delete-tag.yml deleted file mode 100644 index ba575cbce..000000000 --- a/.github/workflows/delete-tag.yml +++ /dev/null @@ -1,22 +0,0 @@ -name: Cleanup Untagged Images - -on: - workflow_dispatch: - inputs: - tag: - description: "Tag of the image" - required: true - -jobs: - delete-untagged-images: - name: Delete Untagged Images - runs-on: ubuntu-latest - steps: - - uses: bots-house/ghcr-delete-image-action@v1.1.0 - with: - # NOTE: at now only orgs is supported - owner: bots-house - name: some-web-service - # NOTE: using Personal Access Token - token: ${{ secrets.GITHUB_TOKEN }} - tag: ${{ github.event.inputs.tag }} diff --git a/dockerfiles/wizarr/Dockerfile b/dockerfiles/wizarr/Dockerfile index e9b1688f0..eaa8c2976 100644 --- a/dockerfiles/wizarr/Dockerfile +++ b/dockerfiles/wizarr/Dockerfile @@ -3,7 +3,10 @@ FROM --platform=$TARGETPLATFORM nikolaik/python-nodejs:python3.12-nodejs18 AS ba # Set directory for Wizarr Backend WORKDIR /wizarr-build -COPY ../../ ./ + +# Copy Package Files +COPY ../../package.json ./ +COPY ../../package-lock.json ./ # Set environment variables for NPM Version ENV NPM_CONFIG_LOGLEVEL=warn \ @@ -15,12 +18,17 @@ ENV PIP_DEFAULT_TIMEOUT=100 \ PIP_NO_CACHE_DIR=1 \ POETRY_VERSION=1.6.1 +RUN npm config set registry https://registry.npmjs.org/ + # Install dependencies RUN pip install "poetry==$POETRY_VERSION" # Install dependencies -RUN npm install -g npm@9.8.1 && \ - npm install +RUN npm install -g npm@latest && \ + npm install --ignore-scripts --unsafe-perm + +# Copy Everything +COPY ../../ ./ # Build Wizarr Backend RUN npx nx build wizarr-backend From 70e4083772f4c224df98a4aafec72417659fbb3b Mon Sep 17 00:00:00 2001 From: Ashley Date: Sun, 22 Oct 2023 00:39:11 +0100 Subject: [PATCH 42/48] Update beta-ci.yml and Dockerfile to use Node.js 18.18.2 for installing dependencies The commit updates the beta-ci.yml and Dockerfile to specify the use of Node.js 18.18.2 for installing project dependencies. Previously, the actions/setup-node@v2 step did not explicitly set the required Node.js version, resulting in inconsistent dependency installations. --- .github/workflows/beta-ci.yml | 20 ++++++++++++++++++++ dockerfiles/wizarr/Dockerfile | 8 ++------ 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/.github/workflows/beta-ci.yml b/.github/workflows/beta-ci.yml index 05cade054..4124359dc 100644 --- a/.github/workflows/beta-ci.yml +++ b/.github/workflows/beta-ci.yml @@ -52,6 +52,16 @@ jobs: - name: Checkout uses: actions/checkout@v4 + # Use NPM and Node.js to install dependencies + - name: Use Node.js 18.18.2 + uses: actions/setup-node@v2 + with: + node-version: 18.18.2 + + # Install dependencies + - name: Install dependencies + run: npm install + # Get the Metadata from the Docker Image - name: Docker meta id: meta @@ -112,6 +122,16 @@ jobs: - name: Checkout uses: actions/checkout@v2 + # Use NPM and Node.js to install dependencies + - name: Use Node.js 18.18.2 + uses: actions/setup-node@v2 + with: + node-version: 18.18.2 + + # Install dependencies + - name: Install dependencies + run: npm install + # Get the Release Version from latest - name: Get the Release Version from latest id: get_version diff --git a/dockerfiles/wizarr/Dockerfile b/dockerfiles/wizarr/Dockerfile index eaa8c2976..f38f19ae3 100644 --- a/dockerfiles/wizarr/Dockerfile +++ b/dockerfiles/wizarr/Dockerfile @@ -5,8 +5,7 @@ FROM --platform=$TARGETPLATFORM nikolaik/python-nodejs:python3.12-nodejs18 AS ba WORKDIR /wizarr-build # Copy Package Files -COPY ../../package.json ./ -COPY ../../package-lock.json ./ +COPY ../../ ./ # Set environment variables for NPM Version ENV NPM_CONFIG_LOGLEVEL=warn \ @@ -18,7 +17,7 @@ ENV PIP_DEFAULT_TIMEOUT=100 \ PIP_NO_CACHE_DIR=1 \ POETRY_VERSION=1.6.1 -RUN npm config set registry https://registry.npmjs.org/ +RUN npm config set registry http://registry.npmjs.org/ --global # Install dependencies RUN pip install "poetry==$POETRY_VERSION" @@ -27,9 +26,6 @@ RUN pip install "poetry==$POETRY_VERSION" RUN npm install -g npm@latest && \ npm install --ignore-scripts --unsafe-perm -# Copy Everything -COPY ../../ ./ - # Build Wizarr Backend RUN npx nx build wizarr-backend RUN npx nx build wizarr-frontend From e1bc5a3ff74ae685576d78d65654d4c33a4693c9 Mon Sep 17 00:00:00 2001 From: Ashley Date: Sun, 22 Oct 2023 00:39:49 +0100 Subject: [PATCH 43/48] Update beta-ci.yml to use Node.js 18.18.2 for installing dependencies. The commit updates the beta-ci.yml file to use Node.js version 18.18.2 for installing dependencies. This ensures consistent development and testing environment. --- .github/workflows/beta-ci.yml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/beta-ci.yml b/.github/workflows/beta-ci.yml index 4124359dc..168cef67e 100644 --- a/.github/workflows/beta-ci.yml +++ b/.github/workflows/beta-ci.yml @@ -122,16 +122,6 @@ jobs: - name: Checkout uses: actions/checkout@v2 - # Use NPM and Node.js to install dependencies - - name: Use Node.js 18.18.2 - uses: actions/setup-node@v2 - with: - node-version: 18.18.2 - - # Install dependencies - - name: Install dependencies - run: npm install - # Get the Release Version from latest - name: Get the Release Version from latest id: get_version @@ -193,6 +183,16 @@ jobs: - name: Checkout uses: actions/checkout@v4 + # Use NPM and Node.js to install dependencies + - name: Use Node.js 18.18.2 + uses: actions/setup-node@v2 + with: + node-version: 18.18.2 + + # Install dependencies + - name: Install dependencies + run: npm install + # Get the Metadata from the Docker Image - name: Docker meta id: meta From 4448fa09c5e40e7ff676f7a033d2a1316de05cac Mon Sep 17 00:00:00 2001 From: Ashley Date: Sun, 22 Oct 2023 00:41:34 +0100 Subject: [PATCH 44/48] Ignore unnecessary files/directories in Docker build The .dockerignore file was modified to exclude /tmp, /dockerfiles/wizarr-backend/database, /apps/wizarr-backend/database, **/.venv, venv/, .git, .idea, .buildHelper.txt, and __pycache__ directories, as well as node_modules and Dockerfile from being included in Docker builds. --- .dockerignore | 2 -- 1 file changed, 2 deletions(-) diff --git a/.dockerignore b/.dockerignore index 0558fa540..a7821335e 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,5 +1,4 @@ **/tmp -**/node_modules /dockerfiles/wizarr-backend/database /apps/wizarr-backend/database **/.venv @@ -13,7 +12,6 @@ venv/ .git .idea .buildHelper.txt -node_modules __pycache__ Dockerfile From dabdeb5500f6e7cc09488a41478bb02fcf15e85b Mon Sep 17 00:00:00 2001 From: Ashley Date: Sun, 22 Oct 2023 02:33:49 +0100 Subject: [PATCH 45/48] CI/CD: Update beta-ci.yml and Dockerfile for wizarr-ci - Update beta-ci.yml to include Python and Poetry setup - Modify Dockerfile to build wizarr-ci image with updated dependencies and configurations - Add new docker-entrypoint.sh script for running Gunicorn and Nginx --- .github/workflows/beta-ci.yml | 38 +++++++++- dockerfiles/wizarr-ci/Dockerfile | 85 ++++++++++++++++++++++ dockerfiles/wizarr-ci/docker-entrypoint.sh | 9 +++ 3 files changed, 130 insertions(+), 2 deletions(-) create mode 100644 dockerfiles/wizarr-ci/Dockerfile create mode 100644 dockerfiles/wizarr-ci/docker-entrypoint.sh diff --git a/.github/workflows/beta-ci.yml b/.github/workflows/beta-ci.yml index 168cef67e..438a4a04e 100644 --- a/.github/workflows/beta-ci.yml +++ b/.github/workflows/beta-ci.yml @@ -62,6 +62,23 @@ jobs: - name: Install dependencies run: npm install + # Set up Python and install Poetry + - uses: actions/setup-python@v4 + with: + python-version: '3.10' + + # Install Poetry + - name: Install Poetry + run: | + pip install poetry==1.6.1 + poetry config virtualenvs.create false + + # Build the Repository + - name: Build the Repository + run: | + npx nx build wizarr-backend + npx nx build wizarr-frontend + # Get the Metadata from the Docker Image - name: Docker meta id: meta @@ -87,7 +104,7 @@ jobs: uses: docker/build-push-action@v5 with: context: . - file: ./dockerfiles/wizarr/Dockerfile + file: ./dockerfiles/wizarr-ci/Dockerfile push: true platforms: ${{ matrix.platform }} labels: ${{ steps.meta.outputs.labels }} @@ -193,6 +210,23 @@ jobs: - name: Install dependencies run: npm install + # Set up Python and install Poetry + - uses: actions/setup-python@v4 + with: + python-version: '3.10' + + # Install Poetry + - name: Install Poetry + run: | + pip install poetry==1.6.1 + poetry config virtualenvs.create false + + # Build the Repository + - name: Build the Repository + run: | + npx nx build wizarr-backend + npx nx build wizarr-frontend + # Get the Metadata from the Docker Image - name: Docker meta id: meta @@ -218,7 +252,7 @@ jobs: uses: docker/build-push-action@v5 with: context: . - file: ./dockerfiles/wizarr/Dockerfile + file: ./dockerfiles/wizarr-ci/Dockerfile push: true platforms: ${{ matrix.platform }} labels: ${{ steps.meta.outputs.labels }} diff --git a/dockerfiles/wizarr-ci/Dockerfile b/dockerfiles/wizarr-ci/Dockerfile new file mode 100644 index 000000000..f38f19ae3 --- /dev/null +++ b/dockerfiles/wizarr-ci/Dockerfile @@ -0,0 +1,85 @@ +# Build image for Docker Image +FROM --platform=$TARGETPLATFORM nikolaik/python-nodejs:python3.12-nodejs18 AS base + +# Set directory for Wizarr Backend +WORKDIR /wizarr-build + +# Copy Package Files +COPY ../../ ./ + +# Set environment variables for NPM Version +ENV NPM_CONFIG_LOGLEVEL=warn \ + NODE_VERSION=18.18.2 + +# Set environment variables for Poetry Version +ENV PIP_DEFAULT_TIMEOUT=100 \ + PIP_DISABLE_PIP_VERSION_CHECK=1 \ + PIP_NO_CACHE_DIR=1 \ + POETRY_VERSION=1.6.1 + +RUN npm config set registry http://registry.npmjs.org/ --global + +# Install dependencies +RUN pip install "poetry==$POETRY_VERSION" + +# Install dependencies +RUN npm install -g npm@latest && \ + npm install --ignore-scripts --unsafe-perm + +# Build Wizarr Backend +RUN npx nx build wizarr-backend +RUN npx nx build wizarr-frontend + +# Final image for Docker Image +FROM --platform=$TARGETPLATFORM python:3.12.0 AS final + +# Install system dependencies +RUN apt-get update && \ + apt-get install -y \ + nginx \ + nmap \ + toilet \ + curl \ + && apt-get clean + +# Set directory for Wizarr Frontend +WORKDIR /wizarr/frontend + +# Copy Wizarr Frontend +COPY --from=base /wizarr-build/dist/apps/wizarr-frontend/ ./ + +# Set directory for Wizarr Backend tmp +WORKDIR /wizarr/backend + +# Copy Wizarr Backend +COPY --from=base /wizarr-build/dist/apps/wizarr-backend/ ./tmp/ + +# Unpack Wizarr Backend wizarr_backend-x.x.x.tar file into /wizarr +RUN tar -xvzf ./tmp/wizarr_backend-*.tar.gz -C ./tmp/ && \ + pip install ./tmp/wizarr_backend-*.whl + +# Copy Wizarr Backend tmp +RUN mv ./tmp/wizarr_backend-*/wizarr_backend/* ./ +RUN rm -rf ./tmp + +# Copy Docker Entrypoint +COPY ../../dockerfiles/wizarr/docker-entrypoint.sh /docker-entrypoint.sh +RUN chmod +x /docker-entrypoint.sh + +# Copy Nginx configuration +COPY ../../files/nginx-main.conf /etc/nginx/conf.d/wizarr.conf +# RUN rm /etc/nginx/conf.d/default.conf + +# Copy Bashrc File +COPY ../../files/.bashrc /root/.bashrc +RUN chmod +x /root/.bashrc + +# Copy latest file +COPY ../../latest / + +# Environment Variables +ENV DATABASE_DIR=/data/database +ENV LATEST_FILE=/latest + +# Set Entrypoint +ENTRYPOINT ["/docker-entrypoint.sh"] diff --git a/dockerfiles/wizarr-ci/docker-entrypoint.sh b/dockerfiles/wizarr-ci/docker-entrypoint.sh new file mode 100644 index 000000000..6ee0c48ec --- /dev/null +++ b/dockerfiles/wizarr-ci/docker-entrypoint.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +cd /wizarr/backend + +# Start Gunicorn processes +gunicorn --worker-class geventwebsocket.gunicorn.workers.GeventWebSocketWorker --bind 0.0.0.0:5000 -m 007 run:app 2>&1 & + +# Start nginx +/usr/sbin/nginx -g 'daemon off;' 2>&1 \ No newline at end of file From 293cfad339f3033761351701231689f977aa572f Mon Sep 17 00:00:00 2001 From: Ashley Date: Sun, 22 Oct 2023 02:38:35 +0100 Subject: [PATCH 46/48] Update Dockerfile for Wizarr CI - The Dockerfile for Wizarr CI has been updated to improve the build process. - Changes include setting environment variables, installing dependencies, and building the Wizarr backend and frontend. - System dependencies have been installed and the Wizarr frontend and backend are copied to their respective directories. - The Wizarr backend package is unpacked for further use. --- dockerfiles/wizarr-ci/Dockerfile | 36 ++------------------------------ 1 file changed, 2 insertions(+), 34 deletions(-) diff --git a/dockerfiles/wizarr-ci/Dockerfile b/dockerfiles/wizarr-ci/Dockerfile index f38f19ae3..13c5e7bde 100644 --- a/dockerfiles/wizarr-ci/Dockerfile +++ b/dockerfiles/wizarr-ci/Dockerfile @@ -1,38 +1,6 @@ # Build image for Docker Image FROM --platform=$TARGETPLATFORM nikolaik/python-nodejs:python3.12-nodejs18 AS base -# Set directory for Wizarr Backend -WORKDIR /wizarr-build - -# Copy Package Files -COPY ../../ ./ - -# Set environment variables for NPM Version -ENV NPM_CONFIG_LOGLEVEL=warn \ - NODE_VERSION=18.18.2 - -# Set environment variables for Poetry Version -ENV PIP_DEFAULT_TIMEOUT=100 \ - PIP_DISABLE_PIP_VERSION_CHECK=1 \ - PIP_NO_CACHE_DIR=1 \ - POETRY_VERSION=1.6.1 - -RUN npm config set registry http://registry.npmjs.org/ --global - -# Install dependencies -RUN pip install "poetry==$POETRY_VERSION" - -# Install dependencies -RUN npm install -g npm@latest && \ - npm install --ignore-scripts --unsafe-perm - -# Build Wizarr Backend -RUN npx nx build wizarr-backend -RUN npx nx build wizarr-frontend - -# Final image for Docker Image -FROM --platform=$TARGETPLATFORM python:3.12.0 AS final - # Install system dependencies RUN apt-get update && \ apt-get install -y \ @@ -46,13 +14,13 @@ RUN apt-get update && \ WORKDIR /wizarr/frontend # Copy Wizarr Frontend -COPY --from=base /wizarr-build/dist/apps/wizarr-frontend/ ./ +COPY ../../dist/apps/wizarr-frontend/ ./ # Set directory for Wizarr Backend tmp WORKDIR /wizarr/backend # Copy Wizarr Backend -COPY --from=base /wizarr-build/dist/apps/wizarr-backend/ ./tmp/ +COPY ../../dist/apps/wizarr-backend/ ./tmp/ # Unpack Wizarr Backend wizarr_backend-x.x.x.tar file into /wizarr RUN tar -xvzf ./tmp/wizarr_backend-*.tar.gz -C ./tmp/ && \ From a6d0ccdfc239b0be3d5c1c972fd7e73629e1cfb1 Mon Sep 17 00:00:00 2001 From: Ashley Date: Sun, 22 Oct 2023 02:53:12 +0100 Subject: [PATCH 47/48] Update beta CI workflow and Dockerfile for wizarr-ci - Update the branch triggering the workflow from 'v3-mono' to 'v3-beta' - Change the image tag from 'v3-mono' to 'v3-beta' --- .github/workflows/beta-ci.yml | 4 ++-- dockerfiles/wizarr-ci/Dockerfile | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/beta-ci.yml b/.github/workflows/beta-ci.yml index 438a4a04e..1a6ceb503 100644 --- a/.github/workflows/beta-ci.yml +++ b/.github/workflows/beta-ci.yml @@ -3,7 +3,7 @@ name: Docker Build and Push Beta on: push: branches: - - 'v3-mono' + - 'v3-beta' paths-ignore: - '**.md' - '**/.github/**' @@ -17,7 +17,7 @@ env: GHCR_REGISTRY: ghcr.io DH_REGISTRY: docker.io IMAGE_NAME: wizarrrr/wizarr - IMAGE_TAG: v3-mono + IMAGE_TAG: v3-beta concurrency: group: ${{ github.ref }} diff --git a/dockerfiles/wizarr-ci/Dockerfile b/dockerfiles/wizarr-ci/Dockerfile index 13c5e7bde..10ecf2ffe 100644 --- a/dockerfiles/wizarr-ci/Dockerfile +++ b/dockerfiles/wizarr-ci/Dockerfile @@ -1,5 +1,5 @@ # Build image for Docker Image -FROM --platform=$TARGETPLATFORM nikolaik/python-nodejs:python3.12-nodejs18 AS base +FROM --platform=$TARGETPLATFORM python:3.12.0 # Install system dependencies RUN apt-get update && \ From 0c3576152b9638957aa18baeffc87ce349883752 Mon Sep 17 00:00:00 2001 From: Ashley Date: Sun, 22 Oct 2023 03:05:54 +0100 Subject: [PATCH 48/48] refactor: update release workflow handling and build process This commit updates the release workflow in the Docker Build and Push Release configuration. It introduces new steps to check if the release is a pre-release or if it is on the master branch. Depending on these conditions, the workflow may continue or be skipped. Additionally, the build process for GHCR and Docker Hub has been modified to include installation of dependencies using Node.js 18.18.2 and Python's Poetry package manager. --- .github/workflows/release.yml | 612 +++++++++++++++++++--------------- 1 file changed, 334 insertions(+), 278 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index da008ca79..898691af8 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,287 +1,343 @@ name: Docker Build and Push Release on: - release: - types: - - created + release: + types: + - created permissions: - packages: write + packages: write env: - GHCR_REGISTRY: ghcr.io - DH_REGISTRY: docker.io - IMAGE_NAME: wizarrrr/wizarr - IMAGE_TAG: latest + GHCR_REGISTRY: ghcr.io + DH_REGISTRY: docker.io + IMAGE_NAME: wizarrrr/wizarr + IMAGE_TAG: latest jobs: - before_build: - runs-on: ubuntu-latest - steps: - # Clear the digests from the artifacts - - name: Clear digests - uses: geekyeggo/delete-artifact@v2 - with: - name: | - digests_dh - digests_ghcr - - # Only run the workflow if the release is on the master branch - - name: Check if release is pre-release - run: | - if [ "${{ github.event.release.prerelease }}" != true ]; then - echo "Release is not a pre-release. Continuing." - else - echo "Release is a pre-release. Skipping workflow." - exit 78 # Exit with a neutral exit code (78) to indicate a skipped workflow. - fi - - # Only run the workflow if the release is on the master branch - - name: Check if release is on master branch - run: | - if [ "${{ github.event.release.target_commitish }}" = "master" ]; then - echo "Release is on the master branch." - else - echo "Release is not on the master branch. Skipping workflow." - exit 78 # Exit with a neutral exit code (78) to indicate a skipped workflow. - fi - - build_ghcr: - name: Build Digest for GHCR - runs-on: ubuntu-latest - needs: - - before_build - strategy: - fail-fast: false - matrix: - platform: - - linux/amd64 - - linux/arm64 - - steps: - # Checkout the repo - - name: Checkout - uses: actions/checkout@v4 - - # Set the latest tag to the release tag - - name: Set latest tag - run: | - echo "${{ github.event.release.tag_name }}" > latest - - # Get the Metadata from the Docker Image - - name: Docker meta - id: meta - uses: docker/metadata-action@v5 - with: - images: ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }} - - # Set up Docker Buildx - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - # Login to GHCR - - name: Login to GHCR - uses: docker/login-action@v3 - with: - registry: ${{ env.GHCR_REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - # Build and push the image - - name: Build and push by digest - id: build - uses: docker/build-push-action@v5 - with: - context: . - push: true - platforms: ${{ matrix.platform }} - labels: ${{ steps.meta.outputs.labels }} - provenance: false - outputs: type=image,name=${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }},push-by-digest=true,name-canonical=true - cache-from: type=gha,scope=${{ matrix.platform }}-${{ env.GHCR_REGISTRY }} - cache-to: type=gha,mode=max,scope=${{ matrix.platform }}-${{ env.GHCR_REGISTRY }} - - # Export the digest for later use - - name: Export digest - run: | - mkdir -p /tmp/digests - digest="${{ steps.build.outputs.digest }}" - touch "/tmp/digests/${digest#sha256:}" - - # Upload the digest as an artifact - - name: Upload digest - uses: actions/upload-artifact@v3 - with: - name: digests_ghcr - path: /tmp/digests/* - if-no-files-found: error - retention-days: 1 - - merge_ghcr: - name: Merge Digest for GHCR - runs-on: ubuntu-latest - needs: - - build_ghcr - steps: - # Checkout the repo - - name: Checkout - uses: actions/checkout@v2 - - # Download the digests from the artifacts - - name: Download digests - uses: actions/download-artifact@v3 - with: - name: digests_ghcr - path: /tmp/digests - - # Set up Docker Buildx - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - # Get the Metadata from the Docker Image - - name: Docker meta - id: meta - uses: docker/metadata-action@v5 - with: - images: ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }} - - # Login to GHCR - - name: Login to GHCR - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - # Create manifest list and push - - name: Create manifest list and push to Registry - working-directory: /tmp/digests - run: | - docker buildx imagetools create \ - --tag ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }} \ - --tag ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }}-${{ github.event.release.tag_name }} \ - $(printf '${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}@sha256:%s ' *) - - # Inspect image - - name: Inspect image - run: docker buildx imagetools inspect ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }} - - build_dh: - name: Build Digest for Docker Hub - runs-on: ubuntu-latest - needs: - - before_build - strategy: - fail-fast: false - matrix: - platform: - - linux/amd64 - - linux/arm64 - - steps: - # Checkout the repo - - name: Checkout - uses: actions/checkout@v4 - - # Set the latest tag to the release tag - - name: Set latest tag - run: | - echo "${{ github.event.release.tag_name }}" > latest - - # Get the Metadata from the Docker Image - - name: Docker meta - id: meta - uses: docker/metadata-action@v5 - with: - images: ${{ env.DH_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }} - - # Set up Docker Buildx - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - # Login to Docker Hub - - name: Login to Docker Hub - uses: docker/login-action@v3 - with: - registry: ${{ env.DH_REGISTRY }} - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - # Build and push the image - - name: Build and push by digest - id: build - uses: docker/build-push-action@v5 - with: - context: . - push: true - platforms: ${{ matrix.platform }} - labels: ${{ steps.meta.outputs.labels }} - provenance: false - outputs: type=image,name=${{ env.DH_REGISTRY }}/${{ env.IMAGE_NAME }},push-by-digest=true,name-canonical=true - cache-from: type=gha,scope=${{ matrix.platform }}-${{ env.GHCR_REGISTRY }} - cache-to: type=gha,mode=max,scope=${{ matrix.platform }}-${{ env.GHCR_REGISTRY }} - - # Export the digest for later use - - name: Export digest - run: | - mkdir -p /tmp/digests - digest="${{ steps.build.outputs.digest }}" - touch "/tmp/digests/${digest#sha256:}" - - # Upload the digest as an artifact - - name: Upload digest - uses: actions/upload-artifact@v3 - with: - name: digests_dh - path: /tmp/digests/* - if-no-files-found: error - retention-days: 1 - - merge_dh: - name: Merge Digest for Docker Hub - runs-on: ubuntu-latest - needs: - - build_dh - steps: - # Checkout the repo - - name: Checkout - uses: actions/checkout@v2 - - # Download the digests from the artifacts - - name: Download digests - uses: actions/download-artifact@v3 - with: - name: digests_dh - path: /tmp/digests - - # Set up Docker Buildx - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - # Get the Metadata from the Docker Image - - name: Docker meta - id: meta - uses: docker/metadata-action@v5 - with: - images: ${{ env.DH_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }} - - # Login to Docker Hub - - name: Login to Docker Hub - uses: docker/login-action@v3 - with: - registry: docker.io - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - # Create manifest list and push - - name: Create manifest list and push to Registry - working-directory: /tmp/digests - run: | - docker buildx imagetools create \ - --tag ${{ env.DH_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }} \ - --tag ${{ env.DH_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }}-${{ github.event.release.tag_name }} \ - $(printf '${{ env.DH_REGISTRY }}/${{ env.IMAGE_NAME }}@sha256:%s ' *) - - # Inspect image - - name: Inspect image - run: docker buildx imagetools inspect ${{ env.DH_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }} + before_build: + runs-on: ubuntu-latest + steps: + # Clear the digests from the artifacts + - name: Clear digests + uses: geekyeggo/delete-artifact@v2 + with: + name: | + digests_dh + digests_ghcr + + # Only run the workflow if the release is on the master branch + - name: Check if release is pre-release + run: | + if [ "${{ github.event.release.prerelease }}" != true ]; then + echo "Release is not a pre-release. Continuing." + else + echo "Release is a pre-release. Skipping workflow." + exit 78 # Exit with a neutral exit code (78) to indicate a skipped workflow. + fi + + # Only run the workflow if the release is on the master branch + - name: Check if release is on master branch + run: | + if [ "${{ github.event.release.target_commitish }}" = "master" ]; then + echo "Release is on the master branch." + else + echo "Release is not on the master branch. Skipping workflow." + exit 78 # Exit with a neutral exit code (78) to indicate a skipped workflow. + fi + + build_ghcr: + name: Build Digest for GHCR + runs-on: ubuntu-latest + needs: + - before_build + strategy: + fail-fast: false + matrix: + platform: + - linux/amd64 + - linux/arm64 + + steps: + # Checkout the repo + - name: Checkout + uses: actions/checkout@v4 + + # Set the latest tag to the release tag + - name: Set latest tag + run: | + echo "${{ github.event.release.tag_name }}" > latest + + # Use NPM and Node.js to install dependencies + - name: Use Node.js 18.18.2 + uses: actions/setup-node@v2 + with: + node-version: 18.18.2 + + # Install dependencies + - name: Install dependencies + run: npm install + + # Set up Python and install Poetry + - uses: actions/setup-python@v4 + with: + python-version: '3.10' + + # Install Poetry + - name: Install Poetry + run: | + pip install poetry==1.6.1 + poetry config virtualenvs.create false + + # Build the Repository + - name: Build the Repository + run: | + npx nx build wizarr-backend + npx nx build wizarr-frontend + + # Get the Metadata from the Docker Image + - name: Docker meta + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }} + + # Set up Docker Buildx + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + # Login to GHCR + - name: Login to GHCR + uses: docker/login-action@v3 + with: + registry: ${{ env.GHCR_REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + # Build and push the image + - name: Build and push by digest + id: build + uses: docker/build-push-action@v5 + with: + context: . + file: ./dockerfiles/wizarr-ci/Dockerfile + push: true + platforms: ${{ matrix.platform }} + labels: ${{ steps.meta.outputs.labels }} + provenance: false + outputs: type=image,name=${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }},push-by-digest=true,name-canonical=true + cache-from: type=gha,scope=${{ matrix.platform }}-${{ env.GHCR_REGISTRY }} + cache-to: type=gha,mode=max,scope=${{ matrix.platform }}-${{ env.GHCR_REGISTRY }} + + # Export the digest for later use + - name: Export digest + run: | + mkdir -p /tmp/digests + digest="${{ steps.build.outputs.digest }}" + touch "/tmp/digests/${digest#sha256:}" + + # Upload the digest as an artifact + - name: Upload digest + uses: actions/upload-artifact@v3 + with: + name: digests_ghcr + path: /tmp/digests/* + if-no-files-found: error + retention-days: 1 + + merge_ghcr: + name: Merge Digest for GHCR + runs-on: ubuntu-latest + needs: + - build_ghcr + steps: + # Checkout the repo + - name: Checkout + uses: actions/checkout@v2 + + # Download the digests from the artifacts + - name: Download digests + uses: actions/download-artifact@v3 + with: + name: digests_ghcr + path: /tmp/digests + + # Set up Docker Buildx + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + # Get the Metadata from the Docker Image + - name: Docker meta + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }} + + # Login to GHCR + - name: Login to GHCR + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + # Create manifest list and push + - name: Create manifest list and push to Registry + working-directory: /tmp/digests + run: | + docker buildx imagetools create \ + --tag ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }} \ + --tag ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }}-${{ github.event.release.tag_name }} \ + $(printf '${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}@sha256:%s ' *) + + # Inspect image + - name: Inspect image + run: docker buildx imagetools inspect ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }} + + build_dh: + name: Build Digest for Docker Hub + runs-on: ubuntu-latest + needs: + - before_build + strategy: + fail-fast: false + matrix: + platform: + - linux/amd64 + - linux/arm64 + + steps: + # Checkout the repo + - name: Checkout + uses: actions/checkout@v4 + + # Set the latest tag to the release tag + - name: Set latest tag + run: | + echo "${{ github.event.release.tag_name }}" > latest + + # Use NPM and Node.js to install dependencies + - name: Use Node.js 18.18.2 + uses: actions/setup-node@v2 + with: + node-version: 18.18.2 + + # Install dependencies + - name: Install dependencies + run: npm install + + # Set up Python and install Poetry + - uses: actions/setup-python@v4 + with: + python-version: '3.10' + + # Install Poetry + - name: Install Poetry + run: | + pip install poetry==1.6.1 + poetry config virtualenvs.create false + + # Build the Repository + - name: Build the Repository + run: | + npx nx build wizarr-backend + npx nx build wizarr-frontend + + # Get the Metadata from the Docker Image + - name: Docker meta + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.DH_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }} + + # Set up Docker Buildx + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + # Login to Docker Hub + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + registry: ${{ env.DH_REGISTRY }} + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + # Build and push the image + - name: Build and push by digest + id: build + uses: docker/build-push-action@v5 + with: + context: . + file: ./dockerfiles/wizarr-ci/Dockerfile + push: true + platforms: ${{ matrix.platform }} + labels: ${{ steps.meta.outputs.labels }} + provenance: false + outputs: type=image,name=${{ env.DH_REGISTRY }}/${{ env.IMAGE_NAME }},push-by-digest=true,name-canonical=true + cache-from: type=gha,scope=${{ matrix.platform }}-${{ env.GHCR_REGISTRY }} + cache-to: type=gha,mode=max,scope=${{ matrix.platform }}-${{ env.GHCR_REGISTRY }} + + # Export the digest for later use + - name: Export digest + run: | + mkdir -p /tmp/digests + digest="${{ steps.build.outputs.digest }}" + touch "/tmp/digests/${digest#sha256:}" + + # Upload the digest as an artifact + - name: Upload digest + uses: actions/upload-artifact@v3 + with: + name: digests_dh + path: /tmp/digests/* + if-no-files-found: error + retention-days: 1 + + merge_dh: + name: Merge Digest for Docker Hub + runs-on: ubuntu-latest + needs: + - build_dh + steps: + # Checkout the repo + - name: Checkout + uses: actions/checkout@v2 + + # Download the digests from the artifacts + - name: Download digests + uses: actions/download-artifact@v3 + with: + name: digests_dh + path: /tmp/digests + + # Set up Docker Buildx + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + # Get the Metadata from the Docker Image + - name: Docker meta + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.DH_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }} + + # Login to Docker Hub + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + registry: docker.io + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + # Create manifest list and push + - name: Create manifest list and push to Registry + working-directory: /tmp/digests + run: | + docker buildx imagetools create \ + --tag ${{ env.DH_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }} \ + --tag ${{ env.DH_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }}-${{ github.event.release.tag_name }} \ + $(printf '${{ env.DH_REGISTRY }}/${{ env.IMAGE_NAME }}@sha256:%s ' *) + + # Inspect image + - name: Inspect image + run: docker buildx imagetools inspect ${{ env.DH_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }}