From 7f5cd13e30deb6844da8aa7b632543406164336c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Th=C3=A9ophile=20Madet?=
Date: Tue, 19 Dec 2023 09:57:58 +0100
Subject: [PATCH 01/86] feat: added the shifts extension.
---
collectivo/app/nuxt.config.ts | 1 +
collectivo/app/package.json | 1 +
collectivo/extensions/shifts/.eslintrc.cjs | 147 +
collectivo/extensions/shifts/.gitignore | 24 +
collectivo/extensions/shifts/.npmrc | 1 +
collectivo/extensions/shifts/LICENSE | 24 +
collectivo/extensions/shifts/README.md | 63 +
collectivo/extensions/shifts/app.config.ts | 12 +
collectivo/extensions/shifts/app.vue | 5 +
collectivo/extensions/shifts/i18n.config.ts | 1 +
collectivo/extensions/shifts/lang/de.json | 3 +
collectivo/extensions/shifts/lang/en.json | 1 +
collectivo/extensions/shifts/nuxt.config.ts | 12 +
collectivo/extensions/shifts/package.json | 34 +
.../extensions/shifts/pages/shifts/index.vue | 9 +
collectivo/extensions/shifts/pnpm-lock.yaml | 9242 +++++++++++++++++
.../extensions/shifts/public/favicon.ico | Bin 0 -> 4286 bytes
.../shifts/server/examples/examples.ts | 2 +
.../server/plugins/registerExtension.ts | 16 +
.../server/schemas/001_schema_shifts.ts | 43 +
.../extensions/shifts/server/tsconfig.json | 3 +
.../extensions/shifts/tailwind.config.js | 14 +
.../extensions/shifts/tests/basic.test.ts | 14 +
collectivo/extensions/shifts/tsconfig.json | 4 +
24 files changed, 9676 insertions(+)
create mode 100644 collectivo/extensions/shifts/.eslintrc.cjs
create mode 100644 collectivo/extensions/shifts/.gitignore
create mode 100644 collectivo/extensions/shifts/.npmrc
create mode 100644 collectivo/extensions/shifts/LICENSE
create mode 100644 collectivo/extensions/shifts/README.md
create mode 100644 collectivo/extensions/shifts/app.config.ts
create mode 100644 collectivo/extensions/shifts/app.vue
create mode 100644 collectivo/extensions/shifts/i18n.config.ts
create mode 100644 collectivo/extensions/shifts/lang/de.json
create mode 100644 collectivo/extensions/shifts/lang/en.json
create mode 100644 collectivo/extensions/shifts/nuxt.config.ts
create mode 100644 collectivo/extensions/shifts/package.json
create mode 100644 collectivo/extensions/shifts/pages/shifts/index.vue
create mode 100644 collectivo/extensions/shifts/pnpm-lock.yaml
create mode 100644 collectivo/extensions/shifts/public/favicon.ico
create mode 100644 collectivo/extensions/shifts/server/examples/examples.ts
create mode 100644 collectivo/extensions/shifts/server/plugins/registerExtension.ts
create mode 100644 collectivo/extensions/shifts/server/schemas/001_schema_shifts.ts
create mode 100644 collectivo/extensions/shifts/server/tsconfig.json
create mode 100644 collectivo/extensions/shifts/tailwind.config.js
create mode 100644 collectivo/extensions/shifts/tests/basic.test.ts
create mode 100644 collectivo/extensions/shifts/tsconfig.json
diff --git a/collectivo/app/nuxt.config.ts b/collectivo/app/nuxt.config.ts
index 59435227..dd2603f5 100644
--- a/collectivo/app/nuxt.config.ts
+++ b/collectivo/app/nuxt.config.ts
@@ -6,6 +6,7 @@ export default defineNuxtConfig({
"@collectivo/collectivo",
"@collectivo/payments",
"@collectivo/memberships",
+ "@collectivo/shifts",
],
i18n: {
lazy: true,
diff --git a/collectivo/app/package.json b/collectivo/app/package.json
index 4e7cd2ea..59c6a7e2 100644
--- a/collectivo/app/package.json
+++ b/collectivo/app/package.json
@@ -16,6 +16,7 @@
"@collectivo/collectivo": "workspace:*",
"@collectivo/memberships": "workspace:*",
"@collectivo/payments": "workspace:*"
+ "@collectivo/shifts": "workspace:*",
},
"devDependencies": {
"@nuxt/devtools": "^1.0.8",
diff --git a/collectivo/extensions/shifts/.eslintrc.cjs b/collectivo/extensions/shifts/.eslintrc.cjs
new file mode 100644
index 00000000..3d1f9ca0
--- /dev/null
+++ b/collectivo/extensions/shifts/.eslintrc.cjs
@@ -0,0 +1,147 @@
+const basicRules = {
+ // No console & debugger statements in production
+ "no-console": process.env.NODE_ENV !== "development" ? "error" : "off",
+ "no-debugger": process.env.NODE_ENV !== "development" ? "error" : "off",
+ // Require empty line between certain statements
+ "padding-line-between-statements": [
+ "error",
+ {
+ blankLine: "always",
+ prev: [
+ "block",
+ "block-like",
+ "cjs-export",
+ "class",
+ "export",
+ "import",
+ "multiline-block-like",
+ "multiline-const",
+ "multiline-expression",
+ "multiline-let",
+ "multiline-var",
+ ],
+ next: "*",
+ },
+ {
+ blankLine: "always",
+ prev: ["const", "let"],
+ next: ["block", "block-like", "cjs-export", "class", "export", "import"],
+ },
+ {
+ blankLine: "always",
+ prev: "*",
+ next: [
+ "multiline-block-like",
+ "multiline-const",
+ "multiline-expression",
+ "multiline-let",
+ "multiline-var",
+ ],
+ },
+ {
+ blankLine: "any",
+ prev: ["export", "import"],
+ next: ["export", "import"],
+ },
+ ],
+ // Require empty line between class members
+ "lines-between-class-members": [
+ "error",
+ "always",
+ { exceptAfterSingleLine: true },
+ ],
+ // Disallow nested ternary expressions
+ "no-nested-ternary": "error",
+ // Require brace style for multi-line control statements
+ curly: ["error", "multi-line"],
+};
+
+const tsRules = {
+ // Allow unused arguments and variables when they begin with an underscore
+ "@typescript-eslint/no-unused-vars": [
+ "warn",
+ { argsIgnorePattern: "^_", varsIgnorePattern: "^_" },
+ ],
+ // Allow ts-directive comments (used to suppress TypeScript compiler errors)
+ "@typescript-eslint/ban-ts-comment": "off",
+ // Allow usage of the any type (consider enabling this rule later on)
+ "@typescript-eslint/no-explicit-any": "warn",
+
+ // Allow console log statements in development
+ // "no-console": process.env.NODE_ENV !== "development" ? "error" : "off",
+ "no-console": process.env.NODE_ENV !== "development" ? "warn" : "warn",
+};
+
+const vueRules = {
+ // Same ordering of component tags everywhere
+ "vue/component-tags-order": [
+ "error",
+ {
+ order: ["script", "template", "style"],
+ },
+ ],
+ // Require empty line between component tags
+ "vue/padding-line-between-blocks": "error",
+ // Allow single word component names ("Example" instead of "MyExample")
+ "vue/multi-word-component-names": "off",
+ // Don't require default value for props that are not marked as required
+ "vue/require-default-prop": "off",
+ // Require shorthand form attribute when v-bind value is true
+ "vue/prefer-true-attribute-shorthand": "error",
+};
+
+const getExtends = (configs = []) => [
+ // Enables a subset of core rules that report common problems
+ "eslint:recommended",
+ ...configs,
+ // Turns off rules from other configs that are
+ // unnecessary or might conflict with Prettier
+ // (should always be the last entry in 'extends')
+ "prettier",
+];
+
+/** @type {import('eslint').Linter.Config} */
+module.exports = {
+ // Stop looking for other ESLint configurations in parent folders
+ root: true,
+ // Global variables: Browser and Node.js
+ env: {
+ browser: true,
+ node: true,
+ },
+ // Basic configuration
+ extends: getExtends(),
+ rules: basicRules,
+ parserOptions: {
+ ecmaVersion: 2022,
+ sourceType: "module",
+ },
+ reportUnusedDisableDirectives: true,
+ overrides: [
+ // TypeScript & Vue files
+ {
+ files: ["*.ts", "*.vue"],
+ parser: "vue-eslint-parser",
+ parserOptions: {
+ parser: "@typescript-eslint/parser",
+ },
+ plugins: ["@typescript-eslint"],
+ extends: getExtends([
+ // Recommended TypeScript rules for code correctness
+ "plugin:@typescript-eslint/recommended",
+ // Enables Vue plugin and recommended rules
+ "plugin:vue/vue3-recommended",
+ ]),
+ rules: {
+ // Disables core rules which are already handled by TypeScript and
+ // enables rules that make sense due to TS's typechecking / transpilation
+ // (fetched directly to enable it for Vue files too)
+ ...require("@typescript-eslint/eslint-plugin").configs[
+ "eslint-recommended"
+ ].overrides[0].rules,
+ ...tsRules,
+ ...vueRules,
+ },
+ },
+ ],
+};
diff --git a/collectivo/extensions/shifts/.gitignore b/collectivo/extensions/shifts/.gitignore
new file mode 100644
index 00000000..4a7f73a2
--- /dev/null
+++ b/collectivo/extensions/shifts/.gitignore
@@ -0,0 +1,24 @@
+# Nuxt dev/build outputs
+.output
+.data
+.nuxt
+.nitro
+.cache
+dist
+
+# Node dependencies
+node_modules
+
+# Logs
+logs
+*.log
+
+# Misc
+.DS_Store
+.fleet
+.idea
+
+# Local env files
+.env
+.env.*
+!.env.example
diff --git a/collectivo/extensions/shifts/.npmrc b/collectivo/extensions/shifts/.npmrc
new file mode 100644
index 00000000..c483022c
--- /dev/null
+++ b/collectivo/extensions/shifts/.npmrc
@@ -0,0 +1 @@
+shamefully-hoist=true
\ No newline at end of file
diff --git a/collectivo/extensions/shifts/LICENSE b/collectivo/extensions/shifts/LICENSE
new file mode 100644
index 00000000..68a49daa
--- /dev/null
+++ b/collectivo/extensions/shifts/LICENSE
@@ -0,0 +1,24 @@
+This is free and unencumbered software released into the public domain.
+
+Anyone is free to copy, modify, publish, use, compile, sell, or
+distribute this software, either in source code form or as a compiled
+binary, for any purpose, commercial or non-commercial, and by any
+means.
+
+In jurisdictions that recognize copyright laws, the author or authors
+of this software dedicate any and all copyright interest in the
+software to the public domain. We make this dedication for the benefit
+of the public at large and to the detriment of our heirs and
+successors. We intend this dedication to be an overt act of
+relinquishment in perpetuity of all present and future rights to this
+software under copyright law.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+For more information, please refer to
diff --git a/collectivo/extensions/shifts/README.md b/collectivo/extensions/shifts/README.md
new file mode 100644
index 00000000..595dda92
--- /dev/null
+++ b/collectivo/extensions/shifts/README.md
@@ -0,0 +1,63 @@
+# Nuxt 3 Minimal Starter
+
+Look at the [Nuxt 3 documentation](https://nuxt.com/docs/getting-started/introduction) to learn more.
+
+## Setup
+
+Make sure to install the dependencies:
+
+```bash
+# npm
+npm install
+
+# pnpm
+pnpm install
+
+# yarn
+yarn install
+```
+
+## Development Server
+
+Start the development server on `http://localhost:3000`:
+
+```bash
+# npm
+npm run dev
+
+# pnpm
+pnpm run dev
+
+# yarn
+yarn dev
+```
+
+## Production
+
+Build the application for production:
+
+```bash
+# npm
+npm run build
+
+# pnpm
+pnpm run build
+
+# yarn
+yarn build
+```
+
+Locally preview production build:
+
+```bash
+# npm
+npm run preview
+
+# pnpm
+pnpm run preview
+
+# yarn
+yarn preview
+```
+
+Check out the [deployment documentation](https://nuxt.com/docs/getting-started/deployment) for more information.
diff --git a/collectivo/extensions/shifts/app.config.ts b/collectivo/extensions/shifts/app.config.ts
new file mode 100644
index 00000000..30a0ea00
--- /dev/null
+++ b/collectivo/extensions/shifts/app.config.ts
@@ -0,0 +1,12 @@
+import { IdentificationIcon } from "@heroicons/vue/24/solid";
+
+export default defineAppConfig({
+ mainMenuItems: {
+ membership: {
+ label: "Shifts",
+ link: "/shifts",
+ icon: IdentificationIcon,
+ order: 10,
+ },
+ },
+});
diff --git a/collectivo/extensions/shifts/app.vue b/collectivo/extensions/shifts/app.vue
new file mode 100644
index 00000000..f8eacfa7
--- /dev/null
+++ b/collectivo/extensions/shifts/app.vue
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/collectivo/extensions/shifts/i18n.config.ts b/collectivo/extensions/shifts/i18n.config.ts
new file mode 100644
index 00000000..b4e1a054
--- /dev/null
+++ b/collectivo/extensions/shifts/i18n.config.ts
@@ -0,0 +1 @@
+export default defineI18nConfig(() => ({}));
diff --git a/collectivo/extensions/shifts/lang/de.json b/collectivo/extensions/shifts/lang/de.json
new file mode 100644
index 00000000..08a103c6
--- /dev/null
+++ b/collectivo/extensions/shifts/lang/de.json
@@ -0,0 +1,3 @@
+{
+ "example": "Beispiel"
+}
diff --git a/collectivo/extensions/shifts/lang/en.json b/collectivo/extensions/shifts/lang/en.json
new file mode 100644
index 00000000..0967ef42
--- /dev/null
+++ b/collectivo/extensions/shifts/lang/en.json
@@ -0,0 +1 @@
+{}
diff --git a/collectivo/extensions/shifts/nuxt.config.ts b/collectivo/extensions/shifts/nuxt.config.ts
new file mode 100644
index 00000000..766ca763
--- /dev/null
+++ b/collectivo/extensions/shifts/nuxt.config.ts
@@ -0,0 +1,12 @@
+// https://nuxt.com/docs/api/configuration/nuxt-config
+export default defineNuxtConfig({
+ devtools: { enabled: true },
+ extends: ["@collectivo/collectivo"],
+ i18n: {
+ langDir: "./lang",
+ locales: [
+ { code: "en", file: "en.json" },
+ { code: "de", file: "de.json" },
+ ],
+ },
+});
diff --git a/collectivo/extensions/shifts/package.json b/collectivo/extensions/shifts/package.json
new file mode 100644
index 00000000..a5306590
--- /dev/null
+++ b/collectivo/extensions/shifts/package.json
@@ -0,0 +1,34 @@
+{
+ "name": "@collectivo/shifts",
+ "description": "A module to create shifts that members can register to.",
+ "version": "0.0.1",
+ "type": "module",
+ "license": "Unlicense",
+ "main": "./nuxt.config.ts",
+ "scripts": {
+ "build": "nuxt build",
+ "dev": "nuxt dev --p 3100",
+ "generate": "nuxt generate",
+ "preview": "nuxt preview",
+ "test": "vitest run",
+ "format": "prettier --cache --check .",
+ "format:fix": "prettier --cache --check . --write",
+ "lint": "eslint --cache .",
+ "lint:fix": "eslint --cache . --fix"
+ },
+ "dependencies": {
+ "@collectivo/collectivo": "workspace:*"
+ },
+ "devDependencies": {
+ "@nuxt/devtools": "latest",
+ "@nuxt/test-utils": "^3.7.1",
+ "nuxt": "^3.7.0",
+ "vitest": "^0.34.3",
+ "@typescript-eslint/eslint-plugin": "6.11.0",
+ "@typescript-eslint/parser": "6.11.0",
+ "eslint": "8.54.0",
+ "eslint-config-prettier": "9.0.0",
+ "eslint-plugin-vue": "9.18.1",
+ "prettier": "3.1.0"
+ }
+}
diff --git a/collectivo/extensions/shifts/pages/shifts/index.vue b/collectivo/extensions/shifts/pages/shifts/index.vue
new file mode 100644
index 00000000..fd0d785c
--- /dev/null
+++ b/collectivo/extensions/shifts/pages/shifts/index.vue
@@ -0,0 +1,9 @@
+
+
+
+
+
+ SHIFTS 2322
+
diff --git a/collectivo/extensions/shifts/pnpm-lock.yaml b/collectivo/extensions/shifts/pnpm-lock.yaml
new file mode 100644
index 00000000..079ab29a
--- /dev/null
+++ b/collectivo/extensions/shifts/pnpm-lock.yaml
@@ -0,0 +1,9242 @@
+lockfileVersion: "6.0"
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+devDependencies:
+ "@nuxt/devtools":
+ specifier: latest
+ version: 0.8.2(nuxt@3.7.0)(vite@4.4.9)
+ nuxt:
+ specifier: ^3.7.0
+ version: 3.7.0
+
+packages:
+ /@ampproject/remapping@2.2.1:
+ resolution:
+ {
+ integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==,
+ }
+ engines: { node: ">=6.0.0" }
+ dependencies:
+ "@jridgewell/gen-mapping": 0.3.3
+ "@jridgewell/trace-mapping": 0.3.19
+ dev: true
+
+ /@antfu/utils@0.7.6:
+ resolution:
+ {
+ integrity: sha512-pvFiLP2BeOKA/ZOS6jxx4XhKzdVLHDhGlFEaZ2flWWYf2xOqVniqpk38I04DFRyz+L0ASggl7SkItTc+ZLju4w==,
+ }
+ dev: true
+
+ /@babel/code-frame@7.22.13:
+ resolution:
+ {
+ integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==,
+ }
+ engines: { node: ">=6.9.0" }
+ dependencies:
+ "@babel/highlight": 7.22.13
+ chalk: 2.4.2
+ dev: true
+
+ /@babel/compat-data@7.22.9:
+ resolution:
+ {
+ integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==,
+ }
+ engines: { node: ">=6.9.0" }
+ dev: true
+
+ /@babel/core@7.22.11:
+ resolution:
+ {
+ integrity: sha512-lh7RJrtPdhibbxndr6/xx0w8+CVlY5FJZiaSz908Fpy+G0xkBFTvwLcKJFF4PJxVfGhVWNebikpWGnOoC71juQ==,
+ }
+ engines: { node: ">=6.9.0" }
+ dependencies:
+ "@ampproject/remapping": 2.2.1
+ "@babel/code-frame": 7.22.13
+ "@babel/generator": 7.22.10
+ "@babel/helper-compilation-targets": 7.22.10
+ "@babel/helper-module-transforms": 7.22.9(@babel/core@7.22.11)
+ "@babel/helpers": 7.22.11
+ "@babel/parser": 7.22.13
+ "@babel/template": 7.22.5
+ "@babel/traverse": 7.22.11
+ "@babel/types": 7.22.11
+ convert-source-map: 1.9.0
+ debug: 4.3.4
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/generator@7.22.10:
+ resolution:
+ {
+ integrity: sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==,
+ }
+ engines: { node: ">=6.9.0" }
+ dependencies:
+ "@babel/types": 7.22.11
+ "@jridgewell/gen-mapping": 0.3.3
+ "@jridgewell/trace-mapping": 0.3.19
+ jsesc: 2.5.2
+ dev: true
+
+ /@babel/helper-annotate-as-pure@7.22.5:
+ resolution:
+ {
+ integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==,
+ }
+ engines: { node: ">=6.9.0" }
+ dependencies:
+ "@babel/types": 7.22.11
+ dev: true
+
+ /@babel/helper-compilation-targets@7.22.10:
+ resolution:
+ {
+ integrity: sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==,
+ }
+ engines: { node: ">=6.9.0" }
+ dependencies:
+ "@babel/compat-data": 7.22.9
+ "@babel/helper-validator-option": 7.22.5
+ browserslist: 4.21.10
+ lru-cache: 5.1.1
+ semver: 6.3.1
+ dev: true
+
+ /@babel/helper-create-class-features-plugin@7.22.11(@babel/core@7.22.11):
+ resolution:
+ {
+ integrity: sha512-y1grdYL4WzmUDBRGK0pDbIoFd7UZKoDurDzWEoNMYoj1EL+foGRQNyPWDcC+YyegN5y1DUsFFmzjGijB3nSVAQ==,
+ }
+ engines: { node: ">=6.9.0" }
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ dependencies:
+ "@babel/core": 7.22.11
+ "@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-optimise-call-expression": 7.22.5
+ "@babel/helper-replace-supers": 7.22.9(@babel/core@7.22.11)
+ "@babel/helper-skip-transparent-expression-wrappers": 7.22.5
+ "@babel/helper-split-export-declaration": 7.22.6
+ semver: 6.3.1
+ dev: true
+
+ /@babel/helper-environment-visitor@7.22.5:
+ resolution:
+ {
+ integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==,
+ }
+ engines: { node: ">=6.9.0" }
+ dev: true
+
+ /@babel/helper-function-name@7.22.5:
+ resolution:
+ {
+ integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==,
+ }
+ engines: { node: ">=6.9.0" }
+ dependencies:
+ "@babel/template": 7.22.5
+ "@babel/types": 7.22.11
+ dev: true
+
+ /@babel/helper-hoist-variables@7.22.5:
+ resolution:
+ {
+ integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==,
+ }
+ engines: { node: ">=6.9.0" }
+ dependencies:
+ "@babel/types": 7.22.11
+ dev: true
+
+ /@babel/helper-member-expression-to-functions@7.22.5:
+ resolution:
+ {
+ integrity: sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==,
+ }
+ engines: { node: ">=6.9.0" }
+ dependencies:
+ "@babel/types": 7.22.11
+ dev: true
+
+ /@babel/helper-module-imports@7.22.5:
+ resolution:
+ {
+ integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==,
+ }
+ engines: { node: ">=6.9.0" }
+ dependencies:
+ "@babel/types": 7.22.11
+ dev: true
+
+ /@babel/helper-module-transforms@7.22.9(@babel/core@7.22.11):
+ resolution:
+ {
+ integrity: sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==,
+ }
+ engines: { node: ">=6.9.0" }
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ dependencies:
+ "@babel/core": 7.22.11
+ "@babel/helper-environment-visitor": 7.22.5
+ "@babel/helper-module-imports": 7.22.5
+ "@babel/helper-simple-access": 7.22.5
+ "@babel/helper-split-export-declaration": 7.22.6
+ "@babel/helper-validator-identifier": 7.22.5
+ dev: true
+
+ /@babel/helper-optimise-call-expression@7.22.5:
+ resolution:
+ {
+ integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==,
+ }
+ engines: { node: ">=6.9.0" }
+ dependencies:
+ "@babel/types": 7.22.11
+ dev: true
+
+ /@babel/helper-plugin-utils@7.22.5:
+ resolution:
+ {
+ integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==,
+ }
+ engines: { node: ">=6.9.0" }
+ dev: true
+
+ /@babel/helper-replace-supers@7.22.9(@babel/core@7.22.11):
+ resolution:
+ {
+ integrity: sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==,
+ }
+ engines: { node: ">=6.9.0" }
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ dependencies:
+ "@babel/core": 7.22.11
+ "@babel/helper-environment-visitor": 7.22.5
+ "@babel/helper-member-expression-to-functions": 7.22.5
+ "@babel/helper-optimise-call-expression": 7.22.5
+ dev: true
+
+ /@babel/helper-simple-access@7.22.5:
+ resolution:
+ {
+ integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==,
+ }
+ engines: { node: ">=6.9.0" }
+ dependencies:
+ "@babel/types": 7.22.11
+ dev: true
+
+ /@babel/helper-skip-transparent-expression-wrappers@7.22.5:
+ resolution:
+ {
+ integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==,
+ }
+ engines: { node: ">=6.9.0" }
+ dependencies:
+ "@babel/types": 7.22.11
+ dev: true
+
+ /@babel/helper-split-export-declaration@7.22.6:
+ resolution:
+ {
+ integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==,
+ }
+ engines: { node: ">=6.9.0" }
+ dependencies:
+ "@babel/types": 7.22.11
+ dev: true
+
+ /@babel/helper-string-parser@7.22.5:
+ resolution:
+ {
+ integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==,
+ }
+ engines: { node: ">=6.9.0" }
+ dev: true
+
+ /@babel/helper-validator-identifier@7.22.5:
+ resolution:
+ {
+ integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==,
+ }
+ engines: { node: ">=6.9.0" }
+ dev: true
+
+ /@babel/helper-validator-option@7.22.5:
+ resolution:
+ {
+ integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==,
+ }
+ engines: { node: ">=6.9.0" }
+ dev: true
+
+ /@babel/helpers@7.22.11:
+ resolution:
+ {
+ integrity: sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg==,
+ }
+ engines: { node: ">=6.9.0" }
+ dependencies:
+ "@babel/template": 7.22.5
+ "@babel/traverse": 7.22.11
+ "@babel/types": 7.22.11
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/highlight@7.22.13:
+ resolution:
+ {
+ integrity: sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==,
+ }
+ engines: { node: ">=6.9.0" }
+ dependencies:
+ "@babel/helper-validator-identifier": 7.22.5
+ chalk: 2.4.2
+ js-tokens: 4.0.0
+ dev: true
+
+ /@babel/parser@7.22.13:
+ resolution:
+ {
+ integrity: sha512-3l6+4YOvc9wx7VlCSw4yQfcBo01ECA8TicQfbnCPuCEpRQrf+gTUyGdxNw+pyTUyywp6JRD1w0YQs9TpBXYlkw==,
+ }
+ engines: { node: ">=6.0.0" }
+ hasBin: true
+ dependencies:
+ "@babel/types": 7.22.11
+ dev: true
+
+ /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.11):
+ resolution:
+ {
+ integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==,
+ }
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ dependencies:
+ "@babel/core": 7.22.11
+ "@babel/helper-plugin-utils": 7.22.5
+ dev: true
+
+ /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.11):
+ resolution:
+ {
+ integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==,
+ }
+ engines: { node: ">=6.9.0" }
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ dependencies:
+ "@babel/core": 7.22.11
+ "@babel/helper-plugin-utils": 7.22.5
+ dev: true
+
+ /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.22.11):
+ resolution:
+ {
+ integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==,
+ }
+ engines: { node: ">=6.9.0" }
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ dependencies:
+ "@babel/core": 7.22.11
+ "@babel/helper-plugin-utils": 7.22.5
+ dev: true
+
+ /@babel/plugin-transform-typescript@7.22.11(@babel/core@7.22.11):
+ resolution:
+ {
+ integrity: sha512-0E4/L+7gfvHub7wsbTv03oRtD69X31LByy44fGmFzbZScpupFByMcgCJ0VbBTkzyjSJKuRoGN8tcijOWKTmqOA==,
+ }
+ engines: { node: ">=6.9.0" }
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ dependencies:
+ "@babel/core": 7.22.11
+ "@babel/helper-annotate-as-pure": 7.22.5
+ "@babel/helper-create-class-features-plugin": 7.22.11(@babel/core@7.22.11)
+ "@babel/helper-plugin-utils": 7.22.5
+ "@babel/plugin-syntax-typescript": 7.22.5(@babel/core@7.22.11)
+ dev: true
+
+ /@babel/standalone@7.22.13:
+ resolution:
+ {
+ integrity: sha512-JoI61IOKM8jJv8V4yD0HprU/Lnx3Y29bGGULdIdJgvIUS7oCWcl43gtXoLY7nrYZhZerXYncYfDtmq4wUEofcg==,
+ }
+ engines: { node: ">=6.9.0" }
+ dev: true
+
+ /@babel/template@7.22.5:
+ resolution:
+ {
+ integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==,
+ }
+ engines: { node: ">=6.9.0" }
+ dependencies:
+ "@babel/code-frame": 7.22.13
+ "@babel/parser": 7.22.13
+ "@babel/types": 7.22.11
+ dev: true
+
+ /@babel/traverse@7.22.11:
+ resolution:
+ {
+ integrity: sha512-mzAenteTfomcB7mfPtyi+4oe5BZ6MXxWcn4CX+h4IRJ+OOGXBrWU6jDQavkQI9Vuc5P+donFabBfFCcmWka9lQ==,
+ }
+ engines: { node: ">=6.9.0" }
+ dependencies:
+ "@babel/code-frame": 7.22.13
+ "@babel/generator": 7.22.10
+ "@babel/helper-environment-visitor": 7.22.5
+ "@babel/helper-function-name": 7.22.5
+ "@babel/helper-hoist-variables": 7.22.5
+ "@babel/helper-split-export-declaration": 7.22.6
+ "@babel/parser": 7.22.13
+ "@babel/types": 7.22.11
+ debug: 4.3.4
+ globals: 11.12.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/types@7.22.11:
+ resolution:
+ {
+ integrity: sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==,
+ }
+ engines: { node: ">=6.9.0" }
+ dependencies:
+ "@babel/helper-string-parser": 7.22.5
+ "@babel/helper-validator-identifier": 7.22.5
+ to-fast-properties: 2.0.0
+ dev: true
+
+ /@cloudflare/kv-asset-handler@0.3.0:
+ resolution:
+ {
+ integrity: sha512-9CB/MKf/wdvbfkUdfrj+OkEwZ5b7rws0eogJ4293h+7b6KX5toPwym+VQKmILafNB9YiehqY0DlNrDcDhdWHSQ==,
+ }
+ dependencies:
+ mime: 3.0.0
+ dev: true
+
+ /@esbuild-kit/cjs-loader@2.4.2:
+ resolution:
+ {
+ integrity: sha512-BDXFbYOJzT/NBEtp71cvsrGPwGAMGRB/349rwKuoxNSiKjPraNNnlK6MIIabViCjqZugu6j+xeMDlEkWdHHJSg==,
+ }
+ dependencies:
+ "@esbuild-kit/core-utils": 3.2.2
+ get-tsconfig: 4.7.0
+ dev: true
+
+ /@esbuild-kit/core-utils@3.2.2:
+ resolution:
+ {
+ integrity: sha512-Ub6LaRaAgF80dTSzUdXpFLM1pVDdmEVB9qb5iAzSpyDlX/mfJTFGOnZ516O05p5uWWteNviMKi4PAyEuRxI5gA==,
+ }
+ dependencies:
+ esbuild: 0.18.20
+ source-map-support: 0.5.21
+ dev: true
+
+ /@esbuild-kit/esm-loader@2.5.5:
+ resolution:
+ {
+ integrity: sha512-Qwfvj/qoPbClxCRNuac1Du01r9gvNOT+pMYtJDapfB1eoGN1YlJ1BixLyL9WVENRx5RXgNLdfYdx/CuswlGhMw==,
+ }
+ dependencies:
+ "@esbuild-kit/core-utils": 3.2.2
+ get-tsconfig: 4.7.0
+ dev: true
+
+ /@esbuild/android-arm64@0.18.20:
+ resolution:
+ {
+ integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==,
+ }
+ engines: { node: ">=12" }
+ cpu: [arm64]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/android-arm64@0.19.2:
+ resolution:
+ {
+ integrity: sha512-lsB65vAbe90I/Qe10OjkmrdxSX4UJDjosDgb8sZUKcg3oefEuW2OT2Vozz8ef7wrJbMcmhvCC+hciF8jY/uAkw==,
+ }
+ engines: { node: ">=12" }
+ cpu: [arm64]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/android-arm@0.18.20:
+ resolution:
+ {
+ integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==,
+ }
+ engines: { node: ">=12" }
+ cpu: [arm]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/android-arm@0.19.2:
+ resolution:
+ {
+ integrity: sha512-tM8yLeYVe7pRyAu9VMi/Q7aunpLwD139EY1S99xbQkT4/q2qa6eA4ige/WJQYdJ8GBL1K33pPFhPfPdJ/WzT8Q==,
+ }
+ engines: { node: ">=12" }
+ cpu: [arm]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/android-x64@0.18.20:
+ resolution:
+ {
+ integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==,
+ }
+ engines: { node: ">=12" }
+ cpu: [x64]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/android-x64@0.19.2:
+ resolution:
+ {
+ integrity: sha512-qK/TpmHt2M/Hg82WXHRc/W/2SGo/l1thtDHZWqFq7oi24AjZ4O/CpPSu6ZuYKFkEgmZlFoa7CooAyYmuvnaG8w==,
+ }
+ engines: { node: ">=12" }
+ cpu: [x64]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/darwin-arm64@0.18.20:
+ resolution:
+ {
+ integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==,
+ }
+ engines: { node: ">=12" }
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/darwin-arm64@0.19.2:
+ resolution:
+ {
+ integrity: sha512-Ora8JokrvrzEPEpZO18ZYXkH4asCdc1DLdcVy8TGf5eWtPO1Ie4WroEJzwI52ZGtpODy3+m0a2yEX9l+KUn0tA==,
+ }
+ engines: { node: ">=12" }
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/darwin-x64@0.18.20:
+ resolution:
+ {
+ integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==,
+ }
+ engines: { node: ">=12" }
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/darwin-x64@0.19.2:
+ resolution:
+ {
+ integrity: sha512-tP+B5UuIbbFMj2hQaUr6EALlHOIOmlLM2FK7jeFBobPy2ERdohI4Ka6ZFjZ1ZYsrHE/hZimGuU90jusRE0pwDw==,
+ }
+ engines: { node: ">=12" }
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/freebsd-arm64@0.18.20:
+ resolution:
+ {
+ integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==,
+ }
+ engines: { node: ">=12" }
+ cpu: [arm64]
+ os: [freebsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/freebsd-arm64@0.19.2:
+ resolution:
+ {
+ integrity: sha512-YbPY2kc0acfzL1VPVK6EnAlig4f+l8xmq36OZkU0jzBVHcOTyQDhnKQaLzZudNJQyymd9OqQezeaBgkTGdTGeQ==,
+ }
+ engines: { node: ">=12" }
+ cpu: [arm64]
+ os: [freebsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/freebsd-x64@0.18.20:
+ resolution:
+ {
+ integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==,
+ }
+ engines: { node: ">=12" }
+ cpu: [x64]
+ os: [freebsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/freebsd-x64@0.19.2:
+ resolution:
+ {
+ integrity: sha512-nSO5uZT2clM6hosjWHAsS15hLrwCvIWx+b2e3lZ3MwbYSaXwvfO528OF+dLjas1g3bZonciivI8qKR/Hm7IWGw==,
+ }
+ engines: { node: ">=12" }
+ cpu: [x64]
+ os: [freebsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-arm64@0.18.20:
+ resolution:
+ {
+ integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==,
+ }
+ engines: { node: ">=12" }
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-arm64@0.19.2:
+ resolution:
+ {
+ integrity: sha512-ig2P7GeG//zWlU0AggA3pV1h5gdix0MA3wgB+NsnBXViwiGgY77fuN9Wr5uoCrs2YzaYfogXgsWZbm+HGr09xg==,
+ }
+ engines: { node: ">=12" }
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-arm@0.18.20:
+ resolution:
+ {
+ integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==,
+ }
+ engines: { node: ">=12" }
+ cpu: [arm]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-arm@0.19.2:
+ resolution:
+ {
+ integrity: sha512-Odalh8hICg7SOD7XCj0YLpYCEc+6mkoq63UnExDCiRA2wXEmGlK5JVrW50vZR9Qz4qkvqnHcpH+OFEggO3PgTg==,
+ }
+ engines: { node: ">=12" }
+ cpu: [arm]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-ia32@0.18.20:
+ resolution:
+ {
+ integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==,
+ }
+ engines: { node: ">=12" }
+ cpu: [ia32]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-ia32@0.19.2:
+ resolution:
+ {
+ integrity: sha512-mLfp0ziRPOLSTek0Gd9T5B8AtzKAkoZE70fneiiyPlSnUKKI4lp+mGEnQXcQEHLJAcIYDPSyBvsUbKUG2ri/XQ==,
+ }
+ engines: { node: ">=12" }
+ cpu: [ia32]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-loong64@0.18.20:
+ resolution:
+ {
+ integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==,
+ }
+ engines: { node: ">=12" }
+ cpu: [loong64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-loong64@0.19.2:
+ resolution:
+ {
+ integrity: sha512-hn28+JNDTxxCpnYjdDYVMNTR3SKavyLlCHHkufHV91fkewpIyQchS1d8wSbmXhs1fiYDpNww8KTFlJ1dHsxeSw==,
+ }
+ engines: { node: ">=12" }
+ cpu: [loong64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-mips64el@0.18.20:
+ resolution:
+ {
+ integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==,
+ }
+ engines: { node: ">=12" }
+ cpu: [mips64el]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-mips64el@0.19.2:
+ resolution:
+ {
+ integrity: sha512-KbXaC0Sejt7vD2fEgPoIKb6nxkfYW9OmFUK9XQE4//PvGIxNIfPk1NmlHmMg6f25x57rpmEFrn1OotASYIAaTg==,
+ }
+ engines: { node: ">=12" }
+ cpu: [mips64el]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-ppc64@0.18.20:
+ resolution:
+ {
+ integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==,
+ }
+ engines: { node: ">=12" }
+ cpu: [ppc64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-ppc64@0.19.2:
+ resolution:
+ {
+ integrity: sha512-dJ0kE8KTqbiHtA3Fc/zn7lCd7pqVr4JcT0JqOnbj4LLzYnp+7h8Qi4yjfq42ZlHfhOCM42rBh0EwHYLL6LEzcw==,
+ }
+ engines: { node: ">=12" }
+ cpu: [ppc64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-riscv64@0.18.20:
+ resolution:
+ {
+ integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==,
+ }
+ engines: { node: ">=12" }
+ cpu: [riscv64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-riscv64@0.19.2:
+ resolution:
+ {
+ integrity: sha512-7Z/jKNFufZ/bbu4INqqCN6DDlrmOTmdw6D0gH+6Y7auok2r02Ur661qPuXidPOJ+FSgbEeQnnAGgsVynfLuOEw==,
+ }
+ engines: { node: ">=12" }
+ cpu: [riscv64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-s390x@0.18.20:
+ resolution:
+ {
+ integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==,
+ }
+ engines: { node: ">=12" }
+ cpu: [s390x]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-s390x@0.19.2:
+ resolution:
+ {
+ integrity: sha512-U+RinR6aXXABFCcAY4gSlv4CL1oOVvSSCdseQmGO66H+XyuQGZIUdhG56SZaDJQcLmrSfRmx5XZOWyCJPRqS7g==,
+ }
+ engines: { node: ">=12" }
+ cpu: [s390x]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-x64@0.18.20:
+ resolution:
+ {
+ integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==,
+ }
+ engines: { node: ">=12" }
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-x64@0.19.2:
+ resolution:
+ {
+ integrity: sha512-oxzHTEv6VPm3XXNaHPyUTTte+3wGv7qVQtqaZCrgstI16gCuhNOtBXLEBkBREP57YTd68P0VgDgG73jSD8bwXQ==,
+ }
+ engines: { node: ">=12" }
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/netbsd-x64@0.18.20:
+ resolution:
+ {
+ integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==,
+ }
+ engines: { node: ">=12" }
+ cpu: [x64]
+ os: [netbsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/netbsd-x64@0.19.2:
+ resolution:
+ {
+ integrity: sha512-WNa5zZk1XpTTwMDompZmvQLHszDDDN7lYjEHCUmAGB83Bgs20EMs7ICD+oKeT6xt4phV4NDdSi/8OfjPbSbZfQ==,
+ }
+ engines: { node: ">=12" }
+ cpu: [x64]
+ os: [netbsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/openbsd-x64@0.18.20:
+ resolution:
+ {
+ integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==,
+ }
+ engines: { node: ">=12" }
+ cpu: [x64]
+ os: [openbsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/openbsd-x64@0.19.2:
+ resolution:
+ {
+ integrity: sha512-S6kI1aT3S++Dedb7vxIuUOb3oAxqxk2Rh5rOXOTYnzN8JzW1VzBd+IqPiSpgitu45042SYD3HCoEyhLKQcDFDw==,
+ }
+ engines: { node: ">=12" }
+ cpu: [x64]
+ os: [openbsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/sunos-x64@0.18.20:
+ resolution:
+ {
+ integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==,
+ }
+ engines: { node: ">=12" }
+ cpu: [x64]
+ os: [sunos]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/sunos-x64@0.19.2:
+ resolution:
+ {
+ integrity: sha512-VXSSMsmb+Z8LbsQGcBMiM+fYObDNRm8p7tkUDMPG/g4fhFX5DEFmjxIEa3N8Zr96SjsJ1woAhF0DUnS3MF3ARw==,
+ }
+ engines: { node: ">=12" }
+ cpu: [x64]
+ os: [sunos]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/win32-arm64@0.18.20:
+ resolution:
+ {
+ integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==,
+ }
+ engines: { node: ">=12" }
+ cpu: [arm64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/win32-arm64@0.19.2:
+ resolution:
+ {
+ integrity: sha512-5NayUlSAyb5PQYFAU9x3bHdsqB88RC3aM9lKDAz4X1mo/EchMIT1Q+pSeBXNgkfNmRecLXA0O8xP+x8V+g/LKg==,
+ }
+ engines: { node: ">=12" }
+ cpu: [arm64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/win32-ia32@0.18.20:
+ resolution:
+ {
+ integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==,
+ }
+ engines: { node: ">=12" }
+ cpu: [ia32]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/win32-ia32@0.19.2:
+ resolution:
+ {
+ integrity: sha512-47gL/ek1v36iN0wL9L4Q2MFdujR0poLZMJwhO2/N3gA89jgHp4MR8DKCmwYtGNksbfJb9JoTtbkoe6sDhg2QTA==,
+ }
+ engines: { node: ">=12" }
+ cpu: [ia32]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/win32-x64@0.18.20:
+ resolution:
+ {
+ integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==,
+ }
+ engines: { node: ">=12" }
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/win32-x64@0.19.2:
+ resolution:
+ {
+ integrity: sha512-tcuhV7ncXBqbt/Ybf0IyrMcwVOAPDckMK9rXNHtF17UTK18OKLpg08glminN06pt2WCoALhXdLfSPbVvK/6fxw==,
+ }
+ engines: { node: ">=12" }
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@hapi/hoek@9.3.0:
+ resolution:
+ {
+ integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==,
+ }
+ dev: true
+
+ /@hapi/topo@5.1.0:
+ resolution:
+ {
+ integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==,
+ }
+ dependencies:
+ "@hapi/hoek": 9.3.0
+ dev: true
+
+ /@ioredis/commands@1.2.0:
+ resolution:
+ {
+ integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==,
+ }
+ dev: true
+
+ /@isaacs/cliui@8.0.2:
+ resolution:
+ {
+ integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==,
+ }
+ engines: { node: ">=12" }
+ dependencies:
+ string-width: 5.1.2
+ string-width-cjs: /string-width@4.2.3
+ strip-ansi: 7.1.0
+ strip-ansi-cjs: /strip-ansi@6.0.1
+ wrap-ansi: 8.1.0
+ wrap-ansi-cjs: /wrap-ansi@7.0.0
+ dev: true
+
+ /@jridgewell/gen-mapping@0.3.3:
+ resolution:
+ {
+ integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==,
+ }
+ engines: { node: ">=6.0.0" }
+ dependencies:
+ "@jridgewell/set-array": 1.1.2
+ "@jridgewell/sourcemap-codec": 1.4.15
+ "@jridgewell/trace-mapping": 0.3.19
+ dev: true
+
+ /@jridgewell/resolve-uri@3.1.1:
+ resolution:
+ {
+ integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==,
+ }
+ engines: { node: ">=6.0.0" }
+ dev: true
+
+ /@jridgewell/set-array@1.1.2:
+ resolution:
+ {
+ integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==,
+ }
+ engines: { node: ">=6.0.0" }
+ dev: true
+
+ /@jridgewell/source-map@0.3.5:
+ resolution:
+ {
+ integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==,
+ }
+ dependencies:
+ "@jridgewell/gen-mapping": 0.3.3
+ "@jridgewell/trace-mapping": 0.3.19
+ dev: true
+
+ /@jridgewell/sourcemap-codec@1.4.15:
+ resolution:
+ {
+ integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==,
+ }
+ dev: true
+
+ /@jridgewell/trace-mapping@0.3.19:
+ resolution:
+ {
+ integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==,
+ }
+ dependencies:
+ "@jridgewell/resolve-uri": 3.1.1
+ "@jridgewell/sourcemap-codec": 1.4.15
+ dev: true
+
+ /@kwsites/file-exists@1.1.1:
+ resolution:
+ {
+ integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==,
+ }
+ dependencies:
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@kwsites/promise-deferred@1.1.1:
+ resolution:
+ {
+ integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==,
+ }
+ dev: true
+
+ /@mapbox/node-pre-gyp@1.0.11:
+ resolution:
+ {
+ integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==,
+ }
+ hasBin: true
+ dependencies:
+ detect-libc: 2.0.2
+ https-proxy-agent: 5.0.1
+ make-dir: 3.1.0
+ node-fetch: 2.7.0
+ nopt: 5.0.0
+ npmlog: 5.0.1
+ rimraf: 3.0.2
+ semver: 7.5.4
+ tar: 6.1.15
+ transitivePeerDependencies:
+ - encoding
+ - supports-color
+ dev: true
+
+ /@netlify/functions@2.0.2:
+ resolution:
+ {
+ integrity: sha512-goWRtaIPUK/q47qLYtfGGj7HgJIRaT0snw7zZ0yeoNTfQfCRwQwvRrMAsXkCsCtq2N2Oo81L26SpkMxEQMk9hg==,
+ }
+ engines: { node: ">=14.0.0" }
+ dependencies:
+ "@netlify/serverless-functions-api": 1.7.3
+ is-promise: 4.0.0
+ dev: true
+
+ /@netlify/node-cookies@0.1.0:
+ resolution:
+ {
+ integrity: sha512-OAs1xG+FfLX0LoRASpqzVntVV/RpYkgpI0VrUnw2u0Q1qiZUzcPffxRK8HF3gc4GjuhG5ahOEMJ9bswBiZPq0g==,
+ }
+ engines: { node: ^14.16.0 || >=16.0.0 }
+ dev: true
+
+ /@netlify/serverless-functions-api@1.7.3:
+ resolution:
+ {
+ integrity: sha512-n6/7cJlSWvvbBlUOEAbkGyEld80S6KbG/ldQI9OhLfe1lTatgKmrTNIgqVNpaWpUdTgP2OHWFjmFBzkxxBWs5w==,
+ }
+ engines: { node: ^14.18.0 || >=16.0.0 }
+ dependencies:
+ "@netlify/node-cookies": 0.1.0
+ urlpattern-polyfill: 8.0.2
+ dev: true
+
+ /@nodelib/fs.scandir@2.1.5:
+ resolution:
+ {
+ integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==,
+ }
+ engines: { node: ">= 8" }
+ dependencies:
+ "@nodelib/fs.stat": 2.0.5
+ run-parallel: 1.2.0
+ dev: true
+
+ /@nodelib/fs.stat@2.0.5:
+ resolution:
+ {
+ integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==,
+ }
+ engines: { node: ">= 8" }
+ dev: true
+
+ /@nodelib/fs.walk@1.2.8:
+ resolution:
+ {
+ integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==,
+ }
+ engines: { node: ">= 8" }
+ dependencies:
+ "@nodelib/fs.scandir": 2.1.5
+ fastq: 1.15.0
+ dev: true
+
+ /@npmcli/agent@2.0.0:
+ resolution:
+ {
+ integrity: sha512-RpRbD6PnaQIUl+p8MoH7sl2CHyMofCO0abOV+0VulqKW84+0nRWnj0bYFQELTN5HpNvzWAV8pRN6Fjx9ZLOS0g==,
+ }
+ engines: { node: ^16.14.0 || >=18.0.0 }
+ dependencies:
+ lru-cache: 10.0.1
+ socks: 2.7.1
+ dev: true
+
+ /@npmcli/fs@3.1.0:
+ resolution:
+ {
+ integrity: sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==,
+ }
+ engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ dependencies:
+ semver: 7.5.4
+ dev: true
+
+ /@npmcli/git@5.0.1:
+ resolution:
+ {
+ integrity: sha512-9zUEqmRMZU5bmqWVu83wFVHH9kwLEQeMuDUDSYsBK/L4qbBl8Shdoc5EWfANzAdy5kFuPbBn7ToXTakbVdlCZg==,
+ }
+ engines: { node: ^16.14.0 || >=18.0.0 }
+ dependencies:
+ "@npmcli/promise-spawn": 6.0.2
+ lru-cache: 10.0.1
+ npm-pick-manifest: 9.0.0
+ proc-log: 3.0.0
+ promise-inflight: 1.0.1
+ promise-retry: 2.0.1
+ semver: 7.5.4
+ which: 3.0.1
+ transitivePeerDependencies:
+ - bluebird
+ dev: true
+
+ /@npmcli/installed-package-contents@2.0.2:
+ resolution:
+ {
+ integrity: sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==,
+ }
+ engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ hasBin: true
+ dependencies:
+ npm-bundled: 3.0.0
+ npm-normalize-package-bin: 3.0.1
+ dev: true
+
+ /@npmcli/node-gyp@3.0.0:
+ resolution:
+ {
+ integrity: sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==,
+ }
+ engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ dev: true
+
+ /@npmcli/promise-spawn@6.0.2:
+ resolution:
+ {
+ integrity: sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==,
+ }
+ engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ dependencies:
+ which: 3.0.1
+ dev: true
+
+ /@npmcli/run-script@6.0.2:
+ resolution:
+ {
+ integrity: sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==,
+ }
+ engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ dependencies:
+ "@npmcli/node-gyp": 3.0.0
+ "@npmcli/promise-spawn": 6.0.2
+ node-gyp: 9.4.0
+ read-package-json-fast: 3.0.2
+ which: 3.0.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@nuxt/devalue@2.0.2:
+ resolution:
+ {
+ integrity: sha512-GBzP8zOc7CGWyFQS6dv1lQz8VVpz5C2yRszbXufwG/9zhStTIH50EtD87NmWbTMwXDvZLNg8GIpb1UFdH93JCA==,
+ }
+ dev: true
+
+ /@nuxt/devtools-kit@0.8.2(nuxt@3.7.0)(vite@4.4.9):
+ resolution:
+ {
+ integrity: sha512-GEqpBxa/ojfhAM9HN5L/OzCADpfH9nDbcC7INHFgao6KuAu6JclTpcuV6VZP6LthsETBsd2cKAt93WY+vEJnnQ==,
+ }
+ peerDependencies:
+ nuxt: ^3.6.5
+ vite: "*"
+ dependencies:
+ "@nuxt/kit": 3.7.0
+ "@nuxt/schema": 3.7.0
+ execa: 7.2.0
+ nuxt: 3.7.0
+ vite: 4.4.9
+ transitivePeerDependencies:
+ - rollup
+ - supports-color
+ dev: true
+
+ /@nuxt/devtools-wizard@0.8.2:
+ resolution:
+ {
+ integrity: sha512-d6uT98di8T6Bn/aQpRwMZPjUtrdBmjNAdrDS8s3e2SDy13HVMAsEVbJWKtfYV8oN8vrSkB0Z6tGgdbKyOLyiuw==,
+ }
+ hasBin: true
+ dependencies:
+ consola: 3.2.3
+ diff: 5.1.0
+ execa: 7.2.0
+ global-dirs: 3.0.1
+ magicast: 0.2.10
+ pathe: 1.1.1
+ picocolors: 1.0.0
+ pkg-types: 1.0.3
+ prompts: 2.4.2
+ rc9: 2.1.1
+ semver: 7.5.4
+ dev: true
+
+ /@nuxt/devtools@0.8.2(nuxt@3.7.0)(vite@4.4.9):
+ resolution:
+ {
+ integrity: sha512-E3ycLEkqTlXpdz3P7lJRMdB4AnC4tzALM6N6eCUskSCtUQfF57mjk0k7z1duHIjU8xTIFm6gnsotJnR/n6/B0g==,
+ }
+ hasBin: true
+ peerDependencies:
+ nuxt: ^3.6.5
+ vite: "*"
+ dependencies:
+ "@antfu/utils": 0.7.6
+ "@nuxt/devtools-kit": 0.8.2(nuxt@3.7.0)(vite@4.4.9)
+ "@nuxt/devtools-wizard": 0.8.2
+ "@nuxt/kit": 3.7.0
+ birpc: 0.2.13
+ boxen: 7.1.1
+ consola: 3.2.3
+ error-stack-parser-es: 0.1.1
+ execa: 7.2.0
+ fast-folder-size: 2.2.0
+ fast-glob: 3.3.1
+ flatted: 3.2.7
+ get-port-please: 3.0.2
+ global-dirs: 3.0.1
+ h3: 1.8.1
+ hookable: 5.5.3
+ image-meta: 0.1.1
+ is-installed-globally: 0.4.0
+ launch-editor: 2.6.0
+ local-pkg: 0.4.3
+ magicast: 0.2.10
+ nuxt: 3.7.0
+ nypm: 0.3.2
+ ofetch: 1.3.3
+ ohash: 1.1.3
+ pacote: 17.0.3
+ pathe: 1.1.1
+ perfect-debounce: 1.0.0
+ picocolors: 1.0.0
+ pkg-types: 1.0.3
+ rc9: 2.1.1
+ semver: 7.5.4
+ simple-git: 3.19.1
+ sirv: 2.0.3
+ unimport: 3.2.0(rollup@3.28.1)
+ vite: 4.4.9
+ vite-plugin-inspect: 0.7.38(@nuxt/kit@3.7.0)(vite@4.4.9)
+ vite-plugin-vue-inspector: 3.6.0(vite@4.4.9)
+ wait-on: 7.0.1
+ which: 3.0.1
+ ws: 8.13.0
+ transitivePeerDependencies:
+ - bluebird
+ - bufferutil
+ - debug
+ - rollup
+ - supports-color
+ - utf-8-validate
+ dev: true
+
+ /@nuxt/kit@3.7.0:
+ resolution:
+ {
+ integrity: sha512-bsPRb2NTLHRacjyybhhA3pZFIqo2pxB6bcP4FQDuzlGzVTI5PtJzbfNpkmQC7q+LZt8K0pNlxKVGisDvZctk6w==,
+ }
+ engines: { node: ^14.18.0 || >=16.10.0 }
+ dependencies:
+ "@nuxt/schema": 3.7.0
+ 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.1
+ 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.2.0(rollup@3.28.1)
+ untyped: 1.4.0
+ transitivePeerDependencies:
+ - rollup
+ - supports-color
+ dev: true
+
+ /@nuxt/schema@3.7.0:
+ resolution:
+ {
+ integrity: sha512-fNRAubny1x6rIibm/HcacnEGeAQri/FkJ5ei24aY4YjQ12+xDfi7bljfFr6C2+CrEGc1beYd4OQcUqXqEpz5+g==,
+ }
+ engines: { node: ^14.18.0 || >=16.10.0 }
+ 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.2.0(rollup@3.28.1)
+ untyped: 1.4.0
+ transitivePeerDependencies:
+ - rollup
+ - supports-color
+ dev: true
+
+ /@nuxt/telemetry@2.4.1:
+ resolution:
+ {
+ integrity: sha512-Cj+4sXjO5pZNW2sX7Y+djYpf4pZwgYF3rV/YHLWIOq9nAjo2UcDXjh1z7qnhkoUkvJN3lHnvhnCNhfAioe6k/A==,
+ }
+ hasBin: true
+ dependencies:
+ "@nuxt/kit": 3.7.0
+ chalk: 5.3.0
+ ci-info: 3.8.0
+ consola: 3.2.3
+ create-require: 1.1.1
+ defu: 6.1.2
+ destr: 2.0.1
+ dotenv: 16.3.1
+ fs-extra: 11.1.1
+ git-url-parse: 13.1.0
+ is-docker: 3.0.0
+ jiti: 1.19.3
+ mri: 1.2.0
+ nanoid: 4.0.2
+ node-fetch: 3.3.2
+ ofetch: 1.3.3
+ parse-git-config: 3.0.0
+ pathe: 1.1.1
+ rc9: 2.1.1
+ std-env: 3.4.3
+ transitivePeerDependencies:
+ - rollup
+ - supports-color
+ dev: true
+
+ /@nuxt/ui-templates@1.3.1:
+ resolution:
+ {
+ integrity: sha512-5gc02Pu1HycOVUWJ8aYsWeeXcSTPe8iX8+KIrhyEtEoOSkY0eMBuo0ssljB8wALuEmepv31DlYe5gpiRwkjESA==,
+ }
+ dev: true
+
+ /@nuxt/vite-builder@3.7.0(vue@3.3.4):
+ resolution:
+ {
+ integrity: sha512-bRJy3KarHrFm/xLGHoHeZyqI/h6c4UFRCF5ngRZ/R9uebJEHuL4UhAioxDLTFu7D0vEeK7XaDgx6+NPLhBg51g==,
+ }
+ engines: { node: ^14.18.0 || >=16.10.0 }
+ peerDependencies:
+ vue: ^3.3.4
+ dependencies:
+ "@nuxt/kit": 3.7.0
+ "@rollup/plugin-replace": 5.0.2(rollup@3.28.1)
+ "@vitejs/plugin-vue": 4.3.4(vite@4.4.9)(vue@3.3.4)
+ "@vitejs/plugin-vue-jsx": 3.0.2(vite@4.4.9)(vue@3.3.4)
+ autoprefixer: 10.4.15(postcss@8.4.29)
+ clear: 0.1.0
+ consola: 3.2.3
+ cssnano: 6.0.1(postcss@8.4.29)
+ defu: 6.1.2
+ esbuild: 0.19.2
+ escape-string-regexp: 5.0.0
+ estree-walker: 3.0.3
+ externality: 1.0.2
+ fs-extra: 11.1.1
+ get-port-please: 3.0.2
+ h3: 1.8.1
+ knitwork: 1.0.0
+ magic-string: 0.30.3
+ mlly: 1.4.1
+ ohash: 1.1.3
+ pathe: 1.1.1
+ perfect-debounce: 1.0.0
+ pkg-types: 1.0.3
+ postcss: 8.4.29
+ postcss-import: 15.1.0(postcss@8.4.29)
+ postcss-url: 10.1.3(postcss@8.4.29)
+ rollup-plugin-visualizer: 5.9.2(rollup@3.28.1)
+ std-env: 3.4.3
+ strip-literal: 1.3.0
+ ufo: 1.3.0
+ unplugin: 1.4.0
+ vite: 4.4.9
+ vite-node: 0.33.0
+ vite-plugin-checker: 0.6.2(vite@4.4.9)
+ vue: 3.3.4
+ vue-bundle-renderer: 2.0.0
+ transitivePeerDependencies:
+ - "@types/node"
+ - eslint
+ - less
+ - lightningcss
+ - meow
+ - optionator
+ - rollup
+ - sass
+ - stylelint
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ - typescript
+ - vls
+ - vti
+ - vue-tsc
+ dev: true
+
+ /@parcel/watcher-android-arm64@2.3.0:
+ resolution:
+ {
+ integrity: sha512-f4o9eA3dgk0XRT3XhB0UWpWpLnKgrh1IwNJKJ7UJek7eTYccQ8LR7XUWFKqw6aEq5KUNlCcGvSzKqSX/vtWVVA==,
+ }
+ engines: { node: ">= 10.0.0" }
+ cpu: [arm64]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@parcel/watcher-darwin-arm64@2.3.0:
+ resolution:
+ {
+ integrity: sha512-mKY+oijI4ahBMc/GygVGvEdOq0L4DxhYgwQqYAz/7yPzuGi79oXrZG52WdpGA1wLBPrYb0T8uBaGFo7I6rvSKw==,
+ }
+ engines: { node: ">= 10.0.0" }
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@parcel/watcher-darwin-x64@2.3.0:
+ resolution:
+ {
+ integrity: sha512-20oBj8LcEOnLE3mgpy6zuOq8AplPu9NcSSSfyVKgfOhNAc4eF4ob3ldj0xWjGGbOF7Dcy1Tvm6ytvgdjlfUeow==,
+ }
+ engines: { node: ">= 10.0.0" }
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@parcel/watcher-freebsd-x64@2.3.0:
+ resolution:
+ {
+ integrity: sha512-7LftKlaHunueAEiojhCn+Ef2CTXWsLgTl4hq0pkhkTBFI3ssj2bJXmH2L67mKpiAD5dz66JYk4zS66qzdnIOgw==,
+ }
+ engines: { node: ">= 10.0.0" }
+ cpu: [x64]
+ os: [freebsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@parcel/watcher-linux-arm-glibc@2.3.0:
+ resolution:
+ {
+ integrity: sha512-1apPw5cD2xBv1XIHPUlq0cO6iAaEUQ3BcY0ysSyD9Kuyw4MoWm1DV+W9mneWI+1g6OeP6dhikiFE6BlU+AToTQ==,
+ }
+ engines: { node: ">= 10.0.0" }
+ cpu: [arm]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@parcel/watcher-linux-arm64-glibc@2.3.0:
+ resolution:
+ {
+ integrity: sha512-mQ0gBSQEiq1k/MMkgcSB0Ic47UORZBmWoAWlMrTW6nbAGoLZP+h7AtUM7H3oDu34TBFFvjy4JCGP43JlylkTQA==,
+ }
+ engines: { node: ">= 10.0.0" }
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@parcel/watcher-linux-arm64-musl@2.3.0:
+ resolution:
+ {
+ integrity: sha512-LXZAExpepJew0Gp8ZkJ+xDZaTQjLHv48h0p0Vw2VMFQ8A+RKrAvpFuPVCVwKJCr5SE+zvaG+Etg56qXvTDIedw==,
+ }
+ engines: { node: ">= 10.0.0" }
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@parcel/watcher-linux-x64-glibc@2.3.0:
+ resolution:
+ {
+ integrity: sha512-P7Wo91lKSeSgMTtG7CnBS6WrA5otr1K7shhSjKHNePVmfBHDoAOHYRXgUmhiNfbcGk0uMCHVcdbfxtuiZCHVow==,
+ }
+ engines: { node: ">= 10.0.0" }
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@parcel/watcher-linux-x64-musl@2.3.0:
+ resolution:
+ {
+ integrity: sha512-+kiRE1JIq8QdxzwoYY+wzBs9YbJ34guBweTK8nlzLKimn5EQ2b2FSC+tAOpq302BuIMjyuUGvBiUhEcLIGMQ5g==,
+ }
+ engines: { node: ">= 10.0.0" }
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@parcel/watcher-wasm@2.3.0:
+ resolution:
+ {
+ integrity: sha512-ejBAX8H0ZGsD8lSICDNyMbSEtPMWgDL0WFCt/0z7hyf5v8Imz4rAM8xY379mBsECkq/Wdqa5WEDLqtjZ+6NxfA==,
+ }
+ engines: { node: ">= 10.0.0" }
+ dependencies:
+ is-glob: 4.0.3
+ micromatch: 4.0.5
+ dev: true
+ bundledDependencies:
+ - napi-wasm
+
+ /@parcel/watcher-win32-arm64@2.3.0:
+ resolution:
+ {
+ integrity: sha512-35gXCnaz1AqIXpG42evcoP2+sNL62gZTMZne3IackM+6QlfMcJLy3DrjuL6Iks7Czpd3j4xRBzez3ADCj1l7Aw==,
+ }
+ engines: { node: ">= 10.0.0" }
+ cpu: [arm64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@parcel/watcher-win32-ia32@2.3.0:
+ resolution:
+ {
+ integrity: sha512-FJS/IBQHhRpZ6PiCjFt1UAcPr0YmCLHRbTc00IBTrelEjlmmgIVLeOx4MSXzx2HFEy5Jo5YdhGpxCuqCyDJ5ow==,
+ }
+ engines: { node: ">= 10.0.0" }
+ cpu: [ia32]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@parcel/watcher-win32-x64@2.3.0:
+ resolution:
+ {
+ integrity: sha512-dLx+0XRdMnVI62kU3wbXvbIRhLck4aE28bIGKbRGS7BJNt54IIj9+c/Dkqb+7DJEbHUZAX1bwaoM8PqVlHJmCA==,
+ }
+ engines: { node: ">= 10.0.0" }
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@parcel/watcher@2.3.0:
+ resolution:
+ {
+ integrity: sha512-pW7QaFiL11O0BphO+bq3MgqeX/INAk9jgBldVDYjlQPO4VddoZnF22TcF9onMhnLVHuNqBJeRf+Fj7eezi/+rQ==,
+ }
+ engines: { node: ">= 10.0.0" }
+ dependencies:
+ detect-libc: 1.0.3
+ is-glob: 4.0.3
+ micromatch: 4.0.5
+ node-addon-api: 7.0.0
+ optionalDependencies:
+ "@parcel/watcher-android-arm64": 2.3.0
+ "@parcel/watcher-darwin-arm64": 2.3.0
+ "@parcel/watcher-darwin-x64": 2.3.0
+ "@parcel/watcher-freebsd-x64": 2.3.0
+ "@parcel/watcher-linux-arm-glibc": 2.3.0
+ "@parcel/watcher-linux-arm64-glibc": 2.3.0
+ "@parcel/watcher-linux-arm64-musl": 2.3.0
+ "@parcel/watcher-linux-x64-glibc": 2.3.0
+ "@parcel/watcher-linux-x64-musl": 2.3.0
+ "@parcel/watcher-win32-arm64": 2.3.0
+ "@parcel/watcher-win32-ia32": 2.3.0
+ "@parcel/watcher-win32-x64": 2.3.0
+ dev: true
+
+ /@pkgjs/parseargs@0.11.0:
+ resolution:
+ {
+ integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==,
+ }
+ engines: { node: ">=14" }
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@polka/url@1.0.0-next.21:
+ resolution:
+ {
+ integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==,
+ }
+ dev: true
+
+ /@rollup/plugin-alias@5.0.0(rollup@3.28.1):
+ resolution:
+ {
+ integrity: sha512-l9hY5chSCjuFRPsnRm16twWBiSApl2uYFLsepQYwtBuAxNMQ/1dJqADld40P0Jkqm65GRTLy/AC6hnpVebtLsA==,
+ }
+ engines: { node: ">=14.0.0" }
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+ dependencies:
+ rollup: 3.28.1
+ slash: 4.0.0
+ dev: true
+
+ /@rollup/plugin-commonjs@25.0.4(rollup@3.28.1):
+ resolution:
+ {
+ integrity: sha512-L92Vz9WUZXDnlQQl3EwbypJR4+DM2EbsO+/KOcEkP4Mc6Ct453EeDB2uH9lgRwj4w5yflgNpq9pHOiY8aoUXBQ==,
+ }
+ engines: { node: ">=14.0.0" }
+ peerDependencies:
+ rollup: ^2.68.0||^3.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+ dependencies:
+ "@rollup/pluginutils": 5.0.4(rollup@3.28.1)
+ commondir: 1.0.1
+ estree-walker: 2.0.2
+ glob: 8.1.0
+ is-reference: 1.2.1
+ magic-string: 0.27.0
+ rollup: 3.28.1
+ dev: true
+
+ /@rollup/plugin-inject@5.0.3(rollup@3.28.1):
+ resolution:
+ {
+ integrity: sha512-411QlbL+z2yXpRWFXSmw/teQRMkXcAAC8aYTemc15gwJRpvEVDQwoe+N/HTFD8RFG8+88Bme9DK2V9CVm7hJdA==,
+ }
+ engines: { node: ">=14.0.0" }
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+ dependencies:
+ "@rollup/pluginutils": 5.0.4(rollup@3.28.1)
+ estree-walker: 2.0.2
+ magic-string: 0.27.0
+ rollup: 3.28.1
+ dev: true
+
+ /@rollup/plugin-json@6.0.0(rollup@3.28.1):
+ resolution:
+ {
+ integrity: sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==,
+ }
+ engines: { node: ">=14.0.0" }
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+ dependencies:
+ "@rollup/pluginutils": 5.0.4(rollup@3.28.1)
+ rollup: 3.28.1
+ dev: true
+
+ /@rollup/plugin-node-resolve@15.2.1(rollup@3.28.1):
+ resolution:
+ {
+ integrity: sha512-nsbUg588+GDSu8/NS8T4UAshO6xeaOfINNuXeVHcKV02LJtoRaM1SiOacClw4kws1SFiNhdLGxlbMY9ga/zs/w==,
+ }
+ engines: { node: ">=14.0.0" }
+ peerDependencies:
+ rollup: ^2.78.0||^3.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+ dependencies:
+ "@rollup/pluginutils": 5.0.4(rollup@3.28.1)
+ "@types/resolve": 1.20.2
+ deepmerge: 4.3.1
+ is-builtin-module: 3.2.1
+ is-module: 1.0.0
+ resolve: 1.22.4
+ rollup: 3.28.1
+ dev: true
+
+ /@rollup/plugin-replace@5.0.2(rollup@3.28.1):
+ resolution:
+ {
+ integrity: sha512-M9YXNekv/C/iHHK+cvORzfRYfPbq0RDD8r0G+bMiTXjNGKulPnCT9O3Ss46WfhI6ZOCgApOP7xAdmCQJ+U2LAA==,
+ }
+ engines: { node: ">=14.0.0" }
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+ dependencies:
+ "@rollup/pluginutils": 5.0.4(rollup@3.28.1)
+ magic-string: 0.27.0
+ rollup: 3.28.1
+ dev: true
+
+ /@rollup/plugin-terser@0.4.3(rollup@3.28.1):
+ resolution:
+ {
+ integrity: sha512-EF0oejTMtkyhrkwCdg0HJ0IpkcaVg1MMSf2olHb2Jp+1mnLM04OhjpJWGma4HobiDTF0WCyViWuvadyE9ch2XA==,
+ }
+ engines: { node: ">=14.0.0" }
+ peerDependencies:
+ rollup: ^2.x || ^3.x
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+ dependencies:
+ rollup: 3.28.1
+ serialize-javascript: 6.0.1
+ smob: 1.4.0
+ terser: 5.19.3
+ dev: true
+
+ /@rollup/plugin-wasm@6.1.3(rollup@3.28.1):
+ resolution:
+ {
+ integrity: sha512-7ItTTeyauE6lwdDtQWceEHZ9+txbi4RRy0mYPFn9BW7rD7YdgBDu7HTHsLtHrRzJc313RM/1m6GKgV3np/aEaw==,
+ }
+ engines: { node: ">=14.0.0" }
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+ dependencies:
+ rollup: 3.28.1
+ dev: true
+
+ /@rollup/pluginutils@4.2.1:
+ resolution:
+ {
+ integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==,
+ }
+ engines: { node: ">= 8.0.0" }
+ dependencies:
+ estree-walker: 2.0.2
+ picomatch: 2.3.1
+ dev: true
+
+ /@rollup/pluginutils@5.0.4(rollup@3.28.1):
+ resolution:
+ {
+ integrity: sha512-0KJnIoRI8A+a1dqOYLxH8vBf8bphDmty5QvIm2hqm7oFCFYKCAZWWd2hXgMibaPsNDhI0AtpYfQZJG47pt/k4g==,
+ }
+ engines: { node: ">=14.0.0" }
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+ dependencies:
+ "@types/estree": 1.0.1
+ estree-walker: 2.0.2
+ picomatch: 2.3.1
+ rollup: 3.28.1
+ dev: true
+
+ /@sideway/address@4.1.4:
+ resolution:
+ {
+ integrity: sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==,
+ }
+ dependencies:
+ "@hapi/hoek": 9.3.0
+ dev: true
+
+ /@sideway/formula@3.0.1:
+ resolution:
+ {
+ integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==,
+ }
+ dev: true
+
+ /@sideway/pinpoint@2.0.0:
+ resolution:
+ {
+ integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==,
+ }
+ dev: true
+
+ /@sigstore/bundle@2.1.0:
+ resolution:
+ {
+ integrity: sha512-89uOo6yh/oxaU8AeOUnVrTdVMcGk9Q1hJa7Hkvalc6G3Z3CupWk4Xe9djSgJm9fMkH69s0P0cVHUoKSOemLdng==,
+ }
+ engines: { node: ^16.14.0 || >=18.0.0 }
+ dependencies:
+ "@sigstore/protobuf-specs": 0.2.1
+ dev: true
+
+ /@sigstore/protobuf-specs@0.2.1:
+ resolution:
+ {
+ integrity: sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A==,
+ }
+ engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ dev: true
+
+ /@sigstore/sign@2.1.0:
+ resolution:
+ {
+ integrity: sha512-4VRpfJxs+8eLqzLVrZngVNExVA/zAhVbi4UT4zmtLi4xRd7vz5qie834OgkrGsLlLB1B2nz/3wUxT1XAUBe8gw==,
+ }
+ engines: { node: ^16.14.0 || >=18.0.0 }
+ dependencies:
+ "@sigstore/bundle": 2.1.0
+ "@sigstore/protobuf-specs": 0.2.1
+ make-fetch-happen: 13.0.0
+ dev: true
+
+ /@sigstore/tuf@2.1.0:
+ resolution:
+ {
+ integrity: sha512-BUoVCx+7Wj+8moEGvUU2MyBI+f93lmg1CLmoG6KrhQMeDyAG8HAZNk+YRCNuvwvSDCfPhwsj37Bg63/Q+bnGsw==,
+ }
+ engines: { node: ^16.14.0 || >=18.0.0 }
+ dependencies:
+ "@sigstore/protobuf-specs": 0.2.1
+ tuf-js: 2.1.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@tootallnate/once@2.0.0:
+ resolution:
+ {
+ integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==,
+ }
+ engines: { node: ">= 10" }
+ dev: true
+
+ /@trysound/sax@0.2.0:
+ resolution:
+ {
+ integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==,
+ }
+ engines: { node: ">=10.13.0" }
+ dev: true
+
+ /@tufjs/canonical-json@2.0.0:
+ resolution:
+ {
+ integrity: sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==,
+ }
+ engines: { node: ^16.14.0 || >=18.0.0 }
+ dev: true
+
+ /@tufjs/models@2.0.0:
+ resolution:
+ {
+ integrity: sha512-c8nj8BaOExmZKO2DXhDfegyhSGcG9E/mPN3U13L+/PsoWm1uaGiHHjxqSHQiasDBQwDA3aHuw9+9spYAP1qvvg==,
+ }
+ engines: { node: ^16.14.0 || >=18.0.0 }
+ dependencies:
+ "@tufjs/canonical-json": 2.0.0
+ minimatch: 9.0.3
+ dev: true
+
+ /@types/estree@1.0.1:
+ resolution:
+ {
+ integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==,
+ }
+ dev: true
+
+ /@types/http-proxy@1.17.11:
+ resolution:
+ {
+ integrity: sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==,
+ }
+ dependencies:
+ "@types/node": 20.5.7
+ dev: true
+
+ /@types/node@20.5.7:
+ resolution:
+ {
+ integrity: sha512-dP7f3LdZIysZnmvP3ANJYTSwg+wLLl8p7RqniVlV7j+oXSXAbt9h0WIBFmJy5inWZoX9wZN6eXx+YXd9Rh3RBA==,
+ }
+ dev: true
+
+ /@types/resolve@1.20.2:
+ resolution:
+ {
+ integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==,
+ }
+ dev: true
+
+ /@unhead/dom@1.3.9:
+ resolution:
+ {
+ integrity: sha512-bTbPFjXjmk8MC0cBC+7Bgf0Mcw62gsE2XqOhMH/qQo6NP4vR2XGxqy054Y7MGurznR1JVAqxUiU3cR/oxWFk3g==,
+ }
+ dependencies:
+ "@unhead/schema": 1.3.9
+ "@unhead/shared": 1.3.9
+ dev: true
+
+ /@unhead/schema@1.3.9:
+ resolution:
+ {
+ integrity: sha512-iIa0dczd2qTOxwYZbVR+iAKdlELnLTlKSFsN/YuJ/33sRi5VFa9D8TDBEPLec9gpcjB/bH0FhERfR4bb4UbRuA==,
+ }
+ dependencies:
+ hookable: 5.5.3
+ zhead: 2.0.10
+ dev: true
+
+ /@unhead/shared@1.3.9:
+ resolution:
+ {
+ integrity: sha512-lBXK1gzsg3XOnsOgYUVTT2RKOvM+AB0myDXkwQb0jsJB3Tc1qVOSz9JAOR+ZGrosSr7+Iv91+Fu/0E+knxaj2Q==,
+ }
+ dependencies:
+ "@unhead/schema": 1.3.9
+ dev: true
+
+ /@unhead/ssr@1.3.9:
+ resolution:
+ {
+ integrity: sha512-FTt4IQOAxHiSfRM7IoJJiFnUEBH8CG5zkJOQ/LydG19QpYa9/AGOi4xvngeCr++1as51p2hWoRO6gPxSRhV8cA==,
+ }
+ dependencies:
+ "@unhead/schema": 1.3.9
+ "@unhead/shared": 1.3.9
+ dev: true
+
+ /@unhead/vue@1.3.9(vue@3.3.4):
+ resolution:
+ {
+ integrity: sha512-rVAsRLBc+3Y//NRmr7vmRs5yhIf65jYSvcj0V5DtDfDwql7BbGgc3VIIEvY0+EjLQuNsS5kxwm78LSPCIl/3Xw==,
+ }
+ peerDependencies:
+ vue: ">=2.7 || >=3"
+ dependencies:
+ "@unhead/schema": 1.3.9
+ "@unhead/shared": 1.3.9
+ hookable: 5.5.3
+ unhead: 1.3.9
+ vue: 3.3.4
+ dev: true
+
+ /@vercel/nft@0.23.1:
+ resolution:
+ {
+ integrity: sha512-NE0xSmGWVhgHF1OIoir71XAd0W0C1UE3nzFyhpFiMr3rVhetww7NvM1kc41trBsPG37Bh+dE5FYCTMzM/gBu0w==,
+ }
+ engines: { node: ">=14" }
+ hasBin: true
+ dependencies:
+ "@mapbox/node-pre-gyp": 1.0.11
+ "@rollup/pluginutils": 4.2.1
+ acorn: 8.10.0
+ async-sema: 3.1.1
+ bindings: 1.5.0
+ estree-walker: 2.0.2
+ glob: 7.2.3
+ graceful-fs: 4.2.11
+ micromatch: 4.0.5
+ node-gyp-build: 4.6.1
+ resolve-from: 5.0.0
+ transitivePeerDependencies:
+ - encoding
+ - supports-color
+ dev: true
+
+ /@vitejs/plugin-vue-jsx@3.0.2(vite@4.4.9)(vue@3.3.4):
+ resolution:
+ {
+ integrity: sha512-obF26P2Z4Ogy3cPp07B4VaW6rpiu0ue4OT2Y15UxT5BZZ76haUY9guOsZV3uWh/I6xc+VeiW+ZVabRE82FyzWw==,
+ }
+ engines: { node: ^14.18.0 || >=16.0.0 }
+ peerDependencies:
+ vite: ^4.0.0
+ vue: ^3.0.0
+ dependencies:
+ "@babel/core": 7.22.11
+ "@babel/plugin-transform-typescript": 7.22.11(@babel/core@7.22.11)
+ "@vue/babel-plugin-jsx": 1.1.5(@babel/core@7.22.11)
+ vite: 4.4.9
+ vue: 3.3.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@vitejs/plugin-vue@4.3.4(vite@4.4.9)(vue@3.3.4):
+ resolution:
+ {
+ integrity: sha512-ciXNIHKPriERBisHFBvnTbfKa6r9SAesOYXeGDzgegcvy9Q4xdScSHAmKbNT0M3O0S9LKhIf5/G+UYG4NnnzYw==,
+ }
+ engines: { node: ^14.18.0 || >=16.0.0 }
+ peerDependencies:
+ vite: ^4.0.0
+ vue: ^3.2.25
+ dependencies:
+ vite: 4.4.9
+ vue: 3.3.4
+ dev: true
+
+ /@vue-macros/common@1.7.2(vue@3.3.4):
+ resolution:
+ {
+ integrity: sha512-0/2A4kWLTCNEx+DDQKLvs7zXpfjgAbGBZ58SIvDN1DjGXhG4WaIUZtgMqzA6bvc5dNN7RaOatZYubkVumwmjWA==,
+ }
+ engines: { node: ">=16.14.0" }
+ peerDependencies:
+ vue: ^2.7.0 || ^3.2.25
+ peerDependenciesMeta:
+ vue:
+ optional: true
+ dependencies:
+ "@babel/types": 7.22.11
+ "@rollup/pluginutils": 5.0.4(rollup@3.28.1)
+ "@vue/compiler-sfc": 3.3.4
+ ast-kit: 0.10.0
+ local-pkg: 0.4.3
+ magic-string-ast: 0.3.0
+ vue: 3.3.4
+ transitivePeerDependencies:
+ - rollup
+ dev: true
+
+ /@vue/babel-helper-vue-transform-on@1.1.5:
+ resolution:
+ {
+ integrity: sha512-SgUymFpMoAyWeYWLAY+MkCK3QEROsiUnfaw5zxOVD/M64KQs8D/4oK6Q5omVA2hnvEOE0SCkH2TZxs/jnnUj7w==,
+ }
+ dev: true
+
+ /@vue/babel-plugin-jsx@1.1.5(@babel/core@7.22.11):
+ resolution:
+ {
+ integrity: sha512-nKs1/Bg9U1n3qSWnsHhCVQtAzI6aQXqua8j/bZrau8ywT1ilXQbK4FwEJGmU8fV7tcpuFvWmmN7TMmV1OBma1g==,
+ }
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ dependencies:
+ "@babel/core": 7.22.11
+ "@babel/helper-module-imports": 7.22.5
+ "@babel/plugin-syntax-jsx": 7.22.5(@babel/core@7.22.11)
+ "@babel/template": 7.22.5
+ "@babel/traverse": 7.22.11
+ "@babel/types": 7.22.11
+ "@vue/babel-helper-vue-transform-on": 1.1.5
+ camelcase: 6.3.0
+ html-tags: 3.3.1
+ svg-tags: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@vue/compiler-core@3.3.4:
+ resolution:
+ {
+ integrity: sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==,
+ }
+ dependencies:
+ "@babel/parser": 7.22.13
+ "@vue/shared": 3.3.4
+ estree-walker: 2.0.2
+ source-map-js: 1.0.2
+ dev: true
+
+ /@vue/compiler-dom@3.3.4:
+ resolution:
+ {
+ integrity: sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==,
+ }
+ dependencies:
+ "@vue/compiler-core": 3.3.4
+ "@vue/shared": 3.3.4
+ dev: true
+
+ /@vue/compiler-sfc@3.3.4:
+ resolution:
+ {
+ integrity: sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==,
+ }
+ dependencies:
+ "@babel/parser": 7.22.13
+ "@vue/compiler-core": 3.3.4
+ "@vue/compiler-dom": 3.3.4
+ "@vue/compiler-ssr": 3.3.4
+ "@vue/reactivity-transform": 3.3.4
+ "@vue/shared": 3.3.4
+ estree-walker: 2.0.2
+ magic-string: 0.30.3
+ postcss: 8.4.29
+ source-map-js: 1.0.2
+ dev: true
+
+ /@vue/compiler-ssr@3.3.4:
+ resolution:
+ {
+ integrity: sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==,
+ }
+ dependencies:
+ "@vue/compiler-dom": 3.3.4
+ "@vue/shared": 3.3.4
+ dev: true
+
+ /@vue/devtools-api@6.5.0:
+ resolution:
+ {
+ integrity: sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==,
+ }
+ dev: true
+
+ /@vue/reactivity-transform@3.3.4:
+ resolution:
+ {
+ integrity: sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==,
+ }
+ dependencies:
+ "@babel/parser": 7.22.13
+ "@vue/compiler-core": 3.3.4
+ "@vue/shared": 3.3.4
+ estree-walker: 2.0.2
+ magic-string: 0.30.3
+ dev: true
+
+ /@vue/reactivity@3.3.4:
+ resolution:
+ {
+ integrity: sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==,
+ }
+ dependencies:
+ "@vue/shared": 3.3.4
+ dev: true
+
+ /@vue/runtime-core@3.3.4:
+ resolution:
+ {
+ integrity: sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==,
+ }
+ dependencies:
+ "@vue/reactivity": 3.3.4
+ "@vue/shared": 3.3.4
+ dev: true
+
+ /@vue/runtime-dom@3.3.4:
+ resolution:
+ {
+ integrity: sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==,
+ }
+ dependencies:
+ "@vue/runtime-core": 3.3.4
+ "@vue/shared": 3.3.4
+ csstype: 3.1.2
+ dev: true
+
+ /@vue/server-renderer@3.3.4(vue@3.3.4):
+ resolution:
+ {
+ integrity: sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==,
+ }
+ peerDependencies:
+ vue: 3.3.4
+ dependencies:
+ "@vue/compiler-ssr": 3.3.4
+ "@vue/shared": 3.3.4
+ vue: 3.3.4
+ dev: true
+
+ /@vue/shared@3.3.4:
+ resolution:
+ {
+ integrity: sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==,
+ }
+ dev: true
+
+ /abbrev@1.1.1:
+ resolution:
+ {
+ integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==,
+ }
+ dev: true
+
+ /acorn@8.10.0:
+ resolution:
+ {
+ integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==,
+ }
+ engines: { node: ">=0.4.0" }
+ hasBin: true
+ dev: true
+
+ /agent-base@6.0.2:
+ resolution:
+ {
+ integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==,
+ }
+ engines: { node: ">= 6.0.0" }
+ dependencies:
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /agent-base@7.1.0:
+ resolution:
+ {
+ integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==,
+ }
+ engines: { node: ">= 14" }
+ dependencies:
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /agentkeepalive@4.5.0:
+ resolution:
+ {
+ integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==,
+ }
+ engines: { node: ">= 8.0.0" }
+ dependencies:
+ humanize-ms: 1.2.1
+ dev: true
+
+ /aggregate-error@3.1.0:
+ resolution:
+ {
+ integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==,
+ }
+ engines: { node: ">=8" }
+ dependencies:
+ clean-stack: 2.2.0
+ indent-string: 4.0.0
+ dev: true
+
+ /ansi-align@3.0.1:
+ resolution:
+ {
+ integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==,
+ }
+ dependencies:
+ string-width: 4.2.3
+ dev: true
+
+ /ansi-colors@4.1.3:
+ resolution:
+ {
+ integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==,
+ }
+ engines: { node: ">=6" }
+ dev: true
+
+ /ansi-escapes@4.3.2:
+ resolution:
+ {
+ integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==,
+ }
+ engines: { node: ">=8" }
+ dependencies:
+ type-fest: 0.21.3
+ dev: true
+
+ /ansi-regex@5.0.1:
+ resolution:
+ {
+ integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==,
+ }
+ engines: { node: ">=8" }
+ dev: true
+
+ /ansi-regex@6.0.1:
+ resolution:
+ {
+ integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==,
+ }
+ engines: { node: ">=12" }
+ dev: true
+
+ /ansi-styles@3.2.1:
+ resolution:
+ {
+ integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==,
+ }
+ engines: { node: ">=4" }
+ dependencies:
+ color-convert: 1.9.3
+ dev: true
+
+ /ansi-styles@4.3.0:
+ resolution:
+ {
+ integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==,
+ }
+ engines: { node: ">=8" }
+ dependencies:
+ color-convert: 2.0.1
+ dev: true
+
+ /ansi-styles@6.2.1:
+ resolution:
+ {
+ integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==,
+ }
+ engines: { node: ">=12" }
+ dev: true
+
+ /anymatch@3.1.3:
+ resolution:
+ {
+ integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==,
+ }
+ engines: { node: ">= 8" }
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+ dev: true
+
+ /aproba@2.0.0:
+ resolution:
+ {
+ integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==,
+ }
+ dev: true
+
+ /arch@2.2.0:
+ resolution:
+ {
+ integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==,
+ }
+ dev: true
+
+ /archiver-utils@2.1.0:
+ resolution:
+ {
+ integrity: sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==,
+ }
+ engines: { node: ">= 6" }
+ dependencies:
+ glob: 7.2.3
+ graceful-fs: 4.2.11
+ lazystream: 1.0.1
+ lodash.defaults: 4.2.0
+ lodash.difference: 4.5.0
+ lodash.flatten: 4.4.0
+ lodash.isplainobject: 4.0.6
+ lodash.union: 4.6.0
+ normalize-path: 3.0.0
+ readable-stream: 2.3.8
+ dev: true
+
+ /archiver-utils@3.0.3:
+ resolution:
+ {
+ integrity: sha512-fXzpEZTKgBJMWy0eUT0/332CAQnJ27OJd7sGcvNZzxS2Yzg7iITivMhXOm+zUTO4vT8ZqlPCqiaLPmB8qWhWRA==,
+ }
+ engines: { node: ">= 10" }
+ dependencies:
+ glob: 7.2.3
+ graceful-fs: 4.2.11
+ lazystream: 1.0.1
+ lodash.defaults: 4.2.0
+ lodash.difference: 4.5.0
+ lodash.flatten: 4.4.0
+ lodash.isplainobject: 4.0.6
+ lodash.union: 4.6.0
+ normalize-path: 3.0.0
+ readable-stream: 3.6.2
+ dev: true
+
+ /archiver@6.0.0:
+ resolution:
+ {
+ integrity: sha512-EPGa+bYaxaMiCT8DCbEDqFz8IjeBSExrJzyUOJx2FBkFJ/OZzJuso3lMSk901M50gMqXxTQcumlGajOFlXhVhw==,
+ }
+ engines: { node: ">= 12.0.0" }
+ dependencies:
+ archiver-utils: 3.0.3
+ async: 3.2.4
+ buffer-crc32: 0.2.13
+ readable-stream: 3.6.2
+ readdir-glob: 1.1.3
+ tar-stream: 2.2.0
+ zip-stream: 4.1.0
+ dev: true
+
+ /are-we-there-yet@2.0.0:
+ resolution:
+ {
+ integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==,
+ }
+ engines: { node: ">=10" }
+ dependencies:
+ delegates: 1.0.0
+ readable-stream: 3.6.2
+ dev: true
+
+ /are-we-there-yet@3.0.1:
+ resolution:
+ {
+ integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==,
+ }
+ engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 }
+ dependencies:
+ delegates: 1.0.0
+ readable-stream: 3.6.2
+ dev: true
+
+ /argparse@2.0.1:
+ resolution:
+ {
+ integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==,
+ }
+ dev: true
+
+ /assert@2.0.0:
+ resolution:
+ {
+ integrity: sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==,
+ }
+ dependencies:
+ es6-object-assign: 1.1.0
+ is-nan: 1.3.2
+ object-is: 1.1.5
+ util: 0.12.5
+ dev: true
+
+ /ast-kit@0.10.0:
+ resolution:
+ {
+ integrity: sha512-8y01XClpURgvxTJmM4AY2oHa1B/6iysALB9yJM1j4ak3Z2ZsnU0ewjDZzqOHdbNdit6hC0DGZNrBqNuCrv51fQ==,
+ }
+ engines: { node: ">=16.14.0" }
+ dependencies:
+ "@babel/parser": 7.22.13
+ "@rollup/pluginutils": 5.0.4(rollup@3.28.1)
+ pathe: 1.1.1
+ transitivePeerDependencies:
+ - rollup
+ dev: true
+
+ /ast-types@0.16.1:
+ resolution:
+ {
+ integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==,
+ }
+ engines: { node: ">=4" }
+ dependencies:
+ tslib: 2.6.2
+ dev: true
+
+ /ast-walker-scope@0.4.2:
+ resolution:
+ {
+ integrity: sha512-vdCU9JvpsrxWxvJiRHAr8If8cu07LWJXDPhkqLiP4ErbN1fu/mK623QGmU4Qbn2Nq4Mx0vR/Q017B6+HcHg1aQ==,
+ }
+ engines: { node: ">=16.14.0" }
+ dependencies:
+ "@babel/parser": 7.22.13
+ "@babel/types": 7.22.11
+ dev: true
+
+ /async-sema@3.1.1:
+ resolution:
+ {
+ integrity: sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==,
+ }
+ dev: true
+
+ /async@3.2.4:
+ resolution:
+ {
+ integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==,
+ }
+ dev: true
+
+ /asynckit@0.4.0:
+ resolution:
+ {
+ integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==,
+ }
+ dev: true
+
+ /autoprefixer@10.4.15(postcss@8.4.29):
+ resolution:
+ {
+ integrity: sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==,
+ }
+ engines: { node: ^10 || ^12 || >=14 }
+ hasBin: true
+ peerDependencies:
+ postcss: ^8.1.0
+ dependencies:
+ browserslist: 4.21.10
+ caniuse-lite: 1.0.30001524
+ fraction.js: 4.3.1
+ normalize-range: 0.1.2
+ picocolors: 1.0.0
+ postcss: 8.4.29
+ postcss-value-parser: 4.2.0
+ dev: true
+
+ /available-typed-arrays@1.0.5:
+ resolution:
+ {
+ integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==,
+ }
+ engines: { node: ">= 0.4" }
+ dev: true
+
+ /axios@0.27.2:
+ resolution:
+ {
+ integrity: sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==,
+ }
+ dependencies:
+ follow-redirects: 1.15.2
+ form-data: 4.0.0
+ transitivePeerDependencies:
+ - debug
+ dev: true
+
+ /balanced-match@1.0.2:
+ resolution:
+ {
+ integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==,
+ }
+ dev: true
+
+ /base64-js@1.5.1:
+ resolution:
+ {
+ integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==,
+ }
+ dev: true
+
+ /big-integer@1.6.51:
+ resolution:
+ {
+ integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==,
+ }
+ engines: { node: ">=0.6" }
+ dev: true
+
+ /binary-extensions@2.2.0:
+ resolution:
+ {
+ integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==,
+ }
+ engines: { node: ">=8" }
+ dev: true
+
+ /bindings@1.5.0:
+ resolution:
+ {
+ integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==,
+ }
+ dependencies:
+ file-uri-to-path: 1.0.0
+ dev: true
+
+ /birpc@0.2.13:
+ resolution:
+ {
+ integrity: sha512-30rz9OBSJoGfiWox7dpyqoSVo6664PBEYSTfmmG1GBridUxnMysyovNpnwhaPMvjtKn3Y1UfII+HMTU0kqJFjA==,
+ }
+ dev: true
+
+ /bl@1.2.3:
+ resolution:
+ {
+ integrity: sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==,
+ }
+ dependencies:
+ readable-stream: 2.3.8
+ safe-buffer: 5.2.1
+ dev: true
+
+ /bl@4.1.0:
+ resolution:
+ {
+ integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==,
+ }
+ dependencies:
+ buffer: 5.7.1
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+ dev: true
+
+ /boolbase@1.0.0:
+ resolution:
+ {
+ integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==,
+ }
+ dev: true
+
+ /boxen@7.1.1:
+ resolution:
+ {
+ integrity: sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==,
+ }
+ engines: { node: ">=14.16" }
+ dependencies:
+ ansi-align: 3.0.1
+ camelcase: 7.0.1
+ chalk: 5.3.0
+ cli-boxes: 3.0.0
+ string-width: 5.1.2
+ type-fest: 2.19.0
+ widest-line: 4.0.1
+ wrap-ansi: 8.1.0
+ dev: true
+
+ /bplist-parser@0.2.0:
+ resolution:
+ {
+ integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==,
+ }
+ engines: { node: ">= 5.10.0" }
+ dependencies:
+ big-integer: 1.6.51
+ dev: true
+
+ /brace-expansion@1.1.11:
+ resolution:
+ {
+ integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==,
+ }
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+ dev: true
+
+ /brace-expansion@2.0.1:
+ resolution:
+ {
+ integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==,
+ }
+ dependencies:
+ balanced-match: 1.0.2
+ dev: true
+
+ /braces@3.0.2:
+ resolution:
+ {
+ integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==,
+ }
+ engines: { node: ">=8" }
+ dependencies:
+ fill-range: 7.0.1
+ dev: true
+
+ /browserslist@4.21.10:
+ resolution:
+ {
+ integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==,
+ }
+ engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 }
+ hasBin: true
+ dependencies:
+ caniuse-lite: 1.0.30001524
+ electron-to-chromium: 1.4.505
+ node-releases: 2.0.13
+ update-browserslist-db: 1.0.11(browserslist@4.21.10)
+ dev: true
+
+ /buffer-alloc-unsafe@1.1.0:
+ resolution:
+ {
+ integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==,
+ }
+ dev: true
+
+ /buffer-alloc@1.2.0:
+ resolution:
+ {
+ integrity: sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==,
+ }
+ dependencies:
+ buffer-alloc-unsafe: 1.1.0
+ buffer-fill: 1.0.0
+ dev: true
+
+ /buffer-crc32@0.2.13:
+ resolution:
+ {
+ integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==,
+ }
+ dev: true
+
+ /buffer-fill@1.0.0:
+ resolution:
+ {
+ integrity: sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==,
+ }
+ dev: true
+
+ /buffer-from@1.1.2:
+ resolution:
+ {
+ integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==,
+ }
+ dev: true
+
+ /buffer@5.7.1:
+ resolution:
+ {
+ integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==,
+ }
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+ dev: true
+
+ /builtin-modules@3.3.0:
+ resolution:
+ {
+ integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==,
+ }
+ engines: { node: ">=6" }
+ dev: true
+
+ /builtins@5.0.1:
+ resolution:
+ {
+ integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==,
+ }
+ dependencies:
+ semver: 7.5.4
+ dev: true
+
+ /bundle-name@3.0.0:
+ resolution:
+ {
+ integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==,
+ }
+ engines: { node: ">=12" }
+ dependencies:
+ run-applescript: 5.0.0
+ dev: true
+
+ /busboy@1.6.0:
+ resolution:
+ {
+ integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==,
+ }
+ engines: { node: ">=10.16.0" }
+ dependencies:
+ streamsearch: 1.1.0
+ dev: true
+
+ /c12@1.4.2:
+ resolution:
+ {
+ integrity: sha512-3IP/MuamSVRVw8W8+CHWAz9gKN4gd+voF2zm/Ln6D25C2RhytEZ1ABbC8MjKr4BR9rhoV1JQ7jJA158LDiTkLg==,
+ }
+ dependencies:
+ chokidar: 3.5.3
+ defu: 6.1.2
+ dotenv: 16.3.1
+ giget: 1.1.2
+ jiti: 1.19.3
+ mlly: 1.4.1
+ ohash: 1.1.3
+ pathe: 1.1.1
+ perfect-debounce: 1.0.0
+ pkg-types: 1.0.3
+ rc9: 2.1.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /cac@6.7.14:
+ resolution:
+ {
+ integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==,
+ }
+ engines: { node: ">=8" }
+ dev: true
+
+ /cacache@17.1.4:
+ resolution:
+ {
+ integrity: sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==,
+ }
+ engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ dependencies:
+ "@npmcli/fs": 3.1.0
+ fs-minipass: 3.0.3
+ glob: 10.3.3
+ lru-cache: 7.18.3
+ minipass: 7.0.3
+ minipass-collect: 1.0.2
+ minipass-flush: 1.0.5
+ minipass-pipeline: 1.2.4
+ p-map: 4.0.0
+ ssri: 10.0.5
+ tar: 6.1.15
+ unique-filename: 3.0.0
+ dev: true
+
+ /cacache@18.0.0:
+ resolution:
+ {
+ integrity: sha512-I7mVOPl3PUCeRub1U8YoGz2Lqv9WOBpobZ8RyWFXmReuILz+3OAyTa5oH3QPdtKZD7N0Yk00aLfzn0qvp8dZ1w==,
+ }
+ engines: { node: ^16.14.0 || >=18.0.0 }
+ dependencies:
+ "@npmcli/fs": 3.1.0
+ fs-minipass: 3.0.3
+ glob: 10.3.3
+ lru-cache: 10.0.1
+ minipass: 7.0.3
+ minipass-collect: 1.0.2
+ minipass-flush: 1.0.5
+ minipass-pipeline: 1.2.4
+ p-map: 4.0.0
+ ssri: 10.0.5
+ tar: 6.1.15
+ unique-filename: 3.0.0
+ dev: true
+
+ /call-bind@1.0.2:
+ resolution:
+ {
+ integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==,
+ }
+ dependencies:
+ function-bind: 1.1.1
+ get-intrinsic: 1.2.1
+ dev: true
+
+ /camelcase@6.3.0:
+ resolution:
+ {
+ integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==,
+ }
+ engines: { node: ">=10" }
+ dev: true
+
+ /camelcase@7.0.1:
+ resolution:
+ {
+ integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==,
+ }
+ engines: { node: ">=14.16" }
+ dev: true
+
+ /caniuse-api@3.0.0:
+ resolution:
+ {
+ integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==,
+ }
+ dependencies:
+ browserslist: 4.21.10
+ caniuse-lite: 1.0.30001524
+ lodash.memoize: 4.1.2
+ lodash.uniq: 4.5.0
+ dev: true
+
+ /caniuse-lite@1.0.30001524:
+ resolution:
+ {
+ integrity: sha512-Jj917pJtYg9HSJBF95HVX3Cdr89JUyLT4IZ8SvM5aDRni95swKgYi3TgYLH5hnGfPE/U1dg6IfZ50UsIlLkwSA==,
+ }
+ dev: true
+
+ /chalk@2.4.2:
+ resolution:
+ {
+ integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==,
+ }
+ engines: { node: ">=4" }
+ dependencies:
+ ansi-styles: 3.2.1
+ escape-string-regexp: 1.0.5
+ supports-color: 5.5.0
+ dev: true
+
+ /chalk@4.1.2:
+ resolution:
+ {
+ integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==,
+ }
+ engines: { node: ">=10" }
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+ dev: true
+
+ /chalk@5.3.0:
+ resolution:
+ {
+ integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==,
+ }
+ engines: { node: ^12.17.0 || ^14.13 || >=16.0.0 }
+ dev: true
+
+ /chokidar@3.5.3:
+ resolution:
+ {
+ integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==,
+ }
+ engines: { node: ">= 8.10.0" }
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.2
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+ dev: true
+
+ /chownr@2.0.0:
+ resolution:
+ {
+ integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==,
+ }
+ engines: { node: ">=10" }
+ dev: true
+
+ /ci-info@3.8.0:
+ resolution:
+ {
+ integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==,
+ }
+ engines: { node: ">=8" }
+ dev: true
+
+ /citty@0.1.3:
+ resolution:
+ {
+ integrity: sha512-tb6zTEb2BDSrzFedqFYFUKUuKNaxVJWCm7o02K4kADGkBDyyiz7D40rDMpguczdZyAN3aetd5fhpB01HkreNyg==,
+ }
+ dependencies:
+ consola: 3.2.3
+ dev: true
+
+ /clean-stack@2.2.0:
+ resolution:
+ {
+ integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==,
+ }
+ engines: { node: ">=6" }
+ dev: true
+
+ /clear@0.1.0:
+ resolution:
+ {
+ integrity: sha512-qMjRnoL+JDPJHeLePZJuao6+8orzHMGP04A8CdwCNsKhRbOnKRjefxONR7bwILT3MHecxKBjHkKL/tkZ8r4Uzw==,
+ }
+ dev: true
+
+ /cli-boxes@3.0.0:
+ resolution:
+ {
+ integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==,
+ }
+ engines: { node: ">=10" }
+ dev: true
+
+ /clipboardy@3.0.0:
+ resolution:
+ {
+ integrity: sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==,
+ }
+ engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 }
+ dependencies:
+ arch: 2.2.0
+ execa: 5.1.1
+ is-wsl: 2.2.0
+ dev: true
+
+ /cliui@8.0.1:
+ resolution:
+ {
+ integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==,
+ }
+ engines: { node: ">=12" }
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+ dev: true
+
+ /cluster-key-slot@1.1.2:
+ resolution:
+ {
+ integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==,
+ }
+ engines: { node: ">=0.10.0" }
+ dev: true
+
+ /color-convert@1.9.3:
+ resolution:
+ {
+ integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==,
+ }
+ dependencies:
+ color-name: 1.1.3
+ dev: true
+
+ /color-convert@2.0.1:
+ resolution:
+ {
+ integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==,
+ }
+ engines: { node: ">=7.0.0" }
+ dependencies:
+ color-name: 1.1.4
+ dev: true
+
+ /color-name@1.1.3:
+ resolution:
+ {
+ integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==,
+ }
+ dev: true
+
+ /color-name@1.1.4:
+ resolution:
+ {
+ integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==,
+ }
+ dev: true
+
+ /color-support@1.1.3:
+ resolution:
+ {
+ integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==,
+ }
+ hasBin: true
+ dev: true
+
+ /colord@2.9.3:
+ resolution:
+ {
+ integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==,
+ }
+ dev: true
+
+ /colorette@2.0.20:
+ resolution:
+ {
+ integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==,
+ }
+ dev: true
+
+ /combined-stream@1.0.8:
+ resolution:
+ {
+ integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==,
+ }
+ engines: { node: ">= 0.8" }
+ dependencies:
+ delayed-stream: 1.0.0
+ dev: true
+
+ /commander@2.20.3:
+ resolution:
+ {
+ integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==,
+ }
+ dev: true
+
+ /commander@7.2.0:
+ resolution:
+ {
+ integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==,
+ }
+ engines: { node: ">= 10" }
+ dev: true
+
+ /commander@8.3.0:
+ resolution:
+ {
+ integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==,
+ }
+ engines: { node: ">= 12" }
+ dev: true
+
+ /commondir@1.0.1:
+ resolution:
+ {
+ integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==,
+ }
+ dev: true
+
+ /compress-commons@4.1.1:
+ resolution:
+ {
+ integrity: sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==,
+ }
+ engines: { node: ">= 10" }
+ dependencies:
+ buffer-crc32: 0.2.13
+ crc32-stream: 4.0.2
+ normalize-path: 3.0.0
+ readable-stream: 3.6.2
+ dev: true
+
+ /concat-map@0.0.1:
+ resolution:
+ {
+ integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==,
+ }
+ dev: true
+
+ /consola@3.2.3:
+ resolution:
+ {
+ integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==,
+ }
+ engines: { node: ^14.18.0 || >=16.10.0 }
+ dev: true
+
+ /console-control-strings@1.1.0:
+ resolution:
+ {
+ integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==,
+ }
+ dev: true
+
+ /convert-source-map@1.9.0:
+ resolution:
+ {
+ integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==,
+ }
+ dev: true
+
+ /cookie-es@1.0.0:
+ resolution:
+ {
+ integrity: sha512-mWYvfOLrfEc996hlKcdABeIiPHUPC6DM2QYZdGGOvhOTbA3tjm2eBwqlJpoFdjC89NI4Qt6h0Pu06Mp+1Pj5OQ==,
+ }
+ dev: true
+
+ /core-util-is@1.0.3:
+ resolution:
+ {
+ integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==,
+ }
+ dev: true
+
+ /crc-32@1.2.2:
+ resolution:
+ {
+ integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==,
+ }
+ engines: { node: ">=0.8" }
+ hasBin: true
+ dev: true
+
+ /crc32-stream@4.0.2:
+ resolution:
+ {
+ integrity: sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==,
+ }
+ engines: { node: ">= 10" }
+ dependencies:
+ crc-32: 1.2.2
+ readable-stream: 3.6.2
+ dev: true
+
+ /create-require@1.1.1:
+ resolution:
+ {
+ integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==,
+ }
+ dev: true
+
+ /cross-spawn@7.0.3:
+ resolution:
+ {
+ integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==,
+ }
+ engines: { node: ">= 8" }
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+ dev: true
+
+ /css-declaration-sorter@6.4.1(postcss@8.4.29):
+ resolution:
+ {
+ integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==,
+ }
+ engines: { node: ^10 || ^12 || >=14 }
+ peerDependencies:
+ postcss: ^8.0.9
+ dependencies:
+ postcss: 8.4.29
+ dev: true
+
+ /css-select@5.1.0:
+ resolution:
+ {
+ integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==,
+ }
+ dependencies:
+ boolbase: 1.0.0
+ css-what: 6.1.0
+ domhandler: 5.0.3
+ domutils: 3.1.0
+ nth-check: 2.1.1
+ dev: true
+
+ /css-tree@2.2.1:
+ resolution:
+ {
+ integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==,
+ }
+ engines: { node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: ">=7.0.0" }
+ dependencies:
+ mdn-data: 2.0.28
+ source-map-js: 1.0.2
+ dev: true
+
+ /css-tree@2.3.1:
+ resolution:
+ {
+ integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==,
+ }
+ engines: { node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0 }
+ dependencies:
+ mdn-data: 2.0.30
+ source-map-js: 1.0.2
+ dev: true
+
+ /css-what@6.1.0:
+ resolution:
+ {
+ integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==,
+ }
+ engines: { node: ">= 6" }
+ dev: true
+
+ /cssesc@3.0.0:
+ resolution:
+ {
+ integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==,
+ }
+ engines: { node: ">=4" }
+ hasBin: true
+ dev: true
+
+ /cssnano-preset-default@6.0.1(postcss@8.4.29):
+ resolution:
+ {
+ integrity: sha512-7VzyFZ5zEB1+l1nToKyrRkuaJIx0zi/1npjvZfbBwbtNTzhLtlvYraK/7/uqmX2Wb2aQtd983uuGw79jAjLSuQ==,
+ }
+ engines: { node: ^14 || ^16 || >=18.0 }
+ peerDependencies:
+ postcss: ^8.2.15
+ dependencies:
+ css-declaration-sorter: 6.4.1(postcss@8.4.29)
+ cssnano-utils: 4.0.0(postcss@8.4.29)
+ postcss: 8.4.29
+ postcss-calc: 9.0.1(postcss@8.4.29)
+ postcss-colormin: 6.0.0(postcss@8.4.29)
+ postcss-convert-values: 6.0.0(postcss@8.4.29)
+ postcss-discard-comments: 6.0.0(postcss@8.4.29)
+ postcss-discard-duplicates: 6.0.0(postcss@8.4.29)
+ postcss-discard-empty: 6.0.0(postcss@8.4.29)
+ postcss-discard-overridden: 6.0.0(postcss@8.4.29)
+ postcss-merge-longhand: 6.0.0(postcss@8.4.29)
+ postcss-merge-rules: 6.0.1(postcss@8.4.29)
+ postcss-minify-font-values: 6.0.0(postcss@8.4.29)
+ postcss-minify-gradients: 6.0.0(postcss@8.4.29)
+ postcss-minify-params: 6.0.0(postcss@8.4.29)
+ postcss-minify-selectors: 6.0.0(postcss@8.4.29)
+ postcss-normalize-charset: 6.0.0(postcss@8.4.29)
+ postcss-normalize-display-values: 6.0.0(postcss@8.4.29)
+ postcss-normalize-positions: 6.0.0(postcss@8.4.29)
+ postcss-normalize-repeat-style: 6.0.0(postcss@8.4.29)
+ postcss-normalize-string: 6.0.0(postcss@8.4.29)
+ postcss-normalize-timing-functions: 6.0.0(postcss@8.4.29)
+ postcss-normalize-unicode: 6.0.0(postcss@8.4.29)
+ postcss-normalize-url: 6.0.0(postcss@8.4.29)
+ postcss-normalize-whitespace: 6.0.0(postcss@8.4.29)
+ postcss-ordered-values: 6.0.0(postcss@8.4.29)
+ postcss-reduce-initial: 6.0.0(postcss@8.4.29)
+ postcss-reduce-transforms: 6.0.0(postcss@8.4.29)
+ postcss-svgo: 6.0.0(postcss@8.4.29)
+ postcss-unique-selectors: 6.0.0(postcss@8.4.29)
+ dev: true
+
+ /cssnano-utils@4.0.0(postcss@8.4.29):
+ resolution:
+ {
+ integrity: sha512-Z39TLP+1E0KUcd7LGyF4qMfu8ZufI0rDzhdyAMsa/8UyNUU8wpS0fhdBxbQbv32r64ea00h4878gommRVg2BHw==,
+ }
+ engines: { node: ^14 || ^16 || >=18.0 }
+ peerDependencies:
+ postcss: ^8.2.15
+ dependencies:
+ postcss: 8.4.29
+ dev: true
+
+ /cssnano@6.0.1(postcss@8.4.29):
+ resolution:
+ {
+ integrity: sha512-fVO1JdJ0LSdIGJq68eIxOqFpIJrZqXUsBt8fkrBcztCQqAjQD51OhZp7tc0ImcbwXD4k7ny84QTV90nZhmqbkg==,
+ }
+ engines: { node: ^14 || ^16 || >=18.0 }
+ peerDependencies:
+ postcss: ^8.2.15
+ dependencies:
+ cssnano-preset-default: 6.0.1(postcss@8.4.29)
+ lilconfig: 2.1.0
+ postcss: 8.4.29
+ dev: true
+
+ /csso@5.0.5:
+ resolution:
+ {
+ integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==,
+ }
+ engines: { node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: ">=7.0.0" }
+ dependencies:
+ css-tree: 2.2.1
+ dev: true
+
+ /csstype@3.1.2:
+ resolution:
+ {
+ integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==,
+ }
+ dev: true
+
+ /cuint@0.2.2:
+ resolution:
+ {
+ integrity: sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==,
+ }
+ dev: true
+
+ /data-uri-to-buffer@4.0.1:
+ resolution:
+ {
+ integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==,
+ }
+ engines: { node: ">= 12" }
+ dev: true
+
+ /debug@2.6.9:
+ resolution:
+ {
+ integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==,
+ }
+ peerDependencies:
+ supports-color: "*"
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ dependencies:
+ ms: 2.0.0
+ dev: true
+
+ /debug@4.3.4:
+ resolution:
+ {
+ integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==,
+ }
+ engines: { node: ">=6.0" }
+ peerDependencies:
+ supports-color: "*"
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ dependencies:
+ ms: 2.1.2
+ dev: true
+
+ /decompress-tar@4.1.1:
+ resolution:
+ {
+ integrity: sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==,
+ }
+ engines: { node: ">=4" }
+ dependencies:
+ file-type: 5.2.0
+ is-stream: 1.1.0
+ tar-stream: 1.6.2
+ dev: true
+
+ /decompress-tarbz2@4.1.1:
+ resolution:
+ {
+ integrity: sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==,
+ }
+ engines: { node: ">=4" }
+ dependencies:
+ decompress-tar: 4.1.1
+ file-type: 6.2.0
+ is-stream: 1.1.0
+ seek-bzip: 1.0.6
+ unbzip2-stream: 1.4.3
+ dev: true
+
+ /decompress-targz@4.1.1:
+ resolution:
+ {
+ integrity: sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==,
+ }
+ engines: { node: ">=4" }
+ dependencies:
+ decompress-tar: 4.1.1
+ file-type: 5.2.0
+ is-stream: 1.1.0
+ dev: true
+
+ /decompress-unzip@4.0.1:
+ resolution:
+ {
+ integrity: sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==,
+ }
+ engines: { node: ">=4" }
+ dependencies:
+ file-type: 3.9.0
+ get-stream: 2.3.1
+ pify: 2.3.0
+ yauzl: 2.10.0
+ dev: true
+
+ /decompress@4.2.1:
+ resolution:
+ {
+ integrity: sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==,
+ }
+ engines: { node: ">=4" }
+ dependencies:
+ decompress-tar: 4.1.1
+ decompress-tarbz2: 4.1.1
+ decompress-targz: 4.1.1
+ decompress-unzip: 4.0.1
+ graceful-fs: 4.2.11
+ make-dir: 1.3.0
+ pify: 2.3.0
+ strip-dirs: 2.1.0
+ dev: true
+
+ /deepmerge@4.3.1:
+ resolution:
+ {
+ integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==,
+ }
+ engines: { node: ">=0.10.0" }
+ dev: true
+
+ /default-browser-id@3.0.0:
+ resolution:
+ {
+ integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==,
+ }
+ engines: { node: ">=12" }
+ dependencies:
+ bplist-parser: 0.2.0
+ untildify: 4.0.0
+ dev: true
+
+ /default-browser@4.0.0:
+ resolution:
+ {
+ integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==,
+ }
+ engines: { node: ">=14.16" }
+ dependencies:
+ bundle-name: 3.0.0
+ default-browser-id: 3.0.0
+ execa: 7.2.0
+ titleize: 3.0.0
+ dev: true
+
+ /define-lazy-prop@2.0.0:
+ resolution:
+ {
+ integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==,
+ }
+ engines: { node: ">=8" }
+ dev: true
+
+ /define-lazy-prop@3.0.0:
+ resolution:
+ {
+ integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==,
+ }
+ engines: { node: ">=12" }
+ dev: true
+
+ /define-properties@1.2.0:
+ resolution:
+ {
+ integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==,
+ }
+ engines: { node: ">= 0.4" }
+ dependencies:
+ has-property-descriptors: 1.0.0
+ object-keys: 1.1.1
+ dev: true
+
+ /defu@6.1.2:
+ resolution:
+ {
+ integrity: sha512-+uO4+qr7msjNNWKYPHqN/3+Dx3NFkmIzayk2L1MyZQlvgZb/J1A0fo410dpKrN2SnqFjt8n4JL8fDJE0wIgjFQ==,
+ }
+ dev: true
+
+ /delayed-stream@1.0.0:
+ resolution:
+ {
+ integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==,
+ }
+ engines: { node: ">=0.4.0" }
+ dev: true
+
+ /delegates@1.0.0:
+ resolution:
+ {
+ integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==,
+ }
+ dev: true
+
+ /denque@2.1.0:
+ resolution:
+ {
+ integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==,
+ }
+ engines: { node: ">=0.10" }
+ dev: true
+
+ /depd@2.0.0:
+ resolution:
+ {
+ integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==,
+ }
+ engines: { node: ">= 0.8" }
+ dev: true
+
+ /destr@2.0.1:
+ resolution:
+ {
+ integrity: sha512-M1Ob1zPSIvlARiJUkKqvAZ3VAqQY6Jcuth/pBKQ2b1dX/Qx0OnJ8Vux6J2H5PTMQeRzWrrbTu70VxBfv/OPDJA==,
+ }
+ dev: true
+
+ /destroy@1.2.0:
+ resolution:
+ {
+ integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==,
+ }
+ engines: { node: ">= 0.8", npm: 1.2.8000 || >= 1.4.16 }
+ dev: true
+
+ /detect-libc@1.0.3:
+ resolution:
+ {
+ integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==,
+ }
+ engines: { node: ">=0.10" }
+ hasBin: true
+ dev: true
+
+ /detect-libc@2.0.2:
+ resolution:
+ {
+ integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==,
+ }
+ engines: { node: ">=8" }
+ dev: true
+
+ /devalue@4.3.2:
+ resolution:
+ {
+ integrity: sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==,
+ }
+ dev: true
+
+ /diff@5.1.0:
+ resolution:
+ {
+ integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==,
+ }
+ engines: { node: ">=0.3.1" }
+ dev: true
+
+ /dir-glob@3.0.1:
+ resolution:
+ {
+ integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==,
+ }
+ engines: { node: ">=8" }
+ dependencies:
+ path-type: 4.0.0
+ dev: true
+
+ /dom-serializer@2.0.0:
+ resolution:
+ {
+ integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==,
+ }
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ entities: 4.5.0
+ dev: true
+
+ /domelementtype@2.3.0:
+ resolution:
+ {
+ integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==,
+ }
+ dev: true
+
+ /domhandler@5.0.3:
+ resolution:
+ {
+ integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==,
+ }
+ engines: { node: ">= 4" }
+ dependencies:
+ domelementtype: 2.3.0
+ dev: true
+
+ /domutils@3.1.0:
+ resolution:
+ {
+ integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==,
+ }
+ dependencies:
+ dom-serializer: 2.0.0
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ dev: true
+
+ /dot-prop@8.0.2:
+ resolution:
+ {
+ integrity: sha512-xaBe6ZT4DHPkg0k4Ytbvn5xoxgpG0jOS1dYxSOwAHPuNLjP3/OzN0gH55SrLqpx8cBfSaVt91lXYkApjb+nYdQ==,
+ }
+ engines: { node: ">=16" }
+ dependencies:
+ type-fest: 3.13.1
+ dev: true
+
+ /dotenv@16.3.1:
+ resolution:
+ {
+ integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==,
+ }
+ engines: { node: ">=12" }
+ dev: true
+
+ /duplexer@0.1.2:
+ resolution:
+ {
+ integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==,
+ }
+ dev: true
+
+ /eastasianwidth@0.2.0:
+ resolution:
+ {
+ integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==,
+ }
+ dev: true
+
+ /ee-first@1.1.1:
+ resolution:
+ {
+ integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==,
+ }
+ dev: true
+
+ /electron-to-chromium@1.4.505:
+ resolution:
+ {
+ integrity: sha512-0A50eL5BCCKdxig2SsCXhpuztnB9PfUgRMojj5tMvt8O54lbwz3t6wNgnpiTRosw5QjlJB7ixhVyeg8daLQwSQ==,
+ }
+ dev: true
+
+ /emoji-regex@8.0.0:
+ resolution:
+ {
+ integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==,
+ }
+ dev: true
+
+ /emoji-regex@9.2.2:
+ resolution:
+ {
+ integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==,
+ }
+ dev: true
+
+ /encodeurl@1.0.2:
+ resolution:
+ {
+ integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==,
+ }
+ engines: { node: ">= 0.8" }
+ dev: true
+
+ /encoding@0.1.13:
+ resolution:
+ {
+ integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==,
+ }
+ requiresBuild: true
+ dependencies:
+ iconv-lite: 0.6.3
+ dev: true
+ optional: true
+
+ /end-of-stream@1.4.4:
+ resolution:
+ {
+ integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==,
+ }
+ dependencies:
+ once: 1.4.0
+ dev: true
+
+ /enhanced-resolve@4.5.0:
+ resolution:
+ {
+ integrity: sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==,
+ }
+ engines: { node: ">=6.9.0" }
+ dependencies:
+ graceful-fs: 4.2.11
+ memory-fs: 0.5.0
+ tapable: 1.1.3
+ dev: true
+
+ /enhanced-resolve@5.15.0:
+ resolution:
+ {
+ integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==,
+ }
+ engines: { node: ">=10.13.0" }
+ dependencies:
+ graceful-fs: 4.2.11
+ tapable: 2.2.1
+ dev: true
+
+ /entities@4.5.0:
+ resolution:
+ {
+ integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==,
+ }
+ engines: { node: ">=0.12" }
+ dev: true
+
+ /env-paths@2.2.1:
+ resolution:
+ {
+ integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==,
+ }
+ engines: { node: ">=6" }
+ dev: true
+
+ /err-code@2.0.3:
+ resolution:
+ {
+ integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==,
+ }
+ dev: true
+
+ /errno@0.1.8:
+ resolution:
+ {
+ integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==,
+ }
+ hasBin: true
+ dependencies:
+ prr: 1.0.1
+ dev: true
+
+ /error-stack-parser-es@0.1.1:
+ resolution:
+ {
+ integrity: sha512-g/9rfnvnagiNf+DRMHEVGuGuIBlCIMDFoTA616HaP2l9PlCjGjVhD98PNbVSJvmK4TttqT5mV5tInMhoFgi+aA==,
+ }
+ dev: true
+
+ /es6-object-assign@1.1.0:
+ resolution:
+ {
+ integrity: sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==,
+ }
+ dev: true
+
+ /esbuild@0.18.20:
+ resolution:
+ {
+ integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==,
+ }
+ engines: { node: ">=12" }
+ hasBin: true
+ requiresBuild: true
+ optionalDependencies:
+ "@esbuild/android-arm": 0.18.20
+ "@esbuild/android-arm64": 0.18.20
+ "@esbuild/android-x64": 0.18.20
+ "@esbuild/darwin-arm64": 0.18.20
+ "@esbuild/darwin-x64": 0.18.20
+ "@esbuild/freebsd-arm64": 0.18.20
+ "@esbuild/freebsd-x64": 0.18.20
+ "@esbuild/linux-arm": 0.18.20
+ "@esbuild/linux-arm64": 0.18.20
+ "@esbuild/linux-ia32": 0.18.20
+ "@esbuild/linux-loong64": 0.18.20
+ "@esbuild/linux-mips64el": 0.18.20
+ "@esbuild/linux-ppc64": 0.18.20
+ "@esbuild/linux-riscv64": 0.18.20
+ "@esbuild/linux-s390x": 0.18.20
+ "@esbuild/linux-x64": 0.18.20
+ "@esbuild/netbsd-x64": 0.18.20
+ "@esbuild/openbsd-x64": 0.18.20
+ "@esbuild/sunos-x64": 0.18.20
+ "@esbuild/win32-arm64": 0.18.20
+ "@esbuild/win32-ia32": 0.18.20
+ "@esbuild/win32-x64": 0.18.20
+ dev: true
+
+ /esbuild@0.19.2:
+ resolution:
+ {
+ integrity: sha512-G6hPax8UbFakEj3hWO0Vs52LQ8k3lnBhxZWomUJDxfz3rZTLqF5k/FCzuNdLx2RbpBiQQF9H9onlDDH1lZsnjg==,
+ }
+ engines: { node: ">=12" }
+ hasBin: true
+ requiresBuild: true
+ optionalDependencies:
+ "@esbuild/android-arm": 0.19.2
+ "@esbuild/android-arm64": 0.19.2
+ "@esbuild/android-x64": 0.19.2
+ "@esbuild/darwin-arm64": 0.19.2
+ "@esbuild/darwin-x64": 0.19.2
+ "@esbuild/freebsd-arm64": 0.19.2
+ "@esbuild/freebsd-x64": 0.19.2
+ "@esbuild/linux-arm": 0.19.2
+ "@esbuild/linux-arm64": 0.19.2
+ "@esbuild/linux-ia32": 0.19.2
+ "@esbuild/linux-loong64": 0.19.2
+ "@esbuild/linux-mips64el": 0.19.2
+ "@esbuild/linux-ppc64": 0.19.2
+ "@esbuild/linux-riscv64": 0.19.2
+ "@esbuild/linux-s390x": 0.19.2
+ "@esbuild/linux-x64": 0.19.2
+ "@esbuild/netbsd-x64": 0.19.2
+ "@esbuild/openbsd-x64": 0.19.2
+ "@esbuild/sunos-x64": 0.19.2
+ "@esbuild/win32-arm64": 0.19.2
+ "@esbuild/win32-ia32": 0.19.2
+ "@esbuild/win32-x64": 0.19.2
+ dev: true
+
+ /escalade@3.1.1:
+ resolution:
+ {
+ integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==,
+ }
+ engines: { node: ">=6" }
+ dev: true
+
+ /escape-html@1.0.3:
+ resolution:
+ {
+ integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==,
+ }
+ dev: true
+
+ /escape-string-regexp@1.0.5:
+ resolution:
+ {
+ integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==,
+ }
+ engines: { node: ">=0.8.0" }
+ dev: true
+
+ /escape-string-regexp@5.0.0:
+ resolution:
+ {
+ integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==,
+ }
+ engines: { node: ">=12" }
+ dev: true
+
+ /esno@0.16.3:
+ resolution:
+ {
+ integrity: sha512-6slSBEV1lMKcX13DBifvnDFpNno5WXhw4j/ff7RI0y51BZiDqEe5dNhhjhIQ3iCOQuzsm2MbVzmwqbN78BBhPg==,
+ }
+ hasBin: true
+ dependencies:
+ tsx: 3.12.7
+ dev: true
+
+ /esprima@4.0.1:
+ resolution:
+ {
+ integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==,
+ }
+ engines: { node: ">=4" }
+ hasBin: true
+ dev: true
+
+ /estree-walker@2.0.2:
+ resolution:
+ {
+ integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==,
+ }
+ dev: true
+
+ /estree-walker@3.0.3:
+ resolution:
+ {
+ integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==,
+ }
+ dependencies:
+ "@types/estree": 1.0.1
+ dev: true
+
+ /etag@1.8.1:
+ resolution:
+ {
+ integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==,
+ }
+ engines: { node: ">= 0.6" }
+ dev: true
+
+ /execa@5.1.1:
+ resolution:
+ {
+ integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==,
+ }
+ engines: { node: ">=10" }
+ dependencies:
+ cross-spawn: 7.0.3
+ get-stream: 6.0.1
+ human-signals: 2.1.0
+ is-stream: 2.0.1
+ merge-stream: 2.0.0
+ npm-run-path: 4.0.1
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+ strip-final-newline: 2.0.0
+ dev: true
+
+ /execa@7.2.0:
+ resolution:
+ {
+ integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==,
+ }
+ engines: { node: ^14.18.0 || ^16.14.0 || >=18.0.0 }
+ dependencies:
+ cross-spawn: 7.0.3
+ get-stream: 6.0.1
+ human-signals: 4.3.1
+ is-stream: 3.0.0
+ merge-stream: 2.0.0
+ npm-run-path: 5.1.0
+ onetime: 6.0.0
+ signal-exit: 3.0.7
+ strip-final-newline: 3.0.0
+ dev: true
+
+ /execa@8.0.1:
+ resolution:
+ {
+ integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==,
+ }
+ engines: { node: ">=16.17" }
+ dependencies:
+ cross-spawn: 7.0.3
+ get-stream: 8.0.1
+ human-signals: 5.0.0
+ is-stream: 3.0.0
+ merge-stream: 2.0.0
+ npm-run-path: 5.1.0
+ onetime: 6.0.0
+ signal-exit: 4.1.0
+ strip-final-newline: 3.0.0
+ dev: true
+
+ /exponential-backoff@3.1.1:
+ resolution:
+ {
+ integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==,
+ }
+ dev: true
+
+ /externality@1.0.2:
+ resolution:
+ {
+ integrity: sha512-LyExtJWKxtgVzmgtEHyQtLFpw1KFhQphF9nTG8TpAIVkiI/xQ3FJh75tRFLYl4hkn7BNIIdLJInuDAavX35pMw==,
+ }
+ dependencies:
+ enhanced-resolve: 5.15.0
+ mlly: 1.4.1
+ pathe: 1.1.1
+ ufo: 1.3.0
+ dev: true
+
+ /fast-folder-size@2.2.0:
+ resolution:
+ {
+ integrity: sha512-7VsTlT/ELl5OQ4fnckM3idvaUkdJxf6VaYn0sC43GWoRmKqvbGfpoyC4BC/imTd9CEZtlfNsEf8/ZqdfoU4Nwg==,
+ }
+ hasBin: true
+ requiresBuild: true
+ dependencies:
+ decompress: 4.2.1
+ https-proxy-agent: 7.0.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /fast-glob@3.3.1:
+ resolution:
+ {
+ integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==,
+ }
+ engines: { node: ">=8.6.0" }
+ dependencies:
+ "@nodelib/fs.stat": 2.0.5
+ "@nodelib/fs.walk": 1.2.8
+ glob-parent: 5.1.2
+ merge2: 1.4.1
+ micromatch: 4.0.5
+ dev: true
+
+ /fastq@1.15.0:
+ resolution:
+ {
+ integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==,
+ }
+ dependencies:
+ reusify: 1.0.4
+ dev: true
+
+ /fd-slicer@1.1.0:
+ resolution:
+ {
+ integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==,
+ }
+ dependencies:
+ pend: 1.2.0
+ dev: true
+
+ /fetch-blob@3.2.0:
+ resolution:
+ {
+ integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==,
+ }
+ engines: { node: ^12.20 || >= 14.13 }
+ dependencies:
+ node-domexception: 1.0.0
+ web-streams-polyfill: 3.2.1
+ dev: true
+
+ /file-type@3.9.0:
+ resolution:
+ {
+ integrity: sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==,
+ }
+ engines: { node: ">=0.10.0" }
+ dev: true
+
+ /file-type@5.2.0:
+ resolution:
+ {
+ integrity: sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==,
+ }
+ engines: { node: ">=4" }
+ dev: true
+
+ /file-type@6.2.0:
+ resolution:
+ {
+ integrity: sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==,
+ }
+ engines: { node: ">=4" }
+ dev: true
+
+ /file-uri-to-path@1.0.0:
+ resolution:
+ {
+ integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==,
+ }
+ dev: true
+
+ /fill-range@7.0.1:
+ resolution:
+ {
+ integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==,
+ }
+ engines: { node: ">=8" }
+ dependencies:
+ to-regex-range: 5.0.1
+ dev: true
+
+ /flat@5.0.2:
+ resolution:
+ {
+ integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==,
+ }
+ hasBin: true
+ dev: true
+
+ /flatted@3.2.7:
+ resolution:
+ {
+ integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==,
+ }
+ dev: true
+
+ /follow-redirects@1.15.2:
+ resolution:
+ {
+ integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==,
+ }
+ engines: { node: ">=4.0" }
+ peerDependencies:
+ debug: "*"
+ peerDependenciesMeta:
+ debug:
+ optional: true
+ dev: true
+
+ /for-each@0.3.3:
+ resolution:
+ {
+ integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==,
+ }
+ dependencies:
+ is-callable: 1.2.7
+ dev: true
+
+ /foreground-child@3.1.1:
+ resolution:
+ {
+ integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==,
+ }
+ engines: { node: ">=14" }
+ dependencies:
+ cross-spawn: 7.0.3
+ signal-exit: 4.1.0
+ dev: true
+
+ /form-data@4.0.0:
+ resolution:
+ {
+ integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==,
+ }
+ engines: { node: ">= 6" }
+ dependencies:
+ asynckit: 0.4.0
+ combined-stream: 1.0.8
+ mime-types: 2.1.35
+ dev: true
+
+ /formdata-polyfill@4.0.10:
+ resolution:
+ {
+ integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==,
+ }
+ engines: { node: ">=12.20.0" }
+ dependencies:
+ fetch-blob: 3.2.0
+ dev: true
+
+ /fraction.js@4.3.1:
+ resolution:
+ {
+ integrity: sha512-nx0cki48JBA6ThPeUpeKCNpdhEl/9bRS+dAEYnRUod+Z1jhFfC3K/mBLorZZntqHM+GTH3/dkkpfoT3QITYe7g==,
+ }
+ dev: true
+
+ /fresh@0.5.2:
+ resolution:
+ {
+ integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==,
+ }
+ engines: { node: ">= 0.6" }
+ dev: true
+
+ /fs-constants@1.0.0:
+ resolution:
+ {
+ integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==,
+ }
+ dev: true
+
+ /fs-extra@11.1.1:
+ resolution:
+ {
+ integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==,
+ }
+ engines: { node: ">=14.14" }
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 6.1.0
+ universalify: 2.0.0
+ dev: true
+
+ /fs-minipass@2.1.0:
+ resolution:
+ {
+ integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==,
+ }
+ engines: { node: ">= 8" }
+ dependencies:
+ minipass: 3.3.6
+ dev: true
+
+ /fs-minipass@3.0.3:
+ resolution:
+ {
+ integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==,
+ }
+ engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ dependencies:
+ minipass: 7.0.3
+ dev: true
+
+ /fs.realpath@1.0.0:
+ resolution:
+ {
+ integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==,
+ }
+ dev: true
+
+ /fsevents@2.3.3:
+ resolution:
+ {
+ integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==,
+ }
+ engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 }
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /function-bind@1.1.1:
+ resolution:
+ {
+ integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==,
+ }
+ dev: true
+
+ /gauge@3.0.2:
+ resolution:
+ {
+ integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==,
+ }
+ engines: { node: ">=10" }
+ dependencies:
+ aproba: 2.0.0
+ color-support: 1.1.3
+ console-control-strings: 1.1.0
+ has-unicode: 2.0.1
+ object-assign: 4.1.1
+ signal-exit: 3.0.7
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wide-align: 1.1.5
+ dev: true
+
+ /gauge@4.0.4:
+ resolution:
+ {
+ integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==,
+ }
+ engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 }
+ dependencies:
+ aproba: 2.0.0
+ color-support: 1.1.3
+ console-control-strings: 1.1.0
+ has-unicode: 2.0.1
+ signal-exit: 3.0.7
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wide-align: 1.1.5
+ dev: true
+
+ /gensync@1.0.0-beta.2:
+ resolution:
+ {
+ integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==,
+ }
+ engines: { node: ">=6.9.0" }
+ dev: true
+
+ /get-caller-file@2.0.5:
+ resolution:
+ {
+ integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==,
+ }
+ engines: { node: 6.* || 8.* || >= 10.* }
+ dev: true
+
+ /get-intrinsic@1.2.1:
+ resolution:
+ {
+ integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==,
+ }
+ dependencies:
+ function-bind: 1.1.1
+ has: 1.0.3
+ has-proto: 1.0.1
+ has-symbols: 1.0.3
+ dev: true
+
+ /get-port-please@3.0.2:
+ resolution:
+ {
+ integrity: sha512-c14cAITf0E+uqdxGALvyYHwOL7UsnWcv3oDtgDAZksiVSGN87xlWVUWGZcmWQU3cICdaOxT+6LdQzUfK2ei1SA==,
+ }
+ dev: true
+
+ /get-stream@2.3.1:
+ resolution:
+ {
+ integrity: sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==,
+ }
+ engines: { node: ">=0.10.0" }
+ dependencies:
+ object-assign: 4.1.1
+ pinkie-promise: 2.0.1
+ dev: true
+
+ /get-stream@6.0.1:
+ resolution:
+ {
+ integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==,
+ }
+ engines: { node: ">=10" }
+ dev: true
+
+ /get-stream@8.0.1:
+ resolution:
+ {
+ integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==,
+ }
+ engines: { node: ">=16" }
+ dev: true
+
+ /get-tsconfig@4.7.0:
+ resolution:
+ {
+ integrity: sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw==,
+ }
+ dependencies:
+ resolve-pkg-maps: 1.0.0
+ dev: true
+
+ /giget@1.1.2:
+ resolution:
+ {
+ integrity: sha512-HsLoS07HiQ5oqvObOI+Qb2tyZH4Gj5nYGfF9qQcZNrPw+uEFhdXtgJr01aO2pWadGHucajYDLxxbtQkm97ON2A==,
+ }
+ hasBin: true
+ dependencies:
+ colorette: 2.0.20
+ defu: 6.1.2
+ https-proxy-agent: 5.0.1
+ mri: 1.2.0
+ node-fetch-native: 1.4.0
+ pathe: 1.1.1
+ tar: 6.1.15
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /git-config-path@2.0.0:
+ resolution:
+ {
+ integrity: sha512-qc8h1KIQbJpp+241id3GuAtkdyJ+IK+LIVtkiFTRKRrmddDzs3SI9CvP1QYmWBFvm1I/PWRwj//of8bgAc0ltA==,
+ }
+ engines: { node: ">=4" }
+ dev: true
+
+ /git-up@7.0.0:
+ resolution:
+ {
+ integrity: sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==,
+ }
+ dependencies:
+ is-ssh: 1.4.0
+ parse-url: 8.1.0
+ dev: true
+
+ /git-url-parse@13.1.0:
+ resolution:
+ {
+ integrity: sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA==,
+ }
+ dependencies:
+ git-up: 7.0.0
+ dev: true
+
+ /glob-parent@5.1.2:
+ resolution:
+ {
+ integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==,
+ }
+ engines: { node: ">= 6" }
+ dependencies:
+ is-glob: 4.0.3
+ dev: true
+
+ /glob@10.3.3:
+ resolution:
+ {
+ integrity: sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==,
+ }
+ engines: { node: ">=16 || 14 >=14.17" }
+ hasBin: true
+ dependencies:
+ foreground-child: 3.1.1
+ jackspeak: 2.3.1
+ minimatch: 9.0.3
+ minipass: 7.0.3
+ path-scurry: 1.10.1
+ dev: true
+
+ /glob@7.2.3:
+ resolution:
+ {
+ integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==,
+ }
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+ dev: true
+
+ /glob@8.1.0:
+ resolution:
+ {
+ integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==,
+ }
+ engines: { node: ">=12" }
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 5.1.6
+ once: 1.4.0
+ dev: true
+
+ /global-dirs@3.0.1:
+ resolution:
+ {
+ integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==,
+ }
+ engines: { node: ">=10" }
+ dependencies:
+ ini: 2.0.0
+ dev: true
+
+ /globals@11.12.0:
+ resolution:
+ {
+ integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==,
+ }
+ engines: { node: ">=4" }
+ dev: true
+
+ /globby@13.2.2:
+ resolution:
+ {
+ integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==,
+ }
+ engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 }
+ dependencies:
+ dir-glob: 3.0.1
+ fast-glob: 3.3.1
+ ignore: 5.2.4
+ merge2: 1.4.1
+ slash: 4.0.0
+ dev: true
+
+ /gopd@1.0.1:
+ resolution:
+ {
+ integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==,
+ }
+ dependencies:
+ get-intrinsic: 1.2.1
+ dev: true
+
+ /graceful-fs@4.2.11:
+ resolution:
+ {
+ integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==,
+ }
+ dev: true
+
+ /gzip-size@7.0.0:
+ resolution:
+ {
+ integrity: sha512-O1Ld7Dr+nqPnmGpdhzLmMTQ4vAsD+rHwMm1NLUmoUFFymBOMKxCCrtDxqdBRYXdeEPEi3SyoR4TizJLQrnKBNA==,
+ }
+ engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 }
+ dependencies:
+ duplexer: 0.1.2
+ dev: true
+
+ /h3@1.8.1:
+ resolution:
+ {
+ integrity: sha512-m5rFuu+5bpwBBHqqS0zexjK+Q8dhtFRvO9JXQG0RvSPL6QrIT6vv42vuBM22SLOgGMoZYsHk0y7VPidt9s+nkw==,
+ }
+ dependencies:
+ cookie-es: 1.0.0
+ defu: 6.1.2
+ destr: 2.0.1
+ iron-webcrypto: 0.8.2
+ radix3: 1.1.0
+ ufo: 1.3.0
+ uncrypto: 0.1.3
+ unenv: 1.7.4
+ dev: true
+
+ /has-flag@3.0.0:
+ resolution:
+ {
+ integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==,
+ }
+ engines: { node: ">=4" }
+ dev: true
+
+ /has-flag@4.0.0:
+ resolution:
+ {
+ integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==,
+ }
+ engines: { node: ">=8" }
+ dev: true
+
+ /has-property-descriptors@1.0.0:
+ resolution:
+ {
+ integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==,
+ }
+ dependencies:
+ get-intrinsic: 1.2.1
+ dev: true
+
+ /has-proto@1.0.1:
+ resolution:
+ {
+ integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==,
+ }
+ engines: { node: ">= 0.4" }
+ dev: true
+
+ /has-symbols@1.0.3:
+ resolution:
+ {
+ integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==,
+ }
+ engines: { node: ">= 0.4" }
+ dev: true
+
+ /has-tostringtag@1.0.0:
+ resolution:
+ {
+ integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==,
+ }
+ engines: { node: ">= 0.4" }
+ dependencies:
+ has-symbols: 1.0.3
+ dev: true
+
+ /has-unicode@2.0.1:
+ resolution:
+ {
+ integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==,
+ }
+ dev: true
+
+ /has@1.0.3:
+ resolution:
+ {
+ integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==,
+ }
+ engines: { node: ">= 0.4.0" }
+ dependencies:
+ function-bind: 1.1.1
+ dev: true
+
+ /hash-sum@2.0.0:
+ resolution:
+ {
+ integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==,
+ }
+ dev: true
+
+ /hookable@5.5.3:
+ resolution:
+ {
+ integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==,
+ }
+ dev: true
+
+ /hosted-git-info@7.0.0:
+ resolution:
+ {
+ integrity: sha512-ICclEpTLhHj+zCuSb2/usoNXSVkxUSIopre+b1w8NDY9Dntp9LO4vLdHYI336TH8sAqwrRgnSfdkBG2/YpisHA==,
+ }
+ engines: { node: ^16.14.0 || >=18.0.0 }
+ dependencies:
+ lru-cache: 10.0.1
+ dev: true
+
+ /html-tags@3.3.1:
+ resolution:
+ {
+ integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==,
+ }
+ engines: { node: ">=8" }
+ dev: true
+
+ /http-cache-semantics@4.1.1:
+ resolution:
+ {
+ integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==,
+ }
+ dev: true
+
+ /http-errors@2.0.0:
+ resolution:
+ {
+ integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==,
+ }
+ engines: { node: ">= 0.8" }
+ dependencies:
+ depd: 2.0.0
+ inherits: 2.0.4
+ setprototypeof: 1.2.0
+ statuses: 2.0.1
+ toidentifier: 1.0.1
+ dev: true
+
+ /http-proxy-agent@5.0.0:
+ resolution:
+ {
+ integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==,
+ }
+ engines: { node: ">= 6" }
+ dependencies:
+ "@tootallnate/once": 2.0.0
+ agent-base: 6.0.2
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /http-shutdown@1.2.2:
+ resolution:
+ {
+ integrity: sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw==,
+ }
+ engines: { iojs: ">= 1.0.0", node: ">= 0.12.0" }
+ dev: true
+
+ /https-proxy-agent@5.0.1:
+ resolution:
+ {
+ integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==,
+ }
+ engines: { node: ">= 6" }
+ dependencies:
+ agent-base: 6.0.2
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /https-proxy-agent@7.0.1:
+ resolution:
+ {
+ integrity: sha512-Eun8zV0kcYS1g19r78osiQLEFIRspRUDd9tIfBCTBPBeMieF/EsJNL8VI3xOIdYRDEkjQnqOYPsZ2DsWsVsFwQ==,
+ }
+ engines: { node: ">= 14" }
+ dependencies:
+ agent-base: 7.1.0
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /httpxy@0.1.4:
+ resolution:
+ {
+ integrity: sha512-ArXKNWhU5taozl6fFnu01M9HiInAqSOw4mUp+7DY/zbTHPmS8JBqH0IC3VLovRBd9b8ZE03ztemcxzeWT6pCoA==,
+ }
+ dev: true
+
+ /human-signals@2.1.0:
+ resolution:
+ {
+ integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==,
+ }
+ engines: { node: ">=10.17.0" }
+ dev: true
+
+ /human-signals@4.3.1:
+ resolution:
+ {
+ integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==,
+ }
+ engines: { node: ">=14.18.0" }
+ dev: true
+
+ /human-signals@5.0.0:
+ resolution:
+ {
+ integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==,
+ }
+ engines: { node: ">=16.17.0" }
+ dev: true
+
+ /humanize-ms@1.2.1:
+ resolution:
+ {
+ integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==,
+ }
+ dependencies:
+ ms: 2.1.3
+ dev: true
+
+ /iconv-lite@0.6.3:
+ resolution:
+ {
+ integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==,
+ }
+ engines: { node: ">=0.10.0" }
+ requiresBuild: true
+ dependencies:
+ safer-buffer: 2.1.2
+ dev: true
+ optional: true
+
+ /ieee754@1.2.1:
+ resolution:
+ {
+ integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==,
+ }
+ dev: true
+
+ /ignore-walk@6.0.3:
+ resolution:
+ {
+ integrity: sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==,
+ }
+ engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ dependencies:
+ minimatch: 9.0.3
+ dev: true
+
+ /ignore@5.2.4:
+ resolution:
+ {
+ integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==,
+ }
+ engines: { node: ">= 4" }
+ dev: true
+
+ /image-meta@0.1.1:
+ resolution:
+ {
+ integrity: sha512-+oXiHwOEPr1IE5zY0tcBLED/CYcre15J4nwL50x3o0jxWqEkyjrusiKP3YSU+tr9fvJp33ZcP5Gpj2295g3aEw==,
+ }
+ engines: { node: ">=10.18.0" }
+ dev: true
+
+ /imurmurhash@0.1.4:
+ resolution:
+ {
+ integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==,
+ }
+ engines: { node: ">=0.8.19" }
+ dev: true
+
+ /indent-string@4.0.0:
+ resolution:
+ {
+ integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==,
+ }
+ engines: { node: ">=8" }
+ dev: true
+
+ /inflight@1.0.6:
+ resolution:
+ {
+ integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==,
+ }
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+ dev: true
+
+ /inherits@2.0.4:
+ resolution:
+ {
+ integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==,
+ }
+ dev: true
+
+ /ini@1.3.8:
+ resolution:
+ {
+ integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==,
+ }
+ dev: true
+
+ /ini@2.0.0:
+ resolution:
+ {
+ integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==,
+ }
+ engines: { node: ">=10" }
+ dev: true
+
+ /ioredis@5.3.2:
+ resolution:
+ {
+ integrity: sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA==,
+ }
+ engines: { node: ">=12.22.0" }
+ dependencies:
+ "@ioredis/commands": 1.2.0
+ cluster-key-slot: 1.1.2
+ debug: 4.3.4
+ denque: 2.1.0
+ lodash.defaults: 4.2.0
+ lodash.isarguments: 3.1.0
+ redis-errors: 1.2.0
+ redis-parser: 3.0.0
+ standard-as-callback: 2.1.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /ip@2.0.0:
+ resolution:
+ {
+ integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==,
+ }
+ dev: true
+
+ /iron-webcrypto@0.8.2:
+ resolution:
+ {
+ integrity: sha512-jGiwmpgTuF19Vt4hn3+AzaVFGpVZt7A1ysd5ivFel2r4aNVFwqaYa6aU6qsF1PM7b+WFivZHz3nipwUOXaOnHg==,
+ }
+ dev: true
+
+ /is-arguments@1.1.1:
+ resolution:
+ {
+ integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==,
+ }
+ engines: { node: ">= 0.4" }
+ dependencies:
+ call-bind: 1.0.2
+ has-tostringtag: 1.0.0
+ dev: true
+
+ /is-binary-path@2.1.0:
+ resolution:
+ {
+ integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==,
+ }
+ engines: { node: ">=8" }
+ dependencies:
+ binary-extensions: 2.2.0
+ dev: true
+
+ /is-builtin-module@3.2.1:
+ resolution:
+ {
+ integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==,
+ }
+ engines: { node: ">=6" }
+ dependencies:
+ builtin-modules: 3.3.0
+ dev: true
+
+ /is-callable@1.2.7:
+ resolution:
+ {
+ integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==,
+ }
+ engines: { node: ">= 0.4" }
+ dev: true
+
+ /is-core-module@2.13.0:
+ resolution:
+ {
+ integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==,
+ }
+ dependencies:
+ has: 1.0.3
+ dev: true
+
+ /is-docker@2.2.1:
+ resolution:
+ {
+ integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==,
+ }
+ engines: { node: ">=8" }
+ hasBin: true
+ dev: true
+
+ /is-docker@3.0.0:
+ resolution:
+ {
+ integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==,
+ }
+ engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 }
+ hasBin: true
+ dev: true
+
+ /is-extglob@2.1.1:
+ resolution:
+ {
+ integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==,
+ }
+ engines: { node: ">=0.10.0" }
+ dev: true
+
+ /is-fullwidth-code-point@3.0.0:
+ resolution:
+ {
+ integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==,
+ }
+ engines: { node: ">=8" }
+ dev: true
+
+ /is-generator-function@1.0.10:
+ resolution:
+ {
+ integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==,
+ }
+ engines: { node: ">= 0.4" }
+ dependencies:
+ has-tostringtag: 1.0.0
+ dev: true
+
+ /is-glob@4.0.3:
+ resolution:
+ {
+ integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==,
+ }
+ engines: { node: ">=0.10.0" }
+ dependencies:
+ is-extglob: 2.1.1
+ dev: true
+
+ /is-inside-container@1.0.0:
+ resolution:
+ {
+ integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==,
+ }
+ engines: { node: ">=14.16" }
+ hasBin: true
+ dependencies:
+ is-docker: 3.0.0
+ dev: true
+
+ /is-installed-globally@0.4.0:
+ resolution:
+ {
+ integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==,
+ }
+ engines: { node: ">=10" }
+ dependencies:
+ global-dirs: 3.0.1
+ is-path-inside: 3.0.3
+ dev: true
+
+ /is-lambda@1.0.1:
+ resolution:
+ {
+ integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==,
+ }
+ dev: true
+
+ /is-module@1.0.0:
+ resolution:
+ {
+ integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==,
+ }
+ dev: true
+
+ /is-nan@1.3.2:
+ resolution:
+ {
+ integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==,
+ }
+ engines: { node: ">= 0.4" }
+ dependencies:
+ call-bind: 1.0.2
+ define-properties: 1.2.0
+ dev: true
+
+ /is-natural-number@4.0.1:
+ resolution:
+ {
+ integrity: sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==,
+ }
+ dev: true
+
+ /is-number@7.0.0:
+ resolution:
+ {
+ integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==,
+ }
+ engines: { node: ">=0.12.0" }
+ dev: true
+
+ /is-path-inside@3.0.3:
+ resolution:
+ {
+ integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==,
+ }
+ engines: { node: ">=8" }
+ dev: true
+
+ /is-primitive@3.0.1:
+ resolution:
+ {
+ integrity: sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w==,
+ }
+ engines: { node: ">=0.10.0" }
+ dev: true
+
+ /is-promise@4.0.0:
+ resolution:
+ {
+ integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==,
+ }
+ dev: true
+
+ /is-reference@1.2.1:
+ resolution:
+ {
+ integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==,
+ }
+ dependencies:
+ "@types/estree": 1.0.1
+ dev: true
+
+ /is-ssh@1.4.0:
+ resolution:
+ {
+ integrity: sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==,
+ }
+ dependencies:
+ protocols: 2.0.1
+ dev: true
+
+ /is-stream@1.1.0:
+ resolution:
+ {
+ integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==,
+ }
+ engines: { node: ">=0.10.0" }
+ dev: true
+
+ /is-stream@2.0.1:
+ resolution:
+ {
+ integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==,
+ }
+ engines: { node: ">=8" }
+ dev: true
+
+ /is-stream@3.0.0:
+ resolution:
+ {
+ integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==,
+ }
+ engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 }
+ dev: true
+
+ /is-typed-array@1.1.12:
+ resolution:
+ {
+ integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==,
+ }
+ engines: { node: ">= 0.4" }
+ dependencies:
+ which-typed-array: 1.1.11
+ dev: true
+
+ /is-wsl@2.2.0:
+ resolution:
+ {
+ integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==,
+ }
+ engines: { node: ">=8" }
+ dependencies:
+ is-docker: 2.2.1
+ dev: true
+
+ /isarray@1.0.0:
+ resolution:
+ {
+ integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==,
+ }
+ dev: true
+
+ /isexe@2.0.0:
+ resolution:
+ {
+ integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==,
+ }
+ dev: true
+
+ /jackspeak@2.3.1:
+ resolution:
+ {
+ integrity: sha512-4iSY3Bh1Htv+kLhiiZunUhQ+OYXIn0ze3ulq8JeWrFKmhPAJSySV2+kdtRh2pGcCeF0s6oR8Oc+pYZynJj4t8A==,
+ }
+ engines: { node: ">=14" }
+ dependencies:
+ "@isaacs/cliui": 8.0.2
+ optionalDependencies:
+ "@pkgjs/parseargs": 0.11.0
+ dev: true
+
+ /jiti@1.19.3:
+ resolution:
+ {
+ integrity: sha512-5eEbBDQT/jF1xg6l36P+mWGGoH9Spuy0PCdSr2dtWRDGC6ph/w9ZCL4lmESW8f8F7MwT3XKescfP0wnZWAKL9w==,
+ }
+ hasBin: true
+ dev: true
+
+ /joi@17.10.0:
+ resolution:
+ {
+ integrity: sha512-hrazgRSlhzacZ69LdcKfhi3Vu13z2yFfoAzmEov3yFIJlatTdVGUW6vle1zjH8qkzdCn/qGw8rapjqsObbYXAg==,
+ }
+ dependencies:
+ "@hapi/hoek": 9.3.0
+ "@hapi/topo": 5.1.0
+ "@sideway/address": 4.1.4
+ "@sideway/formula": 3.0.1
+ "@sideway/pinpoint": 2.0.0
+ dev: true
+
+ /js-tokens@4.0.0:
+ resolution:
+ {
+ integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==,
+ }
+ dev: true
+
+ /js-yaml@4.1.0:
+ resolution:
+ {
+ integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==,
+ }
+ hasBin: true
+ dependencies:
+ argparse: 2.0.1
+ dev: true
+
+ /jsesc@2.5.2:
+ resolution:
+ {
+ integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==,
+ }
+ engines: { node: ">=4" }
+ hasBin: true
+ dev: true
+
+ /json-parse-even-better-errors@3.0.0:
+ resolution:
+ {
+ integrity: sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==,
+ }
+ engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ dev: true
+
+ /json5@2.2.3:
+ resolution:
+ {
+ integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==,
+ }
+ engines: { node: ">=6" }
+ hasBin: true
+ dev: true
+
+ /jsonc-parser@3.2.0:
+ resolution:
+ {
+ integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==,
+ }
+ dev: true
+
+ /jsonfile@6.1.0:
+ resolution:
+ {
+ integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==,
+ }
+ dependencies:
+ universalify: 2.0.0
+ optionalDependencies:
+ graceful-fs: 4.2.11
+ dev: true
+
+ /jsonparse@1.3.1:
+ resolution:
+ {
+ integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==,
+ }
+ engines: { "0": node >= 0.2.0 }
+ dev: true
+
+ /kleur@3.0.3:
+ resolution:
+ {
+ integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==,
+ }
+ engines: { node: ">=6" }
+ dev: true
+
+ /klona@2.0.6:
+ resolution:
+ {
+ integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==,
+ }
+ engines: { node: ">= 8" }
+ dev: true
+
+ /knitwork@1.0.0:
+ resolution:
+ {
+ integrity: sha512-dWl0Dbjm6Xm+kDxhPQJsCBTxrJzuGl0aP9rhr+TG8D3l+GL90N8O8lYUi7dTSAN2uuDqCtNgb6aEuQH5wsiV8Q==,
+ }
+ dev: true
+
+ /kolorist@1.8.0:
+ resolution:
+ {
+ integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==,
+ }
+ dev: true
+
+ /launch-editor@2.6.0:
+ resolution:
+ {
+ integrity: sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==,
+ }
+ dependencies:
+ picocolors: 1.0.0
+ shell-quote: 1.8.1
+ dev: true
+
+ /lazystream@1.0.1:
+ resolution:
+ {
+ integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==,
+ }
+ engines: { node: ">= 0.6.3" }
+ dependencies:
+ readable-stream: 2.3.8
+ dev: true
+
+ /lilconfig@2.1.0:
+ resolution:
+ {
+ integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==,
+ }
+ engines: { node: ">=10" }
+ dev: true
+
+ /listhen@1.4.4:
+ resolution:
+ {
+ integrity: sha512-xoZWbfziou7xPWj9nlFXeroFTJZVIyJ6wKrLea2jxvWgMkcz/vLMoZACYHLRmcLGi5hZkcDF48tmkmv1Y6Y42Q==,
+ }
+ hasBin: true
+ dependencies:
+ "@parcel/watcher": 2.3.0
+ "@parcel/watcher-wasm": 2.3.0
+ citty: 0.1.3
+ clipboardy: 3.0.0
+ consola: 3.2.3
+ defu: 6.1.2
+ get-port-please: 3.0.2
+ h3: 1.8.1
+ http-shutdown: 1.2.2
+ jiti: 1.19.3
+ mlly: 1.4.1
+ node-forge: 1.3.1
+ pathe: 1.1.1
+ ufo: 1.3.0
+ untun: 0.1.2
+ uqr: 0.1.2
+ dev: true
+
+ /local-pkg@0.4.3:
+ resolution:
+ {
+ integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==,
+ }
+ engines: { node: ">=14" }
+ dev: true
+
+ /lodash.debounce@4.0.8:
+ resolution:
+ {
+ integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==,
+ }
+ dev: true
+
+ /lodash.defaults@4.2.0:
+ resolution:
+ {
+ integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==,
+ }
+ dev: true
+
+ /lodash.difference@4.5.0:
+ resolution:
+ {
+ integrity: sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==,
+ }
+ dev: true
+
+ /lodash.flatten@4.4.0:
+ resolution:
+ {
+ integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==,
+ }
+ dev: true
+
+ /lodash.isarguments@3.1.0:
+ resolution:
+ {
+ integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==,
+ }
+ dev: true
+
+ /lodash.isplainobject@4.0.6:
+ resolution:
+ {
+ integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==,
+ }
+ dev: true
+
+ /lodash.memoize@4.1.2:
+ resolution:
+ {
+ integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==,
+ }
+ dev: true
+
+ /lodash.pick@4.4.0:
+ resolution:
+ {
+ integrity: sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==,
+ }
+ dev: true
+
+ /lodash.union@4.6.0:
+ resolution:
+ {
+ integrity: sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==,
+ }
+ dev: true
+
+ /lodash.uniq@4.5.0:
+ resolution:
+ {
+ integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==,
+ }
+ dev: true
+
+ /lodash@4.17.21:
+ resolution:
+ {
+ integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==,
+ }
+ dev: true
+
+ /lru-cache@10.0.1:
+ resolution:
+ {
+ integrity: sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==,
+ }
+ engines: { node: 14 || >=16.14 }
+ dev: true
+
+ /lru-cache@5.1.1:
+ resolution:
+ {
+ integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==,
+ }
+ dependencies:
+ yallist: 3.1.1
+ dev: true
+
+ /lru-cache@6.0.0:
+ resolution:
+ {
+ integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==,
+ }
+ engines: { node: ">=10" }
+ dependencies:
+ yallist: 4.0.0
+ dev: true
+
+ /lru-cache@7.18.3:
+ resolution:
+ {
+ integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==,
+ }
+ engines: { node: ">=12" }
+ dev: true
+
+ /magic-string-ast@0.3.0:
+ resolution:
+ {
+ integrity: sha512-0shqecEPgdFpnI3AP90epXyxZy9g6CRZ+SZ7BcqFwYmtFEnZ1jpevcV5HoyVnlDS9gCnc1UIg3Rsvp3Ci7r8OA==,
+ }
+ engines: { node: ">=16.14.0" }
+ dependencies:
+ magic-string: 0.30.3
+ dev: true
+
+ /magic-string@0.27.0:
+ resolution:
+ {
+ integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==,
+ }
+ engines: { node: ">=12" }
+ dependencies:
+ "@jridgewell/sourcemap-codec": 1.4.15
+ dev: true
+
+ /magic-string@0.30.3:
+ resolution:
+ {
+ integrity: sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==,
+ }
+ engines: { node: ">=12" }
+ dependencies:
+ "@jridgewell/sourcemap-codec": 1.4.15
+ dev: true
+
+ /magicast@0.2.10:
+ resolution:
+ {
+ integrity: sha512-Ah2qatigknxwmoYCd9hx/mmVyrRNhDKiaWZIuW4gL6dWrAGMoOpCVkQ3VpGWARtkaJVFhe8uIphcsxDzLPQUyg==,
+ }
+ dependencies:
+ "@babel/parser": 7.22.13
+ "@babel/types": 7.22.11
+ recast: 0.23.4
+ dev: true
+
+ /make-dir@1.3.0:
+ resolution:
+ {
+ integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==,
+ }
+ engines: { node: ">=4" }
+ dependencies:
+ pify: 3.0.0
+ dev: true
+
+ /make-dir@3.1.0:
+ resolution:
+ {
+ integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==,
+ }
+ engines: { node: ">=8" }
+ dependencies:
+ semver: 6.3.1
+ dev: true
+
+ /make-fetch-happen@11.1.1:
+ resolution:
+ {
+ integrity: sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==,
+ }
+ engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ dependencies:
+ agentkeepalive: 4.5.0
+ cacache: 17.1.4
+ http-cache-semantics: 4.1.1
+ http-proxy-agent: 5.0.0
+ https-proxy-agent: 5.0.1
+ is-lambda: 1.0.1
+ lru-cache: 7.18.3
+ minipass: 5.0.0
+ minipass-fetch: 3.0.4
+ minipass-flush: 1.0.5
+ minipass-pipeline: 1.2.4
+ negotiator: 0.6.3
+ promise-retry: 2.0.1
+ socks-proxy-agent: 7.0.0
+ ssri: 10.0.5
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /make-fetch-happen@13.0.0:
+ resolution:
+ {
+ integrity: sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==,
+ }
+ engines: { node: ^16.14.0 || >=18.0.0 }
+ dependencies:
+ "@npmcli/agent": 2.0.0
+ cacache: 18.0.0
+ http-cache-semantics: 4.1.1
+ is-lambda: 1.0.1
+ minipass: 7.0.3
+ minipass-fetch: 3.0.4
+ minipass-flush: 1.0.5
+ minipass-pipeline: 1.2.4
+ negotiator: 0.6.3
+ promise-retry: 2.0.1
+ ssri: 10.0.5
+ dev: true
+
+ /mdn-data@2.0.28:
+ resolution:
+ {
+ integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==,
+ }
+ dev: true
+
+ /mdn-data@2.0.30:
+ resolution:
+ {
+ integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==,
+ }
+ dev: true
+
+ /memory-fs@0.5.0:
+ resolution:
+ {
+ integrity: sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==,
+ }
+ engines: { node: ">=4.3.0 <5.0.0 || >=5.10" }
+ dependencies:
+ errno: 0.1.8
+ readable-stream: 2.3.8
+ dev: true
+
+ /merge-stream@2.0.0:
+ resolution:
+ {
+ integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==,
+ }
+ dev: true
+
+ /merge2@1.4.1:
+ resolution:
+ {
+ integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==,
+ }
+ engines: { node: ">= 8" }
+ dev: true
+
+ /micromatch@4.0.5:
+ resolution:
+ {
+ integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==,
+ }
+ engines: { node: ">=8.6" }
+ dependencies:
+ braces: 3.0.2
+ picomatch: 2.3.1
+ dev: true
+
+ /mime-db@1.52.0:
+ resolution:
+ {
+ integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==,
+ }
+ engines: { node: ">= 0.6" }
+ dev: true
+
+ /mime-types@2.1.35:
+ resolution:
+ {
+ integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==,
+ }
+ engines: { node: ">= 0.6" }
+ dependencies:
+ mime-db: 1.52.0
+ dev: true
+
+ /mime@1.6.0:
+ resolution:
+ {
+ integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==,
+ }
+ engines: { node: ">=4" }
+ hasBin: true
+ dev: true
+
+ /mime@2.5.2:
+ resolution:
+ {
+ integrity: sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==,
+ }
+ engines: { node: ">=4.0.0" }
+ hasBin: true
+ dev: true
+
+ /mime@3.0.0:
+ resolution:
+ {
+ integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==,
+ }
+ engines: { node: ">=10.0.0" }
+ hasBin: true
+ dev: true
+
+ /mimic-fn@2.1.0:
+ resolution:
+ {
+ integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==,
+ }
+ engines: { node: ">=6" }
+ dev: true
+
+ /mimic-fn@4.0.0:
+ resolution:
+ {
+ integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==,
+ }
+ engines: { node: ">=12" }
+ dev: true
+
+ /minimatch@3.0.8:
+ resolution:
+ {
+ integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==,
+ }
+ dependencies:
+ brace-expansion: 1.1.11
+ dev: true
+
+ /minimatch@3.1.2:
+ resolution:
+ {
+ integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==,
+ }
+ dependencies:
+ brace-expansion: 1.1.11
+ dev: true
+
+ /minimatch@5.1.6:
+ resolution:
+ {
+ integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==,
+ }
+ engines: { node: ">=10" }
+ dependencies:
+ brace-expansion: 2.0.1
+ dev: true
+
+ /minimatch@9.0.3:
+ resolution:
+ {
+ integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==,
+ }
+ engines: { node: ">=16 || 14 >=14.17" }
+ dependencies:
+ brace-expansion: 2.0.1
+ dev: true
+
+ /minimist@1.2.8:
+ resolution:
+ {
+ integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==,
+ }
+ dev: true
+
+ /minipass-collect@1.0.2:
+ resolution:
+ {
+ integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==,
+ }
+ engines: { node: ">= 8" }
+ dependencies:
+ minipass: 3.3.6
+ dev: true
+
+ /minipass-fetch@3.0.4:
+ resolution:
+ {
+ integrity: sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==,
+ }
+ engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ dependencies:
+ minipass: 7.0.3
+ minipass-sized: 1.0.3
+ minizlib: 2.1.2
+ optionalDependencies:
+ encoding: 0.1.13
+ dev: true
+
+ /minipass-flush@1.0.5:
+ resolution:
+ {
+ integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==,
+ }
+ engines: { node: ">= 8" }
+ dependencies:
+ minipass: 3.3.6
+ dev: true
+
+ /minipass-json-stream@1.0.1:
+ resolution:
+ {
+ integrity: sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==,
+ }
+ dependencies:
+ jsonparse: 1.3.1
+ minipass: 3.3.6
+ dev: true
+
+ /minipass-pipeline@1.2.4:
+ resolution:
+ {
+ integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==,
+ }
+ engines: { node: ">=8" }
+ dependencies:
+ minipass: 3.3.6
+ dev: true
+
+ /minipass-sized@1.0.3:
+ resolution:
+ {
+ integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==,
+ }
+ engines: { node: ">=8" }
+ dependencies:
+ minipass: 3.3.6
+ dev: true
+
+ /minipass@3.3.6:
+ resolution:
+ {
+ integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==,
+ }
+ engines: { node: ">=8" }
+ dependencies:
+ yallist: 4.0.0
+ dev: true
+
+ /minipass@5.0.0:
+ resolution:
+ {
+ integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==,
+ }
+ engines: { node: ">=8" }
+ dev: true
+
+ /minipass@7.0.3:
+ resolution:
+ {
+ integrity: sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==,
+ }
+ engines: { node: ">=16 || 14 >=14.17" }
+ dev: true
+
+ /minizlib@2.1.2:
+ resolution:
+ {
+ integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==,
+ }
+ engines: { node: ">= 8" }
+ dependencies:
+ minipass: 3.3.6
+ yallist: 4.0.0
+ dev: true
+
+ /mkdirp@1.0.4:
+ resolution:
+ {
+ integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==,
+ }
+ engines: { node: ">=10" }
+ hasBin: true
+ dev: true
+
+ /mlly@1.4.1:
+ resolution:
+ {
+ integrity: sha512-SCDs78Q2o09jiZiE2WziwVBEqXQ02XkGdUy45cbJf+BpYRIjArXRJ1Wbowxkb+NaM9DWvS3UC9GiO/6eqvQ/pg==,
+ }
+ dependencies:
+ acorn: 8.10.0
+ pathe: 1.1.1
+ pkg-types: 1.0.3
+ ufo: 1.3.0
+ dev: true
+
+ /mri@1.2.0:
+ resolution:
+ {
+ integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==,
+ }
+ engines: { node: ">=4" }
+ dev: true
+
+ /mrmime@1.0.1:
+ resolution:
+ {
+ integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==,
+ }
+ engines: { node: ">=10" }
+ dev: true
+
+ /ms@2.0.0:
+ resolution:
+ {
+ integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==,
+ }
+ dev: true
+
+ /ms@2.1.2:
+ resolution:
+ {
+ integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==,
+ }
+ dev: true
+
+ /ms@2.1.3:
+ resolution:
+ {
+ integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==,
+ }
+ dev: true
+
+ /nanoid@3.3.6:
+ resolution:
+ {
+ integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==,
+ }
+ engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 }
+ hasBin: true
+ dev: true
+
+ /nanoid@4.0.2:
+ resolution:
+ {
+ integrity: sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==,
+ }
+ engines: { node: ^14 || ^16 || >=18 }
+ hasBin: true
+ dev: true
+
+ /negotiator@0.6.3:
+ resolution:
+ {
+ integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==,
+ }
+ engines: { node: ">= 0.6" }
+ dev: true
+
+ /nitropack@2.6.2:
+ resolution:
+ {
+ integrity: sha512-gzbxLIhCoQrK+NrgW5Szuo6zzFEU/bqoohimyJ8IkETI3MXlYtLphlW/UVE8pv8UQ0IJ2HzxFpZ7Ldd0+bQ35A==,
+ }
+ engines: { node: ^16.11.0 || >=17.0.0 }
+ hasBin: true
+ dependencies:
+ "@cloudflare/kv-asset-handler": 0.3.0
+ "@netlify/functions": 2.0.2
+ "@rollup/plugin-alias": 5.0.0(rollup@3.28.1)
+ "@rollup/plugin-commonjs": 25.0.4(rollup@3.28.1)
+ "@rollup/plugin-inject": 5.0.3(rollup@3.28.1)
+ "@rollup/plugin-json": 6.0.0(rollup@3.28.1)
+ "@rollup/plugin-node-resolve": 15.2.1(rollup@3.28.1)
+ "@rollup/plugin-replace": 5.0.2(rollup@3.28.1)
+ "@rollup/plugin-terser": 0.4.3(rollup@3.28.1)
+ "@rollup/plugin-wasm": 6.1.3(rollup@3.28.1)
+ "@rollup/pluginutils": 5.0.4(rollup@3.28.1)
+ "@types/http-proxy": 1.17.11
+ "@vercel/nft": 0.23.1
+ archiver: 6.0.0
+ c12: 1.4.2
+ chalk: 5.3.0
+ chokidar: 3.5.3
+ citty: 0.1.3
+ consola: 3.2.3
+ cookie-es: 1.0.0
+ defu: 6.1.2
+ destr: 2.0.1
+ dot-prop: 8.0.2
+ esbuild: 0.19.2
+ escape-string-regexp: 5.0.0
+ etag: 1.8.1
+ fs-extra: 11.1.1
+ globby: 13.2.2
+ gzip-size: 7.0.0
+ h3: 1.8.1
+ hookable: 5.5.3
+ httpxy: 0.1.4
+ is-primitive: 3.0.1
+ jiti: 1.19.3
+ klona: 2.0.6
+ knitwork: 1.0.0
+ listhen: 1.4.4
+ magic-string: 0.30.3
+ mime: 3.0.0
+ mlly: 1.4.1
+ mri: 1.2.0
+ node-fetch-native: 1.4.0
+ ofetch: 1.3.3
+ ohash: 1.1.3
+ openapi-typescript: 6.5.3
+ pathe: 1.1.1
+ perfect-debounce: 1.0.0
+ pkg-types: 1.0.3
+ pretty-bytes: 6.1.1
+ radix3: 1.1.0
+ rollup: 3.28.1
+ rollup-plugin-visualizer: 5.9.2(rollup@3.28.1)
+ scule: 1.0.0
+ semver: 7.5.4
+ serve-placeholder: 2.0.1
+ serve-static: 1.15.0
+ std-env: 3.4.3
+ ufo: 1.3.0
+ uncrypto: 0.1.3
+ unctx: 2.3.1
+ unenv: 1.7.4
+ unimport: 3.2.0(rollup@3.28.1)
+ unstorage: 1.9.0
+ transitivePeerDependencies:
+ - "@azure/app-configuration"
+ - "@azure/cosmos"
+ - "@azure/data-tables"
+ - "@azure/identity"
+ - "@azure/keyvault-secrets"
+ - "@azure/storage-blob"
+ - "@capacitor/preferences"
+ - "@planetscale/database"
+ - "@upstash/redis"
+ - "@vercel/kv"
+ - encoding
+ - idb-keyval
+ - supports-color
+ dev: true
+
+ /node-addon-api@7.0.0:
+ resolution:
+ {
+ integrity: sha512-vgbBJTS4m5/KkE16t5Ly0WW9hz46swAstv0hYYwMtbG7AznRhNyfLRe8HZAiWIpcHzoO7HxhLuBQj9rJ/Ho0ZA==,
+ }
+ dev: true
+
+ /node-domexception@1.0.0:
+ resolution:
+ {
+ integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==,
+ }
+ engines: { node: ">=10.5.0" }
+ dev: true
+
+ /node-fetch-native@1.4.0:
+ resolution:
+ {
+ integrity: sha512-F5kfEj95kX8tkDhUCYdV8dg3/8Olx/94zB8+ZNthFs6Bz31UpUi8Xh40TN3thLwXgrwXry1pEg9lJ++tLWTcqA==,
+ }
+ dev: true
+
+ /node-fetch@2.7.0:
+ resolution:
+ {
+ integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==,
+ }
+ engines: { node: 4.x || >=6.0.0 }
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+ dependencies:
+ whatwg-url: 5.0.0
+ dev: true
+
+ /node-fetch@3.3.2:
+ resolution:
+ {
+ integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==,
+ }
+ engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 }
+ dependencies:
+ data-uri-to-buffer: 4.0.1
+ fetch-blob: 3.2.0
+ formdata-polyfill: 4.0.10
+ dev: true
+
+ /node-forge@1.3.1:
+ resolution:
+ {
+ integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==,
+ }
+ engines: { node: ">= 6.13.0" }
+ dev: true
+
+ /node-gyp-build@4.6.1:
+ resolution:
+ {
+ integrity: sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==,
+ }
+ hasBin: true
+ dev: true
+
+ /node-gyp@9.4.0:
+ resolution:
+ {
+ integrity: sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==,
+ }
+ engines: { node: ^12.13 || ^14.13 || >=16 }
+ hasBin: true
+ dependencies:
+ env-paths: 2.2.1
+ exponential-backoff: 3.1.1
+ glob: 7.2.3
+ graceful-fs: 4.2.11
+ make-fetch-happen: 11.1.1
+ nopt: 6.0.0
+ npmlog: 6.0.2
+ rimraf: 3.0.2
+ semver: 7.5.4
+ tar: 6.1.15
+ which: 2.0.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /node-releases@2.0.13:
+ resolution:
+ {
+ integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==,
+ }
+ dev: true
+
+ /nopt@5.0.0:
+ resolution:
+ {
+ integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==,
+ }
+ engines: { node: ">=6" }
+ hasBin: true
+ dependencies:
+ abbrev: 1.1.1
+ dev: true
+
+ /nopt@6.0.0:
+ resolution:
+ {
+ integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==,
+ }
+ engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 }
+ hasBin: true
+ dependencies:
+ abbrev: 1.1.1
+ dev: true
+
+ /normalize-package-data@6.0.0:
+ resolution:
+ {
+ integrity: sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==,
+ }
+ engines: { node: ^16.14.0 || >=18.0.0 }
+ dependencies:
+ hosted-git-info: 7.0.0
+ is-core-module: 2.13.0
+ semver: 7.5.4
+ validate-npm-package-license: 3.0.4
+ dev: true
+
+ /normalize-path@3.0.0:
+ resolution:
+ {
+ integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==,
+ }
+ engines: { node: ">=0.10.0" }
+ dev: true
+
+ /normalize-range@0.1.2:
+ resolution:
+ {
+ integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==,
+ }
+ engines: { node: ">=0.10.0" }
+ dev: true
+
+ /npm-bundled@3.0.0:
+ resolution:
+ {
+ integrity: sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==,
+ }
+ engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ dependencies:
+ npm-normalize-package-bin: 3.0.1
+ dev: true
+
+ /npm-install-checks@6.2.0:
+ resolution:
+ {
+ integrity: sha512-744wat5wAAHsxa4590mWO0tJ8PKxR8ORZsH9wGpQc3nWTzozMAgBN/XyqYw7mg3yqLM8dLwEnwSfKMmXAjF69g==,
+ }
+ engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ dependencies:
+ semver: 7.5.4
+ dev: true
+
+ /npm-normalize-package-bin@3.0.1:
+ resolution:
+ {
+ integrity: sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==,
+ }
+ engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ dev: true
+
+ /npm-package-arg@11.0.0:
+ resolution:
+ {
+ integrity: sha512-D8sItaQ8n6VlBUFed3DLz2sCpkabRAjaiLkTamDppvh8lmmAPirzNfBuhJd/2rlmoxZ2S9mOHmIEvzV2z2jOeA==,
+ }
+ engines: { node: ^16.14.0 || >=18.0.0 }
+ dependencies:
+ hosted-git-info: 7.0.0
+ proc-log: 3.0.0
+ semver: 7.5.4
+ validate-npm-package-name: 5.0.0
+ dev: true
+
+ /npm-packlist@8.0.0:
+ resolution:
+ {
+ integrity: sha512-ErAGFB5kJUciPy1mmx/C2YFbvxoJ0QJ9uwkCZOeR6CqLLISPZBOiFModAbSXnjjlwW5lOhuhXva+fURsSGJqyw==,
+ }
+ engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ dependencies:
+ ignore-walk: 6.0.3
+ dev: true
+
+ /npm-pick-manifest@9.0.0:
+ resolution:
+ {
+ integrity: sha512-VfvRSs/b6n9ol4Qb+bDwNGUXutpy76x6MARw/XssevE0TnctIKcmklJZM5Z7nqs5z5aW+0S63pgCNbpkUNNXBg==,
+ }
+ engines: { node: ^16.14.0 || >=18.0.0 }
+ dependencies:
+ npm-install-checks: 6.2.0
+ npm-normalize-package-bin: 3.0.1
+ npm-package-arg: 11.0.0
+ semver: 7.5.4
+ dev: true
+
+ /npm-registry-fetch@16.0.0:
+ resolution:
+ {
+ integrity: sha512-JFCpAPUpvpwfSydv99u85yhP68rNIxSFmDpNbNnRWKSe3gpjHnWL8v320gATwRzjtgmZ9Jfe37+ZPOLZPwz6BQ==,
+ }
+ engines: { node: ^16.14.0 || >=18.0.0 }
+ dependencies:
+ make-fetch-happen: 13.0.0
+ minipass: 7.0.3
+ minipass-fetch: 3.0.4
+ minipass-json-stream: 1.0.1
+ minizlib: 2.1.2
+ npm-package-arg: 11.0.0
+ proc-log: 3.0.0
+ dev: true
+
+ /npm-run-path@4.0.1:
+ resolution:
+ {
+ integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==,
+ }
+ engines: { node: ">=8" }
+ dependencies:
+ path-key: 3.1.1
+ dev: true
+
+ /npm-run-path@5.1.0:
+ resolution:
+ {
+ integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==,
+ }
+ engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 }
+ dependencies:
+ path-key: 4.0.0
+ dev: true
+
+ /npmlog@5.0.1:
+ resolution:
+ {
+ integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==,
+ }
+ dependencies:
+ are-we-there-yet: 2.0.0
+ console-control-strings: 1.1.0
+ gauge: 3.0.2
+ set-blocking: 2.0.0
+ dev: true
+
+ /npmlog@6.0.2:
+ resolution:
+ {
+ integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==,
+ }
+ engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 }
+ dependencies:
+ are-we-there-yet: 3.0.1
+ console-control-strings: 1.1.0
+ gauge: 4.0.4
+ set-blocking: 2.0.0
+ dev: true
+
+ /nth-check@2.1.1:
+ resolution:
+ {
+ integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==,
+ }
+ dependencies:
+ boolbase: 1.0.0
+ dev: true
+
+ /nuxi@3.7.2:
+ resolution:
+ {
+ integrity: sha512-WNczi4X5ms8v63BTlCH+ZZDPzoFI0/V5KW8an4Zv6qOngtONHALw1u6qvtcAqG2tuMDu8gdJuzxMZL2845Dbig==,
+ }
+ engines: { node: ^14.18.0 || >=16.10.0 }
+ hasBin: true
+ optionalDependencies:
+ fsevents: 2.3.3
+ dev: true
+
+ /nuxt@3.7.0:
+ resolution:
+ {
+ integrity: sha512-y0/xHYqwuJt20r26xezjpr74FLWR144dMpwSxZ/O2XXUrQUnyO7vHm3fEY4vi+miKbf343YMH5B78GXAELO/Vw==,
+ }
+ engines: { node: ^14.18.0 || >=16.10.0 }
+ hasBin: true
+ peerDependencies:
+ "@parcel/watcher": ^2.1.0
+ "@types/node": ^14.18.0 || >=16.10.0
+ peerDependenciesMeta:
+ "@parcel/watcher":
+ optional: true
+ "@types/node":
+ optional: true
+ dependencies:
+ "@nuxt/devalue": 2.0.2
+ "@nuxt/kit": 3.7.0
+ "@nuxt/schema": 3.7.0
+ "@nuxt/telemetry": 2.4.1
+ "@nuxt/ui-templates": 1.3.1
+ "@nuxt/vite-builder": 3.7.0(vue@3.3.4)
+ "@unhead/dom": 1.3.9
+ "@unhead/ssr": 1.3.9
+ "@unhead/vue": 1.3.9(vue@3.3.4)
+ "@vue/shared": 3.3.4
+ acorn: 8.10.0
+ c12: 1.4.2
+ chokidar: 3.5.3
+ cookie-es: 1.0.0
+ defu: 6.1.2
+ destr: 2.0.1
+ devalue: 4.3.2
+ esbuild: 0.19.2
+ escape-string-regexp: 5.0.0
+ estree-walker: 3.0.3
+ fs-extra: 11.1.1
+ globby: 13.2.2
+ h3: 1.8.1
+ hookable: 5.5.3
+ jiti: 1.19.3
+ klona: 2.0.6
+ knitwork: 1.0.0
+ magic-string: 0.30.3
+ mlly: 1.4.1
+ nitropack: 2.6.2
+ nuxi: 3.7.2
+ nypm: 0.3.2
+ ofetch: 1.3.3
+ ohash: 1.1.3
+ pathe: 1.1.1
+ perfect-debounce: 1.0.0
+ pkg-types: 1.0.3
+ prompts: 2.4.2
+ scule: 1.0.0
+ std-env: 3.4.3
+ strip-literal: 1.3.0
+ ufo: 1.3.0
+ ultrahtml: 1.4.0
+ uncrypto: 0.1.3
+ unctx: 2.3.1
+ unenv: 1.7.4
+ unimport: 3.2.0(rollup@3.28.1)
+ unplugin: 1.4.0
+ unplugin-vue-router: 0.6.4(vue-router@4.2.4)(vue@3.3.4)
+ untyped: 1.4.0
+ vue: 3.3.4
+ vue-bundle-renderer: 2.0.0
+ vue-devtools-stub: 0.1.0
+ vue-router: 4.2.4(vue@3.3.4)
+ transitivePeerDependencies:
+ - "@azure/app-configuration"
+ - "@azure/cosmos"
+ - "@azure/data-tables"
+ - "@azure/identity"
+ - "@azure/keyvault-secrets"
+ - "@azure/storage-blob"
+ - "@capacitor/preferences"
+ - "@planetscale/database"
+ - "@upstash/redis"
+ - "@vercel/kv"
+ - encoding
+ - eslint
+ - idb-keyval
+ - less
+ - lightningcss
+ - meow
+ - optionator
+ - rollup
+ - sass
+ - stylelint
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ - typescript
+ - vls
+ - vti
+ - vue-tsc
+ dev: true
+
+ /nypm@0.3.2:
+ resolution:
+ {
+ integrity: sha512-a49F06faGtgflUVvqIkBmrYkijbbhjEoR40gzgw7I43J1p3DkHQegNcRhaGaHddIYQ0KwrmvD1W/h16jn/2puA==,
+ }
+ engines: { node: ^14.16.0 || >=16.10.0 }
+ dependencies:
+ execa: 8.0.1
+ ufo: 1.3.0
+ dev: true
+
+ /object-assign@4.1.1:
+ resolution:
+ {
+ integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==,
+ }
+ engines: { node: ">=0.10.0" }
+ dev: true
+
+ /object-is@1.1.5:
+ resolution:
+ {
+ integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==,
+ }
+ engines: { node: ">= 0.4" }
+ dependencies:
+ call-bind: 1.0.2
+ define-properties: 1.2.0
+ dev: true
+
+ /object-keys@1.1.1:
+ resolution:
+ {
+ integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==,
+ }
+ engines: { node: ">= 0.4" }
+ dev: true
+
+ /ofetch@1.3.3:
+ resolution:
+ {
+ integrity: sha512-s1ZCMmQWXy4b5K/TW9i/DtiN8Ku+xCiHcjQ6/J/nDdssirrQNOoB165Zu8EqLMA2lln1JUth9a0aW9Ap2ctrUg==,
+ }
+ dependencies:
+ destr: 2.0.1
+ node-fetch-native: 1.4.0
+ ufo: 1.3.0
+ dev: true
+
+ /ohash@1.1.3:
+ resolution:
+ {
+ integrity: sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==,
+ }
+ dev: true
+
+ /on-finished@2.4.1:
+ resolution:
+ {
+ integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==,
+ }
+ engines: { node: ">= 0.8" }
+ dependencies:
+ ee-first: 1.1.1
+ dev: true
+
+ /once@1.4.0:
+ resolution:
+ {
+ integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==,
+ }
+ dependencies:
+ wrappy: 1.0.2
+ dev: true
+
+ /onetime@5.1.2:
+ resolution:
+ {
+ integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==,
+ }
+ engines: { node: ">=6" }
+ dependencies:
+ mimic-fn: 2.1.0
+ dev: true
+
+ /onetime@6.0.0:
+ resolution:
+ {
+ integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==,
+ }
+ engines: { node: ">=12" }
+ dependencies:
+ mimic-fn: 4.0.0
+ dev: true
+
+ /open@8.4.2:
+ resolution:
+ {
+ integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==,
+ }
+ engines: { node: ">=12" }
+ dependencies:
+ define-lazy-prop: 2.0.0
+ is-docker: 2.2.1
+ is-wsl: 2.2.0
+ dev: true
+
+ /open@9.1.0:
+ resolution:
+ {
+ integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==,
+ }
+ engines: { node: ">=14.16" }
+ dependencies:
+ default-browser: 4.0.0
+ define-lazy-prop: 3.0.0
+ is-inside-container: 1.0.0
+ is-wsl: 2.2.0
+ dev: true
+
+ /openapi-typescript@6.5.3:
+ resolution:
+ {
+ integrity: sha512-iVOgf1wf/6R73Cg9wcxMAD/P3+/TJ8HQruLyv3WRDu29Pwnmp7ZUJ897Kb401jW7Ao/L4JjisropHQJW62BXtA==,
+ }
+ hasBin: true
+ dependencies:
+ ansi-colors: 4.1.3
+ fast-glob: 3.3.1
+ js-yaml: 4.1.0
+ supports-color: 9.4.0
+ undici: 5.23.0
+ yargs-parser: 21.1.1
+ dev: true
+
+ /p-map@4.0.0:
+ resolution:
+ {
+ integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==,
+ }
+ engines: { node: ">=10" }
+ dependencies:
+ aggregate-error: 3.1.0
+ dev: true
+
+ /pacote@17.0.3:
+ resolution:
+ {
+ integrity: sha512-nT66y5NK2u/d7qV9lP6ye+powAufDl6OHT+aOZ4Cmtq89GSqgB05Ar6aQ7DM+0+bIE5NCdYUcqFlkK4m/0LVHA==,
+ }
+ engines: { node: ^16.14.0 || >=18.0.0 }
+ hasBin: true
+ dependencies:
+ "@npmcli/git": 5.0.1
+ "@npmcli/installed-package-contents": 2.0.2
+ "@npmcli/promise-spawn": 6.0.2
+ "@npmcli/run-script": 6.0.2
+ cacache: 18.0.0
+ fs-minipass: 3.0.3
+ minipass: 7.0.3
+ npm-package-arg: 11.0.0
+ npm-packlist: 8.0.0
+ npm-pick-manifest: 9.0.0
+ npm-registry-fetch: 16.0.0
+ proc-log: 3.0.0
+ promise-retry: 2.0.1
+ read-package-json: 7.0.0
+ read-package-json-fast: 3.0.2
+ sigstore: 2.1.0
+ ssri: 10.0.5
+ tar: 6.1.15
+ transitivePeerDependencies:
+ - bluebird
+ - supports-color
+ dev: true
+
+ /parse-git-config@3.0.0:
+ resolution:
+ {
+ integrity: sha512-wXoQGL1D+2COYWCD35/xbiKma1Z15xvZL8cI25wvxzled58V51SJM04Urt/uznS900iQor7QO04SgdfT/XlbuA==,
+ }
+ engines: { node: ">=8" }
+ dependencies:
+ git-config-path: 2.0.0
+ ini: 1.3.8
+ dev: true
+
+ /parse-path@7.0.0:
+ resolution:
+ {
+ integrity: sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==,
+ }
+ dependencies:
+ protocols: 2.0.1
+ dev: true
+
+ /parse-url@8.1.0:
+ resolution:
+ {
+ integrity: sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==,
+ }
+ dependencies:
+ parse-path: 7.0.0
+ dev: true
+
+ /parseurl@1.3.3:
+ resolution:
+ {
+ integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==,
+ }
+ engines: { node: ">= 0.8" }
+ dev: true
+
+ /path-is-absolute@1.0.1:
+ resolution:
+ {
+ integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==,
+ }
+ engines: { node: ">=0.10.0" }
+ dev: true
+
+ /path-key@3.1.1:
+ resolution:
+ {
+ integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==,
+ }
+ engines: { node: ">=8" }
+ dev: true
+
+ /path-key@4.0.0:
+ resolution:
+ {
+ integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==,
+ }
+ engines: { node: ">=12" }
+ dev: true
+
+ /path-parse@1.0.7:
+ resolution:
+ {
+ integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==,
+ }
+ dev: true
+
+ /path-scurry@1.10.1:
+ resolution:
+ {
+ integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==,
+ }
+ engines: { node: ">=16 || 14 >=14.17" }
+ dependencies:
+ lru-cache: 10.0.1
+ minipass: 7.0.3
+ dev: true
+
+ /path-type@4.0.0:
+ resolution:
+ {
+ integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==,
+ }
+ engines: { node: ">=8" }
+ dev: true
+
+ /pathe@1.1.1:
+ resolution:
+ {
+ integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==,
+ }
+ dev: true
+
+ /pend@1.2.0:
+ resolution:
+ {
+ integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==,
+ }
+ dev: true
+
+ /perfect-debounce@1.0.0:
+ resolution:
+ {
+ integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==,
+ }
+ dev: true
+
+ /picocolors@1.0.0:
+ resolution:
+ {
+ integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==,
+ }
+ dev: true
+
+ /picomatch@2.3.1:
+ resolution:
+ {
+ integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==,
+ }
+ engines: { node: ">=8.6" }
+ dev: true
+
+ /pify@2.3.0:
+ resolution:
+ {
+ integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==,
+ }
+ engines: { node: ">=0.10.0" }
+ dev: true
+
+ /pify@3.0.0:
+ resolution:
+ {
+ integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==,
+ }
+ engines: { node: ">=4" }
+ dev: true
+
+ /pinkie-promise@2.0.1:
+ resolution:
+ {
+ integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==,
+ }
+ engines: { node: ">=0.10.0" }
+ dependencies:
+ pinkie: 2.0.4
+ dev: true
+
+ /pinkie@2.0.4:
+ resolution:
+ {
+ integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==,
+ }
+ engines: { node: ">=0.10.0" }
+ dev: true
+
+ /pkg-types@1.0.3:
+ resolution:
+ {
+ integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==,
+ }
+ dependencies:
+ jsonc-parser: 3.2.0
+ mlly: 1.4.1
+ pathe: 1.1.1
+ dev: true
+
+ /postcss-calc@9.0.1(postcss@8.4.29):
+ resolution:
+ {
+ integrity: sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==,
+ }
+ engines: { node: ^14 || ^16 || >=18.0 }
+ peerDependencies:
+ postcss: ^8.2.2
+ dependencies:
+ postcss: 8.4.29
+ postcss-selector-parser: 6.0.13
+ postcss-value-parser: 4.2.0
+ dev: true
+
+ /postcss-colormin@6.0.0(postcss@8.4.29):
+ resolution:
+ {
+ integrity: sha512-EuO+bAUmutWoZYgHn2T1dG1pPqHU6L4TjzPlu4t1wZGXQ/fxV16xg2EJmYi0z+6r+MGV1yvpx1BHkUaRrPa2bw==,
+ }
+ engines: { node: ^14 || ^16 || >=18.0 }
+ peerDependencies:
+ postcss: ^8.2.15
+ dependencies:
+ browserslist: 4.21.10
+ caniuse-api: 3.0.0
+ colord: 2.9.3
+ postcss: 8.4.29
+ postcss-value-parser: 4.2.0
+ dev: true
+
+ /postcss-convert-values@6.0.0(postcss@8.4.29):
+ resolution:
+ {
+ integrity: sha512-U5D8QhVwqT++ecmy8rnTb+RL9n/B806UVaS3m60lqle4YDFcpbS3ae5bTQIh3wOGUSDHSEtMYLs/38dNG7EYFw==,
+ }
+ engines: { node: ^14 || ^16 || >=18.0 }
+ peerDependencies:
+ postcss: ^8.2.15
+ dependencies:
+ browserslist: 4.21.10
+ postcss: 8.4.29
+ postcss-value-parser: 4.2.0
+ dev: true
+
+ /postcss-discard-comments@6.0.0(postcss@8.4.29):
+ resolution:
+ {
+ integrity: sha512-p2skSGqzPMZkEQvJsgnkBhCn8gI7NzRH2683EEjrIkoMiwRELx68yoUJ3q3DGSGuQ8Ug9Gsn+OuDr46yfO+eFw==,
+ }
+ engines: { node: ^14 || ^16 || >=18.0 }
+ peerDependencies:
+ postcss: ^8.2.15
+ dependencies:
+ postcss: 8.4.29
+ dev: true
+
+ /postcss-discard-duplicates@6.0.0(postcss@8.4.29):
+ resolution:
+ {
+ integrity: sha512-bU1SXIizMLtDW4oSsi5C/xHKbhLlhek/0/yCnoMQany9k3nPBq+Ctsv/9oMmyqbR96HYHxZcHyK2HR5P/mqoGA==,
+ }
+ engines: { node: ^14 || ^16 || >=18.0 }
+ peerDependencies:
+ postcss: ^8.2.15
+ dependencies:
+ postcss: 8.4.29
+ dev: true
+
+ /postcss-discard-empty@6.0.0(postcss@8.4.29):
+ resolution:
+ {
+ integrity: sha512-b+h1S1VT6dNhpcg+LpyiUrdnEZfICF0my7HAKgJixJLW7BnNmpRH34+uw/etf5AhOlIhIAuXApSzzDzMI9K/gQ==,
+ }
+ engines: { node: ^14 || ^16 || >=18.0 }
+ peerDependencies:
+ postcss: ^8.2.15
+ dependencies:
+ postcss: 8.4.29
+ dev: true
+
+ /postcss-discard-overridden@6.0.0(postcss@8.4.29):
+ resolution:
+ {
+ integrity: sha512-4VELwssYXDFigPYAZ8vL4yX4mUepF/oCBeeIT4OXsJPYOtvJumyz9WflmJWTfDwCUcpDR+z0zvCWBXgTx35SVw==,
+ }
+ engines: { node: ^14 || ^16 || >=18.0 }
+ peerDependencies:
+ postcss: ^8.2.15
+ dependencies:
+ postcss: 8.4.29
+ dev: true
+
+ /postcss-import-resolver@2.0.0:
+ resolution:
+ {
+ integrity: sha512-y001XYgGvVwgxyxw9J1a5kqM/vtmIQGzx34g0A0Oy44MFcy/ZboZw1hu/iN3VYFjSTRzbvd7zZJJz0Kh0AGkTw==,
+ }
+ dependencies:
+ enhanced-resolve: 4.5.0
+ dev: true
+
+ /postcss-import@15.1.0(postcss@8.4.29):
+ resolution:
+ {
+ integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==,
+ }
+ engines: { node: ">=14.0.0" }
+ peerDependencies:
+ postcss: ^8.0.0
+ dependencies:
+ postcss: 8.4.29
+ postcss-value-parser: 4.2.0
+ read-cache: 1.0.0
+ resolve: 1.22.4
+ dev: true
+
+ /postcss-merge-longhand@6.0.0(postcss@8.4.29):
+ resolution:
+ {
+ integrity: sha512-4VSfd1lvGkLTLYcxFuISDtWUfFS4zXe0FpF149AyziftPFQIWxjvFSKhA4MIxMe4XM3yTDgQMbSNgzIVxChbIg==,
+ }
+ engines: { node: ^14 || ^16 || >=18.0 }
+ peerDependencies:
+ postcss: ^8.2.15
+ dependencies:
+ postcss: 8.4.29
+ postcss-value-parser: 4.2.0
+ stylehacks: 6.0.0(postcss@8.4.29)
+ dev: true
+
+ /postcss-merge-rules@6.0.1(postcss@8.4.29):
+ resolution:
+ {
+ integrity: sha512-a4tlmJIQo9SCjcfiCcCMg/ZCEe0XTkl/xK0XHBs955GWg9xDX3NwP9pwZ78QUOWB8/0XCjZeJn98Dae0zg6AAw==,
+ }
+ engines: { node: ^14 || ^16 || >=18.0 }
+ peerDependencies:
+ postcss: ^8.2.15
+ dependencies:
+ browserslist: 4.21.10
+ caniuse-api: 3.0.0
+ cssnano-utils: 4.0.0(postcss@8.4.29)
+ postcss: 8.4.29
+ postcss-selector-parser: 6.0.13
+ dev: true
+
+ /postcss-minify-font-values@6.0.0(postcss@8.4.29):
+ resolution:
+ {
+ integrity: sha512-zNRAVtyh5E8ndZEYXA4WS8ZYsAp798HiIQ1V2UF/C/munLp2r1UGHwf1+6JFu7hdEhJFN+W1WJQKBrtjhFgEnA==,
+ }
+ engines: { node: ^14 || ^16 || >=18.0 }
+ peerDependencies:
+ postcss: ^8.2.15
+ dependencies:
+ postcss: 8.4.29
+ postcss-value-parser: 4.2.0
+ dev: true
+
+ /postcss-minify-gradients@6.0.0(postcss@8.4.29):
+ resolution:
+ {
+ integrity: sha512-wO0F6YfVAR+K1xVxF53ueZJza3L+R3E6cp0VwuXJQejnNUH0DjcAFe3JEBeTY1dLwGa0NlDWueCA1VlEfiKgAA==,
+ }
+ engines: { node: ^14 || ^16 || >=18.0 }
+ peerDependencies:
+ postcss: ^8.2.15
+ dependencies:
+ colord: 2.9.3
+ cssnano-utils: 4.0.0(postcss@8.4.29)
+ postcss: 8.4.29
+ postcss-value-parser: 4.2.0
+ dev: true
+
+ /postcss-minify-params@6.0.0(postcss@8.4.29):
+ resolution:
+ {
+ integrity: sha512-Fz/wMQDveiS0n5JPcvsMeyNXOIMrwF88n7196puSuQSWSa+/Ofc1gDOSY2xi8+A4PqB5dlYCKk/WfqKqsI+ReQ==,
+ }
+ engines: { node: ^14 || ^16 || >=18.0 }
+ peerDependencies:
+ postcss: ^8.2.15
+ dependencies:
+ browserslist: 4.21.10
+ cssnano-utils: 4.0.0(postcss@8.4.29)
+ postcss: 8.4.29
+ postcss-value-parser: 4.2.0
+ dev: true
+
+ /postcss-minify-selectors@6.0.0(postcss@8.4.29):
+ resolution:
+ {
+ integrity: sha512-ec/q9JNCOC2CRDNnypipGfOhbYPuUkewGwLnbv6omue/PSASbHSU7s6uSQ0tcFRVv731oMIx8k0SP4ZX6be/0g==,
+ }
+ engines: { node: ^14 || ^16 || >=18.0 }
+ peerDependencies:
+ postcss: ^8.2.15
+ dependencies:
+ postcss: 8.4.29
+ postcss-selector-parser: 6.0.13
+ dev: true
+
+ /postcss-normalize-charset@6.0.0(postcss@8.4.29):
+ resolution:
+ {
+ integrity: sha512-cqundwChbu8yO/gSWkuFDmKrCZ2vJzDAocheT2JTd0sFNA4HMGoKMfbk2B+J0OmO0t5GUkiAkSM5yF2rSLUjgQ==,
+ }
+ engines: { node: ^14 || ^16 || >=18.0 }
+ peerDependencies:
+ postcss: ^8.2.15
+ dependencies:
+ postcss: 8.4.29
+ dev: true
+
+ /postcss-normalize-display-values@6.0.0(postcss@8.4.29):
+ resolution:
+ {
+ integrity: sha512-Qyt5kMrvy7dJRO3OjF7zkotGfuYALETZE+4lk66sziWSPzlBEt7FrUshV6VLECkI4EN8Z863O6Nci4NXQGNzYw==,
+ }
+ engines: { node: ^14 || ^16 || >=18.0 }
+ peerDependencies:
+ postcss: ^8.2.15
+ dependencies:
+ postcss: 8.4.29
+ postcss-value-parser: 4.2.0
+ dev: true
+
+ /postcss-normalize-positions@6.0.0(postcss@8.4.29):
+ resolution:
+ {
+ integrity: sha512-mPCzhSV8+30FZyWhxi6UoVRYd3ZBJgTRly4hOkaSifo0H+pjDYcii/aVT4YE6QpOil15a5uiv6ftnY3rm0igPg==,
+ }
+ engines: { node: ^14 || ^16 || >=18.0 }
+ peerDependencies:
+ postcss: ^8.2.15
+ dependencies:
+ postcss: 8.4.29
+ postcss-value-parser: 4.2.0
+ dev: true
+
+ /postcss-normalize-repeat-style@6.0.0(postcss@8.4.29):
+ resolution:
+ {
+ integrity: sha512-50W5JWEBiOOAez2AKBh4kRFm2uhrT3O1Uwdxz7k24aKtbD83vqmcVG7zoIwo6xI2FZ/HDlbrCopXhLeTpQib1A==,
+ }
+ engines: { node: ^14 || ^16 || >=18.0 }
+ peerDependencies:
+ postcss: ^8.2.15
+ dependencies:
+ postcss: 8.4.29
+ postcss-value-parser: 4.2.0
+ dev: true
+
+ /postcss-normalize-string@6.0.0(postcss@8.4.29):
+ resolution:
+ {
+ integrity: sha512-KWkIB7TrPOiqb8ZZz6homet2KWKJwIlysF5ICPZrXAylGe2hzX/HSf4NTX2rRPJMAtlRsj/yfkrWGavFuB+c0w==,
+ }
+ engines: { node: ^14 || ^16 || >=18.0 }
+ peerDependencies:
+ postcss: ^8.2.15
+ dependencies:
+ postcss: 8.4.29
+ postcss-value-parser: 4.2.0
+ dev: true
+
+ /postcss-normalize-timing-functions@6.0.0(postcss@8.4.29):
+ resolution:
+ {
+ integrity: sha512-tpIXWciXBp5CiFs8sem90IWlw76FV4oi6QEWfQwyeREVwUy39VSeSqjAT7X0Qw650yAimYW5gkl2Gd871N5SQg==,
+ }
+ engines: { node: ^14 || ^16 || >=18.0 }
+ peerDependencies:
+ postcss: ^8.2.15
+ dependencies:
+ postcss: 8.4.29
+ postcss-value-parser: 4.2.0
+ dev: true
+
+ /postcss-normalize-unicode@6.0.0(postcss@8.4.29):
+ resolution:
+ {
+ integrity: sha512-ui5crYkb5ubEUDugDc786L/Me+DXp2dLg3fVJbqyAl0VPkAeALyAijF2zOsnZyaS1HyfPuMH0DwyY18VMFVNkg==,
+ }
+ engines: { node: ^14 || ^16 || >=18.0 }
+ peerDependencies:
+ postcss: ^8.2.15
+ dependencies:
+ browserslist: 4.21.10
+ postcss: 8.4.29
+ postcss-value-parser: 4.2.0
+ dev: true
+
+ /postcss-normalize-url@6.0.0(postcss@8.4.29):
+ resolution:
+ {
+ integrity: sha512-98mvh2QzIPbb02YDIrYvAg4OUzGH7s1ZgHlD3fIdTHLgPLRpv1ZTKJDnSAKr4Rt21ZQFzwhGMXxpXlfrUBKFHw==,
+ }
+ engines: { node: ^14 || ^16 || >=18.0 }
+ peerDependencies:
+ postcss: ^8.2.15
+ dependencies:
+ postcss: 8.4.29
+ postcss-value-parser: 4.2.0
+ dev: true
+
+ /postcss-normalize-whitespace@6.0.0(postcss@8.4.29):
+ resolution:
+ {
+ integrity: sha512-7cfE1AyLiK0+ZBG6FmLziJzqQCpTQY+8XjMhMAz8WSBSCsCNNUKujgIgjCAmDT3cJ+3zjTXFkoD15ZPsckArVw==,
+ }
+ engines: { node: ^14 || ^16 || >=18.0 }
+ peerDependencies:
+ postcss: ^8.2.15
+ dependencies:
+ postcss: 8.4.29
+ postcss-value-parser: 4.2.0
+ dev: true
+
+ /postcss-ordered-values@6.0.0(postcss@8.4.29):
+ resolution:
+ {
+ integrity: sha512-K36XzUDpvfG/nWkjs6d1hRBydeIxGpKS2+n+ywlKPzx1nMYDYpoGbcjhj5AwVYJK1qV2/SDoDEnHzlPD6s3nMg==,
+ }
+ engines: { node: ^14 || ^16 || >=18.0 }
+ peerDependencies:
+ postcss: ^8.2.15
+ dependencies:
+ cssnano-utils: 4.0.0(postcss@8.4.29)
+ postcss: 8.4.29
+ postcss-value-parser: 4.2.0
+ dev: true
+
+ /postcss-reduce-initial@6.0.0(postcss@8.4.29):
+ resolution:
+ {
+ integrity: sha512-s2UOnidpVuXu6JiiI5U+fV2jamAw5YNA9Fdi/GRK0zLDLCfXmSGqQtzpUPtfN66RtCbb9fFHoyZdQaxOB3WxVA==,
+ }
+ engines: { node: ^14 || ^16 || >=18.0 }
+ peerDependencies:
+ postcss: ^8.2.15
+ dependencies:
+ browserslist: 4.21.10
+ caniuse-api: 3.0.0
+ postcss: 8.4.29
+ dev: true
+
+ /postcss-reduce-transforms@6.0.0(postcss@8.4.29):
+ resolution:
+ {
+ integrity: sha512-FQ9f6xM1homnuy1wLe9lP1wujzxnwt1EwiigtWwuyf8FsqqXUDUp2Ulxf9A5yjlUOTdCJO6lonYjg1mgqIIi2w==,
+ }
+ engines: { node: ^14 || ^16 || >=18.0 }
+ peerDependencies:
+ postcss: ^8.2.15
+ dependencies:
+ postcss: 8.4.29
+ postcss-value-parser: 4.2.0
+ dev: true
+
+ /postcss-selector-parser@6.0.13:
+ resolution:
+ {
+ integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==,
+ }
+ engines: { node: ">=4" }
+ dependencies:
+ cssesc: 3.0.0
+ util-deprecate: 1.0.2
+ dev: true
+
+ /postcss-svgo@6.0.0(postcss@8.4.29):
+ resolution:
+ {
+ integrity: sha512-r9zvj/wGAoAIodn84dR/kFqwhINp5YsJkLoujybWG59grR/IHx+uQ2Zo+IcOwM0jskfYX3R0mo+1Kip1VSNcvw==,
+ }
+ engines: { node: ^14 || ^16 || >= 18 }
+ peerDependencies:
+ postcss: ^8.2.15
+ dependencies:
+ postcss: 8.4.29
+ postcss-value-parser: 4.2.0
+ svgo: 3.0.2
+ dev: true
+
+ /postcss-unique-selectors@6.0.0(postcss@8.4.29):
+ resolution:
+ {
+ integrity: sha512-EPQzpZNxOxP7777t73RQpZE5e9TrnCrkvp7AH7a0l89JmZiPnS82y216JowHXwpBCQitfyxrof9TK3rYbi7/Yw==,
+ }
+ engines: { node: ^14 || ^16 || >=18.0 }
+ peerDependencies:
+ postcss: ^8.2.15
+ dependencies:
+ postcss: 8.4.29
+ postcss-selector-parser: 6.0.13
+ dev: true
+
+ /postcss-url@10.1.3(postcss@8.4.29):
+ resolution:
+ {
+ integrity: sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==,
+ }
+ engines: { node: ">=10" }
+ peerDependencies:
+ postcss: ^8.0.0
+ dependencies:
+ make-dir: 3.1.0
+ mime: 2.5.2
+ minimatch: 3.0.8
+ postcss: 8.4.29
+ xxhashjs: 0.2.2
+ dev: true
+
+ /postcss-value-parser@4.2.0:
+ resolution:
+ {
+ integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==,
+ }
+ dev: true
+
+ /postcss@8.4.29:
+ resolution:
+ {
+ integrity: sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==,
+ }
+ engines: { node: ^10 || ^12 || >=14 }
+ dependencies:
+ nanoid: 3.3.6
+ picocolors: 1.0.0
+ source-map-js: 1.0.2
+ dev: true
+
+ /pretty-bytes@6.1.1:
+ resolution:
+ {
+ integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==,
+ }
+ engines: { node: ^14.13.1 || >=16.0.0 }
+ dev: true
+
+ /proc-log@3.0.0:
+ resolution:
+ {
+ integrity: sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==,
+ }
+ engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ dev: true
+
+ /process-nextick-args@2.0.1:
+ resolution:
+ {
+ integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==,
+ }
+ dev: true
+
+ /promise-inflight@1.0.1:
+ resolution:
+ {
+ integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==,
+ }
+ peerDependencies:
+ bluebird: "*"
+ peerDependenciesMeta:
+ bluebird:
+ optional: true
+ dev: true
+
+ /promise-retry@2.0.1:
+ resolution:
+ {
+ integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==,
+ }
+ engines: { node: ">=10" }
+ dependencies:
+ err-code: 2.0.3
+ retry: 0.12.0
+ dev: true
+
+ /prompts@2.4.2:
+ resolution:
+ {
+ integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==,
+ }
+ engines: { node: ">= 6" }
+ dependencies:
+ kleur: 3.0.3
+ sisteransi: 1.0.5
+ dev: true
+
+ /protocols@2.0.1:
+ resolution:
+ {
+ integrity: sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==,
+ }
+ dev: true
+
+ /prr@1.0.1:
+ resolution:
+ {
+ integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==,
+ }
+ dev: true
+
+ /queue-microtask@1.2.3:
+ resolution:
+ {
+ integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==,
+ }
+ dev: true
+
+ /radix3@1.1.0:
+ resolution:
+ {
+ integrity: sha512-pNsHDxbGORSvuSScqNJ+3Km6QAVqk8CfsCBIEoDgpqLrkD2f3QM4I7d1ozJJ172OmIcoUcerZaNWqtLkRXTV3A==,
+ }
+ dev: true
+
+ /randombytes@2.1.0:
+ resolution:
+ {
+ integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==,
+ }
+ dependencies:
+ safe-buffer: 5.2.1
+ dev: true
+
+ /range-parser@1.2.1:
+ resolution:
+ {
+ integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==,
+ }
+ engines: { node: ">= 0.6" }
+ dev: true
+
+ /rc9@2.1.1:
+ resolution:
+ {
+ integrity: sha512-lNeOl38Ws0eNxpO3+wD1I9rkHGQyj1NU1jlzv4go2CtEnEQEUfqnIvZG7W+bC/aXdJ27n5x/yUjb6RoT9tko+Q==,
+ }
+ dependencies:
+ defu: 6.1.2
+ destr: 2.0.1
+ flat: 5.0.2
+ dev: true
+
+ /read-cache@1.0.0:
+ resolution:
+ {
+ integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==,
+ }
+ dependencies:
+ pify: 2.3.0
+ dev: true
+
+ /read-package-json-fast@3.0.2:
+ resolution:
+ {
+ integrity: sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==,
+ }
+ engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ dependencies:
+ json-parse-even-better-errors: 3.0.0
+ npm-normalize-package-bin: 3.0.1
+ dev: true
+
+ /read-package-json@7.0.0:
+ resolution:
+ {
+ integrity: sha512-uL4Z10OKV4p6vbdvIXB+OzhInYtIozl/VxUBPgNkBuUi2DeRonnuspmaVAMcrkmfjKGNmRndyQAbE7/AmzGwFg==,
+ }
+ engines: { node: ^16.14.0 || >=18.0.0 }
+ dependencies:
+ glob: 10.3.3
+ json-parse-even-better-errors: 3.0.0
+ normalize-package-data: 6.0.0
+ npm-normalize-package-bin: 3.0.1
+ dev: true
+
+ /readable-stream@2.3.8:
+ resolution:
+ {
+ integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==,
+ }
+ dependencies:
+ core-util-is: 1.0.3
+ inherits: 2.0.4
+ isarray: 1.0.0
+ process-nextick-args: 2.0.1
+ safe-buffer: 5.1.2
+ string_decoder: 1.1.1
+ util-deprecate: 1.0.2
+ dev: true
+
+ /readable-stream@3.6.2:
+ resolution:
+ {
+ integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==,
+ }
+ engines: { node: ">= 6" }
+ dependencies:
+ inherits: 2.0.4
+ string_decoder: 1.3.0
+ util-deprecate: 1.0.2
+ dev: true
+
+ /readdir-glob@1.1.3:
+ resolution:
+ {
+ integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==,
+ }
+ dependencies:
+ minimatch: 5.1.6
+ dev: true
+
+ /readdirp@3.6.0:
+ resolution:
+ {
+ integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==,
+ }
+ engines: { node: ">=8.10.0" }
+ dependencies:
+ picomatch: 2.3.1
+ dev: true
+
+ /recast@0.23.4:
+ resolution:
+ {
+ integrity: sha512-qtEDqIZGVcSZCHniWwZWbRy79Dc6Wp3kT/UmDA2RJKBPg7+7k51aQBZirHmUGn5uvHf2rg8DkjizrN26k61ATw==,
+ }
+ engines: { node: ">= 4" }
+ dependencies:
+ assert: 2.0.0
+ ast-types: 0.16.1
+ esprima: 4.0.1
+ source-map: 0.6.1
+ tslib: 2.6.2
+ dev: true
+
+ /redis-errors@1.2.0:
+ resolution:
+ {
+ integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==,
+ }
+ engines: { node: ">=4" }
+ dev: true
+
+ /redis-parser@3.0.0:
+ resolution:
+ {
+ integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==,
+ }
+ engines: { node: ">=4" }
+ dependencies:
+ redis-errors: 1.2.0
+ dev: true
+
+ /require-directory@2.1.1:
+ resolution:
+ {
+ integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==,
+ }
+ engines: { node: ">=0.10.0" }
+ dev: true
+
+ /resolve-from@5.0.0:
+ resolution:
+ {
+ integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==,
+ }
+ engines: { node: ">=8" }
+ dev: true
+
+ /resolve-pkg-maps@1.0.0:
+ resolution:
+ {
+ integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==,
+ }
+ dev: true
+
+ /resolve@1.22.4:
+ resolution:
+ {
+ integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==,
+ }
+ hasBin: true
+ dependencies:
+ is-core-module: 2.13.0
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+ dev: true
+
+ /retry@0.12.0:
+ resolution:
+ {
+ integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==,
+ }
+ engines: { node: ">= 4" }
+ dev: true
+
+ /reusify@1.0.4:
+ resolution:
+ {
+ integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==,
+ }
+ engines: { iojs: ">=1.0.0", node: ">=0.10.0" }
+ dev: true
+
+ /rimraf@3.0.2:
+ resolution:
+ {
+ integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==,
+ }
+ hasBin: true
+ dependencies:
+ glob: 7.2.3
+ dev: true
+
+ /rollup-plugin-visualizer@5.9.2(rollup@3.28.1):
+ resolution:
+ {
+ integrity: sha512-waHktD5mlWrYFrhOLbti4YgQCn1uR24nYsNuXxg7LkPH8KdTXVWR9DNY1WU0QqokyMixVXJS4J04HNrVTMP01A==,
+ }
+ engines: { node: ">=14" }
+ hasBin: true
+ peerDependencies:
+ rollup: 2.x || 3.x
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+ dependencies:
+ open: 8.4.2
+ picomatch: 2.3.1
+ rollup: 3.28.1
+ source-map: 0.7.4
+ yargs: 17.7.2
+ dev: true
+
+ /rollup@3.28.1:
+ resolution:
+ {
+ integrity: sha512-R9OMQmIHJm9znrU3m3cpE8uhN0fGdXiawME7aZIpQqvpS/85+Vt1Hq1/yVIcYfOmaQiHjvXkQAoJukvLpau6Yw==,
+ }
+ engines: { node: ">=14.18.0", npm: ">=8.0.0" }
+ hasBin: true
+ optionalDependencies:
+ fsevents: 2.3.3
+ dev: true
+
+ /run-applescript@5.0.0:
+ resolution:
+ {
+ integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==,
+ }
+ engines: { node: ">=12" }
+ dependencies:
+ execa: 5.1.1
+ dev: true
+
+ /run-parallel@1.2.0:
+ resolution:
+ {
+ integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==,
+ }
+ dependencies:
+ queue-microtask: 1.2.3
+ dev: true
+
+ /rxjs@7.8.1:
+ resolution:
+ {
+ integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==,
+ }
+ dependencies:
+ tslib: 2.6.2
+ dev: true
+
+ /safe-buffer@5.1.2:
+ resolution:
+ {
+ integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==,
+ }
+ dev: true
+
+ /safe-buffer@5.2.1:
+ resolution:
+ {
+ integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==,
+ }
+ dev: true
+
+ /safer-buffer@2.1.2:
+ resolution:
+ {
+ integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==,
+ }
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /scule@1.0.0:
+ resolution:
+ {
+ integrity: sha512-4AsO/FrViE/iDNEPaAQlb77tf0csuq27EsVpy6ett584EcRTp6pTDLoGWVxCD77y5iU5FauOvhsI4o1APwPoSQ==,
+ }
+ dev: true
+
+ /seek-bzip@1.0.6:
+ resolution:
+ {
+ integrity: sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==,
+ }
+ hasBin: true
+ dependencies:
+ commander: 2.20.3
+ dev: true
+
+ /semver@6.3.1:
+ resolution:
+ {
+ integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==,
+ }
+ hasBin: true
+ dev: true
+
+ /semver@7.5.4:
+ resolution:
+ {
+ integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==,
+ }
+ engines: { node: ">=10" }
+ hasBin: true
+ dependencies:
+ lru-cache: 6.0.0
+ dev: true
+
+ /send@0.18.0:
+ resolution:
+ {
+ integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==,
+ }
+ engines: { node: ">= 0.8.0" }
+ dependencies:
+ debug: 2.6.9
+ depd: 2.0.0
+ destroy: 1.2.0
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ etag: 1.8.1
+ fresh: 0.5.2
+ http-errors: 2.0.0
+ mime: 1.6.0
+ ms: 2.1.3
+ on-finished: 2.4.1
+ range-parser: 1.2.1
+ statuses: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /serialize-javascript@6.0.1:
+ resolution:
+ {
+ integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==,
+ }
+ dependencies:
+ randombytes: 2.1.0
+ dev: true
+
+ /serve-placeholder@2.0.1:
+ resolution:
+ {
+ integrity: sha512-rUzLlXk4uPFnbEaIz3SW8VISTxMuONas88nYWjAWaM2W9VDbt9tyFOr3lq8RhVOFrT3XISoBw8vni5una8qMnQ==,
+ }
+ dependencies:
+ defu: 6.1.2
+ dev: true
+
+ /serve-static@1.15.0:
+ resolution:
+ {
+ integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==,
+ }
+ engines: { node: ">= 0.8.0" }
+ dependencies:
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ parseurl: 1.3.3
+ send: 0.18.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /set-blocking@2.0.0:
+ resolution:
+ {
+ integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==,
+ }
+ dev: true
+
+ /setprototypeof@1.2.0:
+ resolution:
+ {
+ integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==,
+ }
+ dev: true
+
+ /shebang-command@2.0.0:
+ resolution:
+ {
+ integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==,
+ }
+ engines: { node: ">=8" }
+ dependencies:
+ shebang-regex: 3.0.0
+ dev: true
+
+ /shebang-regex@3.0.0:
+ resolution:
+ {
+ integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==,
+ }
+ engines: { node: ">=8" }
+ dev: true
+
+ /shell-quote@1.8.1:
+ resolution:
+ {
+ integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==,
+ }
+ dev: true
+
+ /signal-exit@3.0.7:
+ resolution:
+ {
+ integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==,
+ }
+ dev: true
+
+ /signal-exit@4.1.0:
+ resolution:
+ {
+ integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==,
+ }
+ engines: { node: ">=14" }
+ dev: true
+
+ /sigstore@2.1.0:
+ resolution:
+ {
+ integrity: sha512-kPIj+ZLkyI3QaM0qX8V/nSsweYND3W448pwkDgS6CQ74MfhEkIR8ToK5Iyx46KJYRjseVcD3Rp9zAmUAj6ZjPw==,
+ }
+ engines: { node: ^16.14.0 || >=18.0.0 }
+ dependencies:
+ "@sigstore/bundle": 2.1.0
+ "@sigstore/protobuf-specs": 0.2.1
+ "@sigstore/sign": 2.1.0
+ "@sigstore/tuf": 2.1.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /simple-git@3.19.1:
+ resolution:
+ {
+ integrity: sha512-Ck+rcjVaE1HotraRAS8u/+xgTvToTuoMkT9/l9lvuP5jftwnYUp6DwuJzsKErHgfyRk8IB8pqGHWEbM3tLgV1w==,
+ }
+ dependencies:
+ "@kwsites/file-exists": 1.1.1
+ "@kwsites/promise-deferred": 1.1.1
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /sirv@2.0.3:
+ resolution:
+ {
+ integrity: sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==,
+ }
+ engines: { node: ">= 10" }
+ dependencies:
+ "@polka/url": 1.0.0-next.21
+ mrmime: 1.0.1
+ totalist: 3.0.1
+ dev: true
+
+ /sisteransi@1.0.5:
+ resolution:
+ {
+ integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==,
+ }
+ dev: true
+
+ /slash@4.0.0:
+ resolution:
+ {
+ integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==,
+ }
+ engines: { node: ">=12" }
+ dev: true
+
+ /smart-buffer@4.2.0:
+ resolution:
+ {
+ integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==,
+ }
+ engines: { node: ">= 6.0.0", npm: ">= 3.0.0" }
+ dev: true
+
+ /smob@1.4.0:
+ resolution:
+ {
+ integrity: sha512-MqR3fVulhjWuRNSMydnTlweu38UhQ0HXM4buStD/S3mc/BzX3CuM9OmhyQpmtYCvoYdl5ris6TI0ZqH355Ymqg==,
+ }
+ dev: true
+
+ /socks-proxy-agent@7.0.0:
+ resolution:
+ {
+ integrity: sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==,
+ }
+ engines: { node: ">= 10" }
+ dependencies:
+ agent-base: 6.0.2
+ debug: 4.3.4
+ socks: 2.7.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /socks@2.7.1:
+ resolution:
+ {
+ integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==,
+ }
+ engines: { node: ">= 10.13.0", npm: ">= 3.0.0" }
+ dependencies:
+ ip: 2.0.0
+ smart-buffer: 4.2.0
+ dev: true
+
+ /source-map-js@1.0.2:
+ resolution:
+ {
+ integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==,
+ }
+ engines: { node: ">=0.10.0" }
+ dev: true
+
+ /source-map-support@0.5.21:
+ resolution:
+ {
+ integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==,
+ }
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+ dev: true
+
+ /source-map@0.6.1:
+ resolution:
+ {
+ integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==,
+ }
+ engines: { node: ">=0.10.0" }
+ dev: true
+
+ /source-map@0.7.4:
+ resolution:
+ {
+ integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==,
+ }
+ engines: { node: ">= 8" }
+ dev: true
+
+ /spdx-correct@3.2.0:
+ resolution:
+ {
+ integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==,
+ }
+ dependencies:
+ spdx-expression-parse: 3.0.1
+ spdx-license-ids: 3.0.13
+ dev: true
+
+ /spdx-exceptions@2.3.0:
+ resolution:
+ {
+ integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==,
+ }
+ dev: true
+
+ /spdx-expression-parse@3.0.1:
+ resolution:
+ {
+ integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==,
+ }
+ dependencies:
+ spdx-exceptions: 2.3.0
+ spdx-license-ids: 3.0.13
+ dev: true
+
+ /spdx-license-ids@3.0.13:
+ resolution:
+ {
+ integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==,
+ }
+ dev: true
+
+ /ssri@10.0.5:
+ resolution:
+ {
+ integrity: sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==,
+ }
+ engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ dependencies:
+ minipass: 7.0.3
+ dev: true
+
+ /standard-as-callback@2.1.0:
+ resolution:
+ {
+ integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==,
+ }
+ dev: true
+
+ /statuses@2.0.1:
+ resolution:
+ {
+ integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==,
+ }
+ engines: { node: ">= 0.8" }
+ dev: true
+
+ /std-env@3.4.3:
+ resolution:
+ {
+ integrity: sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q==,
+ }
+ dev: true
+
+ /streamsearch@1.1.0:
+ resolution:
+ {
+ integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==,
+ }
+ engines: { node: ">=10.0.0" }
+ dev: true
+
+ /string-width@4.2.3:
+ resolution:
+ {
+ integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==,
+ }
+ engines: { node: ">=8" }
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+ dev: true
+
+ /string-width@5.1.2:
+ resolution:
+ {
+ integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==,
+ }
+ engines: { node: ">=12" }
+ dependencies:
+ eastasianwidth: 0.2.0
+ emoji-regex: 9.2.2
+ strip-ansi: 7.1.0
+ dev: true
+
+ /string_decoder@1.1.1:
+ resolution:
+ {
+ integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==,
+ }
+ dependencies:
+ safe-buffer: 5.1.2
+ dev: true
+
+ /string_decoder@1.3.0:
+ resolution:
+ {
+ integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==,
+ }
+ dependencies:
+ safe-buffer: 5.2.1
+ dev: true
+
+ /strip-ansi@6.0.1:
+ resolution:
+ {
+ integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==,
+ }
+ engines: { node: ">=8" }
+ dependencies:
+ ansi-regex: 5.0.1
+ dev: true
+
+ /strip-ansi@7.1.0:
+ resolution:
+ {
+ integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==,
+ }
+ engines: { node: ">=12" }
+ dependencies:
+ ansi-regex: 6.0.1
+ dev: true
+
+ /strip-dirs@2.1.0:
+ resolution:
+ {
+ integrity: sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==,
+ }
+ dependencies:
+ is-natural-number: 4.0.1
+ dev: true
+
+ /strip-final-newline@2.0.0:
+ resolution:
+ {
+ integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==,
+ }
+ engines: { node: ">=6" }
+ dev: true
+
+ /strip-final-newline@3.0.0:
+ resolution:
+ {
+ integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==,
+ }
+ engines: { node: ">=12" }
+ dev: true
+
+ /strip-literal@1.3.0:
+ resolution:
+ {
+ integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==,
+ }
+ dependencies:
+ acorn: 8.10.0
+ dev: true
+
+ /stylehacks@6.0.0(postcss@8.4.29):
+ resolution:
+ {
+ integrity: sha512-+UT589qhHPwz6mTlCLSt/vMNTJx8dopeJlZAlBMJPWA3ORqu6wmQY7FBXf+qD+FsqoBJODyqNxOUP3jdntFRdw==,
+ }
+ engines: { node: ^14 || ^16 || >=18.0 }
+ peerDependencies:
+ postcss: ^8.2.15
+ dependencies:
+ browserslist: 4.21.10
+ postcss: 8.4.29
+ postcss-selector-parser: 6.0.13
+ dev: true
+
+ /supports-color@5.5.0:
+ resolution:
+ {
+ integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==,
+ }
+ engines: { node: ">=4" }
+ dependencies:
+ has-flag: 3.0.0
+ dev: true
+
+ /supports-color@7.2.0:
+ resolution:
+ {
+ integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==,
+ }
+ engines: { node: ">=8" }
+ dependencies:
+ has-flag: 4.0.0
+ dev: true
+
+ /supports-color@9.4.0:
+ resolution:
+ {
+ integrity: sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==,
+ }
+ engines: { node: ">=12" }
+ dev: true
+
+ /supports-preserve-symlinks-flag@1.0.0:
+ resolution:
+ {
+ integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==,
+ }
+ engines: { node: ">= 0.4" }
+ dev: true
+
+ /svg-tags@1.0.0:
+ resolution:
+ {
+ integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==,
+ }
+ dev: true
+
+ /svgo@3.0.2:
+ resolution:
+ {
+ integrity: sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==,
+ }
+ engines: { node: ">=14.0.0" }
+ hasBin: true
+ dependencies:
+ "@trysound/sax": 0.2.0
+ commander: 7.2.0
+ css-select: 5.1.0
+ css-tree: 2.3.1
+ csso: 5.0.5
+ picocolors: 1.0.0
+ dev: true
+
+ /tapable@1.1.3:
+ resolution:
+ {
+ integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==,
+ }
+ engines: { node: ">=6" }
+ dev: true
+
+ /tapable@2.2.1:
+ resolution:
+ {
+ integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==,
+ }
+ engines: { node: ">=6" }
+ dev: true
+
+ /tar-stream@1.6.2:
+ resolution:
+ {
+ integrity: sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==,
+ }
+ engines: { node: ">= 0.8.0" }
+ dependencies:
+ bl: 1.2.3
+ buffer-alloc: 1.2.0
+ end-of-stream: 1.4.4
+ fs-constants: 1.0.0
+ readable-stream: 2.3.8
+ to-buffer: 1.1.1
+ xtend: 4.0.2
+ dev: true
+
+ /tar-stream@2.2.0:
+ resolution:
+ {
+ integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==,
+ }
+ engines: { node: ">=6" }
+ dependencies:
+ bl: 4.1.0
+ end-of-stream: 1.4.4
+ fs-constants: 1.0.0
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+ dev: true
+
+ /tar@6.1.15:
+ resolution:
+ {
+ integrity: sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==,
+ }
+ engines: { node: ">=10" }
+ dependencies:
+ chownr: 2.0.0
+ fs-minipass: 2.1.0
+ minipass: 5.0.0
+ minizlib: 2.1.2
+ mkdirp: 1.0.4
+ yallist: 4.0.0
+ dev: true
+
+ /terser@5.19.3:
+ resolution:
+ {
+ integrity: sha512-pQzJ9UJzM0IgmT4FAtYI6+VqFf0lj/to58AV0Xfgg0Up37RyPG7Al+1cepC6/BVuAxR9oNb41/DL4DEoHJvTdg==,
+ }
+ engines: { node: ">=10" }
+ hasBin: true
+ dependencies:
+ "@jridgewell/source-map": 0.3.5
+ acorn: 8.10.0
+ commander: 2.20.3
+ source-map-support: 0.5.21
+ dev: true
+
+ /through@2.3.8:
+ resolution:
+ {
+ integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==,
+ }
+ dev: true
+
+ /tiny-invariant@1.3.1:
+ resolution:
+ {
+ integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==,
+ }
+ dev: true
+
+ /titleize@3.0.0:
+ resolution:
+ {
+ integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==,
+ }
+ engines: { node: ">=12" }
+ dev: true
+
+ /to-buffer@1.1.1:
+ resolution:
+ {
+ integrity: sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==,
+ }
+ dev: true
+
+ /to-fast-properties@2.0.0:
+ resolution:
+ {
+ integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==,
+ }
+ engines: { node: ">=4" }
+ dev: true
+
+ /to-regex-range@5.0.1:
+ resolution:
+ {
+ integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==,
+ }
+ engines: { node: ">=8.0" }
+ dependencies:
+ is-number: 7.0.0
+ dev: true
+
+ /toidentifier@1.0.1:
+ resolution:
+ {
+ integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==,
+ }
+ engines: { node: ">=0.6" }
+ dev: true
+
+ /totalist@3.0.1:
+ resolution:
+ {
+ integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==,
+ }
+ engines: { node: ">=6" }
+ dev: true
+
+ /tr46@0.0.3:
+ resolution:
+ {
+ integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==,
+ }
+ dev: true
+
+ /tslib@2.6.2:
+ resolution:
+ {
+ integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==,
+ }
+ dev: true
+
+ /tsx@3.12.7:
+ resolution:
+ {
+ integrity: sha512-C2Ip+jPmqKd1GWVQDvz/Eyc6QJbGfE7NrR3fx5BpEHMZsEHoIxHL1j+lKdGobr8ovEyqeNkPLSKp6SCSOt7gmw==,
+ }
+ hasBin: true
+ dependencies:
+ "@esbuild-kit/cjs-loader": 2.4.2
+ "@esbuild-kit/core-utils": 3.2.2
+ "@esbuild-kit/esm-loader": 2.5.5
+ optionalDependencies:
+ fsevents: 2.3.3
+ dev: true
+
+ /tuf-js@2.1.0:
+ resolution:
+ {
+ integrity: sha512-eD7YPPjVlMzdggrOeE8zwoegUaG/rt6Bt3jwoQPunRiNVzgcCE009UDFJKJjG+Gk9wFu6W/Vi+P5d/5QpdD9jA==,
+ }
+ engines: { node: ^16.14.0 || >=18.0.0 }
+ dependencies:
+ "@tufjs/models": 2.0.0
+ debug: 4.3.4
+ make-fetch-happen: 13.0.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /type-fest@0.21.3:
+ resolution:
+ {
+ integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==,
+ }
+ engines: { node: ">=10" }
+ dev: true
+
+ /type-fest@2.19.0:
+ resolution:
+ {
+ integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==,
+ }
+ engines: { node: ">=12.20" }
+ dev: true
+
+ /type-fest@3.13.1:
+ resolution:
+ {
+ integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==,
+ }
+ engines: { node: ">=14.16" }
+ dev: true
+
+ /ufo@1.3.0:
+ resolution:
+ {
+ integrity: sha512-bRn3CsoojyNStCZe0BG0Mt4Nr/4KF+rhFlnNXybgqt5pXHNFRlqinSoQaTrGyzE4X8aHplSb+TorH+COin9Yxw==,
+ }
+ dev: true
+
+ /ultrahtml@1.4.0:
+ resolution:
+ {
+ integrity: sha512-2SbudS8oD4GNq4en+3ivp25JTCwP5O2soJhIBxGJrjojjLVaLcP84xVU6Xdf0wKMhZvr68rTtrXtO6uvEr2llQ==,
+ }
+ dev: true
+
+ /unbzip2-stream@1.4.3:
+ resolution:
+ {
+ integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==,
+ }
+ dependencies:
+ buffer: 5.7.1
+ through: 2.3.8
+ dev: true
+
+ /uncrypto@0.1.3:
+ resolution:
+ {
+ integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==,
+ }
+ dev: true
+
+ /unctx@2.3.1:
+ resolution:
+ {
+ integrity: sha512-PhKke8ZYauiqh3FEMVNm7ljvzQiph0Mt3GBRve03IJm7ukfaON2OBK795tLwhbyfzknuRRkW0+Ze+CQUmzOZ+A==,
+ }
+ dependencies:
+ acorn: 8.10.0
+ estree-walker: 3.0.3
+ magic-string: 0.30.3
+ unplugin: 1.4.0
+ dev: true
+
+ /undici@5.23.0:
+ resolution:
+ {
+ integrity: sha512-1D7w+fvRsqlQ9GscLBwcAJinqcZGHUKjbOmXdlE/v8BvEGXjeWAax+341q44EuTcHXXnfyKNbKRq4Lg7OzhMmg==,
+ }
+ engines: { node: ">=14.0" }
+ dependencies:
+ busboy: 1.6.0
+ dev: true
+
+ /unenv@1.7.4:
+ resolution:
+ {
+ integrity: sha512-fjYsXYi30It0YCQYqLOcT6fHfMXsBr2hw9XC7ycf8rTG7Xxpe3ZssiqUnD0khrjiZEmkBXWLwm42yCSCH46fMw==,
+ }
+ dependencies:
+ consola: 3.2.3
+ defu: 6.1.2
+ mime: 3.0.0
+ node-fetch-native: 1.4.0
+ pathe: 1.1.1
+ dev: true
+
+ /unhead@1.3.9:
+ resolution:
+ {
+ integrity: sha512-vzWZJW8l6dlNM5egJs3c7NMHWZ+iw2x7jCZtU2rrhwFINlKCaA3J42fvOeDxx6t5QR9dfZ96HF2AeNlCcPT+bQ==,
+ }
+ dependencies:
+ "@unhead/dom": 1.3.9
+ "@unhead/schema": 1.3.9
+ "@unhead/shared": 1.3.9
+ hookable: 5.5.3
+ dev: true
+
+ /unimport@3.2.0(rollup@3.28.1):
+ resolution:
+ {
+ integrity: sha512-9buxPxkNwxwxAlH/RfOFHxtQTUrlmBGi9Ai9HezY2yYbkoOhgJTYPI6+WqxI1EZphoM9cw1SHoCFRkXSb8/fjQ==,
+ }
+ dependencies:
+ "@rollup/pluginutils": 5.0.4(rollup@3.28.1)
+ 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
+ transitivePeerDependencies:
+ - rollup
+ dev: true
+
+ /unique-filename@3.0.0:
+ resolution:
+ {
+ integrity: sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==,
+ }
+ engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ dependencies:
+ unique-slug: 4.0.0
+ dev: true
+
+ /unique-slug@4.0.0:
+ resolution:
+ {
+ integrity: sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==,
+ }
+ engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ dependencies:
+ imurmurhash: 0.1.4
+ dev: true
+
+ /universalify@2.0.0:
+ resolution:
+ {
+ integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==,
+ }
+ engines: { node: ">= 10.0.0" }
+ dev: true
+
+ /unplugin-vue-router@0.6.4(vue-router@4.2.4)(vue@3.3.4):
+ resolution:
+ {
+ integrity: sha512-9THVhhtbVFxbsIibjK59oPwMI1UCxRWRPX7azSkTUABsxovlOXJys5SJx0kd/0oKIqNJuYgkRfAgPuO77SqCOg==,
+ }
+ peerDependencies:
+ vue-router: ^4.1.0
+ peerDependenciesMeta:
+ vue-router:
+ optional: true
+ dependencies:
+ "@babel/types": 7.22.11
+ "@rollup/pluginutils": 5.0.4(rollup@3.28.1)
+ "@vue-macros/common": 1.7.2(vue@3.3.4)
+ ast-walker-scope: 0.4.2
+ chokidar: 3.5.3
+ fast-glob: 3.3.1
+ json5: 2.2.3
+ local-pkg: 0.4.3
+ mlly: 1.4.1
+ pathe: 1.1.1
+ scule: 1.0.0
+ unplugin: 1.4.0
+ vue-router: 4.2.4(vue@3.3.4)
+ yaml: 2.3.2
+ transitivePeerDependencies:
+ - rollup
+ - vue
+ dev: true
+
+ /unplugin@1.4.0:
+ resolution:
+ {
+ integrity: sha512-5x4eIEL6WgbzqGtF9UV8VEC/ehKptPXDS6L2b0mv4FRMkJxRtjaJfOWDd6a8+kYbqsjklix7yWP0N3SUepjXcg==,
+ }
+ dependencies:
+ acorn: 8.10.0
+ chokidar: 3.5.3
+ webpack-sources: 3.2.3
+ webpack-virtual-modules: 0.5.0
+ dev: true
+
+ /unstorage@1.9.0:
+ resolution:
+ {
+ integrity: sha512-VpD8ZEYc/le8DZCrny3bnqKE4ZjioQxBRnWE+j5sGNvziPjeDlaS1NaFFHzl/kkXaO3r7UaF8MGQrs14+1B4pQ==,
+ }
+ peerDependencies:
+ "@azure/app-configuration": ^1.4.1
+ "@azure/cosmos": ^3.17.3
+ "@azure/data-tables": ^13.2.2
+ "@azure/identity": ^3.2.3
+ "@azure/keyvault-secrets": ^4.7.0
+ "@azure/storage-blob": ^12.14.0
+ "@capacitor/preferences": ^5.0.0
+ "@planetscale/database": ^1.8.0
+ "@upstash/redis": ^1.22.0
+ "@vercel/kv": ^0.2.2
+ idb-keyval: ^6.2.1
+ peerDependenciesMeta:
+ "@azure/app-configuration":
+ optional: true
+ "@azure/cosmos":
+ optional: true
+ "@azure/data-tables":
+ optional: true
+ "@azure/identity":
+ optional: true
+ "@azure/keyvault-secrets":
+ optional: true
+ "@azure/storage-blob":
+ optional: true
+ "@capacitor/preferences":
+ optional: true
+ "@planetscale/database":
+ optional: true
+ "@upstash/redis":
+ optional: true
+ "@vercel/kv":
+ optional: true
+ idb-keyval:
+ optional: true
+ dependencies:
+ anymatch: 3.1.3
+ chokidar: 3.5.3
+ destr: 2.0.1
+ h3: 1.8.1
+ ioredis: 5.3.2
+ listhen: 1.4.4
+ lru-cache: 10.0.1
+ mri: 1.2.0
+ node-fetch-native: 1.4.0
+ ofetch: 1.3.3
+ ufo: 1.3.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /untildify@4.0.0:
+ resolution:
+ {
+ integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==,
+ }
+ engines: { node: ">=8" }
+ dev: true
+
+ /untun@0.1.2:
+ resolution:
+ {
+ integrity: sha512-wLAMWvxfqyTiBODA1lg3IXHQtjggYLeTK7RnSfqtOXixWJ3bAa2kK/HHmOOg19upteqO3muLvN6O/icbyQY33Q==,
+ }
+ hasBin: true
+ dependencies:
+ citty: 0.1.3
+ consola: 3.2.3
+ pathe: 1.1.1
+ dev: true
+
+ /untyped@1.4.0:
+ resolution:
+ {
+ integrity: sha512-Egkr/s4zcMTEuulcIb7dgURS6QpN7DyqQYdf+jBtiaJvQ+eRsrtWUoX84SbvQWuLkXsOjM+8sJC9u6KoMK/U7Q==,
+ }
+ hasBin: true
+ dependencies:
+ "@babel/core": 7.22.11
+ "@babel/standalone": 7.22.13
+ "@babel/types": 7.22.11
+ defu: 6.1.2
+ jiti: 1.19.3
+ mri: 1.2.0
+ scule: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /update-browserslist-db@1.0.11(browserslist@4.21.10):
+ resolution:
+ {
+ integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==,
+ }
+ hasBin: true
+ peerDependencies:
+ browserslist: ">= 4.21.0"
+ dependencies:
+ browserslist: 4.21.10
+ escalade: 3.1.1
+ picocolors: 1.0.0
+ dev: true
+
+ /uqr@0.1.2:
+ resolution:
+ {
+ integrity: sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA==,
+ }
+ dev: true
+
+ /urlpattern-polyfill@8.0.2:
+ resolution:
+ {
+ integrity: sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==,
+ }
+ dev: true
+
+ /util-deprecate@1.0.2:
+ resolution:
+ {
+ integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==,
+ }
+ dev: true
+
+ /util@0.12.5:
+ resolution:
+ {
+ integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==,
+ }
+ dependencies:
+ inherits: 2.0.4
+ is-arguments: 1.1.1
+ is-generator-function: 1.0.10
+ is-typed-array: 1.1.12
+ which-typed-array: 1.1.11
+ dev: true
+
+ /validate-npm-package-license@3.0.4:
+ resolution:
+ {
+ integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==,
+ }
+ dependencies:
+ spdx-correct: 3.2.0
+ spdx-expression-parse: 3.0.1
+ dev: true
+
+ /validate-npm-package-name@5.0.0:
+ resolution:
+ {
+ integrity: sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==,
+ }
+ engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ dependencies:
+ builtins: 5.0.1
+ dev: true
+
+ /vite-node@0.33.0:
+ resolution:
+ {
+ integrity: sha512-19FpHYbwWWxDr73ruNahC+vtEdza52kA90Qb3La98yZ0xULqV8A5JLNPUff0f5zID4984tW7l3DH2przTJUZSw==,
+ }
+ engines: { node: ">=v14.18.0" }
+ hasBin: true
+ dependencies:
+ cac: 6.7.14
+ debug: 4.3.4
+ mlly: 1.4.1
+ pathe: 1.1.1
+ picocolors: 1.0.0
+ vite: 4.4.9
+ transitivePeerDependencies:
+ - "@types/node"
+ - less
+ - lightningcss
+ - sass
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ dev: true
+
+ /vite-plugin-checker@0.6.2(vite@4.4.9):
+ resolution:
+ {
+ integrity: sha512-YvvvQ+IjY09BX7Ab+1pjxkELQsBd4rPhWNw8WLBeFVxu/E7O+n6VYAqNsKdK/a2luFlX/sMpoWdGFfg4HvwdJQ==,
+ }
+ engines: { node: ">=14.16" }
+ peerDependencies:
+ eslint: ">=7"
+ meow: ^9.0.0
+ optionator: ^0.9.1
+ stylelint: ">=13"
+ typescript: "*"
+ vite: ">=2.0.0"
+ vls: "*"
+ vti: "*"
+ vue-tsc: ">=1.3.9"
+ peerDependenciesMeta:
+ eslint:
+ optional: true
+ meow:
+ optional: true
+ optionator:
+ optional: true
+ stylelint:
+ optional: true
+ typescript:
+ optional: true
+ vls:
+ optional: true
+ vti:
+ optional: true
+ vue-tsc:
+ optional: true
+ dependencies:
+ "@babel/code-frame": 7.22.13
+ ansi-escapes: 4.3.2
+ chalk: 4.1.2
+ chokidar: 3.5.3
+ commander: 8.3.0
+ fast-glob: 3.3.1
+ fs-extra: 11.1.1
+ lodash.debounce: 4.0.8
+ lodash.pick: 4.4.0
+ npm-run-path: 4.0.1
+ semver: 7.5.4
+ strip-ansi: 6.0.1
+ tiny-invariant: 1.3.1
+ vite: 4.4.9
+ vscode-languageclient: 7.0.0
+ vscode-languageserver: 7.0.0
+ vscode-languageserver-textdocument: 1.0.8
+ vscode-uri: 3.0.7
+ dev: true
+
+ /vite-plugin-inspect@0.7.38(@nuxt/kit@3.7.0)(vite@4.4.9):
+ resolution:
+ {
+ integrity: sha512-+p6pJVtBOLGv+RBrcKAFUdx+euizg0bjL35HhPyM0MjtKlqoC5V9xkCmO9Ctc8JrTyXqODbHqiLWJKumu5zJ7g==,
+ }
+ engines: { node: ">=14" }
+ peerDependencies:
+ "@nuxt/kit": "*"
+ vite: ^3.1.0 || ^4.0.0
+ peerDependenciesMeta:
+ "@nuxt/kit":
+ optional: true
+ dependencies:
+ "@antfu/utils": 0.7.6
+ "@nuxt/kit": 3.7.0
+ "@rollup/pluginutils": 5.0.4(rollup@3.28.1)
+ debug: 4.3.4
+ error-stack-parser-es: 0.1.1
+ fs-extra: 11.1.1
+ open: 9.1.0
+ picocolors: 1.0.0
+ sirv: 2.0.3
+ vite: 4.4.9
+ transitivePeerDependencies:
+ - rollup
+ - supports-color
+ dev: true
+
+ /vite-plugin-vue-inspector@3.6.0(vite@4.4.9):
+ resolution:
+ {
+ integrity: sha512-Fi+9JaMx/reuic+MWbrdw8g5TwZM5a/BmdBT8OKKZi3rK4Qw3wND9smT+Ld+Daitbgly17uvuCiull2KV/hEBQ==,
+ }
+ peerDependencies:
+ vite: ^3.0.0-0 || ^4.0.0-0
+ dependencies:
+ "@babel/core": 7.22.11
+ "@babel/plugin-syntax-import-meta": 7.10.4(@babel/core@7.22.11)
+ "@babel/plugin-transform-typescript": 7.22.11(@babel/core@7.22.11)
+ "@vue/babel-plugin-jsx": 1.1.5(@babel/core@7.22.11)
+ "@vue/compiler-dom": 3.3.4
+ esno: 0.16.3
+ kolorist: 1.8.0
+ magic-string: 0.30.3
+ shell-quote: 1.8.1
+ vite: 4.4.9
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /vite@4.4.9:
+ resolution:
+ {
+ integrity: sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==,
+ }
+ engines: { node: ^14.18.0 || >=16.0.0 }
+ hasBin: true
+ peerDependencies:
+ "@types/node": ">= 14"
+ less: "*"
+ lightningcss: ^1.21.0
+ sass: "*"
+ stylus: "*"
+ sugarss: "*"
+ terser: ^5.4.0
+ peerDependenciesMeta:
+ "@types/node":
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ dependencies:
+ esbuild: 0.18.20
+ postcss: 8.4.29
+ rollup: 3.28.1
+ optionalDependencies:
+ fsevents: 2.3.3
+ dev: true
+
+ /vscode-jsonrpc@6.0.0:
+ resolution:
+ {
+ integrity: sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==,
+ }
+ engines: { node: ">=8.0.0 || >=10.0.0" }
+ dev: true
+
+ /vscode-languageclient@7.0.0:
+ resolution:
+ {
+ integrity: sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==,
+ }
+ engines: { vscode: ^1.52.0 }
+ dependencies:
+ minimatch: 3.1.2
+ semver: 7.5.4
+ vscode-languageserver-protocol: 3.16.0
+ dev: true
+
+ /vscode-languageserver-protocol@3.16.0:
+ resolution:
+ {
+ integrity: sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==,
+ }
+ dependencies:
+ vscode-jsonrpc: 6.0.0
+ vscode-languageserver-types: 3.16.0
+ dev: true
+
+ /vscode-languageserver-textdocument@1.0.8:
+ resolution:
+ {
+ integrity: sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==,
+ }
+ dev: true
+
+ /vscode-languageserver-types@3.16.0:
+ resolution:
+ {
+ integrity: sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==,
+ }
+ dev: true
+
+ /vscode-languageserver@7.0.0:
+ resolution:
+ {
+ integrity: sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==,
+ }
+ hasBin: true
+ dependencies:
+ vscode-languageserver-protocol: 3.16.0
+ dev: true
+
+ /vscode-uri@3.0.7:
+ resolution:
+ {
+ integrity: sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==,
+ }
+ dev: true
+
+ /vue-bundle-renderer@2.0.0:
+ resolution:
+ {
+ integrity: sha512-oYATTQyh8XVkUWe2kaKxhxKVuuzK2Qcehe+yr3bGiaQAhK3ry2kYE4FWOfL+KO3hVFwCdLmzDQTzYhTi9C+R2A==,
+ }
+ dependencies:
+ ufo: 1.3.0
+ dev: true
+
+ /vue-devtools-stub@0.1.0:
+ resolution:
+ {
+ integrity: sha512-RutnB7X8c5hjq39NceArgXg28WZtZpGc3+J16ljMiYnFhKvd8hITxSWQSQ5bvldxMDU6gG5mkxl1MTQLXckVSQ==,
+ }
+ dev: true
+
+ /vue-router@4.2.4(vue@3.3.4):
+ resolution:
+ {
+ integrity: sha512-9PISkmaCO02OzPVOMq2w82ilty6+xJmQrarYZDkjZBfl4RvYAlt4PKnEX21oW4KTtWfa9OuO/b3qk1Od3AEdCQ==,
+ }
+ peerDependencies:
+ vue: ^3.2.0
+ dependencies:
+ "@vue/devtools-api": 6.5.0
+ vue: 3.3.4
+ dev: true
+
+ /vue@3.3.4:
+ resolution:
+ {
+ integrity: sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==,
+ }
+ dependencies:
+ "@vue/compiler-dom": 3.3.4
+ "@vue/compiler-sfc": 3.3.4
+ "@vue/runtime-dom": 3.3.4
+ "@vue/server-renderer": 3.3.4(vue@3.3.4)
+ "@vue/shared": 3.3.4
+ dev: true
+
+ /wait-on@7.0.1:
+ resolution:
+ {
+ integrity: sha512-9AnJE9qTjRQOlTZIldAaf/da2eW0eSRSgcqq85mXQja/DW3MriHxkpODDSUEg+Gri/rKEcXUZHe+cevvYItaog==,
+ }
+ engines: { node: ">=12.0.0" }
+ hasBin: true
+ dependencies:
+ axios: 0.27.2
+ joi: 17.10.0
+ lodash: 4.17.21
+ minimist: 1.2.8
+ rxjs: 7.8.1
+ transitivePeerDependencies:
+ - debug
+ dev: true
+
+ /web-streams-polyfill@3.2.1:
+ resolution:
+ {
+ integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==,
+ }
+ engines: { node: ">= 8" }
+ dev: true
+
+ /webidl-conversions@3.0.1:
+ resolution:
+ {
+ integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==,
+ }
+ dev: true
+
+ /webpack-sources@3.2.3:
+ resolution:
+ {
+ integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==,
+ }
+ engines: { node: ">=10.13.0" }
+ dev: true
+
+ /webpack-virtual-modules@0.5.0:
+ resolution:
+ {
+ integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==,
+ }
+ dev: true
+
+ /whatwg-url@5.0.0:
+ resolution:
+ {
+ integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==,
+ }
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+ dev: true
+
+ /which-typed-array@1.1.11:
+ resolution:
+ {
+ integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==,
+ }
+ engines: { node: ">= 0.4" }
+ dependencies:
+ available-typed-arrays: 1.0.5
+ call-bind: 1.0.2
+ for-each: 0.3.3
+ gopd: 1.0.1
+ has-tostringtag: 1.0.0
+ dev: true
+
+ /which@2.0.2:
+ resolution:
+ {
+ integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==,
+ }
+ engines: { node: ">= 8" }
+ hasBin: true
+ dependencies:
+ isexe: 2.0.0
+ dev: true
+
+ /which@3.0.1:
+ resolution:
+ {
+ integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==,
+ }
+ engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 }
+ hasBin: true
+ dependencies:
+ isexe: 2.0.0
+ dev: true
+
+ /wide-align@1.1.5:
+ resolution:
+ {
+ integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==,
+ }
+ dependencies:
+ string-width: 4.2.3
+ dev: true
+
+ /widest-line@4.0.1:
+ resolution:
+ {
+ integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==,
+ }
+ engines: { node: ">=12" }
+ dependencies:
+ string-width: 5.1.2
+ dev: true
+
+ /wrap-ansi@7.0.0:
+ resolution:
+ {
+ integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==,
+ }
+ engines: { node: ">=10" }
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ dev: true
+
+ /wrap-ansi@8.1.0:
+ resolution:
+ {
+ integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==,
+ }
+ engines: { node: ">=12" }
+ dependencies:
+ ansi-styles: 6.2.1
+ string-width: 5.1.2
+ strip-ansi: 7.1.0
+ dev: true
+
+ /wrappy@1.0.2:
+ resolution:
+ {
+ integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==,
+ }
+ dev: true
+
+ /ws@8.13.0:
+ resolution:
+ {
+ integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==,
+ }
+ engines: { node: ">=10.0.0" }
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ">=5.0.2"
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+ dev: true
+
+ /xtend@4.0.2:
+ resolution:
+ {
+ integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==,
+ }
+ engines: { node: ">=0.4" }
+ dev: true
+
+ /xxhashjs@0.2.2:
+ resolution:
+ {
+ integrity: sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==,
+ }
+ dependencies:
+ cuint: 0.2.2
+ dev: true
+
+ /y18n@5.0.8:
+ resolution:
+ {
+ integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==,
+ }
+ engines: { node: ">=10" }
+ dev: true
+
+ /yallist@3.1.1:
+ resolution:
+ {
+ integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==,
+ }
+ dev: true
+
+ /yallist@4.0.0:
+ resolution:
+ {
+ integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==,
+ }
+ dev: true
+
+ /yaml@2.3.2:
+ resolution:
+ {
+ integrity: sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==,
+ }
+ engines: { node: ">= 14" }
+ dev: true
+
+ /yargs-parser@21.1.1:
+ resolution:
+ {
+ integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==,
+ }
+ engines: { node: ">=12" }
+ dev: true
+
+ /yargs@17.7.2:
+ resolution:
+ {
+ integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==,
+ }
+ engines: { node: ">=12" }
+ dependencies:
+ cliui: 8.0.1
+ escalade: 3.1.1
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 21.1.1
+ dev: true
+
+ /yauzl@2.10.0:
+ resolution:
+ {
+ integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==,
+ }
+ dependencies:
+ buffer-crc32: 0.2.13
+ fd-slicer: 1.1.0
+ dev: true
+
+ /zhead@2.0.10:
+ resolution:
+ {
+ integrity: sha512-irug8fXNKjqazkA27cFQs7C6/ZD3qNiEzLC56kDyzQART/Z9GMGfg8h2i6fb9c8ZWnIx/QgOgFJxK3A/CYHG0g==,
+ }
+ dev: true
+
+ /zip-stream@4.1.0:
+ resolution:
+ {
+ integrity: sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==,
+ }
+ engines: { node: ">= 10" }
+ dependencies:
+ archiver-utils: 2.1.0
+ compress-commons: 4.1.1
+ readable-stream: 3.6.2
+ dev: true
diff --git a/collectivo/extensions/shifts/public/favicon.ico b/collectivo/extensions/shifts/public/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..18993ad91cfd43e03b074dd0b5cc3f37ab38e49c
GIT binary patch
literal 4286
zcmeHLOKuuL5PjK%MHWVi6lD
zOGiREbCw`xmFozJ^aNatJY>w+g
ze6a2@u~m#^BZm@8wco9#Crlli0uLb^3E$t2-WIc^#(?t)*@`UpuofJ(Uyh@F>b3Ph
z$D^m8Xq~pTkGJ4Q`Q2)te3mgkWYZ^Ijq|hkiP^9`De={bQQ%heZC$QU2UpP(-tbl8
zPWD2abEew;oat@w`uP3J^YpsgT%~jT(Dk%oU}sa$7|n6hBjDj`+I;RX(>)%lm_7N{+B7Mu%H?422lE%MBJH!!YTN2oT7xr>>N-8OF$C&qU^
z>vLsa{$0X%q1fjOe3P1mCv#lN{xQ4_*HCSAZjTb1`}mlc+9rl8$B3OP%VT@mch_~G
z7Y+4b{r>9e=M+7vSI;BgB?ryZDY4m>&wcHSn81VH1N~`0gvwH{
z8dv#hG|OK`>1;j7tM#B)Z7zDN?{6=dUal}$e {
+ registerExtension({
+ name: "shifts",
+ description: pkg.description,
+ version: pkg.version,
+ schemas: [s001_schema_shifts],
+ examples: examples,
+ });
+});
+
+console.log("SHIFT GOT INSTALLED")
\ No newline at end of file
diff --git a/collectivo/extensions/shifts/server/schemas/001_schema_shifts.ts b/collectivo/extensions/shifts/server/schemas/001_schema_shifts.ts
new file mode 100644
index 00000000..be94b8b1
--- /dev/null
+++ b/collectivo/extensions/shifts/server/schemas/001_schema_shifts.ts
@@ -0,0 +1,43 @@
+// This function creates an empty schema for version 0.0.1 of the shifts extension
+// A schema can be used to declaratively define the structure of the database
+const schema = initSchema("shifts", "0.0.1");
+
+export default schema;
+
+// Here you can define collections for your database
+// See https://docs.directus.io/reference/system/collections.html
+schema.collections = [
+ {
+ collection: "shifts",
+ schema: {
+ schema: "schema",
+ name: "schema",
+ comment: null,
+ },
+ meta: {},
+ },
+];
+
+// Here you can define fields for your collections
+// See https://docs.directus.io/reference/system/fields.html
+schema.fields = [
+ ...directusSystemFields("shifts"),
+ {
+ collection: "shifts",
+ field: "example_field",
+ type: "string",
+ schema: {},
+ meta: {},
+ },
+];
+
+// Here you can define custom translations
+// See https://docs.directus.io/reference/system/translations.html
+schema.translations = [
+ { language: "de-DE", key: "shifts", value: "Beispiel" },
+];
+
+// To create relations, you can use the following helper functions
+// schema.createM2ORelation();
+// schema.createM2MRelation();
+// schema.createM2ARelation();
diff --git a/collectivo/extensions/shifts/server/tsconfig.json b/collectivo/extensions/shifts/server/tsconfig.json
new file mode 100644
index 00000000..b9ed69c1
--- /dev/null
+++ b/collectivo/extensions/shifts/server/tsconfig.json
@@ -0,0 +1,3 @@
+{
+ "extends": "../.nuxt/tsconfig.server.json"
+}
diff --git a/collectivo/extensions/shifts/tailwind.config.js b/collectivo/extensions/shifts/tailwind.config.js
new file mode 100644
index 00000000..9494e6d8
--- /dev/null
+++ b/collectivo/extensions/shifts/tailwind.config.js
@@ -0,0 +1,14 @@
+/** @type {import('tailwindcss').Config} */
+export default {
+ content: [
+ "./components/**/*.{js,vue,ts}",
+ "./layouts/**/*.vue",
+ "./pages/**/*.vue",
+ "./plugins/**/*.{js,ts}",
+ "./nuxt.config.{js,ts}",
+ ],
+ theme: {
+ extend: {},
+ },
+ plugins: [],
+};
diff --git a/collectivo/extensions/shifts/tests/basic.test.ts b/collectivo/extensions/shifts/tests/basic.test.ts
new file mode 100644
index 00000000..944d59c4
--- /dev/null
+++ b/collectivo/extensions/shifts/tests/basic.test.ts
@@ -0,0 +1,14 @@
+import { fileURLToPath } from "node:url";
+import { describe, expect, it } from "vitest";
+import { setup, $fetch } from "@nuxt/test-utils";
+
+describe("shifts", async () => {
+ await setup({
+ rootDir: fileURLToPath(new URL("..", import.meta.url)),
+ server: true,
+ });
+
+ it("Renders Hello Nuxt", async () => {
+ expect(await $fetch("/test/")).toMatch("Hello Nuxt!");
+ });
+});
diff --git a/collectivo/extensions/shifts/tsconfig.json b/collectivo/extensions/shifts/tsconfig.json
new file mode 100644
index 00000000..a746f2a7
--- /dev/null
+++ b/collectivo/extensions/shifts/tsconfig.json
@@ -0,0 +1,4 @@
+{
+ // https://nuxt.com/docs/guide/concepts/typescript
+ "extends": "./.nuxt/tsconfig.json"
+}
From becd4455393574947943f2a11a0b0de86cc11a00 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Th=C3=A9ophile=20Madet?=
Date: Tue, 19 Dec 2023 11:14:04 +0100
Subject: [PATCH 02/86] Added Qodana
---
.github/workflows/qodana_code_quality.yml | 20 ++++++++++++++++
qodana.yaml | 29 +++++++++++++++++++++++
2 files changed, 49 insertions(+)
create mode 100644 .github/workflows/qodana_code_quality.yml
create mode 100644 qodana.yaml
diff --git a/.github/workflows/qodana_code_quality.yml b/.github/workflows/qodana_code_quality.yml
new file mode 100644
index 00000000..cde7b11d
--- /dev/null
+++ b/.github/workflows/qodana_code_quality.yml
@@ -0,0 +1,20 @@
+name: Qodana
+on:
+ workflow_dispatch:
+ pull_request:
+ push:
+ branches:
+ - main
+ - shifts
+
+jobs:
+ qodana:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ with:
+ fetch-depth: 0
+ - name: 'Qodana Scan'
+ uses: JetBrains/qodana-action@v2023.3
+ env:
+ QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }}
\ No newline at end of file
diff --git a/qodana.yaml b/qodana.yaml
new file mode 100644
index 00000000..29f8f8c1
--- /dev/null
+++ b/qodana.yaml
@@ -0,0 +1,29 @@
+#-------------------------------------------------------------------------------#
+# Qodana analysis is configured by qodana.yaml file #
+# https://www.jetbrains.com/help/qodana/qodana-yaml.html #
+#-------------------------------------------------------------------------------#
+version: "1.0"
+
+#Specify inspection profile for code analysis
+profile:
+ name: qodana.starter
+
+#Enable inspections
+#include:
+# - name:
+
+#Disable inspections
+#exclude:
+# - name:
+# paths:
+# -
+
+#Execute shell command before Qodana execution (Applied in CI/CD pipeline)
+#bootstrap: sh ./prepare-qodana.sh
+
+#Install IDE plugins before Qodana execution (Applied in CI/CD pipeline)
+#plugins:
+# - id: #(plugin id can be found at https://plugins.jetbrains.com)
+
+#Specify Qodana linter for analysis (Applied in CI/CD pipeline)
+linter: jetbrains/qodana-js:latest
From a736f05cedc99c61dc0a2b0966b08307d5b943dd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Th=C3=A9ophile=20Madet?=
Date: Tue, 19 Dec 2023 11:16:04 +0100
Subject: [PATCH 03/86] Revert "Added Qodana"
This reverts commit d1eff25cf953d93e06c6da8876795202a2f7f1c8.
---
.github/workflows/qodana_code_quality.yml | 20 ----------------
qodana.yaml | 29 -----------------------
2 files changed, 49 deletions(-)
delete mode 100644 .github/workflows/qodana_code_quality.yml
delete mode 100644 qodana.yaml
diff --git a/.github/workflows/qodana_code_quality.yml b/.github/workflows/qodana_code_quality.yml
deleted file mode 100644
index cde7b11d..00000000
--- a/.github/workflows/qodana_code_quality.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-name: Qodana
-on:
- workflow_dispatch:
- pull_request:
- push:
- branches:
- - main
- - shifts
-
-jobs:
- qodana:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v3
- with:
- fetch-depth: 0
- - name: 'Qodana Scan'
- uses: JetBrains/qodana-action@v2023.3
- env:
- QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }}
\ No newline at end of file
diff --git a/qodana.yaml b/qodana.yaml
deleted file mode 100644
index 29f8f8c1..00000000
--- a/qodana.yaml
+++ /dev/null
@@ -1,29 +0,0 @@
-#-------------------------------------------------------------------------------#
-# Qodana analysis is configured by qodana.yaml file #
-# https://www.jetbrains.com/help/qodana/qodana-yaml.html #
-#-------------------------------------------------------------------------------#
-version: "1.0"
-
-#Specify inspection profile for code analysis
-profile:
- name: qodana.starter
-
-#Enable inspections
-#include:
-# - name:
-
-#Disable inspections
-#exclude:
-# - name:
-# paths:
-# -
-
-#Execute shell command before Qodana execution (Applied in CI/CD pipeline)
-#bootstrap: sh ./prepare-qodana.sh
-
-#Install IDE plugins before Qodana execution (Applied in CI/CD pipeline)
-#plugins:
-# - id: #(plugin id can be found at https://plugins.jetbrains.com)
-
-#Specify Qodana linter for analysis (Applied in CI/CD pipeline)
-linter: jetbrains/qodana-js:latest
From c9d660697e866bd7a05ccc41d55efde8ed00352f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Th=C3=A9ophile=20Madet?=
Date: Thu, 4 Jan 2024 12:50:58 +0100
Subject: [PATCH 04/86] feat: shifts schema WIP
---
.../extensions/shifts/pages/shifts/index.vue | 2 +-
.../server/plugins/registerExtension.ts | 4 +-
.../server/schemas/001_schema_shifts.ts | 92 ++++++++++++++++---
3 files changed, 79 insertions(+), 19 deletions(-)
diff --git a/collectivo/extensions/shifts/pages/shifts/index.vue b/collectivo/extensions/shifts/pages/shifts/index.vue
index fd0d785c..5f911622 100644
--- a/collectivo/extensions/shifts/pages/shifts/index.vue
+++ b/collectivo/extensions/shifts/pages/shifts/index.vue
@@ -1,7 +1,7 @@
diff --git a/collectivo/extensions/shifts/server/plugins/registerExtension.ts b/collectivo/extensions/shifts/server/plugins/registerExtension.ts
index 3a60dd07..9d3051cb 100644
--- a/collectivo/extensions/shifts/server/plugins/registerExtension.ts
+++ b/collectivo/extensions/shifts/server/plugins/registerExtension.ts
@@ -11,6 +11,4 @@ export default defineNitroPlugin(() => {
schemas: [s001_schema_shifts],
examples: examples,
});
-});
-
-console.log("SHIFT GOT INSTALLED")
\ No newline at end of file
+});
\ No newline at end of file
diff --git a/collectivo/extensions/shifts/server/schemas/001_schema_shifts.ts b/collectivo/extensions/shifts/server/schemas/001_schema_shifts.ts
index be94b8b1..fff334a5 100644
--- a/collectivo/extensions/shifts/server/schemas/001_schema_shifts.ts
+++ b/collectivo/extensions/shifts/server/schemas/001_schema_shifts.ts
@@ -4,8 +4,6 @@ const schema = initSchema("shifts", "0.0.1");
export default schema;
-// Here you can define collections for your database
-// See https://docs.directus.io/reference/system/collections.html
schema.collections = [
{
collection: "shifts",
@@ -16,28 +14,92 @@ schema.collections = [
},
meta: {},
},
+ {
+ collection: "slots",
+ schema: {
+ schema: "schema",
+ name: "schema",
+ comment: null,
+ },
+ meta: {},
+ },
+ {
+ collection: "skills",
+ schema: {
+ schema: "schema",
+ name: "schema",
+ comment: null,
+ },
+ meta: {},
+ },
+ {
+ collection: "assignments",
+ schema: {
+ schema: "schema",
+ name: "schema",
+ comment: null,
+ },
+ meta: {},
+ },
];
-// Here you can define fields for your collections
-// See https://docs.directus.io/reference/system/fields.html
schema.fields = [
...directusSystemFields("shifts"),
{
collection: "shifts",
- field: "example_field",
+ field: "name",
type: "string",
schema: {},
meta: {},
},
+ {
+ collection: "shifts",
+ field: "start_datetime",
+ type: "dateTime",
+ schema: {"is_nullable": false,},
+ meta: {},
+ },
+ {
+ collection: "shifts",
+ field: "end_datetime",
+ type: "dateTime",
+ schema: {"is_nullable": false,},
+ meta: {},
+ },
+ ...directusSystemFields("slots"),
+ {
+ collection: "slots",
+ field: "name",
+ type: "string",
+ schema: {},
+ meta: {},
+ },
+ ...directusSystemFields("skills"),
+ {
+ collection: "skills",
+ field: "name",
+ type: "string",
+ schema: {},
+ meta: {},
+ },
+ ...directusSystemFields("assignments"),
+ {
+ collection: "assignments",
+ field: "from",
+ type: "date",
+ schema: {},
+ meta: {},
+ },
+ {
+ collection: "assignments",
+ field: "to",
+ type: "date",
+ schema: {},
+ meta: {},
+ },
];
-// Here you can define custom translations
-// See https://docs.directus.io/reference/system/translations.html
-schema.translations = [
- { language: "de-DE", key: "shifts", value: "Beispiel" },
-];
-
-// To create relations, you can use the following helper functions
-// schema.createM2ORelation();
-// schema.createM2MRelation();
-// schema.createM2ARelation();
+schema.createO2MRelation("slots", "shifts", "shift")
+schema.createM2MRelation("skills", "slots")
+schema.createO2MRelation("assignments", "slots", "slot")
+schema.createO2MRelation("assignments", "directus_users", "user")
\ No newline at end of file
From 54fc6bad2e749c06c1ebbedd884caab67c6bf0d0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Th=C3=A9ophile=20MADET?=
Date: Fri, 5 Jan 2024 13:09:43 +0100
Subject: [PATCH 05/86] Added the option to specify the field type when
creation O2M relations. Prefixed all collections and fields names with the
extension name.
---
.../server/schemas/001_schema_shifts.ts | 52 +++++++++----------
1 file changed, 26 insertions(+), 26 deletions(-)
diff --git a/collectivo/extensions/shifts/server/schemas/001_schema_shifts.ts b/collectivo/extensions/shifts/server/schemas/001_schema_shifts.ts
index fff334a5..5265ef07 100644
--- a/collectivo/extensions/shifts/server/schemas/001_schema_shifts.ts
+++ b/collectivo/extensions/shifts/server/schemas/001_schema_shifts.ts
@@ -6,7 +6,7 @@ export default schema;
schema.collections = [
{
- collection: "shifts",
+ collection: "shifts_shifts",
schema: {
schema: "schema",
name: "schema",
@@ -15,7 +15,7 @@ schema.collections = [
meta: {},
},
{
- collection: "slots",
+ collection: "shifts_slots",
schema: {
schema: "schema",
name: "schema",
@@ -24,7 +24,7 @@ schema.collections = [
meta: {},
},
{
- collection: "skills",
+ collection: "shifts_skills",
schema: {
schema: "schema",
name: "schema",
@@ -33,7 +33,7 @@ schema.collections = [
meta: {},
},
{
- collection: "assignments",
+ collection: "shifts_assignments",
schema: {
schema: "schema",
name: "schema",
@@ -44,62 +44,62 @@ schema.collections = [
];
schema.fields = [
- ...directusSystemFields("shifts"),
+ ...directusSystemFields("shifts_shifts"),
{
- collection: "shifts",
- field: "name",
+ collection: "shifts_shifts",
+ field: "shifts_name",
type: "string",
schema: {},
meta: {},
},
{
- collection: "shifts",
- field: "start_datetime",
+ collection: "shifts_shifts",
+ field: "shifts_start_datetime",
type: "dateTime",
schema: {"is_nullable": false,},
meta: {},
},
{
- collection: "shifts",
- field: "end_datetime",
+ collection: "shifts_shifts",
+ field: "shifts_end_datetime",
type: "dateTime",
schema: {"is_nullable": false,},
meta: {},
},
- ...directusSystemFields("slots"),
+ ...directusSystemFields("shifts_slots"),
{
- collection: "slots",
- field: "name",
+ collection: "shifts_slots",
+ field: "shifts_name",
type: "string",
schema: {},
meta: {},
},
- ...directusSystemFields("skills"),
+ ...directusSystemFields("shifts_skills"),
{
- collection: "skills",
- field: "name",
+ collection: "shifts_skills",
+ field: "shifts_name",
type: "string",
schema: {},
meta: {},
},
- ...directusSystemFields("assignments"),
+ ...directusSystemFields("shifts_assignments"),
{
- collection: "assignments",
- field: "from",
+ collection: "shifts_assignments",
+ field: "shifts_from",
type: "date",
schema: {},
meta: {},
},
{
- collection: "assignments",
- field: "to",
+ collection: "shifts_assignments",
+ field: "shifts_to",
type: "date",
schema: {},
meta: {},
},
];
-schema.createO2MRelation("slots", "shifts", "shift")
-schema.createM2MRelation("skills", "slots")
-schema.createO2MRelation("assignments", "slots", "slot")
-schema.createO2MRelation("assignments", "directus_users", "user")
\ No newline at end of file
+schema.createO2MRelation("shifts_slots", "shifts_shifts", "shifts_shift")
+schema.createM2MRelation("shifts_skills", "shifts_slots")
+schema.createO2MRelation("shifts_assignments", "shifts_slots", "shifts_slot")
+schema.createO2MRelation("shifts_assignments", "directus_users", "shifts_user", "uuid")
\ No newline at end of file
From 495024367c50163151c273ed8c90d123358db761 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Th=C3=A9ophile=20MADET?=
Date: Mon, 8 Jan 2024 17:39:29 +0100
Subject: [PATCH 06/86] Added example shift data and a link in the menu.
---
collectivo/extensions/shifts/package.json | 10 +-
.../extensions/shifts/pages/shifts/index.vue | 14 +-
collectivo/extensions/shifts/plugins/setup.ts | 10 ++
.../shifts/server/examples/examples.ts | 121 +++++++++++++++++-
.../server/schemas/001_schema_shifts.ts | 22 +++-
5 files changed, 165 insertions(+), 12 deletions(-)
create mode 100644 collectivo/extensions/shifts/plugins/setup.ts
diff --git a/collectivo/extensions/shifts/package.json b/collectivo/extensions/shifts/package.json
index a5306590..a0982ff7 100644
--- a/collectivo/extensions/shifts/package.json
+++ b/collectivo/extensions/shifts/package.json
@@ -17,18 +17,20 @@
"lint:fix": "eslint --cache . --fix"
},
"dependencies": {
- "@collectivo/collectivo": "workspace:*"
+ "@collectivo/collectivo": "workspace:*",
+ "luxon": "^3.4.4"
},
"devDependencies": {
"@nuxt/devtools": "latest",
"@nuxt/test-utils": "^3.7.1",
- "nuxt": "^3.7.0",
- "vitest": "^0.34.3",
+ "@types/luxon": "^3.3.8",
"@typescript-eslint/eslint-plugin": "6.11.0",
"@typescript-eslint/parser": "6.11.0",
"eslint": "8.54.0",
"eslint-config-prettier": "9.0.0",
"eslint-plugin-vue": "9.18.1",
- "prettier": "3.1.0"
+ "nuxt": "^3.7.0",
+ "prettier": "3.1.0",
+ "vitest": "^0.34.3"
}
}
diff --git a/collectivo/extensions/shifts/pages/shifts/index.vue b/collectivo/extensions/shifts/pages/shifts/index.vue
index 5f911622..cef69a7b 100644
--- a/collectivo/extensions/shifts/pages/shifts/index.vue
+++ b/collectivo/extensions/shifts/pages/shifts/index.vue
@@ -1,9 +1,21 @@
- SHIFTS 2322
+
+ Shifts test
+
+
+ {{ shift.shifts_start_datetime }}
+
+
+
diff --git a/collectivo/extensions/shifts/plugins/setup.ts b/collectivo/extensions/shifts/plugins/setup.ts
new file mode 100644
index 00000000..a50d6772
--- /dev/null
+++ b/collectivo/extensions/shifts/plugins/setup.ts
@@ -0,0 +1,10 @@
+export default defineNuxtPlugin(() => {
+ const menu = useCollectivoMenus();
+
+ menu.value.main.push({
+ label: "Shifts",
+ icon: "i-system-uicons-calendar-days",
+ to: "/shifts",
+ order: 100,
+ });
+});
diff --git a/collectivo/extensions/shifts/server/examples/examples.ts b/collectivo/extensions/shifts/server/examples/examples.ts
index 5a81a952..7f1a5989 100644
--- a/collectivo/extensions/shifts/server/examples/examples.ts
+++ b/collectivo/extensions/shifts/server/examples/examples.ts
@@ -1,2 +1,121 @@
// This function can be used to create shifts data for your extension
-export default async function examples() {}
+import { createItem, createItems, deleteItems, readItems } from "@directus/sdk";
+
+import { DateTime } from "luxon";
+
+const times_of_day = [10, 13, 16, 19];
+
+export default async function examples() {
+ console.info("Creating example data for shifts");
+
+ await cleanShiftsData();
+ await createShifts();
+ await createSlots();
+ await createSkills();
+
+ console.info("Example data for shifts created");
+}
+
+async function cleanShiftsData() {
+ const directus = await useDirectusAdmin();
+
+ const schemas = [
+ "shifts_shifts",
+ "shifts_slots",
+ "shifts_skills",
+ "shifts_assignments",
+ ];
+
+ // Clean up old data
+ for (const schema of schemas) {
+ await directus.request(deleteItems(schema, { limit: 1000 }));
+ }
+}
+
+async function createShifts() {
+ const directus = await useDirectusAdmin();
+
+ const today = DateTime.now().startOf("day");
+ const shiftsRequests = [];
+
+ // Create some membership types
+ for (let delta_days = -10; delta_days < 10; delta_days++) {
+ const day = today.plus({ days: delta_days });
+
+ for (const time_of_day of times_of_day) {
+ const start_time = day.set({ hour: time_of_day });
+
+ shiftsRequests.push({
+ shifts_name: "Shop",
+ shifts_start_datetime: start_time.toString(),
+ shifts_end_datetime: start_time.plus({ hours: 3 }).toString(),
+ });
+ }
+ }
+
+ await directus.request(createItems("shifts_shifts", shiftsRequests));
+}
+
+async function createSlots() {
+ const directus = await useDirectusAdmin();
+
+ const shifts = await directus.request(readItems("shifts_shifts"));
+ const slotsRequests = [];
+
+ for (const shift of shifts) {
+ const hour = DateTime.fromISO(shift["shifts_start_datetime"], {
+ zone: "UTC",
+ }).toLocal().hour;
+
+ if (hour == times_of_day[times_of_day.length - 1]) {
+ for (let i = 0; i < 2; i++) {
+ slotsRequests.push({
+ shifts_name: "Cleaning",
+ shifts_shift: shift["id"],
+ });
+ }
+ } else {
+ slotsRequests.push({
+ shifts_name: "Cashier",
+ shifts_shift: shift["id"],
+ });
+
+ for (let i = 0; i < 2; i++) {
+ slotsRequests.push({
+ shifts_name: "Shelves",
+ shifts_shift: shift["id"],
+ });
+ }
+ }
+ }
+
+ await directus.request(createItems("shifts_slots", slotsRequests));
+}
+
+async function createSkills() {
+ const directus = await useDirectusAdmin();
+
+ const skill = await directus.request(
+ createItem("shifts_skills", {
+ shifts_name: "Cashier",
+ }),
+ );
+
+ const slots = await directus.request(
+ readItems("shifts_slots", {
+ fields: ["id"],
+ filter: { shifts_name: { _eq: "Cashier" } },
+ }),
+ );
+
+ const requests = [];
+
+ for (const slot of slots) {
+ requests.push({
+ shifts_skills_id: skill["id"],
+ shifts_slots_id: slot["id"],
+ });
+ }
+
+ await directus.request(createItems("shifts_skills_shifts_slots", requests));
+}
diff --git a/collectivo/extensions/shifts/server/schemas/001_schema_shifts.ts b/collectivo/extensions/shifts/server/schemas/001_schema_shifts.ts
index 5265ef07..6fd7d334 100644
--- a/collectivo/extensions/shifts/server/schemas/001_schema_shifts.ts
+++ b/collectivo/extensions/shifts/server/schemas/001_schema_shifts.ts
@@ -56,14 +56,14 @@ schema.fields = [
collection: "shifts_shifts",
field: "shifts_start_datetime",
type: "dateTime",
- schema: {"is_nullable": false,},
+ schema: { is_nullable: false },
meta: {},
},
{
collection: "shifts_shifts",
field: "shifts_end_datetime",
type: "dateTime",
- schema: {"is_nullable": false,},
+ schema: { is_nullable: false },
meta: {},
},
...directusSystemFields("shifts_slots"),
@@ -99,7 +99,17 @@ schema.fields = [
},
];
-schema.createO2MRelation("shifts_slots", "shifts_shifts", "shifts_shift")
-schema.createM2MRelation("shifts_skills", "shifts_slots")
-schema.createO2MRelation("shifts_assignments", "shifts_slots", "shifts_slot")
-schema.createO2MRelation("shifts_assignments", "directus_users", "shifts_user", "uuid")
\ No newline at end of file
+schema.createO2MRelation("shifts_slots", "shifts_shifts", "shifts_shift");
+schema.createM2MRelation("shifts_skills", "shifts_slots");
+schema.createO2MRelation("shifts_assignments", "shifts_slots", "shifts_slot");
+
+schema.createO2MRelation(
+ "shifts_assignments",
+ "directus_users",
+ "shifts_user",
+ {
+ collectionManyFieldType: "uuid",
+ template:
+ "{{shifts_shifts.shifts_name}} {{shifts_shifts.shifts_start_datetime}}",
+ },
+);
From c3a29df3e1704955d2328152e4c19abf5eb50124 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Th=C3=A9ophile=20MADET?=
Date: Mon, 8 Jan 2024 19:01:15 +0100
Subject: [PATCH 07/86] Added a simple shift overview page for a user.
---
collectivo/extensions/shifts/package.json | 4 +-
.../shifts/pages/shifts/my_shifts.vue | 43 +++++++++++++++++++
collectivo/extensions/shifts/plugins/setup.ts | 4 +-
3 files changed, 48 insertions(+), 3 deletions(-)
create mode 100644 collectivo/extensions/shifts/pages/shifts/my_shifts.vue
diff --git a/collectivo/extensions/shifts/package.json b/collectivo/extensions/shifts/package.json
index a0982ff7..afe38c1c 100644
--- a/collectivo/extensions/shifts/package.json
+++ b/collectivo/extensions/shifts/package.json
@@ -1,9 +1,11 @@
{
"name": "@collectivo/shifts",
- "description": "A module to create shifts that members can register to.",
"version": "0.0.1",
+ "description": "A module to create shifts that members can register to.",
"type": "module",
"license": "Unlicense",
+ "author": "Théophile Madet",
+ "homepage": "https://collectivo.io",
"main": "./nuxt.config.ts",
"scripts": {
"build": "nuxt build",
diff --git a/collectivo/extensions/shifts/pages/shifts/my_shifts.vue b/collectivo/extensions/shifts/pages/shifts/my_shifts.vue
new file mode 100644
index 00000000..6a6f15d9
--- /dev/null
+++ b/collectivo/extensions/shifts/pages/shifts/my_shifts.vue
@@ -0,0 +1,43 @@
+
+
+
+
+ Status
+
+
+ My type : TODO
+
+
+
+
+
+ My upcoming shifts
+ No upcoming shift
+
+
+
+ Assigned to {{ assignment.shifts_slot.shifts_name }} on
+ {{ assignment.shifts_slot.shifts_shift.shifts_start_datetime }}
+
+
+
+
+
diff --git a/collectivo/extensions/shifts/plugins/setup.ts b/collectivo/extensions/shifts/plugins/setup.ts
index a50d6772..85868605 100644
--- a/collectivo/extensions/shifts/plugins/setup.ts
+++ b/collectivo/extensions/shifts/plugins/setup.ts
@@ -2,9 +2,9 @@ export default defineNuxtPlugin(() => {
const menu = useCollectivoMenus();
menu.value.main.push({
- label: "Shifts",
+ label: "My shifts",
icon: "i-system-uicons-calendar-days",
- to: "/shifts",
+ to: "/shifts/my_shifts",
order: 100,
});
});
From 2353da43d03c4baf80e16a11bee5d086b2d3c672 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Th=C3=A9ophile=20MADET?=
Date: Tue, 9 Jan 2024 15:23:51 +0100
Subject: [PATCH 08/86] Added assignments to shift examples.
---
.../shifts/server/examples/examples.ts | 43 ++++++++++++++++++-
1 file changed, 42 insertions(+), 1 deletion(-)
diff --git a/collectivo/extensions/shifts/server/examples/examples.ts b/collectivo/extensions/shifts/server/examples/examples.ts
index 7f1a5989..f48ae5d2 100644
--- a/collectivo/extensions/shifts/server/examples/examples.ts
+++ b/collectivo/extensions/shifts/server/examples/examples.ts
@@ -1,5 +1,11 @@
// This function can be used to create shifts data for your extension
-import { createItem, createItems, deleteItems, readItems } from "@directus/sdk";
+import {
+ createItem,
+ createItems,
+ deleteItems,
+ readItems,
+ readUsers,
+} from "@directus/sdk";
import { DateTime } from "luxon";
@@ -12,6 +18,7 @@ export default async function examples() {
await createShifts();
await createSlots();
await createSkills();
+ await createAssignments();
console.info("Example data for shifts created");
}
@@ -119,3 +126,37 @@ async function createSkills() {
await directus.request(createItems("shifts_skills_shifts_slots", requests));
}
+
+async function createAssignments() {
+ const directus = await useDirectusAdmin();
+
+ const slots = await directus.request(
+ readItems("shifts_slots", {
+ fields: ["id"],
+ }),
+ );
+
+ const users = await directus.request(
+ readUsers({
+ fields: ["id"],
+ }),
+ );
+
+ const assignments = [];
+
+ for (const user of users) {
+ const slot = slots.pop();
+
+ if (!slot) {
+ break;
+ }
+
+ assignments.push({
+ shifts_from: DateTime.now().toString(),
+ shifts_slot: slot["id"],
+ shifts_user: user["id"],
+ });
+ }
+
+ await directus.request(createItems("shifts_assignments", assignments));
+}
From aa74a57f4474de0b33248a558db579077c4b7aee Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Th=C3=A9ophile=20MADET?=
Date: Tue, 9 Jan 2024 16:10:24 +0100
Subject: [PATCH 09/86] Updated the shift schema to represent shift templates
and occurences.
---
.../shifts/server/examples/examples.ts | 34 +++++++++----------
.../server/schemas/001_schema_shifts.ts | 23 ++++++++++---
2 files changed, 34 insertions(+), 23 deletions(-)
diff --git a/collectivo/extensions/shifts/server/examples/examples.ts b/collectivo/extensions/shifts/server/examples/examples.ts
index f48ae5d2..43b7490d 100644
--- a/collectivo/extensions/shifts/server/examples/examples.ts
+++ b/collectivo/extensions/shifts/server/examples/examples.ts
@@ -1,4 +1,3 @@
-// This function can be used to create shifts data for your extension
import {
createItem,
createItems,
@@ -33,7 +32,6 @@ async function cleanShiftsData() {
"shifts_assignments",
];
- // Clean up old data
for (const schema of schemas) {
await directus.request(deleteItems(schema, { limit: 1000 }));
}
@@ -42,21 +40,25 @@ async function cleanShiftsData() {
async function createShifts() {
const directus = await useDirectusAdmin();
- const today = DateTime.now().startOf("day");
+ const monday = DateTime.now().toUTC().startOf("week");
const shiftsRequests = [];
- // Create some membership types
- for (let delta_days = -10; delta_days < 10; delta_days++) {
- const day = today.plus({ days: delta_days });
+ const nb_weeks = 3;
- for (const time_of_day of times_of_day) {
- const start_time = day.set({ hour: time_of_day });
+ for (let week = 0; week < nb_weeks; week++) {
+ for (let weekday = 0; weekday < 5; weekday++) {
+ const day = monday.plus({ days: weekday, week: week });
- shiftsRequests.push({
- shifts_name: "Shop",
- shifts_start_datetime: start_time.toString(),
- shifts_end_datetime: start_time.plus({ hours: 3 }).toString(),
- });
+ for (const time_of_day of times_of_day) {
+ shiftsRequests.push({
+ shifts_name: "Shop (week " + ["A", "B", "C", "D"][week] + ")",
+ shifts_from: day.toString(),
+ shifts_duration:
+ time_of_day == times_of_day[times_of_day.length - 1] ? 150 : 180,
+ shifts_repeats_every: nb_weeks * 7,
+ shifts_time: time_of_day + ":00",
+ });
+ }
}
}
@@ -70,11 +72,7 @@ async function createSlots() {
const slotsRequests = [];
for (const shift of shifts) {
- const hour = DateTime.fromISO(shift["shifts_start_datetime"], {
- zone: "UTC",
- }).toLocal().hour;
-
- if (hour == times_of_day[times_of_day.length - 1]) {
+ if (shift["shifts_time"] == times_of_day[times_of_day.length - 1]) {
for (let i = 0; i < 2; i++) {
slotsRequests.push({
shifts_name: "Cleaning",
diff --git a/collectivo/extensions/shifts/server/schemas/001_schema_shifts.ts b/collectivo/extensions/shifts/server/schemas/001_schema_shifts.ts
index 6fd7d334..9a157c1f 100644
--- a/collectivo/extensions/shifts/server/schemas/001_schema_shifts.ts
+++ b/collectivo/extensions/shifts/server/schemas/001_schema_shifts.ts
@@ -54,17 +54,30 @@ schema.fields = [
},
{
collection: "shifts_shifts",
- field: "shifts_start_datetime",
- type: "dateTime",
+ field: "shifts_from",
+ type: "date",
schema: { is_nullable: false },
meta: {},
},
{
collection: "shifts_shifts",
- field: "shifts_end_datetime",
- type: "dateTime",
+ field: "shifts_duration",
+ type: "integer",
schema: { is_nullable: false },
- meta: {},
+ meta: { note: "In minutes" },
+ },
+ {
+ collection: "shifts_shifts",
+ field: "shifts_time",
+ type: "time",
+ schema: { is_nullable: false },
+ },
+ {
+ collection: "shifts_shifts",
+ field: "shifts_repeats_every",
+ type: "integer",
+ schema: { is_nullable: true },
+ meta: { note: "In days" },
},
...directusSystemFields("shifts_slots"),
{
From ab49528e65116372f9cc199dc999fb75282ea98b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=ABl?= <57440945+jofmi@users.noreply.github.com>
Date: Wed, 10 Jan 2024 17:18:02 +0100
Subject: [PATCH 10/86] fix: run postinstall on shifts extension
---
collectivo/extensions/shifts/app.config.ts | 12 ------------
collectivo/extensions/shifts/package.json | 1 +
2 files changed, 1 insertion(+), 12 deletions(-)
delete mode 100644 collectivo/extensions/shifts/app.config.ts
diff --git a/collectivo/extensions/shifts/app.config.ts b/collectivo/extensions/shifts/app.config.ts
deleted file mode 100644
index 30a0ea00..00000000
--- a/collectivo/extensions/shifts/app.config.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import { IdentificationIcon } from "@heroicons/vue/24/solid";
-
-export default defineAppConfig({
- mainMenuItems: {
- membership: {
- label: "Shifts",
- link: "/shifts",
- icon: IdentificationIcon,
- order: 10,
- },
- },
-});
diff --git a/collectivo/extensions/shifts/package.json b/collectivo/extensions/shifts/package.json
index afe38c1c..c82722ca 100644
--- a/collectivo/extensions/shifts/package.json
+++ b/collectivo/extensions/shifts/package.json
@@ -13,6 +13,7 @@
"generate": "nuxt generate",
"preview": "nuxt preview",
"test": "vitest run",
+ "postinstall": "nuxt prepare",
"format": "prettier --cache --check .",
"format:fix": "prettier --cache --check . --write",
"lint": "eslint --cache .",
From ff98262694e75cef2a6b93f5903505150571ec55 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Th=C3=A9ophile=20MADET?=
Date: Thu, 11 Jan 2024 12:20:58 +0100
Subject: [PATCH 11/86] WIP shifts
---
collectivo/extensions/shifts/app.vue | 1 +
.../extensions/shifts/composables/shifts.ts | 15 ++++++
collectivo/extensions/shifts/index.d.ts | 20 ++++++++
.../shifts/pages/shifts/shift_calendar.vue | 51 +++++++++++++++++++
collectivo/extensions/shifts/plugins/setup.ts | 9 +++-
5 files changed, 95 insertions(+), 1 deletion(-)
create mode 100644 collectivo/extensions/shifts/composables/shifts.ts
create mode 100644 collectivo/extensions/shifts/index.d.ts
create mode 100644 collectivo/extensions/shifts/pages/shifts/shift_calendar.vue
diff --git a/collectivo/extensions/shifts/app.vue b/collectivo/extensions/shifts/app.vue
index f8eacfa7..12db61cf 100644
--- a/collectivo/extensions/shifts/app.vue
+++ b/collectivo/extensions/shifts/app.vue
@@ -2,4 +2,5 @@
+
diff --git a/collectivo/extensions/shifts/composables/shifts.ts b/collectivo/extensions/shifts/composables/shifts.ts
new file mode 100644
index 00000000..97836e12
--- /dev/null
+++ b/collectivo/extensions/shifts/composables/shifts.ts
@@ -0,0 +1,15 @@
+import { readItems } from "@directus/sdk";
+import type { CollectivoShift } from "~/index";
+import { DateTime } from "luxon";
+
+export const getShiftOccurences = async (
+ from: DateTime,
+ to: DateTime,
+): Promise => {
+ const directus = useDirectus();
+ return await directus.request(
+ readItems("shifts_shifts", {
+ filter: { shifts_from: { _gte: from.toString() } },
+ }),
+ );
+};
diff --git a/collectivo/extensions/shifts/index.d.ts b/collectivo/extensions/shifts/index.d.ts
new file mode 100644
index 00000000..0c540881
--- /dev/null
+++ b/collectivo/extensions/shifts/index.d.ts
@@ -0,0 +1,20 @@
+declare global {
+ // Database schema
+ interface CollectivoShiftsSchema {
+ collectivo_shifts: CollectivoShift[];
+ }
+
+ interface CollectivoShift {
+ id: string;
+ shifts_name: string;
+ shifts_from: string;
+ shifts_to: string;
+ }
+}
+
+// Types for input of app.config.ts
+declare module "nuxt/schema" {
+ interface AppConfigInput {}
+}
+
+export {};
diff --git a/collectivo/extensions/shifts/pages/shifts/shift_calendar.vue b/collectivo/extensions/shifts/pages/shifts/shift_calendar.vue
new file mode 100644
index 00000000..e0c08ff4
--- /dev/null
+++ b/collectivo/extensions/shifts/pages/shifts/shift_calendar.vue
@@ -0,0 +1,51 @@
+
+
+
+
+ From
+
+ to
+
+
+
+
+
+ {{ shift.shifts_name }} - {{ shift.shifts_from }}
+
+
+
+
diff --git a/collectivo/extensions/shifts/plugins/setup.ts b/collectivo/extensions/shifts/plugins/setup.ts
index 85868605..137dc246 100644
--- a/collectivo/extensions/shifts/plugins/setup.ts
+++ b/collectivo/extensions/shifts/plugins/setup.ts
@@ -5,6 +5,13 @@ export default defineNuxtPlugin(() => {
label: "My shifts",
icon: "i-system-uicons-calendar-days",
to: "/shifts/my_shifts",
- order: 100,
+ order: 90,
+ });
+
+ menu.value.main.push({
+ label: "Shift calendar",
+ icon: "i-system-uicons-calendar-month",
+ to: "/shifts/shift_calendar",
+ order: 95,
});
});
From 4264fe816cb172fdc96dbdc5ac7f051a96a06f48 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Th=C3=A9ophile=20Madet?=
Date: Thu, 11 Jan 2024 18:37:54 +0100
Subject: [PATCH 12/86] First draft of calculating shift occurences.
---
.../extensions/shifts/composables/shifts.ts | 79 +++++++++++++++++--
collectivo/extensions/shifts/index.d.ts | 2 +
collectivo/extensions/shifts/package.json | 3 +-
.../shifts/pages/shifts/shift_calendar.vue | 17 ++--
.../server/schemas/001_schema_shifts.ts | 15 ++--
5 files changed, 95 insertions(+), 21 deletions(-)
diff --git a/collectivo/extensions/shifts/composables/shifts.ts b/collectivo/extensions/shifts/composables/shifts.ts
index 97836e12..0dfca324 100644
--- a/collectivo/extensions/shifts/composables/shifts.ts
+++ b/collectivo/extensions/shifts/composables/shifts.ts
@@ -1,15 +1,82 @@
import { readItems } from "@directus/sdk";
import type { CollectivoShift } from "~/index";
import { DateTime } from "luxon";
+import { datetime, RRule } from "rrule";
-export const getShiftOccurences = async (
+export interface ShiftOccurence {
+ shift: CollectivoShift;
+ start: DateTime;
+ end: DateTime;
+}
+
+export const getAllShiftOccurences = async (
from: DateTime,
to: DateTime,
-): Promise => {
+): Promise => {
const directus = useDirectus();
- return await directus.request(
- readItems("shifts_shifts", {
- filter: { shifts_from: { _gte: from.toString() } },
- }),
+
+ const shifts: CollectivoShift[] = await directus.request(
+ readItems("shifts_shifts"),
+ );
+
+ const occurrences = [];
+
+ for (const shift of shifts) {
+ occurrences.push(...getOccurrencesForShift(shift, from, to));
+ }
+
+ occurrences.sort((a, b) => {
+ return a.start.toMillis() - b.start.toMillis();
+ });
+
+ return occurrences;
+};
+
+export const getOccurrencesForShift = (
+ shift: CollectivoShift,
+ from: DateTime,
+ to: DateTime,
+): ShiftOccurence[] => {
+ const dates: datetime[] = shiftToRRule(shift).between(
+ luxonDateTimeToRruleDatetime(from),
+ luxonDateTimeToRruleDatetime(to),
+ true,
+ );
+
+ const shiftOccurrences: ShiftOccurence[] = [];
+
+ for (const date of dates) {
+ const start = DateTime.fromJSDate(date);
+
+ shiftOccurrences.push({
+ shift: shift,
+ start: start,
+ end: start.plus({ minute: shift.duration }),
+ });
+ }
+
+ return shiftOccurrences;
+};
+
+export const shiftToRRule = (shift: CollectivoShift): RRule => {
+ return new RRule({
+ freq: RRule.DAILY,
+ interval: shift.shifts_repeats_every,
+ dtstart: luxonDateTimeToRruleDatetime(DateTime.fromISO(shift.shifts_from)),
+ until: shift.shifts_to
+ ? luxonDateTimeToRruleDatetime(DateTime.fromISO(shift.shifts_to))
+ : null,
+ });
+};
+
+export const luxonDateTimeToRruleDatetime = (
+ luxonDateTime: DateTime,
+): datetime => {
+ return datetime(
+ luxonDateTime.year,
+ luxonDateTime.month,
+ luxonDateTime.day,
+ luxonDateTime.hour,
+ luxonDateTime.minute,
);
};
diff --git a/collectivo/extensions/shifts/index.d.ts b/collectivo/extensions/shifts/index.d.ts
index 0c540881..2f53521d 100644
--- a/collectivo/extensions/shifts/index.d.ts
+++ b/collectivo/extensions/shifts/index.d.ts
@@ -9,6 +9,8 @@ declare global {
shifts_name: string;
shifts_from: string;
shifts_to: string;
+ shifts_duration: number;
+ shifts_repeats_every: number;
}
}
diff --git a/collectivo/extensions/shifts/package.json b/collectivo/extensions/shifts/package.json
index c82722ca..15cc4361 100644
--- a/collectivo/extensions/shifts/package.json
+++ b/collectivo/extensions/shifts/package.json
@@ -21,7 +21,8 @@
},
"dependencies": {
"@collectivo/collectivo": "workspace:*",
- "luxon": "^3.4.4"
+ "luxon": "^3.4.4",
+ "rrule": "^2.8.1"
},
"devDependencies": {
"@nuxt/devtools": "latest",
diff --git a/collectivo/extensions/shifts/pages/shifts/shift_calendar.vue b/collectivo/extensions/shifts/pages/shifts/shift_calendar.vue
index e0c08ff4..b80247f1 100644
--- a/collectivo/extensions/shifts/pages/shifts/shift_calendar.vue
+++ b/collectivo/extensions/shifts/pages/shifts/shift_calendar.vue
@@ -1,22 +1,24 @@
+
+
+
+
+
+ {{ shiftOccurrence.start }}
+
+
+
+
diff --git a/collectivo/extensions/shifts/composables/shifts.ts b/collectivo/extensions/shifts/composables/shifts.ts
index 0dfca324..116648e6 100644
--- a/collectivo/extensions/shifts/composables/shifts.ts
+++ b/collectivo/extensions/shifts/composables/shifts.ts
@@ -1,18 +1,11 @@
import { readItems } from "@directus/sdk";
-import type { CollectivoShift } from "~/index";
import { DateTime } from "luxon";
import { datetime, RRule } from "rrule";
-export interface ShiftOccurence {
- shift: CollectivoShift;
- start: DateTime;
- end: DateTime;
-}
-
-export const getAllShiftOccurences = async (
+export const getAllShiftOccurrences = async (
from: DateTime,
to: DateTime,
-): Promise => {
+): Promise => {
const directus = useDirectus();
const shifts: CollectivoShift[] = await directus.request(
@@ -36,14 +29,14 @@ export const getOccurrencesForShift = (
shift: CollectivoShift,
from: DateTime,
to: DateTime,
-): ShiftOccurence[] => {
- const dates: datetime[] = shiftToRRule(shift).between(
+): ShiftOccurrence[] => {
+ const dates: Date[] = shiftToRRule(shift).between(
luxonDateTimeToRruleDatetime(from),
luxonDateTimeToRruleDatetime(to),
true,
);
- const shiftOccurrences: ShiftOccurence[] = [];
+ const shiftOccurrences: ShiftOccurrence[] = [];
for (const date of dates) {
const start = DateTime.fromJSDate(date);
@@ -51,7 +44,7 @@ export const getOccurrencesForShift = (
shiftOccurrences.push({
shift: shift,
start: start,
- end: start.plus({ minute: shift.duration }),
+ end: start.plus({ minute: shift.shifts_duration }),
});
}
@@ -69,9 +62,7 @@ export const shiftToRRule = (shift: CollectivoShift): RRule => {
});
};
-export const luxonDateTimeToRruleDatetime = (
- luxonDateTime: DateTime,
-): datetime => {
+export const luxonDateTimeToRruleDatetime = (luxonDateTime: DateTime): Date => {
return datetime(
luxonDateTime.year,
luxonDateTime.month,
diff --git a/collectivo/extensions/shifts/index.d.ts b/collectivo/extensions/shifts/index.d.ts
index 2f53521d..8b88e7a5 100644
--- a/collectivo/extensions/shifts/index.d.ts
+++ b/collectivo/extensions/shifts/index.d.ts
@@ -1,17 +1,20 @@
-declare global {
- // Database schema
- interface CollectivoShiftsSchema {
- collectivo_shifts: CollectivoShift[];
- }
+import { DateTime } from "luxon";
+declare global {
interface CollectivoShift {
- id: string;
+ id?: string;
shifts_name: string;
shifts_from: string;
- shifts_to: string;
+ shifts_to?: string;
shifts_duration: number;
shifts_repeats_every: number;
}
+
+ interface ShiftOccurrence {
+ shift: CollectivoShift;
+ start: DateTime;
+ end: DateTime;
+ }
}
// Types for input of app.config.ts
diff --git a/collectivo/extensions/shifts/pages/shifts/shift_calendar.vue b/collectivo/extensions/shifts/pages/shifts/shift_calendar.vue
index b80247f1..223906ca 100644
--- a/collectivo/extensions/shifts/pages/shifts/shift_calendar.vue
+++ b/collectivo/extensions/shifts/pages/shifts/shift_calendar.vue
@@ -1,19 +1,16 @@
+
+
+
+
+ Assignment
+
+
+ starts from {{ from.toLocaleString(DateTime.DATE_SHORT) }}
+
+ ends {{ to.toLocaleString(DateTime.DATE_SHORT) }}
+ is permanent
+
+
+
+
diff --git a/collectivo/extensions/shifts/components/shift_card.vue b/collectivo/extensions/shifts/components/OccurrenceCard.vue
similarity index 100%
rename from collectivo/extensions/shifts/components/shift_card.vue
rename to collectivo/extensions/shifts/components/OccurrenceCard.vue
diff --git a/collectivo/extensions/shifts/composables/shifts.ts b/collectivo/extensions/shifts/composables/shifts.ts
index 116648e6..23f89f39 100644
--- a/collectivo/extensions/shifts/composables/shifts.ts
+++ b/collectivo/extensions/shifts/composables/shifts.ts
@@ -24,6 +24,13 @@ export const getAllShiftOccurrences = async (
return occurrences;
};
+export const getNextOccurence = (shift: CollectivoShift): ShiftOccurrence => {
+ const date = shiftToRRule(shift).after(
+ luxonDateTimeToRruleDatetime(DateTime.now()),
+ );
+
+ return rruleDateToShiftOccurence(shift, date);
+};
export const getOccurrencesForShift = (
shift: CollectivoShift,
@@ -39,18 +46,25 @@ export const getOccurrencesForShift = (
const shiftOccurrences: ShiftOccurrence[] = [];
for (const date of dates) {
- const start = DateTime.fromJSDate(date);
-
- shiftOccurrences.push({
- shift: shift,
- start: start,
- end: start.plus({ minute: shift.shifts_duration }),
- });
+ shiftOccurrences.push(rruleDateToShiftOccurence(shift, date));
}
return shiftOccurrences;
};
+const rruleDateToShiftOccurence = (
+ shift: CollectivoShift,
+ date: Date,
+): ShiftOccurrence => {
+ const start = DateTime.fromJSDate(date);
+
+ return {
+ shift: shift,
+ start: start,
+ end: start.plus({ minute: shift.shifts_duration }),
+ };
+};
+
export const shiftToRRule = (shift: CollectivoShift): RRule => {
return new RRule({
freq: RRule.DAILY,
diff --git a/collectivo/extensions/shifts/index.d.ts b/collectivo/extensions/shifts/index.d.ts
index 53085146..758927a2 100644
--- a/collectivo/extensions/shifts/index.d.ts
+++ b/collectivo/extensions/shifts/index.d.ts
@@ -10,18 +10,31 @@ declare global {
shifts_repeats_every: number;
}
+ interface CollectivoSlot {
+ id: string;
+ shifts_name: string;
+ shifts_skills: CollectivoSkill[];
+ shifts_shift: CollectivoShift;
+ }
+
+ interface CollectivoSkill {
+ id: string;
+ shifts_name: string;
+ }
+
+ interface CollectivoAssignment {
+ id: string;
+ shifts_from: string;
+ shifts_to?: string;
+ shifts_slot: CollectivoSlot;
+ shifts_user: CollectivoUser;
+ }
+
interface ShiftOccurrence {
shift: CollectivoShift;
start: DateTime;
end: DateTime;
}
-
- enum ShiftUserType {
- TypeNotChosen = "TYPE_NOT_CHOSEN",
- Regular = "REGULAR",
- Jumper = "JUMPER",
- NotInShiftSystem = "NOT_IN_SHIFT_SYSTEM",
- }
}
// Types for input of app.config.ts
diff --git a/collectivo/extensions/shifts/pages/shifts/my_shifts.vue b/collectivo/extensions/shifts/pages/shifts/my_shifts.vue
index 6a6f15d9..e9fb66f1 100644
--- a/collectivo/extensions/shifts/pages/shifts/my_shifts.vue
+++ b/collectivo/extensions/shifts/pages/shifts/my_shifts.vue
@@ -1,15 +1,16 @@
@@ -25,19 +26,13 @@ const assignments = await directus.request(
- My upcoming shifts
- No upcoming shift
- My assignments
+ No assignments
+
-
-
- Assigned to {{ assignment.shifts_slot.shifts_name }} on
- {{ assignment.shifts_slot.shifts_shift.shifts_start_datetime }}
-
-
-
+
diff --git a/collectivo/extensions/shifts/pages/shifts/shift_calendar.vue b/collectivo/extensions/shifts/pages/shifts/shift_calendar.vue
index 223906ca..cdc50e8d 100644
--- a/collectivo/extensions/shifts/pages/shifts/shift_calendar.vue
+++ b/collectivo/extensions/shifts/pages/shifts/shift_calendar.vue
@@ -45,7 +45,7 @@ watch(to, updateShifts);
No shifts between {{ from }} and {{ to }}
- {
+import { ShiftUserType } from "~/server/utils/ShiftUserTypes";
+
+export default defineNuxtPlugin({
+ name: "shifts-setup",
+ setup() {
+ addMenuItems();
+ addProfileFields();
+ },
+});
+
+function addMenuItems() {
const menu = useCollectivoMenus();
menu.value.main.push({
@@ -14,4 +24,32 @@ export default defineNuxtPlugin(() => {
to: "/shifts/shift_calendar",
order: 95,
});
-});
+}
+
+function addProfileFields() {
+ const user = useCollectivoUser();
+
+ const shiftUserTypeChoices = [];
+
+ for (const type of Object.values(ShiftUserType)) {
+ shiftUserTypeChoices.push({ value: type, label: type });
+ }
+
+ const profileInputs: CollectivoFormField[] = [
+ {
+ type: "section",
+ order: 800,
+ title: "Shifts",
+ },
+ {
+ type: "select",
+ key: "shifts_user_type",
+ label: "Shift user type",
+ default: ShiftUserType.TypeNotChosen,
+ order: 810,
+ choices: shiftUserTypeChoices,
+ },
+ ];
+
+ user.value.fields.push(...profileInputs);
+}
diff --git a/collectivo/extensions/shifts/server/schemas/001_schema_shifts.ts b/collectivo/extensions/shifts/server/schemas/001_schema_shifts.ts
index de11fbde..2c7d0bef 100644
--- a/collectivo/extensions/shifts/server/schemas/001_schema_shifts.ts
+++ b/collectivo/extensions/shifts/server/schemas/001_schema_shifts.ts
@@ -1,5 +1,7 @@
// This function creates an empty schema for version 0.0.1 of the shifts extension
// A schema can be used to declaratively define the structure of the database
+import { ShiftUserType } from "~/server/utils/ShiftUserTypes";
+
const schema = initSchema("shifts", "0.0.1");
export default schema;
diff --git a/collectivo/extensions/shifts/server/utils/ShiftUserTypes.ts b/collectivo/extensions/shifts/server/utils/ShiftUserTypes.ts
new file mode 100644
index 00000000..4b93a9db
--- /dev/null
+++ b/collectivo/extensions/shifts/server/utils/ShiftUserTypes.ts
@@ -0,0 +1,6 @@
+export enum ShiftUserType {
+ TypeNotChosen = "TYPE_NOT_CHOSEN",
+ Regular = "REGULAR",
+ Jumper = "JUMPER",
+ NotInShiftSystem = "NOT_IN_SHIFT_SYSTEM",
+}
From cb68350425b6260f7f1e113e1b67cba0b0cd6b0e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Th=C3=A9ophile=20MADET?=
Date: Mon, 15 Jan 2024 16:05:38 +0100
Subject: [PATCH 16/86] Improved assignment display.
---
.../shifts/components/AssignmentCard.vue | 37 +++++++++++++++----
.../extensions/shifts/composables/shifts.ts | 29 +++++++++++++++
.../shifts/pages/shifts/my_shifts.vue | 37 +++++++++++++++++--
3 files changed, 92 insertions(+), 11 deletions(-)
diff --git a/collectivo/extensions/shifts/components/AssignmentCard.vue b/collectivo/extensions/shifts/components/AssignmentCard.vue
index 3c18ff8f..69ff1be9 100644
--- a/collectivo/extensions/shifts/components/AssignmentCard.vue
+++ b/collectivo/extensions/shifts/components/AssignmentCard.vue
@@ -26,14 +26,35 @@ const nextOccurrence = getNextOccurence(
)} to ${nextOccurrence.end.toLocaleString(DateTime.TIME_SIMPLE)}`"
>
- Assignment
-
-
- starts from {{ from.toLocaleString(DateTime.DATE_SHORT) }}
-
- ends {{ to.toLocaleString(DateTime.DATE_SHORT) }}
- is permanent
-
+
+ Assignment currently active :
+ {{ isAssignmentActive(shiftAssignment) }}
+ (permanent assignment
+ permanent assignment starting from
+ {{ from.toLocaleString(DateTime.DATE_SHORT) }}
+ assigned until {{ to.toLocaleString(DateTime.DATE_SHORT) }}
+ assigned from {{ from.toLocaleString(DateTime.DATE_SHORT) }} to
+ {{ to.toLocaleString(DateTime.DATE_SHORT) }} )
+
+
diff --git a/collectivo/extensions/shifts/composables/shifts.ts b/collectivo/extensions/shifts/composables/shifts.ts
index 23f89f39..160cc3af 100644
--- a/collectivo/extensions/shifts/composables/shifts.ts
+++ b/collectivo/extensions/shifts/composables/shifts.ts
@@ -85,3 +85,32 @@ export const luxonDateTimeToRruleDatetime = (luxonDateTime: DateTime): Date => {
luxonDateTime.minute,
);
};
+
+export const isAssignmentActive = (
+ assignment: CollectivoAssignment,
+ atDate?: DateTime,
+): boolean => {
+ if (!atDate) {
+ atDate = DateTime.now();
+ }
+
+ const from = DateTime.fromISO(assignment.shifts_from);
+
+ if (from > atDate) {
+ return false;
+ }
+
+ const to = assignment.shifts_to
+ ? DateTime.fromISO(assignment.shifts_to)
+ : null;
+
+ return !(to && to < atDate);
+};
+
+export const isNextOccurrenceWithinAssignment = (
+ assignment: CollectivoAssignment,
+): boolean => {
+ const nextOccurrence = getNextOccurence(assignment.shifts_slot.shifts_shift);
+
+ return isAssignmentActive(assignment, nextOccurrence.start);
+};
diff --git a/collectivo/extensions/shifts/pages/shifts/my_shifts.vue b/collectivo/extensions/shifts/pages/shifts/my_shifts.vue
index e9fb66f1..15747a55 100644
--- a/collectivo/extensions/shifts/pages/shifts/my_shifts.vue
+++ b/collectivo/extensions/shifts/pages/shifts/my_shifts.vue
@@ -1,6 +1,8 @@
@@ -26,10 +47,20 @@ const assignments: CollectivoAssignment[] = await directus.request(
- My assignments
- No assignments
+ My current assignments
+ No current assignments
+
+
+
+
+
+ My past assignments
From aaa061dea6ddf673e193e2dffb5c9b6b4165b013 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Th=C3=A9ophile=20MADET?=
Date: Mon, 15 Jan 2024 16:49:24 +0100
Subject: [PATCH 17/86] WIP user <-> skills
---
collectivo/extensions/shifts/pages/shifts/my_shifts.vue | 2 +-
.../extensions/shifts/server/schemas/001_schema_shifts.ts | 6 ++++--
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/collectivo/extensions/shifts/pages/shifts/my_shifts.vue b/collectivo/extensions/shifts/pages/shifts/my_shifts.vue
index 15747a55..17ca513a 100644
--- a/collectivo/extensions/shifts/pages/shifts/my_shifts.vue
+++ b/collectivo/extensions/shifts/pages/shifts/my_shifts.vue
@@ -41,7 +41,7 @@ for (const assignment of assignments) {
Status
- My type : TODO
+ My type : {{ user.data["shifts_user_type"] }}
diff --git a/collectivo/extensions/shifts/server/schemas/001_schema_shifts.ts b/collectivo/extensions/shifts/server/schemas/001_schema_shifts.ts
index 2c7d0bef..79e88fae 100644
--- a/collectivo/extensions/shifts/server/schemas/001_schema_shifts.ts
+++ b/collectivo/extensions/shifts/server/schemas/001_schema_shifts.ts
@@ -153,7 +153,9 @@ schema.createO2MRelation(
"shifts_user",
{
collectionManyFieldType: "uuid",
- template:
- "{{shifts_shifts.shifts_name}} {{shifts_shifts.shifts_start_datetime}}",
},
);
+
+schema.createM2MRelation("shifts_skills", "directus_users", {
+ m2mFieldType2: "uuid",
+});
From 870468fba4cff9f640b5b72615e6fa66e1799006 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Th=C3=A9ophile=20Madet?=
Date: Tue, 16 Jan 2024 11:45:32 +0100
Subject: [PATCH 18/86] Display skills on the shifts page.
---
.../extensions/shifts/pages/shifts/my_shifts.vue | 15 +++++++++++++++
.../extensions/shifts/server/examples/examples.ts | 11 +++++++++--
.../shifts/server/schemas/001_schema_shifts.ts | 2 +-
3 files changed, 25 insertions(+), 3 deletions(-)
diff --git a/collectivo/extensions/shifts/pages/shifts/my_shifts.vue b/collectivo/extensions/shifts/pages/shifts/my_shifts.vue
index 17ca513a..1c025af4 100644
--- a/collectivo/extensions/shifts/pages/shifts/my_shifts.vue
+++ b/collectivo/extensions/shifts/pages/shifts/my_shifts.vue
@@ -22,6 +22,13 @@ assignments.sort((a, b) => {
return nextA.start.toMillis() - nextB.start.toMillis();
});
+const skillsUserLinks = await directus.request(
+ readItems("shifts_skills_directus_users", {
+ filter: { directus_users_id: { _eq: user.value.data?.id } },
+ fields: "*.*",
+ }),
+);
+
const activeAndFutureAssignments: CollectivoAssignment[] = [];
const pastAssignments: CollectivoAssignment[] = [];
@@ -42,6 +49,14 @@ for (const assignment of assignments) {
My type : {{ user.data["shifts_user_type"] }}
+
+ My skills:
+ None
+
+ ,
+ {{ link.shifts_skills_id.shifts_name }}
+
+
diff --git a/collectivo/extensions/shifts/server/examples/examples.ts b/collectivo/extensions/shifts/server/examples/examples.ts
index 5f86fa8a..50140327 100644
--- a/collectivo/extensions/shifts/server/examples/examples.ts
+++ b/collectivo/extensions/shifts/server/examples/examples.ts
@@ -30,6 +30,7 @@ async function cleanShiftsData() {
"shifts_slots",
"shifts_skills",
"shifts_assignments",
+ "shifts_skills_directus_users",
];
for (const schema of schemas) {
@@ -99,12 +100,18 @@ async function createSlots() {
async function createSkills() {
const directus = await useDirectusAdmin();
- const skill = await directus.request(
+ const cashierSkill = await directus.request(
createItem("shifts_skills", {
shifts_name: "Cashier",
}),
);
+ await directus.request(
+ createItem("shifts_skills", {
+ shifts_name: "First aid",
+ }),
+ );
+
const slots = await directus.request(
readItems("shifts_slots", {
fields: ["id"],
@@ -116,7 +123,7 @@ async function createSkills() {
for (const slot of slots) {
requests.push({
- shifts_skills_id: skill["id"],
+ shifts_skills_id: cashierSkill["id"],
shifts_slots_id: slot["id"],
});
}
diff --git a/collectivo/extensions/shifts/server/schemas/001_schema_shifts.ts b/collectivo/extensions/shifts/server/schemas/001_schema_shifts.ts
index 79e88fae..6ff14943 100644
--- a/collectivo/extensions/shifts/server/schemas/001_schema_shifts.ts
+++ b/collectivo/extensions/shifts/server/schemas/001_schema_shifts.ts
@@ -1,6 +1,6 @@
// This function creates an empty schema for version 0.0.1 of the shifts extension
// A schema can be used to declaratively define the structure of the database
-import { ShiftUserType } from "~/server/utils/ShiftUserTypes";
+import { ShiftUserType } from "../utils/ShiftUserTypes";
const schema = initSchema("shifts", "0.0.1");
From fd01131e6135e7d91d1be6421fc4ca4a947e9951 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Th=C3=A9ophile=20Madet?=
Date: Tue, 16 Jan 2024 11:54:07 +0100
Subject: [PATCH 19/86] Fixed shift calendar.
---
.../extensions/shifts/components/OccurrenceCard.vue | 9 +++++----
.../extensions/shifts/pages/shifts/shift_calendar.vue | 2 +-
2 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/collectivo/extensions/shifts/components/OccurrenceCard.vue b/collectivo/extensions/shifts/components/OccurrenceCard.vue
index f1c4cd0a..96e5aaa7 100644
--- a/collectivo/extensions/shifts/components/OccurrenceCard.vue
+++ b/collectivo/extensions/shifts/components/OccurrenceCard.vue
@@ -4,7 +4,10 @@ import { defineProps, toRefs } from "vue";
const props = defineProps(["shiftOccurrence"]);
const { shiftOccurrence } = toRefs(props);
-const date = shiftOccurrence.value.start.toLocaleString(DateTime.DATE_SHORT);
+
+const date = shiftOccurrence.value.start.toLocaleString(
+ DateTime.DATE_MED_WITH_WEEKDAY,
+);
const start_time = shiftOccurrence.value.start.toLocaleString(
DateTime.TIME_SIMPLE,
@@ -18,9 +21,7 @@ const end_time = shiftOccurrence.value.end.toLocaleString(DateTime.TIME_SIMPLE);
:title="`${shiftOccurrence.shift.shifts_name} on ${date} from ${start_time} to ${end_time}`"
>
-
- {{ shiftOccurrence.start }}
-
+ WIP
diff --git a/collectivo/extensions/shifts/pages/shifts/shift_calendar.vue b/collectivo/extensions/shifts/pages/shifts/shift_calendar.vue
index cdc50e8d..9fe5c519 100644
--- a/collectivo/extensions/shifts/pages/shifts/shift_calendar.vue
+++ b/collectivo/extensions/shifts/pages/shifts/shift_calendar.vue
@@ -45,7 +45,7 @@ watch(to, updateShifts);
No shifts between {{ from }} and {{ to }}
-
Date: Tue, 16 Jan 2024 12:51:55 +0100
Subject: [PATCH 20/86] Typing improvements.
---
.../shifts/components/AssignmentCard.vue | 23 +++++++++++++------
.../shifts/components/OccurrenceCard.vue | 18 +++++++++------
.../extensions/shifts/composables/shifts.ts | 1 +
.../extensions/shifts/composables/types.ts | 7 ++++++
collectivo/extensions/shifts/index.d.ts | 8 -------
5 files changed, 35 insertions(+), 22 deletions(-)
create mode 100644 collectivo/extensions/shifts/composables/types.ts
diff --git a/collectivo/extensions/shifts/components/AssignmentCard.vue b/collectivo/extensions/shifts/components/AssignmentCard.vue
index 69ff1be9..bf71b739 100644
--- a/collectivo/extensions/shifts/components/AssignmentCard.vue
+++ b/collectivo/extensions/shifts/components/AssignmentCard.vue
@@ -1,17 +1,26 @@
diff --git a/collectivo/extensions/shifts/components/OccurrenceCard.vue b/collectivo/extensions/shifts/components/OccurrenceCard.vue
index 96e5aaa7..d1c0cc9b 100644
--- a/collectivo/extensions/shifts/components/OccurrenceCard.vue
+++ b/collectivo/extensions/shifts/components/OccurrenceCard.vue
@@ -1,24 +1,28 @@
WIP
diff --git a/collectivo/extensions/shifts/composables/shifts.ts b/collectivo/extensions/shifts/composables/shifts.ts
index 160cc3af..1d513f6a 100644
--- a/collectivo/extensions/shifts/composables/shifts.ts
+++ b/collectivo/extensions/shifts/composables/shifts.ts
@@ -1,6 +1,7 @@
import { readItems } from "@directus/sdk";
import { DateTime } from "luxon";
import { datetime, RRule } from "rrule";
+import type { ShiftOccurrence } from "~/composables/types";
export const getAllShiftOccurrences = async (
from: DateTime,
diff --git a/collectivo/extensions/shifts/composables/types.ts b/collectivo/extensions/shifts/composables/types.ts
new file mode 100644
index 00000000..26277924
--- /dev/null
+++ b/collectivo/extensions/shifts/composables/types.ts
@@ -0,0 +1,7 @@
+import { DateTime } from "luxon";
+
+export interface ShiftOccurrence {
+ shift: CollectivoShift;
+ start: DateTime;
+ end: DateTime;
+}
diff --git a/collectivo/extensions/shifts/index.d.ts b/collectivo/extensions/shifts/index.d.ts
index 758927a2..363ce2e2 100644
--- a/collectivo/extensions/shifts/index.d.ts
+++ b/collectivo/extensions/shifts/index.d.ts
@@ -1,5 +1,3 @@
-import { DateTime } from "luxon";
-
declare global {
interface CollectivoShift {
id?: string;
@@ -29,12 +27,6 @@ declare global {
shifts_slot: CollectivoSlot;
shifts_user: CollectivoUser;
}
-
- interface ShiftOccurrence {
- shift: CollectivoShift;
- start: DateTime;
- end: DateTime;
- }
}
// Types for input of app.config.ts
From 5c4b18c94f786373b748c8be2dfd1826a0829d24 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Th=C3=A9ophile=20MADET?=
Date: Thu, 18 Jan 2024 15:14:48 +0100
Subject: [PATCH 21/86] Added shift logs and score calculation.
---
.../shifts/composables/shift_logs.ts | 40 +++++++++++
collectivo/extensions/shifts/index.d.ts | 10 +++
.../shifts/pages/shifts/my_shifts.vue | 6 ++
collectivo/extensions/shifts/plugins/setup.ts | 2 +-
.../server/schemas/001_schema_shifts.ts | 67 ++++++++++++++++---
.../shifts/server/utils/ShiftLogType.ts | 5 ++
.../{ShiftUserTypes.ts => ShiftUserType.ts} | 0
7 files changed, 119 insertions(+), 11 deletions(-)
create mode 100644 collectivo/extensions/shifts/composables/shift_logs.ts
create mode 100644 collectivo/extensions/shifts/server/utils/ShiftLogType.ts
rename collectivo/extensions/shifts/server/utils/{ShiftUserTypes.ts => ShiftUserType.ts} (100%)
diff --git a/collectivo/extensions/shifts/composables/shift_logs.ts b/collectivo/extensions/shifts/composables/shift_logs.ts
new file mode 100644
index 00000000..eb0b6a03
--- /dev/null
+++ b/collectivo/extensions/shifts/composables/shift_logs.ts
@@ -0,0 +1,40 @@
+import type { DateTime } from "luxon";
+import { readItems } from "@directus/sdk";
+import { ShiftLogType } from "~/server/utils/ShiftLogType";
+
+export const getUserScore = async (
+ user: CollectivoUser,
+ at?: DateTime,
+): Promise => {
+ const directus = useDirectus();
+
+ const query = {
+ filter: { shifts_user: { _eq: user.id } },
+ fields: "shifts_type",
+ };
+
+ if (at) {
+ query.filter["shifts_datetime"] = {
+ _lte: at.toString(),
+ };
+ }
+
+ const logs: CollectivoLog[] = await directus.request(
+ readItems("shifts_logs", query),
+ );
+
+ let score = 0;
+
+ for (const log of logs) {
+ switch (log.shifts_type) {
+ case ShiftLogType.ATTENDED:
+ score += 1;
+ break;
+ case ShiftLogType.MISSED:
+ score -= 2;
+ break;
+ }
+ }
+
+ return score;
+};
diff --git a/collectivo/extensions/shifts/index.d.ts b/collectivo/extensions/shifts/index.d.ts
index 363ce2e2..040dc462 100644
--- a/collectivo/extensions/shifts/index.d.ts
+++ b/collectivo/extensions/shifts/index.d.ts
@@ -1,3 +1,5 @@
+import type { ShiftLogType } from "~/server/utils/ShiftLogType";
+
declare global {
interface CollectivoShift {
id?: string;
@@ -27,6 +29,14 @@ declare global {
shifts_slot: CollectivoSlot;
shifts_user: CollectivoUser;
}
+
+ interface CollectivoLog {
+ id: string;
+ shifts_type: ShiftLogType;
+ shifts_datetime: string;
+ shifts_user: CollectivoUser;
+ shifts_assignment: CollectivoAssignment;
+ }
}
// Types for input of app.config.ts
diff --git a/collectivo/extensions/shifts/pages/shifts/my_shifts.vue b/collectivo/extensions/shifts/pages/shifts/my_shifts.vue
index 1c025af4..0d15a48a 100644
--- a/collectivo/extensions/shifts/pages/shifts/my_shifts.vue
+++ b/collectivo/extensions/shifts/pages/shifts/my_shifts.vue
@@ -3,6 +3,7 @@ import { readItems } from "@directus/sdk";
import AssignmentCard from "~/components/AssignmentCard.vue";
import { getNextOccurence, isAssignmentActive } from "~/composables/shifts";
import { DateTime } from "luxon";
+import { getUserScore } from "../../composables/shift_logs";
setCollectivoTitle("My shifts");
const directus = useDirectus();
@@ -41,6 +42,8 @@ for (const assignment of assignments) {
pastAssignments.push(assignment);
}
}
+
+const score = await getUserScore(user.value.data!, DateTime.now());
@@ -57,6 +60,9 @@ for (const assignment of assignments) {
{{ link.shifts_skills_id.shifts_name }}
+
+ My score: {{ score }}
+
diff --git a/collectivo/extensions/shifts/plugins/setup.ts b/collectivo/extensions/shifts/plugins/setup.ts
index 2350685c..e2d75797 100644
--- a/collectivo/extensions/shifts/plugins/setup.ts
+++ b/collectivo/extensions/shifts/plugins/setup.ts
@@ -1,4 +1,4 @@
-import { ShiftUserType } from "~/server/utils/ShiftUserTypes";
+import { ShiftUserType } from "~/server/utils/ShiftUserType";
export default defineNuxtPlugin({
name: "shifts-setup",
diff --git a/collectivo/extensions/shifts/server/schemas/001_schema_shifts.ts b/collectivo/extensions/shifts/server/schemas/001_schema_shifts.ts
index 6ff14943..914def97 100644
--- a/collectivo/extensions/shifts/server/schemas/001_schema_shifts.ts
+++ b/collectivo/extensions/shifts/server/schemas/001_schema_shifts.ts
@@ -1,11 +1,24 @@
// This function creates an empty schema for version 0.0.1 of the shifts extension
// A schema can be used to declaratively define the structure of the database
-import { ShiftUserType } from "../utils/ShiftUserTypes";
+import { ShiftUserType } from "../utils/ShiftUserType";
+import { ShiftLogType } from "../utils/ShiftLogType";
const schema = initSchema("shifts", "0.0.1");
export default schema;
+const shiftUserTypeDropdownChoices = [];
+
+for (const type of Object.values(ShiftUserType)) {
+ shiftUserTypeDropdownChoices.push({ text: type, value: type });
+}
+
+const shiftLogTypeDropdownChoices = [];
+
+for (const type of Object.values(ShiftLogType)) {
+ shiftLogTypeDropdownChoices.push({ text: type, value: type });
+}
+
schema.collections = [
{
collection: "shifts_shifts",
@@ -43,6 +56,15 @@ schema.collections = [
},
meta: {},
},
+ {
+ collection: "shifts_logs",
+ schema: {
+ schema: "schema",
+ name: "schema",
+ comment: null,
+ },
+ meta: {},
+ },
];
schema.fields = [
@@ -128,25 +150,50 @@ schema.fields = [
collection: "directus_users",
field: "shifts_user_type",
type: "string",
+ schema: { is_nullable: false, default_value: ShiftUserType.TypeNotChosen },
meta: {
group: "shifts_group",
- conditions: [
- {
- rule: {
- shifts_user_type: {
- _in: Object.values(ShiftUserType),
- },
- },
- },
- ],
+ interface: "select-dropdown",
+ options: {
+ choices: shiftUserTypeDropdownChoices,
+ },
},
},
+ {
+ collection: "shifts_logs",
+ field: "shifts_type",
+ type: "string",
+ schema: { is_nullable: false },
+ meta: {
+ interface: "select-dropdown",
+ options: {
+ choices: shiftLogTypeDropdownChoices,
+ },
+ },
+ },
+ {
+ collection: "shifts_logs",
+ field: "shifts_datetime",
+ type: "dateTime",
+ schema: { is_nullable: false },
+ meta: {},
+ },
];
schema.createO2MRelation("shifts_slots", "shifts_shifts", "shifts_shift");
schema.createM2MRelation("shifts_skills", "shifts_slots");
schema.createO2MRelation("shifts_assignments", "shifts_slots", "shifts_slot");
+schema.createO2MRelation("shifts_logs", "directus_users", "shifts_user", {
+ collectionManyFieldType: "uuid",
+});
+
+schema.createO2MRelation(
+ "shifts_logs",
+ "shifts_assignments",
+ "shifts_assignment",
+);
+
schema.createO2MRelation(
"shifts_assignments",
"directus_users",
diff --git a/collectivo/extensions/shifts/server/utils/ShiftLogType.ts b/collectivo/extensions/shifts/server/utils/ShiftLogType.ts
new file mode 100644
index 00000000..df7cb6b7
--- /dev/null
+++ b/collectivo/extensions/shifts/server/utils/ShiftLogType.ts
@@ -0,0 +1,5 @@
+export enum ShiftLogType {
+ ATTENDED = "attended",
+ MISSED = "missed",
+ CANCELLED = "cancelled",
+}
diff --git a/collectivo/extensions/shifts/server/utils/ShiftUserTypes.ts b/collectivo/extensions/shifts/server/utils/ShiftUserType.ts
similarity index 100%
rename from collectivo/extensions/shifts/server/utils/ShiftUserTypes.ts
rename to collectivo/extensions/shifts/server/utils/ShiftUserType.ts
From 9e0f8af7d90aa5869d9582d6364cf0a3ce33b39f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Th=C3=A9ophile=20MADET?=
Date: Thu, 18 Jan 2024 15:27:06 +0100
Subject: [PATCH 22/86] Show last logs on the my shifts page.
---
.../shifts/composables/shift_logs.ts | 39 ++++++++++++-------
.../shifts/pages/shifts/my_shifts.vue | 23 ++++++++++-
2 files changed, 46 insertions(+), 16 deletions(-)
diff --git a/collectivo/extensions/shifts/composables/shift_logs.ts b/collectivo/extensions/shifts/composables/shift_logs.ts
index eb0b6a03..429ac515 100644
--- a/collectivo/extensions/shifts/composables/shift_logs.ts
+++ b/collectivo/extensions/shifts/composables/shift_logs.ts
@@ -6,11 +6,33 @@ export const getUserScore = async (
user: CollectivoUser,
at?: DateTime,
): Promise => {
+ const logs: CollectivoLog[] = await getUserLogs(user, at);
+
+ let score = 0;
+
+ for (const log of logs) {
+ switch (log.shifts_type) {
+ case ShiftLogType.ATTENDED:
+ score += 1;
+ break;
+ case ShiftLogType.MISSED:
+ score -= 2;
+ break;
+ }
+ }
+
+ return score;
+};
+
+export const getUserLogs = async (
+ user: CollectivoUser,
+ at?: DateTime,
+): Promise => {
const directus = useDirectus();
const query = {
filter: { shifts_user: { _eq: user.id } },
- fields: "shifts_type",
+ fields: "*",
};
if (at) {
@@ -23,18 +45,5 @@ export const getUserScore = async (
readItems("shifts_logs", query),
);
- let score = 0;
-
- for (const log of logs) {
- switch (log.shifts_type) {
- case ShiftLogType.ATTENDED:
- score += 1;
- break;
- case ShiftLogType.MISSED:
- score -= 2;
- break;
- }
- }
-
- return score;
+ return logs;
};
diff --git a/collectivo/extensions/shifts/pages/shifts/my_shifts.vue b/collectivo/extensions/shifts/pages/shifts/my_shifts.vue
index 0d15a48a..31be6fec 100644
--- a/collectivo/extensions/shifts/pages/shifts/my_shifts.vue
+++ b/collectivo/extensions/shifts/pages/shifts/my_shifts.vue
@@ -3,7 +3,8 @@ import { readItems } from "@directus/sdk";
import AssignmentCard from "~/components/AssignmentCard.vue";
import { getNextOccurence, isAssignmentActive } from "~/composables/shifts";
import { DateTime } from "luxon";
-import { getUserScore } from "../../composables/shift_logs";
+import { getUserLogs, getUserScore } from "~/composables/shift_logs";
+import { ShiftLogType } from "~/server/utils/ShiftLogType";
setCollectivoTitle("My shifts");
const directus = useDirectus();
@@ -44,6 +45,7 @@ for (const assignment of assignments) {
}
const score = await getUserScore(user.value.data!, DateTime.now());
+const logs = await getUserLogs(user.value.data!, DateTime.now());
@@ -87,4 +89,23 @@ const score = await getUserScore(user.value.data!, DateTime.now());
>
+
+
+ Last score updates
+
+
+
+ +1
+ -2
+
+
+ ({{
+ DateTime.fromISO(log.shifts_datetime).toLocaleString(
+ DateTime.DATETIME_MED_WITH_WEEKDAY,
+ )
+ }})
+
+
+
From 01a75817a8a339cbecc5cb8a6fc68476c7796327 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Th=C3=A9ophile=20MADET?=
Date: Thu, 18 Jan 2024 18:37:14 +0100
Subject: [PATCH 23/86] WIP calendar view with FullCalendar.
---
.../extensions/shifts/components/Calendar.vue | 104 +++++++++++++++
.../shifts/components/CalendarHeader.vue | 121 ++++++++++++++++++
collectivo/extensions/shifts/package.json | 1 +
.../shifts/pages/shifts/shift_calendar.vue | 52 +-------
4 files changed, 228 insertions(+), 50 deletions(-)
create mode 100644 collectivo/extensions/shifts/components/Calendar.vue
create mode 100644 collectivo/extensions/shifts/components/CalendarHeader.vue
diff --git a/collectivo/extensions/shifts/components/Calendar.vue b/collectivo/extensions/shifts/components/Calendar.vue
new file mode 100644
index 00000000..11f460c1
--- /dev/null
+++ b/collectivo/extensions/shifts/components/Calendar.vue
@@ -0,0 +1,104 @@
+
+
+
+
+
+
+
+
+ {{ arg.event.title }}
+
+
+
+
+
+
+
diff --git a/collectivo/extensions/shifts/components/CalendarHeader.vue b/collectivo/extensions/shifts/components/CalendarHeader.vue
new file mode 100644
index 00000000..9af96a3d
--- /dev/null
+++ b/collectivo/extensions/shifts/components/CalendarHeader.vue
@@ -0,0 +1,121 @@
+
+
+
+
+
+
+
diff --git a/collectivo/extensions/shifts/package.json b/collectivo/extensions/shifts/package.json
index 15cc4361..83249b84 100644
--- a/collectivo/extensions/shifts/package.json
+++ b/collectivo/extensions/shifts/package.json
@@ -21,6 +21,7 @@
},
"dependencies": {
"@collectivo/collectivo": "workspace:*",
+ "@fullcalendar/luxon3": "^6.1.10",
"luxon": "^3.4.4",
"rrule": "^2.8.1"
},
diff --git a/collectivo/extensions/shifts/pages/shifts/shift_calendar.vue b/collectivo/extensions/shifts/pages/shifts/shift_calendar.vue
index 9fe5c519..bceb4445 100644
--- a/collectivo/extensions/shifts/pages/shifts/shift_calendar.vue
+++ b/collectivo/extensions/shifts/pages/shifts/shift_calendar.vue
@@ -1,55 +1,7 @@
-
+
- From
-
- to
-
-
-
-
- No shifts between {{ from }} and {{ to }}
-
-
+
From dd8a867566683fb3992d92c25b97b3a68bc3bee3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Th=C3=A9ophile=20Madet?=
Date: Fri, 19 Jan 2024 12:59:47 +0100
Subject: [PATCH 24/86] Improved calendar display.
---
.../extensions/shifts/components/Calendar.vue | 60 +++++---------
.../shifts/components/CalendarHeader.vue | 80 ++++++++++---------
2 files changed, 61 insertions(+), 79 deletions(-)
diff --git a/collectivo/extensions/shifts/components/Calendar.vue b/collectivo/extensions/shifts/components/Calendar.vue
index 11f460c1..b2cadf8f 100644
--- a/collectivo/extensions/shifts/components/Calendar.vue
+++ b/collectivo/extensions/shifts/components/Calendar.vue
@@ -7,9 +7,6 @@ import timeGridPlugin from "@fullcalendar/timegrid";
import luxonPlugin from "@fullcalendar/luxon3";
import { DateTime } from "luxon";
-const viewType = ref("");
-const innerWidth = ref("");
-
const calendarOptions = ref({
plugins: [
dayGridPlugin,
@@ -21,6 +18,14 @@ const calendarOptions = ref({
initialView: "dayGridMonth",
headerToolbar: false,
events: [],
+ allDaySlot: false,
+ displayEventTime: true,
+ eventTimeFormat: {
+ hour: "2-digit",
+ minute: "2-digit",
+ meridiem: false,
+ hour12: false,
+ },
});
const calendarRef = ref(null);
@@ -30,47 +35,32 @@ const calendarComputed = () => {
};
onMounted(() => {
- resize();
- registerTest();
- window.addEventListener("resize", resize);
+ registerEventUpdate();
});
-const resize = async () => {
- const deviceWidth = window.matchMedia("(max-width: 767px)");
- const calendar = await calendarRef.value.getApi();
-
- if (deviceWidth.matches) {
- innerWidth.value = `${window.innerWidth}px`;
- calendar.changeView("listWeek");
- calendar.setHeight(585);
- viewType.value = "listWeek";
- } else {
- calendar.changeView("dayGridMonth");
- viewType.value = "";
- }
-};
-
-const registerTest = async () => {
+const registerEventUpdate = async () => {
const calendar = await calendarRef.value.getApi();
calendar.on("datesSet", (infos) => {
- getEvents(DateTime.fromJSDate(infos.start), DateTime.fromJSDate(infos.end));
+ updateEvents(
+ DateTime.fromJSDate(infos.start),
+ DateTime.fromJSDate(infos.end),
+ );
});
- await getEvents(
+ await updateEvents(
DateTime.fromJSDate(calendar.view.activeStart),
DateTime.fromJSDate(calendar.view.activeEnd),
);
};
-async function getEvents(from, to) {
+async function updateEvents(from, to) {
const occurrences = await getAllShiftOccurrences(from, to);
const events = [];
- for (const [i, occurrence] of occurrences.entries()) {
+ for (const occurrence of occurrences) {
events.push({
- id: i,
title: occurrence.shift.shifts_name,
start: occurrence.start.toJSDate(),
end: occurrence.end.toJSDate(),
@@ -85,20 +75,6 @@ async function getEvents(from, to) {
-
-
-
- {{ arg.event.title }}
-
-
-
+
-
-
diff --git a/collectivo/extensions/shifts/components/CalendarHeader.vue b/collectivo/extensions/shifts/components/CalendarHeader.vue
index 9af96a3d..0a163ecb 100644
--- a/collectivo/extensions/shifts/components/CalendarHeader.vue
+++ b/collectivo/extensions/shifts/components/CalendarHeader.vue
@@ -1,42 +1,61 @@
@@ -110,21 +131,10 @@ onMounted(async () => {
}
&__right {
- @apply hidden lg:block;
+ @apply flex items-center gap-5;
&__btn {
@apply h-auto py-2 pl-4 pr-2.5 rounded-[10px] gap-0;
}
}
}
-
-.dropdown-item {
- @apply text-left;
- &__title {
- @apply font-semibold text-sm;
- }
-
- &__description {
- @apply font-semibold text-xs line-clamp-3;
- }
-}
diff --git a/collectivo/extensions/shifts/composables/shifts.ts b/collectivo/extensions/shifts/composables/shifts.ts
index fa817802..abc2f3ca 100644
--- a/collectivo/extensions/shifts/composables/shifts.ts
+++ b/collectivo/extensions/shifts/composables/shifts.ts
@@ -4,7 +4,12 @@ import { RRule, RRuleSet } from "rrule";
import { ItemStatus } from "@collectivo/collectivo/server/utils/directusFields";
interface GetAllShiftOccurrencesOptions {
- filterFreeSlots?: boolean;
+ shiftType: "regular" | "jumper" | "unfilled" | "all";
+}
+
+interface SlotRule {
+ slotID: number;
+ rrule: RRule;
}
export const getAllShiftOccurrences = async (
@@ -13,6 +18,10 @@ export const getAllShiftOccurrences = async (
options: GetAllShiftOccurrencesOptions = {},
): Promise => {
const directus = useDirectus();
+ const { shiftType } = options;
+ const isJumper = shiftType === "jumper";
+ const isRegular = shiftType === "regular";
+ const isAll = shiftType === "all";
const shifts: ShiftsShift[] = (await directus.request(
readItems("shifts_shifts", {
@@ -34,48 +43,73 @@ export const getAllShiftOccurrences = async (
return [...acc, ...slotList];
}, []);
- // Flatten array of slot ids
-
// Get assignments within timeframe
- const assignments = (await directus.request(
- readItems("shifts_assignments", {
- filter: {
- shifts_to: { _gte: from.toISO() },
- shifts_from: { _lte: to.toISO() },
- shifts_slot: {
- _in: slotIds,
- },
- },
- fields: ["*", "shift_slots.*", "shift_slots.shifts_assignments.*"],
- }),
- )) as ShiftsAssignment[];
+ const assignments =
+ slotIds && slotIds.length > 0
+ ? await directus.request(
+ readItems("shifts_assignments", {
+ filter: {
+ shifts_to: { _gte: from.toISO() },
+ shifts_from: { _lte: to.toISO() },
+ shifts_slot: {
+ _in: slotIds,
+ },
+ },
+ fields: ["*", "shift_slots.*", "shift_slots.shifts_assignments.*"],
+ }),
+ )
+ : ([] as ShiftsAssignment[]);
const occurrences = [];
// Assign assignments to slots
for (const shift of shifts) {
const shiftRule = shiftToRRule(shift);
- const slotRules: RRule[] = [];
+ const slotRules: SlotRule[] = [];
for (const slot of shift.shifts_slots ?? []) {
const filteredAssignments = assignments.filter(
(assignment) => assignment.shifts_slot === slot,
);
- slotRules.push(slotToRrule(shift, shiftRule, filteredAssignments));
+ slotRules.push({
+ slotID: slot as number,
+ rrule: slotToRrule(shift, shiftRule, filteredAssignments),
+ });
+ }
+
+ const today = new Date();
+ let minDate = from.toJSDate();
+ let maxDate = to.toJSDate();
+
+ // Jumper and regular can only be into the future
+ if ((isJumper || isRegular) && minDate < today) {
+ minDate = today;
+ }
+
+ // Jumpers will only see the next 4 weeks
+ if (isJumper) {
+ const jumperLimit = new Date(today.setDate(today.getDate() + 28));
+
+ if (jumperLimit < maxDate) {
+ maxDate = jumperLimit;
+ }
}
const shiftOccurrences = getOccurrencesForShift(
shift,
shiftRule,
slotRules,
- from,
- to,
+ minDate,
+ maxDate,
);
- if (options.filterFreeSlots) {
+ // Show only shifts with open slots
+ if (!isAll) {
occurrences.push(
- ...shiftOccurrences.filter((occurrence) => occurrence.openSlots > 0),
+ ...shiftOccurrences.filter(
+ (occurrence) => occurrence.openSlots.length > 0,
+ ),
);
} else {
occurrences.push(...shiftOccurrences);
@@ -124,15 +158,11 @@ export const slotToRrule = (
export const getOccurrencesForShift = (
shift: ShiftsShift,
shiftRule: RRule,
- slotRules: RRule[],
- from: DateTime,
- to: DateTime,
+ slotRules: SlotRule[],
+ from: Date,
+ to: Date,
): ShiftOccurrence[] => {
- const dates: Date[] = shiftRule.between(
- luxonDateTimeToRruleDatetime(from),
- luxonDateTimeToRruleDatetime(to),
- true,
- );
+ const dates: Date[] = shiftRule.between(from, to, true);
const shiftOccurrences: ShiftOccurrence[] = [];
@@ -146,13 +176,13 @@ export const getOccurrencesForShift = (
const rruleDateToShiftOccurrence = (
shift: ShiftsShift,
date: Date,
- slotRules?: RRule[],
+ slotRules?: SlotRule[],
): ShiftOccurrence => {
- let openSlots = 0;
+ const openSlots: number[] = [];
for (const slotRule of slotRules ?? []) {
- if (slotRule.between(date, date, true).length > 0) {
- openSlots++;
+ if (slotRule.rrule.between(date, date, true).length > 0) {
+ openSlots.push(slotRule.slotID);
}
}
diff --git a/collectivo/extensions/shifts/index.d.ts b/collectivo/extensions/shifts/index.d.ts
index 13ff3c38..0bbcd285 100644
--- a/collectivo/extensions/shifts/index.d.ts
+++ b/collectivo/extensions/shifts/index.d.ts
@@ -77,7 +77,7 @@ declare global {
start: DateTime;
end: DateTime;
slots: number;
- openSlots: number;
+ openSlots: number[];
}
export interface ShiftsSkillUserLink {
diff --git a/collectivo/extensions/shifts/pages/shifts/my_shifts.vue b/collectivo/extensions/shifts/pages/shifts/profile.vue
similarity index 99%
rename from collectivo/extensions/shifts/pages/shifts/my_shifts.vue
rename to collectivo/extensions/shifts/pages/shifts/profile.vue
index 2e17940b..a686b094 100644
--- a/collectivo/extensions/shifts/pages/shifts/my_shifts.vue
+++ b/collectivo/extensions/shifts/pages/shifts/profile.vue
@@ -117,7 +117,7 @@ function getUserSkillNames() {
-
{{
t("Sign up for a shift")
}}
-setCollectivoTitle("Sign up for a shift", { backLink: "my_shifts" });
-
-
-
-
-
-
-
diff --git a/collectivo/extensions/shifts/pages/shifts/signup.vue b/collectivo/extensions/shifts/pages/shifts/signup.vue
new file mode 100644
index 00000000..13d27377
--- /dev/null
+++ b/collectivo/extensions/shifts/pages/shifts/signup.vue
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
diff --git a/collectivo/extensions/shifts/plugins/setup.ts b/collectivo/extensions/shifts/plugins/setup.ts
index bc1e1769..e2134484 100644
--- a/collectivo/extensions/shifts/plugins/setup.ts
+++ b/collectivo/extensions/shifts/plugins/setup.ts
@@ -14,17 +14,10 @@ function addMenuItems() {
menu.value.main.push({
label: "Shifts",
- icon: "i-heroicons-building-storefront",
- to: "/shifts/my_shifts",
+ icon: "i-heroicons-calendar-days-solid",
+ to: "/shifts/profile",
order: 90,
});
-
- menu.value.main.push({
- label: "Shift calendar",
- icon: "i-heroicons-calendar-days",
- to: "/shifts/shift_calendar",
- order: 95,
- });
}
function addProfileFields() {
From 0c5c6c4a4a821aeef5e291c7864221e9b7cf3acc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=ABl?= <57440945+jofmi@users.noreply.github.com>
Date: Thu, 30 May 2024 13:58:20 +0200
Subject: [PATCH 76/86] feat: improve signup form
---
.../components/shifts/AssignmentModal.vue | 155 +++++++++++++++---
.../extensions/shifts/composables/shifts.ts | 6 +-
collectivo/extensions/shifts/index.d.ts | 1 +
3 files changed, 137 insertions(+), 25 deletions(-)
diff --git a/collectivo/extensions/shifts/components/shifts/AssignmentModal.vue b/collectivo/extensions/shifts/components/shifts/AssignmentModal.vue
index bfd911e0..cd096f34 100644
--- a/collectivo/extensions/shifts/components/shifts/AssignmentModal.vue
+++ b/collectivo/extensions/shifts/components/shifts/AssignmentModal.vue
@@ -30,15 +30,15 @@ const submitLoading = ref(false);
const repeats = shift.shifts_repeats_every ?? 0;
const isWeeks = repeats % 7 === 0;
const frequency = isWeeks ? repeats / 7 : repeats;
-const chosenSlot = ref
(null);
+
user.value.load();
-const possibleShiftTypes = [
- {
- label: "Regularly",
- value: "regular",
- },
-];
+interface ShiftType {
+ label: string;
+ value: string;
+}
+
+const possibleShiftTypes: ShiftType[] = [];
// Check if date is 4 weeks in the future or less
if (props.shiftOccurence.start.diffNow("weeks").weeks <= 4) {
@@ -48,13 +48,28 @@ if (props.shiftOccurence.start.diffNow("weeks").weeks <= 4) {
});
}
-const chosenShiftType = ref(possibleShiftTypes[0]);
+const chosenShiftType: Ref = ref(null);
const reset = () => {
isOpen.value = false;
};
-const slots = ref([]);
+interface SlotContainer {
+ slot: ShiftsSlot;
+ freeUntil: Date;
+ id: number;
+ occurences: Date[];
+ possibleShiftTypes: { label: string; value: string }[];
+}
+
+const slots = ref([]);
+
+const chosenSlot = ref(null);
+
+// watch chosenSlot
+watch(chosenSlot, (newSlot) => {
+ chosenShiftType.value = null;
+});
onMounted(async () => {
const openSlots = props.shiftOccurence.openSlots;
@@ -63,22 +78,75 @@ onMounted(async () => {
return;
}
- slots.value = (await directus.request(
+ const slotsRes = (await directus.request(
readItems("shifts_slots", {
filter: { id: { _in: openSlots } },
}),
)) as ShiftsSlot[];
+
+ for (const slot of slotsRes) {
+ const nearestFutureAssignment = (
+ await directus.request(
+ readItems("shifts_assignments", {
+ filter: {
+ shifts_user: user.value.data!.id,
+ shifts_slot: { _eq: slot.id },
+ shifts_from: { _gte: DateTime.now().toISO() },
+ },
+ sort: "-shifts_from",
+ limit: 1,
+ }),
+ )
+ )[0] as ShiftsAssignment;
+
+ const freeUntil = nearestFutureAssignment
+ ? DateTime.fromISO(
+ nearestFutureAssignment.shifts_from + "T00:00:00.000Z",
+ ).minus({
+ days: 1,
+ })
+ : null;
+
+ const occurences = props.shiftOccurence.shiftRule.between(
+ start.startOf("day").toJSDate(),
+ freeUntil ? freeUntil.toJSDate() : start.startOf("day").toJSDate(),
+ true,
+ );
+
+ const regularShiftType = [];
+
+ if (!freeUntil || occurences.length > 1) {
+ regularShiftType.push({
+ label: "Regular",
+ value: "regular",
+ });
+ }
+
+ slots.value.push({
+ id: slot.id,
+ slot,
+ freeUntil: freeUntil,
+ occurences: occurences,
+ possibleShiftTypes: [...regularShiftType, ...possibleShiftTypes],
+ });
+ }
});
async function postAssignment() {
submitLoading.value = true;
+ const payload = {
+ shifts_user: user.value.data!.id,
+ shifts_slot: chosenSlot.value!,
+ shifts_from: start.toISO()!,
+ };
+
+ if (chosenSlot.value.freeUntil) {
+ payload.shifts_to = chosenSlot.value.freeUntil.toISO()!;
+ }
+
const assignment = (await directus.request(
- createItem("shifts_assignments", {
- shifts_user: user.value.data!.id,
- shifts_slot: chosenSlot.value!,
- shifts_from: start.toISO()!,
- }),
+ createItem("shifts_assignments", payload),
)) as ShiftsAssignment;
emit("assignmentCreated", assignment);
@@ -91,6 +159,17 @@ async function postAssignment() {
{{ shift.shifts_name }}
+
+ {{ start.toLocaleString(DateTime.DATE_MED) }} {{ t("from") }}
+ {{ start.toLocaleString(DateTime.TIME_24_SIMPLE) }} {{ t("to") }}
+ {{ end.toLocaleString(DateTime.TIME_24_SIMPLE) }}
+
+
+ {{ t("Repeating every") }}
+ {{ frequency }} {{ isWeeks ? t("weeks") : t("days") }}
+
+
+
- {{ option.id }} - {{ option.shifts_name }}
+ {{ option.id }} - {{ option.slot.shifts_name }}
+
+ (single occurrence)
+
+
+ (free until
+ {{ option.freeUntil.toLocaleString(DateTime.DATE_MED) }}
+ ) {{ option.occurences.length }}
+ {{ option.occurences.length == 1 }}
+
- Slot: {{ chosenSlot.id }} - {{ chosenSlot.shifts_name }}
+ {{ chosenSlot.slot.shifts_name }}
+
+ (single occurrence)
+
+
+ (free until
+ {{ chosenSlot.freeUntil.toLocaleString(DateTime.DATE_MED) }}
+ ) {{ chosenSlot.occurences.length }}
+ {{ chosenSlot.occurences.length == 1 }}
+
Choose slot
-
+
- {{ chosenShiftType.label }}
+
+ {{ chosenShiftType.label }}
+ Choose assignment type
+
-
+
- {{ t("Sign up only for this single occurence") }}
+ {{ t("Sign up only for a one-time shift on") }}
{{ start.toLocaleString(DateTime.DATE_MED) }} {{ t("from") }}
{{ start.toLocaleString(DateTime.TIME_24_SIMPLE) }} {{ t("to") }}
{{ end.toLocaleString(DateTime.TIME_24_SIMPLE) }}
- {{ t("Sign up for this and future occurrences") }}
+ {{ t("Sign up for a regular shift") }}
{{ start.weekdayLong }} {{ t("from") }}
{{ start.toLocaleString(DateTime.TIME_24_SIMPLE) }} {{ t("to") }}
@@ -151,7 +255,10 @@ async function postAssignment() {
{{ t("Starting from") }}
{{ start.toLocaleString(DateTime.DATE_MED) }}
-
+
+ {{ t("until") }}
+ {{ chosenSlot.freeUntil.toLocaleString(DateTime.DATE_MED) }}
+
diff --git a/collectivo/extensions/shifts/composables/shifts.ts b/collectivo/extensions/shifts/composables/shifts.ts
index abc2f3ca..fdfc4bf0 100644
--- a/collectivo/extensions/shifts/composables/shifts.ts
+++ b/collectivo/extensions/shifts/composables/shifts.ts
@@ -167,7 +167,9 @@ export const getOccurrencesForShift = (
const shiftOccurrences: ShiftOccurrence[] = [];
for (const date of dates) {
- shiftOccurrences.push(rruleDateToShiftOccurrence(shift, date, slotRules));
+ shiftOccurrences.push(
+ rruleDateToShiftOccurrence(shift, date, shiftRule, slotRules),
+ );
}
return shiftOccurrences;
@@ -176,6 +178,7 @@ export const getOccurrencesForShift = (
const rruleDateToShiftOccurrence = (
shift: ShiftsShift,
date: Date,
+ shiftRule?: RRule,
slotRules?: SlotRule[],
): ShiftOccurrence => {
const openSlots: number[] = [];
@@ -194,6 +197,7 @@ const rruleDateToShiftOccurrence = (
shift: shift,
start: start,
end: end,
+ shiftRule: shiftRule,
slots: slotRules?.length ?? 0,
openSlots: openSlots,
};
diff --git a/collectivo/extensions/shifts/index.d.ts b/collectivo/extensions/shifts/index.d.ts
index 0bbcd285..66b18764 100644
--- a/collectivo/extensions/shifts/index.d.ts
+++ b/collectivo/extensions/shifts/index.d.ts
@@ -78,6 +78,7 @@ declare global {
end: DateTime;
slots: number;
openSlots: number[];
+ shiftRule: RRuleSet;
}
export interface ShiftsSkillUserLink {
From 0077c2b515ce8e31c65b3ee713146f9524e55910 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=ABl?= <57440945+jofmi@users.noreply.github.com>
Date: Fri, 31 May 2024 11:29:49 +0200
Subject: [PATCH 77/86] feat: fix date generation
---
.../shifts/components/shifts/Calendar.vue | 8 +++++--
.../components/shifts/CalendarHeader.vue | 3 ++-
.../extensions/shifts/composables/dates.ts | 22 +++++++++++++++++++
.../extensions/shifts/composables/shifts.ts | 6 ++---
collectivo/extensions/shifts/index.d.ts | 7 ++++++
.../extensions/shifts/pages/shifts/signup.vue | 5 +++--
.../shifts/server/utils/ShiftUserType.ts | 8 +++----
7 files changed, 47 insertions(+), 12 deletions(-)
create mode 100644 collectivo/extensions/shifts/composables/dates.ts
diff --git a/collectivo/extensions/shifts/components/shifts/Calendar.vue b/collectivo/extensions/shifts/components/shifts/Calendar.vue
index d7d872e6..afd75b95 100644
--- a/collectivo/extensions/shifts/components/shifts/Calendar.vue
+++ b/collectivo/extensions/shifts/components/shifts/Calendar.vue
@@ -17,8 +17,12 @@ import { DateTime } from "luxon";
const props = defineProps({
shiftType: {
- type: String as PropType<"jumper" | "regular" | "unfilled" | "all">,
- required: true,
+ type: String,
+ required: false,
+ },
+ adminMode: {
+ type: Boolean,
+ default: false,
},
});
diff --git a/collectivo/extensions/shifts/components/shifts/CalendarHeader.vue b/collectivo/extensions/shifts/components/shifts/CalendarHeader.vue
index 5818cfdc..d12cfd13 100644
--- a/collectivo/extensions/shifts/components/shifts/CalendarHeader.vue
+++ b/collectivo/extensions/shifts/components/shifts/CalendarHeader.vue
@@ -103,8 +103,9 @@ onMounted(async () => {
v-model="selectedView"
:options="views"
option-attribute="label"
+ class="w-48"
>
- Display
+ Display: {{ selectedView.label }}
diff --git a/collectivo/extensions/shifts/composables/dates.ts b/collectivo/extensions/shifts/composables/dates.ts
new file mode 100644
index 00000000..a39cf0d6
--- /dev/null
+++ b/collectivo/extensions/shifts/composables/dates.ts
@@ -0,0 +1,22 @@
+// Always start of the day, in UTC
+export function getCurrentDate() {
+ const now = new Date();
+
+ const currentDateUTC = new Date(
+ Date.UTC(
+ now.getUTCFullYear(),
+ now.getUTCMonth(),
+ now.getUTCDate(),
+ 0,
+ 0,
+ 0,
+ ),
+ );
+
+ return currentDateUTC;
+}
+
+export function getFutureDate(days: number) {
+ const currentDate = getCurrentDate();
+ return new Date(currentDate.setDate(currentDate.getDate() + days));
+}
diff --git a/collectivo/extensions/shifts/composables/shifts.ts b/collectivo/extensions/shifts/composables/shifts.ts
index fdfc4bf0..5235735f 100644
--- a/collectivo/extensions/shifts/composables/shifts.ts
+++ b/collectivo/extensions/shifts/composables/shifts.ts
@@ -4,7 +4,7 @@ import { RRule, RRuleSet } from "rrule";
import { ItemStatus } from "@collectivo/collectivo/server/utils/directusFields";
interface GetAllShiftOccurrencesOptions {
- shiftType: "regular" | "jumper" | "unfilled" | "all";
+ shiftType?: "regular" | "jumper" | "unfilled" | "all";
}
interface SlotRule {
@@ -78,7 +78,7 @@ export const getAllShiftOccurrences = async (
});
}
- const today = new Date();
+ const today = getCurrentDate();
let minDate = from.toJSDate();
let maxDate = to.toJSDate();
@@ -89,7 +89,7 @@ export const getAllShiftOccurrences = async (
// Jumpers will only see the next 4 weeks
if (isJumper) {
- const jumperLimit = new Date(today.setDate(today.getDate() + 28));
+ const jumperLimit = getFutureDate(28);
if (jumperLimit < maxDate) {
maxDate = jumperLimit;
diff --git a/collectivo/extensions/shifts/index.d.ts b/collectivo/extensions/shifts/index.d.ts
index 66b18764..c6e699e4 100644
--- a/collectivo/extensions/shifts/index.d.ts
+++ b/collectivo/extensions/shifts/index.d.ts
@@ -14,6 +14,13 @@ declare global {
shifts_skills_shifts_slots: ShiftsSkillSlotLink[];
}
+ export type ShiftsUserType = "jumper" | "regular" | "exempt" | "inactive";
+
+ export interface CollectivoUser {
+ shifts_user_type: string;
+ shifts_skills: number[];
+ }
+
export interface ShiftsShift {
id?: string;
shifts_name?: string;
diff --git a/collectivo/extensions/shifts/pages/shifts/signup.vue b/collectivo/extensions/shifts/pages/shifts/signup.vue
index 13d27377..cbf991f5 100644
--- a/collectivo/extensions/shifts/pages/shifts/signup.vue
+++ b/collectivo/extensions/shifts/pages/shifts/signup.vue
@@ -1,9 +1,10 @@
-
-
+
+
diff --git a/collectivo/extensions/shifts/server/utils/ShiftUserType.ts b/collectivo/extensions/shifts/server/utils/ShiftUserType.ts
index 4f014212..b9018d13 100644
--- a/collectivo/extensions/shifts/server/utils/ShiftUserType.ts
+++ b/collectivo/extensions/shifts/server/utils/ShiftUserType.ts
@@ -1,6 +1,6 @@
export enum ShiftUserType {
- Regular = "REGULAR",
- Jumper = "JUMPER",
- Exempt = "EXEMPT",
- Inactive = "INACTIVE",
+ regular = "regular",
+ jumper = "jumper",
+ exempt = "exempt",
+ inactive = "inactive",
}
From 49cdf4fdfcad2f3a4e554d949f400f8df69bea38 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=ABl?= <57440945+jofmi@users.noreply.github.com>
Date: Fri, 31 May 2024 13:23:28 +0200
Subject: [PATCH 78/86] fix: include starting date
---
.../components/shifts/AssignmentModal.vue | 126 +++++-------------
.../shifts/components/shifts/Calendar.vue | 12 +-
.../components/shifts/CalendarHeader.vue | 55 +++++---
.../extensions/shifts/composables/shifts.ts | 13 +-
4 files changed, 84 insertions(+), 122 deletions(-)
diff --git a/collectivo/extensions/shifts/components/shifts/AssignmentModal.vue b/collectivo/extensions/shifts/components/shifts/AssignmentModal.vue
index cd096f34..fa44fb01 100644
--- a/collectivo/extensions/shifts/components/shifts/AssignmentModal.vue
+++ b/collectivo/extensions/shifts/components/shifts/AssignmentModal.vue
@@ -10,7 +10,7 @@ const props = defineProps({
},
shiftType: {
type: String as PropType<"jumper" | "regular">,
- required: true,
+ default: "regular",
},
});
@@ -33,23 +33,6 @@ const frequency = isWeeks ? repeats / 7 : repeats;
user.value.load();
-interface ShiftType {
- label: string;
- value: string;
-}
-
-const possibleShiftTypes: ShiftType[] = [];
-
-// Check if date is 4 weeks in the future or less
-if (props.shiftOccurence.start.diffNow("weeks").weeks <= 4) {
- possibleShiftTypes.push({
- label: "One-time",
- value: "jumper",
- });
-}
-
-const chosenShiftType: Ref = ref(null);
-
const reset = () => {
isOpen.value = false;
};
@@ -66,11 +49,6 @@ const slots = ref([]);
const chosenSlot = ref(null);
-// watch chosenSlot
-watch(chosenSlot, (newSlot) => {
- chosenShiftType.value = null;
-});
-
onMounted(async () => {
const openSlots = props.shiftOccurence.openSlots;
@@ -127,7 +105,6 @@ onMounted(async () => {
slot,
freeUntil: freeUntil,
occurences: occurences,
- possibleShiftTypes: [...regularShiftType, ...possibleShiftTypes],
});
}
});
@@ -159,23 +136,41 @@ async function postAssignment() {
{{ shift.shifts_name }}
-
- {{ start.toLocaleString(DateTime.DATE_MED) }} {{ t("from") }}
- {{ start.toLocaleString(DateTime.TIME_24_SIMPLE) }} {{ t("to") }}
- {{ end.toLocaleString(DateTime.TIME_24_SIMPLE) }}
-
-
+
+
+ {{ t("One-time shift") }}
+
+ {{ start.toLocaleString(DateTime.DATE_MED) }} {{ t("from") }}
+ {{ start.toLocaleString(DateTime.TIME_24_SIMPLE) }} {{ t("to") }}
+ {{ end.toLocaleString(DateTime.TIME_24_SIMPLE) }}
+
+
+ {{ t("Regular shift") }}
+
+ {{ start.weekdayLong }} {{ t("from") }}
+ {{ start.toLocaleString(DateTime.TIME_24_SIMPLE) }} {{ t("to") }}
+ {{ end.toLocaleString(DateTime.TIME_24_SIMPLE) }}
+
{{ t("Repeating every") }}
{{ frequency }} {{ isWeeks ? t("weeks") : t("days") }}
+
+ {{ t("Starting from") }}
+ {{ start.toLocaleString(DateTime.DATE_MED) }}
+
+ {{ t("until") }}
+ {{ chosenSlot.freeUntil.toLocaleString(DateTime.DATE_MED) }}
+
+
-
+
{{ option.id }} - {{ option.slot.shifts_name }}
-
- (single occurrence)
-
-
+
(free until
{{ option.freeUntil.toLocaleString(DateTime.DATE_MED) }}
- ) {{ option.occurences.length }}
- {{ option.occurences.length == 1 }}
+ )
- {{ chosenSlot.slot.shifts_name }}
-
- (single occurrence)
-
-
+ {{ chosenSlot.id }} - {{ chosenSlot.slot.shifts_name }}
+
(free until
{{ chosenSlot.freeUntil.toLocaleString(DateTime.DATE_MED) }}
- ) {{ chosenSlot.occurences.length }}
- {{ chosenSlot.occurences.length == 1 }}
+ )
Choose slot
@@ -218,50 +201,6 @@ async function postAssignment() {
-
-
-
- {{ chosenShiftType.label }}
- Choose assignment type
-
-
-
-
-
-
- {{ t("Sign up only for a one-time shift on") }}
-
- {{ start.toLocaleString(DateTime.DATE_MED) }} {{ t("from") }}
- {{ start.toLocaleString(DateTime.TIME_24_SIMPLE) }} {{ t("to") }}
- {{ end.toLocaleString(DateTime.TIME_24_SIMPLE) }}
-
-
- {{ t("Sign up for a regular shift") }}
-
- {{ start.weekdayLong }} {{ t("from") }}
- {{ start.toLocaleString(DateTime.TIME_24_SIMPLE) }} {{ t("to") }}
- {{ end.toLocaleString(DateTime.TIME_24_SIMPLE) }}
-
- {{ t("Repeating every") }}
- {{ frequency }} {{ isWeeks ? t("weeks") : t("days") }}
-
- {{ t("Starting from") }}
- {{ start.toLocaleString(DateTime.DATE_MED) }}
-
- {{ t("until") }}
- {{ chosenSlot.freeUntil.toLocaleString(DateTime.DATE_MED) }}
-
-
-
-
diff --git a/collectivo/extensions/shifts/components/shifts/Calendar.vue b/collectivo/extensions/shifts/components/shifts/Calendar.vue
index afd75b95..33faf4aa 100644
--- a/collectivo/extensions/shifts/components/shifts/Calendar.vue
+++ b/collectivo/extensions/shifts/components/shifts/Calendar.vue
@@ -60,8 +60,16 @@ const calendarOptions = ref({
const customSettings = ref({
allowedShiftTypes: [
- { label: "Regular", value: "regular" },
- { label: "Jumper", value: "jumper" },
+ {
+ label: "Regular",
+ value: "regular",
+ icon: "i-heroicons-squares-plus",
+ },
+ {
+ label: "One-time",
+ value: "jumper",
+ icon: "i-heroicons-stop",
+ },
],
selectedShiftType: props.shiftType,
});
diff --git a/collectivo/extensions/shifts/components/shifts/CalendarHeader.vue b/collectivo/extensions/shifts/components/shifts/CalendarHeader.vue
index d12cfd13..372fa45f 100644
--- a/collectivo/extensions/shifts/components/shifts/CalendarHeader.vue
+++ b/collectivo/extensions/shifts/components/shifts/CalendarHeader.vue
@@ -3,6 +3,7 @@ const props = defineProps({
calendarRef: Object as PropType<{ getApi: Promise<() => FullCalendar> }>,
});
+const { t } = useI18n();
const model = defineModel();
const shiftTypes = model.value.allowedShiftTypes;
const displayedDate = ref();
@@ -92,24 +93,31 @@ onMounted(async () => {
@@ -139,3 +147,14 @@ onMounted(async () => {
}
}
+
+
+de:
+ Month: Monat
+ Week: Woche
+ Day: Tag
+ Regular: Regelmäßig
+ One-time: Einmalig
+ Shift type: Schichttyp
+ Display: Anzeige
+
diff --git a/collectivo/extensions/shifts/composables/shifts.ts b/collectivo/extensions/shifts/composables/shifts.ts
index 5235735f..7e422a0a 100644
--- a/collectivo/extensions/shifts/composables/shifts.ts
+++ b/collectivo/extensions/shifts/composables/shifts.ts
@@ -2,6 +2,7 @@ import { readItems } from "@directus/sdk";
import { DateTime } from "luxon";
import { RRule, RRuleSet } from "rrule";
import { ItemStatus } from "@collectivo/collectivo/server/utils/directusFields";
+import { getDateFromDb } from "./dates";
interface GetAllShiftOccurrencesOptions {
shiftType?: "regular" | "jumper" | "unfilled" | "all";
@@ -136,17 +137,9 @@ export const slotToRrule = (
new RRule({
freq: RRule.DAILY,
interval: shift.shifts_repeats_every,
- dtstart: shiftRule.after(
- luxonDateTimeToRruleDatetime(
- DateTime.fromISO(assignment.shifts_from),
- ),
- ),
+ dtstart: shiftRule.after(new Date(assignment.shifts_from), true),
until: assignment.shifts_to
- ? shiftRule.before(
- luxonDateTimeToRruleDatetime(
- DateTime.fromISO(assignment.shifts_to),
- ),
- )
+ ? shiftRule.before(new Date(assignment.shifts_to), true)
: null,
}),
);
From 8abc6effed118fd8e5fb16b6c2b89c66c674a10b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=ABl?= <57440945+jofmi@users.noreply.github.com>
Date: Fri, 31 May 2024 14:28:50 +0200
Subject: [PATCH 79/86] fix: reload assignment modal
---
collectivo/collectivo/composables/toasts.ts | 48 +++++++++
...nmentModal.vue => AssignmentPostModal.vue} | 102 +++++++++---------
.../shifts/components/shifts/Calendar.vue | 5 +-
3 files changed, 100 insertions(+), 55 deletions(-)
create mode 100644 collectivo/collectivo/composables/toasts.ts
rename collectivo/extensions/shifts/components/shifts/{AssignmentModal.vue => AssignmentPostModal.vue} (79%)
diff --git a/collectivo/collectivo/composables/toasts.ts b/collectivo/collectivo/composables/toasts.ts
new file mode 100644
index 00000000..d6a21d56
--- /dev/null
+++ b/collectivo/collectivo/composables/toasts.ts
@@ -0,0 +1,48 @@
+type types = "error" | "success" | "warn" | "info";
+type colors = "red" | "green" | "yellow" | "blue";
+
+const defaultTitles = {
+ error: "Error",
+ success: "Success",
+ warn: "Warning",
+ info: "Info",
+};
+
+const defaultDescriptions = {
+ error: "An error occurred",
+ success: "Operation successful",
+ warn: "",
+ info: "",
+};
+
+const defaultColors: { [index: string]: colors } = {
+ error: "red",
+ success: "green",
+ warn: "yellow",
+ info: "blue",
+};
+
+const defaultIcons = {
+ error: "i-heroicons-exclamation-triangle",
+ success: "i-heroicons-check",
+ warn: "i-heroicons-exclamation-triangle",
+ info: "i-heroicons-information-circle",
+};
+
+export function showCollectivoToast(options: {
+ type?: types;
+ title?: string;
+ description?: any;
+ icon?: string;
+ color?: colors;
+}) {
+ const toast = useToast();
+ const type = options.type ?? "info";
+
+ toast.add({
+ title: options.title ?? defaultTitles[type],
+ description: options.description ?? defaultDescriptions[type],
+ icon: options.icon ?? defaultIcons[type],
+ color: options.color ?? defaultColors[type],
+ });
+}
diff --git a/collectivo/extensions/shifts/components/shifts/AssignmentModal.vue b/collectivo/extensions/shifts/components/shifts/AssignmentPostModal.vue
similarity index 79%
rename from collectivo/extensions/shifts/components/shifts/AssignmentModal.vue
rename to collectivo/extensions/shifts/components/shifts/AssignmentPostModal.vue
index fa44fb01..1a8f0671 100644
--- a/collectivo/extensions/shifts/components/shifts/AssignmentModal.vue
+++ b/collectivo/extensions/shifts/components/shifts/AssignmentPostModal.vue
@@ -3,6 +3,13 @@ import { DateTime } from "luxon";
import { parse } from "marked";
import { createItem, readItems } from "@directus/sdk";
+interface SlotContainer {
+ slot: ShiftsSlot;
+ freeUntil: DateTime | null;
+ id: number;
+ occurences: Date[];
+}
+
const props = defineProps({
shiftOccurence: {
type: Object as PropType,
@@ -16,60 +23,39 @@ const props = defineProps({
const isOpen = defineModel("isOpen", { required: true, type: Boolean });
const { t } = useI18n();
-
-const emit = defineEmits<{
- assignmentCreated: [assignment: ShiftsAssignment];
-}>();
-
const directus = useDirectus();
const user = useCollectivoUser();
const shift = props.shiftOccurence.shift;
const start = props.shiftOccurence.start;
+const startDate = start.toISO()?.split("T")[0];
const end = props.shiftOccurence.end;
const submitLoading = ref(false);
const repeats = shift.shifts_repeats_every ?? 0;
const isWeeks = repeats % 7 === 0;
const frequency = isWeeks ? repeats / 7 : repeats;
-
-user.value.load();
-
-const reset = () => {
- isOpen.value = false;
-};
-
-interface SlotContainer {
- slot: ShiftsSlot;
- freeUntil: Date;
- id: number;
- occurences: Date[];
- possibleShiftTypes: { label: string; value: string }[];
-}
-
const slots = ref([]);
-
const chosenSlot = ref(null);
-onMounted(async () => {
+async function getOpenSlots() {
const openSlots = props.shiftOccurence.openSlots;
-
- if (openSlots === 0) {
- return;
- }
-
- const slotsRes = (await directus.request(
+ return (await directus.request(
readItems("shifts_slots", {
filter: { id: { _in: openSlots } },
}),
)) as ShiftsSlot[];
+}
- for (const slot of slotsRes) {
+onMounted(async () => {
+ const openSlots = await getOpenSlots();
+
+ for (const slot of openSlots) {
const nearestFutureAssignment = (
await directus.request(
readItems("shifts_assignments", {
filter: {
shifts_user: user.value.data!.id,
shifts_slot: { _eq: slot.id },
- shifts_from: { _gte: DateTime.now().toISO() },
+ shifts_from: { _gte: startDate },
},
sort: "-shifts_from",
limit: 1,
@@ -77,6 +63,8 @@ onMounted(async () => {
)
)[0] as ShiftsAssignment;
+ console.log("nearestFutureAssignment", nearestFutureAssignment);
+
const freeUntil = nearestFutureAssignment
? DateTime.fromISO(
nearestFutureAssignment.shifts_from + "T00:00:00.000Z",
@@ -91,15 +79,6 @@ onMounted(async () => {
true,
);
- const regularShiftType = [];
-
- if (!freeUntil || occurences.length > 1) {
- regularShiftType.push({
- label: "Regular",
- value: "regular",
- });
- }
-
slots.value.push({
id: slot.id,
slot,
@@ -109,25 +88,44 @@ onMounted(async () => {
}
});
-async function postAssignment() {
+async function postAssignment(slotContainer: SlotContainer) {
+ try {
+ await postAssignmentInner(slotContainer);
+
+ showCollectivoToast({
+ type: "success",
+ description: "Shift assignment successfull",
+ });
+
+ navigateTo("profile");
+ } catch (e) {
+ showCollectivoToast({
+ type: "error",
+ description: "Shift assignment failed",
+ });
+ }
+}
+
+async function postAssignmentInner(slotContainer: SlotContainer) {
submitLoading.value = true;
- const payload = {
+ const shiftStartString = start.toISO()!;
+
+ const payload: ShiftsAssignment = {
shifts_user: user.value.data!.id,
- shifts_slot: chosenSlot.value!,
- shifts_from: start.toISO()!,
+ shifts_slot: slotContainer.id,
+ shifts_from: shiftStartString,
};
- if (chosenSlot.value.freeUntil) {
- payload.shifts_to = chosenSlot.value.freeUntil.toISO()!;
+ // One-time shifts have same start and end date
+ // Regular shifts are either until freeUntil or forever
+ if (props.shiftType === "jumper") {
+ payload.shifts_to = shiftStartString;
+ } else if (slotContainer.freeUntil) {
+ payload.shifts_to = slotContainer.freeUntil.toISO()!;
}
- const assignment = (await directus.request(
- createItem("shifts_assignments", payload),
- )) as ShiftsAssignment;
-
- emit("assignmentCreated", assignment);
- reset();
+ await directus.request(createItem("shifts_assignments", payload));
}
@@ -207,7 +205,7 @@ async function postAssignment() {
icon="i-heroicons-pencil-square"
:loading="submitLoading"
:disabled="!chosenSlot"
- @click="postAssignment()"
+ @click="postAssignment(chosenSlot!)"
>
{{ t("Sign up") }}
diff --git a/collectivo/extensions/shifts/components/shifts/Calendar.vue b/collectivo/extensions/shifts/components/shifts/Calendar.vue
index 33faf4aa..7b88ec09 100644
--- a/collectivo/extensions/shifts/components/shifts/Calendar.vue
+++ b/collectivo/extensions/shifts/components/shifts/Calendar.vue
@@ -142,9 +142,8 @@ async function updateEvents(from, to) {
-
-
Date: Fri, 31 May 2024 14:50:52 +0200
Subject: [PATCH 80/86] fix: date and rrule mistakes
---
.../components/shifts/AssignmentPostModal.vue | 8 +-
.../shifts/components/shifts/Calendar.vue | 2 +-
.../extensions/shifts/composables/shifts.ts | 124 +++++++-----------
3 files changed, 49 insertions(+), 85 deletions(-)
diff --git a/collectivo/extensions/shifts/components/shifts/AssignmentPostModal.vue b/collectivo/extensions/shifts/components/shifts/AssignmentPostModal.vue
index 1a8f0671..cb1d4112 100644
--- a/collectivo/extensions/shifts/components/shifts/AssignmentPostModal.vue
+++ b/collectivo/extensions/shifts/components/shifts/AssignmentPostModal.vue
@@ -63,8 +63,6 @@ onMounted(async () => {
)
)[0] as ShiftsAssignment;
- console.log("nearestFutureAssignment", nearestFutureAssignment);
-
const freeUntil = nearestFutureAssignment
? DateTime.fromISO(
nearestFutureAssignment.shifts_from + "T00:00:00.000Z",
@@ -139,14 +137,16 @@ async function postAssignmentInner(slotContainer: SlotContainer) {
{{ t("One-time shift") }}
{{ start.toLocaleString(DateTime.DATE_MED) }} {{ t("from") }}
- {{ start.toLocaleString(DateTime.TIME_24_SIMPLE) }} {{ t("to") }}
+ {{ start.toLocaleString(DateTime.TIME_24_SIMPLE) }}
+ {{ t("to") }}
{{ end.toLocaleString(DateTime.TIME_24_SIMPLE) }}
{{ t("Regular shift") }}
{{ start.weekdayLong }} {{ t("from") }}
- {{ start.toLocaleString(DateTime.TIME_24_SIMPLE) }} {{ t("to") }}
+ {{ start.toLocaleString(DateTime.TIME_24_SIMPLE) }}
+ {{ t("to") }}
{{ end.toLocaleString(DateTime.TIME_24_SIMPLE) }}
{{ t("Repeating every") }}
diff --git a/collectivo/extensions/shifts/components/shifts/Calendar.vue b/collectivo/extensions/shifts/components/shifts/Calendar.vue
index 7b88ec09..dc04756b 100644
--- a/collectivo/extensions/shifts/components/shifts/Calendar.vue
+++ b/collectivo/extensions/shifts/components/shifts/Calendar.vue
@@ -108,7 +108,7 @@ const registerEventUpdate = async () => {
};
async function updateEvents(from, to) {
- const occurrences = await getAllShiftOccurrences(from, to, {
+ const occurrences = await getShiftOccurrences(from, to, {
shiftType: customSettings.value.selectedShiftType,
});
diff --git a/collectivo/extensions/shifts/composables/shifts.ts b/collectivo/extensions/shifts/composables/shifts.ts
index 7e422a0a..3fe1f8f8 100644
--- a/collectivo/extensions/shifts/composables/shifts.ts
+++ b/collectivo/extensions/shifts/composables/shifts.ts
@@ -2,9 +2,8 @@ import { readItems } from "@directus/sdk";
import { DateTime } from "luxon";
import { RRule, RRuleSet } from "rrule";
import { ItemStatus } from "@collectivo/collectivo/server/utils/directusFields";
-import { getDateFromDb } from "./dates";
-interface GetAllShiftOccurrencesOptions {
+interface GetShiftOccurrencesOptions {
shiftType?: "regular" | "jumper" | "unfilled" | "all";
}
@@ -13,10 +12,10 @@ interface SlotRule {
rrule: RRule;
}
-export const getAllShiftOccurrences = async (
+export const getShiftOccurrences = async (
from: DateTime,
to: DateTime,
- options: GetAllShiftOccurrencesOptions = {},
+ options: GetShiftOccurrencesOptions = {},
): Promise => {
const directus = useDirectus();
const { shiftType } = options;
@@ -50,7 +49,9 @@ export const getAllShiftOccurrences = async (
? await directus.request(
readItems("shifts_assignments", {
filter: {
- shifts_to: { _gte: from.toISO() },
+ shifts_to: {
+ _or: [{ _gte: from.toISO() }, { _null: true }],
+ },
shifts_from: { _lte: to.toISO() },
shifts_slot: {
_in: slotIds,
@@ -124,30 +125,6 @@ export const getAllShiftOccurrences = async (
return occurrences;
};
-export const slotToRrule = (
- shift: ShiftsShift,
- shiftRule: RRule,
- assignments: ShiftsAssignment[],
-): RRule => {
- const slotRules = new RRuleSet();
- slotRules.rrule(shiftRule);
-
- for (const assignment of assignments) {
- slotRules.exrule(
- new RRule({
- freq: RRule.DAILY,
- interval: shift.shifts_repeats_every,
- dtstart: shiftRule.after(new Date(assignment.shifts_from), true),
- until: assignment.shifts_to
- ? shiftRule.before(new Date(assignment.shifts_to), true)
- : null,
- }),
- );
- }
-
- return slotRules;
-};
-
export const getOccurrencesForShift = (
shift: ShiftsShift,
shiftRule: RRule,
@@ -161,14 +138,16 @@ export const getOccurrencesForShift = (
for (const date of dates) {
shiftOccurrences.push(
- rruleDateToShiftOccurrence(shift, date, shiftRule, slotRules),
+ getSingleShiftOccurence(shift, date, shiftRule, slotRules),
);
}
return shiftOccurrences;
};
-const rruleDateToShiftOccurrence = (
+// Includes information about slots
+// Time is always given in UTC - even if meant for other timezones
+const getSingleShiftOccurence = (
shift: ShiftsShift,
date: Date,
shiftRule?: RRule,
@@ -183,8 +162,14 @@ const rruleDateToShiftOccurrence = (
}
const dateString = date.toISOString().split("T")[0];
- const start = DateTime.fromISO(`${dateString}T${shift.shifts_from_time}Z`);
- const end = DateTime.fromISO(`${dateString}T${shift.shifts_to_time}Z`);
+
+ const start = DateTime.fromISO(
+ `${dateString}T${shift.shifts_from_time}Z`,
+ ).toUTC();
+
+ const end = DateTime.fromISO(
+ `${dateString}T${shift.shifts_to_time}Z`,
+ ).toUTC();
return {
shift: shift,
@@ -210,6 +195,32 @@ export const shiftToRRule = (shift: ShiftsShift): RRule => {
});
};
+export const slotToRrule = (
+ shift: ShiftsShift,
+ shiftRule: RRule,
+ assignments: ShiftsAssignment[],
+): RRule => {
+ const slotRules = new RRuleSet();
+ slotRules.rrule(shiftRule);
+
+ for (const assignment of assignments) {
+ console.log("assignment found until", assignment.shifts_to);
+
+ slotRules.exrule(
+ new RRule({
+ freq: RRule.DAILY,
+ interval: shift.shifts_repeats_every,
+ dtstart: shiftRule.after(new Date(assignment.shifts_from), true),
+ until: assignment.shifts_to
+ ? shiftRule.before(new Date(assignment.shifts_to), true)
+ : null,
+ }),
+ );
+ }
+
+ return slotRules;
+};
+
export const isShiftDurationModelActive = (
durationModel: { shifts_from: string; shifts_to?: string },
atDate?: DateTime,
@@ -245,50 +256,3 @@ export const isFromToActive = (
return !(to && to < atDate);
};
-
-export const fromToOverlaps = (
- from1: DateTime,
- from2: DateTime,
- to1?: DateTime,
- to2?: DateTime,
- dateOnly = false,
-): boolean => {
- if (from2 >= from1) {
- return isFromToActive(from1, to1, from2, dateOnly);
- }
-
- if (!to2) {
- return true;
- }
-
- return isFromToActive(from1, to1, to2, dateOnly);
-};
-
-export const getNextOccurrences = (
- shift: ShiftsShift,
- maxOccurrences: number,
- after?: DateTime,
- until?: DateTime,
-) => {
- const nextOccurrences: ShiftOccurrence[] = [];
- let nextOccurrence = getNextOccurrence(shift, after ?? DateTime.now());
-
- while (
- nextOccurrence !== null &&
- nextOccurrences.length < maxOccurrences &&
- (until == null || nextOccurrence.start < until)
- ) {
- nextOccurrences.push(nextOccurrence);
- nextOccurrence = getNextOccurrence(shift, nextOccurrence.end);
- }
-
- return nextOccurrences;
-};
-
-export const getNextOccurrence = (shift: ShiftsShift, after?: DateTime) => {
- const date = shiftToRRule(shift).after(
- luxonDateTimeToRruleDatetime(after ?? DateTime.now()),
- );
-
- return date ? rruleDateToShiftOccurrence(shift, date) : null;
-};
From 313a285166b70721d1f962023c3764113ed81fca Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=ABl?= <57440945+jofmi@users.noreply.github.com>
Date: Fri, 31 May 2024 15:57:01 +0200
Subject: [PATCH 81/86] feat: include absences
---
.../components/shifts/AssignmentCard.vue | 13 +++-
.../shifts/composables/assignments.ts | 17 ++++--
.../extensions/shifts/composables/shifts.ts | 60 ++++++++++++++++---
collectivo/extensions/shifts/index.d.ts | 1 +
.../shifts/pages/shifts/profile.vue | 35 +++++++++++
5 files changed, 111 insertions(+), 15 deletions(-)
diff --git a/collectivo/extensions/shifts/components/shifts/AssignmentCard.vue b/collectivo/extensions/shifts/components/shifts/AssignmentCard.vue
index 2a418e30..c31a256e 100644
--- a/collectivo/extensions/shifts/components/shifts/AssignmentCard.vue
+++ b/collectivo/extensions/shifts/components/shifts/AssignmentCard.vue
@@ -37,11 +37,15 @@ function getEndDate(endDate: string) {
-
+
-
+
{{ t("Shift repeats every") }} {{ shift.shifts_repeats_every }}
{{ t("days") }}
@@ -49,6 +53,9 @@ function getEndDate(endDate: string) {
{{ t("until") }} {{ getEndDate(assignment.shifts_to) }}
+
+ {{ t("One-time shift") }}
+
@@ -61,6 +68,7 @@ function getEndDate(endDate: string) {
{{
DateTime.fromJSDate(absenceDate).toLocaleString(DateTime.DATE_MED)
}}
+
@@ -93,4 +101,5 @@ de:
"from": "von"
"to": "bis"
"Absences": "Abwesenheiten"
+ "One-time shift": "Einmalige Schicht"
diff --git a/collectivo/extensions/shifts/composables/assignments.ts b/collectivo/extensions/shifts/composables/assignments.ts
index 3d71ee78..e83ae732 100644
--- a/collectivo/extensions/shifts/composables/assignments.ts
+++ b/collectivo/extensions/shifts/composables/assignments.ts
@@ -6,7 +6,7 @@ import { ItemStatus } from "@collectivo/collectivo/server/utils/directusFields";
export const getActiveAssignments = async (user: CollectivoUser) => {
const directus = useDirectus();
- const now = new Date();
+ const now = getCurrentDate();
const nowStr = now.toISOString();
const assignments = (await directus.request(
@@ -53,13 +53,22 @@ export const getActiveAssignments = async (user: CollectivoUser) => {
);
const rules = getAssignmentRRule(assignment, filteredAbsences);
+ const assignmentRule = rules[0];
+ const absencesRule = rules[1];
+ const nextOccurence = assignmentRule.after(now, true);
+ let secondNextOccurence = null;
+
+ if (nextOccurence) {
+ secondNextOccurence = assignmentRule.after(nextOccurence);
+ }
return {
assignment: assignment,
absences: filteredAbsences,
- assignmentRule: rules[0],
- absencesRule: rules[1],
- nextOccurrence: rules[0].after(now, true),
+ assignmentRule: assignmentRule,
+ absencesRule: absencesRule,
+ nextOccurrence: nextOccurence,
+ isRegular: secondNextOccurence != null,
};
},
);
diff --git a/collectivo/extensions/shifts/composables/shifts.ts b/collectivo/extensions/shifts/composables/shifts.ts
index 3fe1f8f8..26906c95 100644
--- a/collectivo/extensions/shifts/composables/shifts.ts
+++ b/collectivo/extensions/shifts/composables/shifts.ts
@@ -46,7 +46,7 @@ export const getShiftOccurrences = async (
// Get assignments within timeframe
const assignments =
slotIds && slotIds.length > 0
- ? await directus.request(
+ ? ((await directus.request(
readItems("shifts_assignments", {
filter: {
shifts_to: {
@@ -59,9 +59,26 @@ export const getShiftOccurrences = async (
},
fields: ["*", "shift_slots.*", "shift_slots.shifts_assignments.*"],
}),
- )
+ )) as ShiftsAssignment[])
: ([] as ShiftsAssignment[]);
+ const assignmentIds = assignments.map((assignment) => assignment.id);
+
+ const absences = (await directus.request(
+ readItems("shifts_absences", {
+ filter: {
+ shifts_assignment: {
+ _in: assignmentIds,
+ },
+ _or: [
+ { shifts_to: { _gte: from.toISO() } },
+ { shifts_from: { _lte: to.toISO() } },
+ ],
+ },
+ fields: ["shifts_from", "shifts_to", "shifts_assignment"],
+ }),
+ )) as ShiftsAbsence[];
+
const occurrences = [];
// Assign assignments to slots
@@ -76,7 +93,7 @@ export const getShiftOccurrences = async (
slotRules.push({
slotID: slot as number,
- rrule: slotToRrule(shift, shiftRule, filteredAssignments),
+ rrule: slotToRrule(shift, shiftRule, filteredAssignments, absences),
});
}
@@ -125,6 +142,7 @@ export const getShiftOccurrences = async (
return occurrences;
};
+// Get all occurrences for a shift in a given timeframe
export const getOccurrencesForShift = (
shift: ShiftsShift,
shiftRule: RRule,
@@ -145,7 +163,8 @@ export const getOccurrencesForShift = (
return shiftOccurrences;
};
-// Includes information about slots
+// Get occurence object for a shift on a given date
+// Includes information about shift, slots, and assignments
// Time is always given in UTC - even if meant for other timezones
const getSingleShiftOccurence = (
shift: ShiftsShift,
@@ -195,18 +214,21 @@ export const shiftToRRule = (shift: ShiftsShift): RRule => {
});
};
+// SlotRrule is a RRuleSet that shows only free occurences
+// Occurences with existing assignments are excluded
export const slotToRrule = (
shift: ShiftsShift,
shiftRule: RRule,
assignments: ShiftsAssignment[],
+ absences: ShiftsAbsence[],
): RRule => {
- const slotRules = new RRuleSet();
- slotRules.rrule(shiftRule);
+ const slotRule = new RRuleSet();
+ slotRule.rrule(shiftRule);
for (const assignment of assignments) {
- console.log("assignment found until", assignment.shifts_to);
+ const assignmentRule = new RRuleSet();
- slotRules.exrule(
+ assignmentRule.rrule(
new RRule({
freq: RRule.DAILY,
interval: shift.shifts_repeats_every,
@@ -216,9 +238,29 @@ export const slotToRrule = (
: null,
}),
);
+
+ const filteredAbsences = absences.filter(
+ (absence) =>
+ absence.shifts_assignment == assignment.id ||
+ absence.shifts_assignment == null,
+ );
+
+ for (const absence of filteredAbsences) {
+ const absenceRule = new RRule({
+ freq: RRule.DAILY,
+ interval: shift.shifts_repeats_every,
+ dtstart: shiftRule.after(new Date(absence.shifts_from), true),
+ until: shiftRule.before(new Date(absence.shifts_to), true),
+ });
+
+ assignmentRule.exrule(absenceRule);
+ }
+
+ // Exclude assignment from slotRules
+ slotRule.exrule(assignmentRule);
}
- return slotRules;
+ return slotRule;
};
export const isShiftDurationModelActive = (
diff --git a/collectivo/extensions/shifts/index.d.ts b/collectivo/extensions/shifts/index.d.ts
index c6e699e4..21233e53 100644
--- a/collectivo/extensions/shifts/index.d.ts
+++ b/collectivo/extensions/shifts/index.d.ts
@@ -56,6 +56,7 @@ declare global {
assignmentRule: RRuleSet;
absencesRule: RRuleSet;
nextOccurrence: Date | null;
+ isRegular: boolean;
}
export interface ShiftsAbsence {
diff --git a/collectivo/extensions/shifts/pages/shifts/profile.vue b/collectivo/extensions/shifts/pages/shifts/profile.vue
index a686b094..93db3ece 100644
--- a/collectivo/extensions/shifts/pages/shifts/profile.vue
+++ b/collectivo/extensions/shifts/pages/shifts/profile.vue
@@ -3,6 +3,7 @@ import { readItems } from "@directus/sdk";
import { DateTime } from "luxon";
import showShiftToast from "~/composables/toast";
+import { RRuleSet, RRule, datetime } from "rrule";
const config = useRuntimeConfig();
@@ -75,9 +76,43 @@ function getUserSkillNames() {
.catch((error) => showShiftToast("Failed to load skills", error, "error"))
.finally(() => (skillsLoading.value = false));
}
+
+const innerRule = new RRuleSet();
+
+innerRule.rrule(
+ new RRule({
+ freq: RRule.MONTHLY,
+ count: 3,
+ dtstart: datetime(2012, 2, 1, 10, 30),
+ }),
+);
+
+innerRule.exrule(
+ new RRule({
+ freq: RRule.MONTHLY,
+ count: 1,
+ dtstart: datetime(2012, 3, 1, 10, 30),
+ }),
+);
+
+const rruleSet = new RRuleSet();
+
+// Add a rrule to rruleSet
+rruleSet.rrule(
+ new RRule({
+ freq: RRule.MONTHLY,
+ count: 5,
+ dtstart: datetime(2012, 1, 1, 10, 30),
+ }),
+);
+
+rruleSet.exrule(innerRule);
+ To be excluded: {{ innerRule.all() }}
+
+ Final {{ rruleSet.all() }}
From 15a0bd94dc677d3af06191d5d3446ea954c2e3ea Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=ABl?= <57440945+jofmi@users.noreply.github.com>
Date: Fri, 31 May 2024 15:58:18 +0200
Subject: [PATCH 82/86] clean: testing code
---
.../shifts/pages/shifts/profile.vue | 36 -------------------
1 file changed, 36 deletions(-)
diff --git a/collectivo/extensions/shifts/pages/shifts/profile.vue b/collectivo/extensions/shifts/pages/shifts/profile.vue
index 93db3ece..87c2c5f9 100644
--- a/collectivo/extensions/shifts/pages/shifts/profile.vue
+++ b/collectivo/extensions/shifts/pages/shifts/profile.vue
@@ -1,9 +1,7 @@
- To be excluded: {{ innerRule.all() }}
-
- Final {{ rruleSet.all() }}
From 8557040fb5df562fa5d09c9e59ca7661b8113a94 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=ABl?= <57440945+jofmi@users.noreply.github.com>
Date: Fri, 31 May 2024 16:14:19 +0200
Subject: [PATCH 83/86] Merge remote-tracking branch 'theo/shifts' into shifts
---
.../shifts/Assignment/OccurrencesPreview.vue | 1 +
.../shifts/AssignmentModal copy.vue | 7 +-
.../components/shifts/OccurrenceCard.vue | 1 +
.../shifts/components/shifts/SlotCard.vue | 2 +
.../shifts/composables/occurrenceType.ts | 19 ++-
collectivo/extensions/shifts/nuxt.config.ts | 1 +
collectivo/extensions/shifts/package.json | 3 +-
.../server/schemas/001_schema_shifts.ts | 96 +++++++++++-
.../extensions/shifts/tests/basic.test.ts | 14 --
...ntToFirstAndLastIncludedOccurrence.test.ts | 137 ++++++++++++++++++
...ignmentToFirstAndLastIncludedOccurrence.ts | 42 ++++++
.../utils/assignments/getActiveAssignment.ts | 13 ++
.../utils/assignments/getAssigneeName.ts | 24 +++
.../utils/assignments/getNextOccurrence.ts | 12 ++
.../hasActivePermanentAssignment.ts | 13 ++
...tureOccurrenceWithinThatAssignment.test.ts | 113 +++++++++++++++
...reAFutureOccurrenceWithinThatAssignment.ts | 23 +++
.../assignments/rruleDateToShiftOccurrence.ts | 11 ++
.../utils/doTimeIntervalsOverlap.test.ts | 61 ++++++++
.../shifts/utils/doTimeIntervalsOverlap.ts | 19 +++
.../shifts/utils/formatDate.test.ts | 22 +++
.../{composables => utils}/formatDate.ts | 2 +-
.../shifts/utils/isFromToActive.test.ts | 66 +++++++++
.../extensions/shifts/utils/isFromToActive.ts | 23 +++
.../utils/isShiftDurationModelActive.ts | 16 ++
collectivo/extensions/shifts/vitest.config.ts | 3 +
26 files changed, 712 insertions(+), 32 deletions(-)
delete mode 100644 collectivo/extensions/shifts/tests/basic.test.ts
create mode 100644 collectivo/extensions/shifts/utils/assignments/capAssignmentToFirstAndLastIncludedOccurrence.test.ts
create mode 100644 collectivo/extensions/shifts/utils/assignments/capAssignmentToFirstAndLastIncludedOccurrence.ts
create mode 100644 collectivo/extensions/shifts/utils/assignments/getActiveAssignment.ts
create mode 100644 collectivo/extensions/shifts/utils/assignments/getAssigneeName.ts
create mode 100644 collectivo/extensions/shifts/utils/assignments/getNextOccurrence.ts
create mode 100644 collectivo/extensions/shifts/utils/assignments/hasActivePermanentAssignment.ts
create mode 100644 collectivo/extensions/shifts/utils/assignments/isThereAFutureOccurrenceWithinThatAssignment.test.ts
create mode 100644 collectivo/extensions/shifts/utils/assignments/isThereAFutureOccurrenceWithinThatAssignment.ts
create mode 100644 collectivo/extensions/shifts/utils/assignments/rruleDateToShiftOccurrence.ts
create mode 100644 collectivo/extensions/shifts/utils/doTimeIntervalsOverlap.test.ts
create mode 100644 collectivo/extensions/shifts/utils/doTimeIntervalsOverlap.ts
create mode 100644 collectivo/extensions/shifts/utils/formatDate.test.ts
rename collectivo/extensions/shifts/{composables => utils}/formatDate.ts (93%)
create mode 100644 collectivo/extensions/shifts/utils/isFromToActive.test.ts
create mode 100644 collectivo/extensions/shifts/utils/isFromToActive.ts
create mode 100644 collectivo/extensions/shifts/utils/isShiftDurationModelActive.ts
create mode 100644 collectivo/extensions/shifts/vitest.config.ts
diff --git a/collectivo/extensions/shifts/components/shifts/Assignment/OccurrencesPreview.vue b/collectivo/extensions/shifts/components/shifts/Assignment/OccurrencesPreview.vue
index d1a1f5bb..d1806cc4 100644
--- a/collectivo/extensions/shifts/components/shifts/Assignment/OccurrencesPreview.vue
+++ b/collectivo/extensions/shifts/components/shifts/Assignment/OccurrencesPreview.vue
@@ -5,6 +5,7 @@ import {
getOccurrenceType,
OccurrenceType,
} from "~/composables/occurrenceType";
+import getAssigneeName from "~/utils/assignments/getAssigneeName";
const props = defineProps({
shiftsSlot: { type: Object as PropType, required: true },
diff --git a/collectivo/extensions/shifts/components/shifts/AssignmentModal copy.vue b/collectivo/extensions/shifts/components/shifts/AssignmentModal copy.vue
index 1ef886d2..47efc954 100644
--- a/collectivo/extensions/shifts/components/shifts/AssignmentModal copy.vue
+++ b/collectivo/extensions/shifts/components/shifts/AssignmentModal copy.vue
@@ -4,12 +4,13 @@ import showShiftToast from "~/composables/toast";
import { DateTime } from "luxon";
import { ItemStatus } from "@collectivo/collectivo/server/utils/directusFields";
import OccurrencesPreview from "~/components/shifts/Assignment/OccurrencesPreview.vue";
-import { fromToOverlaps, getNextOccurrences } from "~/composables/shifts";
+import { getNextOccurrences } from "~/composables/shifts";
import {
getOccurrenceType,
OccurrenceType,
} from "~/composables/occurrenceType";
-import { capAssignmentToFirstAndLastIncludedOccurrence } from "~/composables/assignments";
+import capAssignmentToFirstAndLastIncludedOccurrence from "~/utils/assignments/capAssignmentToFirstAndLastIncludedOccurrence";
+import doTimeIntervalsOverlap from "~/utils/doTimeIntervalsOverlap";
const props = defineProps({
shiftID: {
@@ -223,7 +224,7 @@ function overlapWithOtherAssignment() {
if (props.assignment && props.assignment.id == assignment.id) continue;
if (
- fromToOverlaps(
+ doTimeIntervalsOverlap(
from.value,
DateTime.fromISO(assignment.shifts_from),
to.value,
diff --git a/collectivo/extensions/shifts/components/shifts/OccurrenceCard.vue b/collectivo/extensions/shifts/components/shifts/OccurrenceCard.vue
index c394134b..05d65444 100644
--- a/collectivo/extensions/shifts/components/shifts/OccurrenceCard.vue
+++ b/collectivo/extensions/shifts/components/shifts/OccurrenceCard.vue
@@ -1,5 +1,6 @@