diff --git a/.env.example b/.env.example index 0eca03648..e989d67fa 100644 --- a/.env.example +++ b/.env.example @@ -2,4 +2,4 @@ VITE_APPWRITE_ENDPOINT=http://localhost/v1 VITE_APPWRITE_GROWTH_ENDPOINT= VITE_GA_PROJECT= VITE_CONSOLE_MODE=self-hosted -VITE_STRIPE_PUBLIC_KEY= +VITE_STRIPE_PUBLIC_KEY= \ No newline at end of file diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 865a0bd9e..a0490076e 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -1,13 +1,8 @@ name: Tests on: - push: - branches: [main] - paths-ignore: - - '**/*.md' - - 'static/**/*' pull_request: - branches: [main] + branches: ['**'] paths-ignore: - '**/*.md' - 'static/**/*' @@ -23,9 +18,9 @@ jobs: - name: Use Node.js uses: actions/setup-node@v3 with: - node-version: 18 - # - name: Audit dependencies - # run: npm audit --audit-level low + node-version: 20 + - name: Audit dependencies + run: npm audit --audit-level critical - name: Install dependencies run: npm ci - name: Svelte Diagnostics diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 000000000..cc41cea9b --- /dev/null +++ b/.prettierignore @@ -0,0 +1,4 @@ +# Ignore files for PNPM, NPM and YARN +pnpm-lock.yaml +package-lock.json +yarn.lock diff --git a/package-lock.json b/package-lock.json index 464a87ffa..1c672f2d2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,9 +6,9 @@ "": { "name": "@appwrite/console", "dependencies": { - "@appwrite.io/console": "^0.4.2", - "@appwrite.io/pink": "0.2.0", - "@appwrite.io/pink-icons": "0.2.0", + "@appwrite.io/console": "^0.6.0", + "@appwrite.io/pink": "0.8.0", + "@appwrite.io/pink-icons": "0.8.0", "@popperjs/core": "^2.11.8", "@sentry/svelte": "^7.66.0", "@sentry/tracing": "^7.66.0", @@ -25,16 +25,15 @@ "pretty-bytes": "^6.1.1", "prismjs": "^1.29.0", "svelte-confetti": "^1.3.0", - "tippy.js": "^6.3.7", - "web-vitals": "^3.4.0" + "tippy.js": "^6.3.7" }, "devDependencies": { "@melt-ui/pp": "^0.1.4", "@melt-ui/svelte": "^0.61.2", "@playwright/test": "^1.37.1", - "@sveltejs/adapter-static": "^2.0.3", - "@sveltejs/kit": "^1.24.0", - "@sveltejs/vite-plugin-svelte": "^2.4.5", + "@sveltejs/adapter-static": "^3.0.1", + "@sveltejs/kit": "^2.3.4", + "@sveltejs/vite-plugin-svelte": "^3.0.1", "@testing-library/dom": "^9.0.1", "@testing-library/jest-dom": "^5.16.5", "@testing-library/svelte": "^4.0.3", @@ -43,24 +42,24 @@ "@types/prismjs": "^1.26.0", "@typescript-eslint/eslint-plugin": "^6.5.0", "@typescript-eslint/parser": "^6.5.0", - "@vitest/ui": "^0.29.7", + "@vitest/ui": "^1.2.1", "eslint": "^8.48.0", "eslint-config-prettier": "^9.0.0", "eslint-plugin-svelte": "^2.33.0", "jsdom": "^22.1.0", "kleur": "^4.1.5", - "prettier": "^3.0.3", - "prettier-plugin-svelte": "^3.0.3", + "prettier": "^3.2.2", + "prettier-plugin-svelte": "^3.1.2", "sass": "^1.66.1", - "svelte": "^4.2.0", + "svelte": "^4.2.9", "svelte-check": "^3.5.1", "svelte-jester": "^2.3.2", "svelte-preprocess": "^5.0.4", "svelte-sequential-preprocessor": "^2.0.1", "tslib": "^2.6.2", "typescript": "^5.2.2", - "vite": "^4.4.9", - "vitest": "^0.29.7" + "vite": "^5.0.11", + "vitest": "^1.2.1" }, "engines": { "node": ">=16" @@ -76,9 +75,9 @@ } }, "node_modules/@adobe/css-tools": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.2.tgz", - "integrity": "sha512-DA5a1C0gD/pLOvhv33YMrbf2FK3oUzwNl9oOJqE4XVjuEtt6XIakRcsd7eLiOSPkp1kTRQGICTA8cKra/vFbjw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.3.tgz", + "integrity": "sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==", "dev": true }, "node_modules/@ampproject/remapping": { @@ -102,9 +101,9 @@ } }, "node_modules/@analytics/core": { - "version": "0.12.7", - "resolved": "https://registry.npmjs.org/@analytics/core/-/core-0.12.7.tgz", - "integrity": "sha512-etmIPCoxWLoUZ/o1o2zvIk4cdVHa8I1xUQtTuLA+YXQ4SsFbm75ZoMXJBqWrNSENpqCJgoL6hizl5uTbkNN+1Q==", + "version": "0.12.9", + "resolved": "https://registry.npmjs.org/@analytics/core/-/core-0.12.9.tgz", + "integrity": "sha512-jac5Q8iapeDiURFu6BXqT9FCHOENaazKgWXNdlr5lqE9X70XRDi+96weNVNUmkUoAjcP9Yf+xFwGy2dhP5+BnQ==", "funding": [ { "type": "GitHub Sponsors", @@ -159,28 +158,28 @@ "integrity": "sha512-TD+xbmsBLyYy/IxFimW/YL/9L2IEnM7/EoV9Aeh56U64Ify8o27HJcKjo38XY9Tcn0uOq1AX3thkKgvtWvwFQg==" }, "node_modules/@appwrite.io/console": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@appwrite.io/console/-/console-0.4.2.tgz", - "integrity": "sha512-WUltkC5q7RIK7TDCb+qTXq2cPtBek9k98Ilqcn8Lv3rN5ZuK0x33AwcpTAEPD0DE9phWXmvoV1a8H5PGMcGKew==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@appwrite.io/console/-/console-0.6.0.tgz", + "integrity": "sha512-so2k7GlLMmxIFev0IWMf9kugDmc+8MZT5r8h9dh/ypYPWUjOmaUTSkxS0Km9QlQ2c3eOoeKN+T6rWE0StzNiZQ==", "dependencies": { "cross-fetch": "3.1.5", "isomorphic-form-data": "2.0.0" } }, "node_modules/@appwrite.io/pink": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@appwrite.io/pink/-/pink-0.2.0.tgz", - "integrity": "sha512-ni6O/yPiWkCYQ68PNcbmus6QrPpIEl7xmzKHU2dkV2L19RVio8thtBtT9ckJJ8uBMGsczASWs0fUqOxIvBmtNw==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@appwrite.io/pink/-/pink-0.8.0.tgz", + "integrity": "sha512-UZKwkUtAo2N0JiTiKDPWC8GHubTF2905DOzuCGl716fYua2gNIlS8D+HA/wd15qyRjZlgQh4MtVUAdHI8GLf8g==", "dependencies": { - "@appwrite.io/pink-icons": "0.2.0", + "@appwrite.io/pink-icons": "0.8.0", "normalize.css": "^8.0.1", "the-new-css-reset": "^1.11.2" } }, "node_modules/@appwrite.io/pink-icons": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@appwrite.io/pink-icons/-/pink-icons-0.2.0.tgz", - "integrity": "sha512-wThBUGdvpwT0q2fcUapiugfBiB4RFDvTlW6p+U7Dol61mmCpNteFSIoBPiPJzN5015n1v4UEWL/rdOia4CWdBQ==" + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@appwrite.io/pink-icons/-/pink-icons-0.8.0.tgz", + "integrity": "sha512-UQd4mXOohGggXHNhIlYt4u2NLB/ubI6pvkdllrBQnHZEb7JL2iklff8Ne5moW8F9DeXLBt/ZQLRe240lvVjm6Q==" }, "node_modules/@babel/code-frame": { "version": "7.23.5", @@ -277,22 +276,22 @@ } }, "node_modules/@babel/core": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.5.tgz", - "integrity": "sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz", + "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==", "dev": true, "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.5", - "@babel/helper-compilation-targets": "^7.22.15", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.5", - "@babel/parser": "^7.23.5", - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.5", - "@babel/types": "^7.23.5", + "@babel/helpers": "^7.23.9", + "@babel/parser": "^7.23.9", + "@babel/template": "^7.23.9", + "@babel/traverse": "^7.23.9", + "@babel/types": "^7.23.9", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -318,13 +317,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.5.tgz", - "integrity": "sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", "dev": true, "peer": true, "dependencies": { - "@babel/types": "^7.23.5", + "@babel/types": "^7.23.6", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -334,15 +333,15 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", - "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", "dev": true, "peer": true, "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.15", - "browserslist": "^4.21.9", + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -496,15 +495,15 @@ } }, "node_modules/@babel/helpers": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.5.tgz", - "integrity": "sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.9.tgz", + "integrity": "sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==", "dev": true, "peer": true, "dependencies": { - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.5", - "@babel/types": "^7.23.5" + "@babel/template": "^7.23.9", + "@babel/traverse": "^7.23.9", + "@babel/types": "^7.23.9" }, "engines": { "node": ">=6.9.0" @@ -596,9 +595,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.5.tgz", - "integrity": "sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz", + "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==", "peer": true, "bin": { "parser": "bin/babel-parser.js" @@ -799,9 +798,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.5.tgz", - "integrity": "sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz", + "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==", "dev": true, "dependencies": { "regenerator-runtime": "^0.14.0" @@ -811,36 +810,36 @@ } }, "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz", + "integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==", "dev": true, "peer": true, "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.23.9", + "@babel/types": "^7.23.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.5.tgz", - "integrity": "sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.9.tgz", + "integrity": "sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==", "dev": true, "peer": true, "dependencies": { "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.5", + "@babel/generator": "^7.23.6", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.5", - "@babel/types": "^7.23.5", - "debug": "^4.1.0", + "@babel/parser": "^7.23.9", + "@babel/types": "^7.23.9", + "debug": "^4.3.1", "globals": "^11.1.0" }, "engines": { @@ -858,9 +857,9 @@ } }, "node_modules/@babel/types": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.5.tgz", - "integrity": "sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz", + "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==", "dev": true, "peer": true, "dependencies": { @@ -879,10 +878,26 @@ "dev": true, "peer": true }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", "cpu": [ "arm" ], @@ -896,9 +911,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", "cpu": [ "arm64" ], @@ -912,9 +927,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", "cpu": [ "x64" ], @@ -928,9 +943,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", "cpu": [ "arm64" ], @@ -944,9 +959,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", "cpu": [ "x64" ], @@ -960,9 +975,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", "cpu": [ "arm64" ], @@ -976,9 +991,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", "cpu": [ "x64" ], @@ -992,9 +1007,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", "cpu": [ "arm" ], @@ -1008,9 +1023,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", "cpu": [ "arm64" ], @@ -1024,9 +1039,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", "cpu": [ "ia32" ], @@ -1040,9 +1055,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", "cpu": [ "loong64" ], @@ -1056,9 +1071,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", "cpu": [ "mips64el" ], @@ -1072,9 +1087,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", "cpu": [ "ppc64" ], @@ -1088,9 +1103,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", "cpu": [ "riscv64" ], @@ -1104,9 +1119,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", "cpu": [ "s390x" ], @@ -1120,9 +1135,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", "cpu": [ "x64" ], @@ -1136,9 +1151,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", "cpu": [ "x64" ], @@ -1152,9 +1167,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", "cpu": [ "x64" ], @@ -1168,9 +1183,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", "cpu": [ "x64" ], @@ -1184,9 +1199,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", "cpu": [ "arm64" ], @@ -1200,9 +1215,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", "cpu": [ "ia32" ], @@ -1216,9 +1231,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", "cpu": [ "x64" ], @@ -1278,63 +1293,98 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/@eslint/js": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.55.0.tgz", - "integrity": "sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@fastify/busboy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.0.tgz", - "integrity": "sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==", - "dev": true, - "engines": { - "node": ">=14" - } - }, "node_modules/@floating-ui/core": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.2.tgz", - "integrity": "sha512-Ii3MrfY/GAIN3OhXNzpCKaLxHQfJF9qvwq/kEJYdqDxeIHa01K8sldugal6TmeeXl+WMvhv9cnVzUTaFFJF09A==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.0.tgz", + "integrity": "sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==", "dev": true, "dependencies": { - "@floating-ui/utils": "^0.1.3" + "@floating-ui/utils": "^0.2.1" } }, "node_modules/@floating-ui/dom": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.3.tgz", - "integrity": "sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.3.tgz", + "integrity": "sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==", "dev": true, "dependencies": { - "@floating-ui/core": "^1.4.2", - "@floating-ui/utils": "^0.1.3" + "@floating-ui/core": "^1.0.0", + "@floating-ui/utils": "^0.2.0" } }, "node_modules/@floating-ui/utils": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.6.tgz", - "integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz", + "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==", "dev": true }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -1349,15 +1399,15 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", "dev": true }, "node_modules/@internationalized/date": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.5.0.tgz", - "integrity": "sha512-nw0Q+oRkizBWMioseI8+2TeUPEyopJVz5YxoYVzR0W1v+2YytiYah7s/ot35F149q/xAg4F1gT/6eTd+tsUpFQ==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.5.2.tgz", + "integrity": "sha512-vo1yOMUt2hzp63IutEaTUxROdvQg1qlMRsbCvbay2AK2Gai7wIgCyK5weEX3nHkiLgo4qCXHijFNC/ILhlRpOQ==", "dev": true, "dependencies": { "@swc/helpers": "^0.5.0" @@ -1818,9 +1868,9 @@ } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "engines": { "node": ">=6.0.0" } @@ -1839,9 +1889,9 @@ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", + "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -1916,12 +1966,12 @@ } }, "node_modules/@playwright/test": { - "version": "1.40.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.40.1.tgz", - "integrity": "sha512-EaaawMTOeEItCRvfmkI9v6rBkF1svM8wjl/YPRrg2N2Wmp+4qJYkWtJsbew1szfKKDm6fPLy4YAanBhIlf9dWw==", + "version": "1.41.2", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.41.2.tgz", + "integrity": "sha512-qQB9h7KbibJzrDpkXkYvsmiDJK14FULCCZgEcoe2AvFAS64oCirWTwzTlAYEbKaRxWs5TFesE1Na6izMv3HfGg==", "dev": true, "dependencies": { - "playwright": "1.40.1" + "playwright": "1.41.2" }, "bin": { "playwright": "cli.js" @@ -1945,82 +1995,267 @@ "url": "https://opencollective.com/popperjs" } }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.0.tgz", + "integrity": "sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.0.tgz", + "integrity": "sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.0.tgz", + "integrity": "sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.0.tgz", + "integrity": "sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.0.tgz", + "integrity": "sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.0.tgz", + "integrity": "sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.0.tgz", + "integrity": "sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.0.tgz", + "integrity": "sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.0.tgz", + "integrity": "sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.0.tgz", + "integrity": "sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.0.tgz", + "integrity": "sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.0.tgz", + "integrity": "sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.0.tgz", + "integrity": "sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@sentry-internal/feedback": { - "version": "7.86.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-7.86.0.tgz", - "integrity": "sha512-6rl0JYjmAKnhm4/fuFaROh4Ht8oi9f6ZeIcViCuGJcrGICZJJY0s+R77XJI78rNa82PYFrSCcnWXcGji4T8E7g==", + "version": "7.102.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-7.102.0.tgz", + "integrity": "sha512-GxHdzbOF4tg6TtyQzFqb/8c/p07n68qZC5KYwzs7AuW5ey0IPmdC58pOh3Kk52JA0P69/RZy39+r1p1Swr6C+Q==", "dependencies": { - "@sentry/core": "7.86.0", - "@sentry/types": "7.86.0", - "@sentry/utils": "7.86.0" + "@sentry/core": "7.102.0", + "@sentry/types": "7.102.0", + "@sentry/utils": "7.102.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@sentry-internal/replay-canvas": { + "version": "7.102.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-7.102.0.tgz", + "integrity": "sha512-rgNO4PdFv0AYflBsCNbSIwpQuOOJQTqyu8i8U0PupjveNjkm0CUJhber/ZOcaGmbyjdvwikGwgWY2O0Oj0USCA==", + "dependencies": { + "@sentry/core": "7.102.0", + "@sentry/replay": "7.102.0", + "@sentry/types": "7.102.0", + "@sentry/utils": "7.102.0" }, "engines": { "node": ">=12" } }, "node_modules/@sentry-internal/tracing": { - "version": "7.86.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.86.0.tgz", - "integrity": "sha512-b4dUsNWlPWRwakGwR7bhOkqiFlqQszH1hhVFwrm/8s3kqEBZ+E4CeIfCvuHBHQ1cM/fx55xpXX/BU163cy+3iQ==", + "version": "7.102.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.102.0.tgz", + "integrity": "sha512-BlE33HWL1IzkGa0W+pwTiyu01MUIfYf+WnO9UC8qkDW3jxVvg2zhoSjXSxikT+KPCOgoZpQHspaTzwjnI1LCvw==", "dependencies": { - "@sentry/core": "7.86.0", - "@sentry/types": "7.86.0", - "@sentry/utils": "7.86.0" + "@sentry/core": "7.102.0", + "@sentry/types": "7.102.0", + "@sentry/utils": "7.102.0" }, "engines": { "node": ">=8" } }, "node_modules/@sentry/browser": { - "version": "7.86.0", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.86.0.tgz", - "integrity": "sha512-nfYWpVOmug+W7KJO7/xhA1JScMZcYHcoOVHLsUFm4znx51U4qZEk+zZDM11Q2Nw6MuDyEYg6bsH1QCwaoC6nLw==", + "version": "7.102.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.102.0.tgz", + "integrity": "sha512-hIggcMnojIbWhbmlRfkykHmy6n7pjug0AHfF19HRUQxAx9KJfMH5YdWvohov0Hb9fS+jdvqgE+/4AWbEeXQrHw==", "dependencies": { - "@sentry-internal/feedback": "7.86.0", - "@sentry-internal/tracing": "7.86.0", - "@sentry/core": "7.86.0", - "@sentry/replay": "7.86.0", - "@sentry/types": "7.86.0", - "@sentry/utils": "7.86.0" + "@sentry-internal/feedback": "7.102.0", + "@sentry-internal/replay-canvas": "7.102.0", + "@sentry-internal/tracing": "7.102.0", + "@sentry/core": "7.102.0", + "@sentry/replay": "7.102.0", + "@sentry/types": "7.102.0", + "@sentry/utils": "7.102.0" }, "engines": { "node": ">=8" } }, "node_modules/@sentry/core": { - "version": "7.86.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.86.0.tgz", - "integrity": "sha512-SbLvqd1bRYzhDS42u7GMnmbDMfth/zRiLElQWbLK/shmuZzTcfQSwNNdF4Yj+VfjOkqPFgGmICHSHVUc9dh01g==", + "version": "7.102.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.102.0.tgz", + "integrity": "sha512-GO9eLOSBK1waW4AD0wDXAreaNqXFQ1MPQZrkKcN+GJYEFhJK1+u+MSV7vO5Fs/rIfaTZIZ2jtEkxSSAOucE8EQ==", "dependencies": { - "@sentry/types": "7.86.0", - "@sentry/utils": "7.86.0" + "@sentry/types": "7.102.0", + "@sentry/utils": "7.102.0" }, "engines": { "node": ">=8" } }, "node_modules/@sentry/replay": { - "version": "7.86.0", - "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.86.0.tgz", - "integrity": "sha512-YYZO8bfQSx1H87Te/zzyHPLHvExWiYwUfMWW68yGX+PPZIIzxaM81/iCQHkoucxlvuPCOtxCgf7RSMbsnqEa8g==", + "version": "7.102.0", + "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.102.0.tgz", + "integrity": "sha512-sUIBN4ZY0J5/dQS3KOe5VLykm856KZkTrhV8kmBEylzQhw1BBc8i2ehTILy5ZYh9Ra8uXPTAmtwpvYf/dRDfAg==", "dependencies": { - "@sentry-internal/tracing": "7.86.0", - "@sentry/core": "7.86.0", - "@sentry/types": "7.86.0", - "@sentry/utils": "7.86.0" + "@sentry-internal/tracing": "7.102.0", + "@sentry/core": "7.102.0", + "@sentry/types": "7.102.0", + "@sentry/utils": "7.102.0" }, "engines": { "node": ">=12" } }, "node_modules/@sentry/svelte": { - "version": "7.86.0", - "resolved": "https://registry.npmjs.org/@sentry/svelte/-/svelte-7.86.0.tgz", - "integrity": "sha512-Qf81DORscJrr/8nXdfRRIPThjfGD+db6VvuoNCwQ+/t3WyqSVz96huURkImTBsnQUY0Bw1y4R72ySHRzg0ynNA==", + "version": "7.102.0", + "resolved": "https://registry.npmjs.org/@sentry/svelte/-/svelte-7.102.0.tgz", + "integrity": "sha512-XWfWbYYIS245x8CeabAgV32W3imaPtpQJy+k+NRbPcoNlANuaJlwXz4ysQia+moB0n7qUMuPAeqJa7WG8Wnfhw==", "dependencies": { - "@sentry/browser": "7.86.0", - "@sentry/types": "7.86.0", - "@sentry/utils": "7.86.0", + "@sentry/browser": "7.102.0", + "@sentry/core": "7.102.0", + "@sentry/types": "7.102.0", + "@sentry/utils": "7.102.0", "magic-string": "^0.30.0" }, "engines": { @@ -2031,30 +2266,30 @@ } }, "node_modules/@sentry/tracing": { - "version": "7.86.0", - "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-7.86.0.tgz", - "integrity": "sha512-WPqgmbLm6ntpIoTZd1L/RHIVEDMmvVjIDxKeXGiJeXHZG2VMtgwoxuZAFluVFaD0Sr20Nhj+ZS7HvKOWTxrjjA==", + "version": "7.102.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-7.102.0.tgz", + "integrity": "sha512-2ZLgJw43qY7FjRHnnPGp4rOlPpsrcDGcFlnPIVJgfV14b4bfin1kMMeVgHc9O1S+DTfrkakcPnPnOg1qK1qltg==", "dependencies": { - "@sentry-internal/tracing": "7.86.0" + "@sentry-internal/tracing": "7.102.0" }, "engines": { "node": ">=8" } }, "node_modules/@sentry/types": { - "version": "7.86.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.86.0.tgz", - "integrity": "sha512-pGAt0+bMfWgo0KG2epthfNV4Wae03tURpoxNjGo5Fr4cXxvLTSijSAQ6rmmO4bXBJ7+rErEjX30g30o/eEdP9g==", + "version": "7.102.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.102.0.tgz", + "integrity": "sha512-FPfFBP0x3LkPARw1/6cWySLq1djIo8ao3Qo2KNBeE9CHdq8bsS1a8zzjJLuWG4Ww+wieLP8/lY3WTgrCz4jowg==", "engines": { "node": ">=8" } }, "node_modules/@sentry/utils": { - "version": "7.86.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.86.0.tgz", - "integrity": "sha512-6PejFtw9VTFFy5vu0ks+U7Ozkqz+eMt+HN8AZKBKErYzX5/xs0kpkOcSRpu3ETdTYcZf8VAmLVgFgE2BE+3WuQ==", + "version": "7.102.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.102.0.tgz", + "integrity": "sha512-cp5KCRe0slOVMwG4iP2Z4UajQkjryRTiFskZ5H7Q3X9R5voM8+DAhiDcIW88GL9NxqyUrAJOjmKdeLK2vM+bdA==", "dependencies": { - "@sentry/types": "7.86.0" + "@sentry/types": "7.102.0" }, "engines": { "node": ">=8" @@ -2067,9 +2302,9 @@ "dev": true }, "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, "peer": true, "dependencies": { @@ -2087,103 +2322,103 @@ } }, "node_modules/@stripe/stripe-js": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@stripe/stripe-js/-/stripe-js-2.2.0.tgz", - "integrity": "sha512-YyXQbsXvnNRJ6MofFhCLIQ4W7UpfkfSOQhjIaHEiCMBv3IBxhzugXiYNNzceGTK/7DL31v7HtTnkJ+FI+6AIow==" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@stripe/stripe-js/-/stripe-js-2.4.0.tgz", + "integrity": "sha512-WFkQx1mbs2b5+7looI9IV1BLa3bIApuN3ehp9FP58xGg7KL9hCHDECgW3BwO9l9L+xBPVAD7Yjn1EhGe6EDTeA==" }, "node_modules/@sveltejs/adapter-static": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-2.0.3.tgz", - "integrity": "sha512-VUqTfXsxYGugCpMqQv1U0LIdbR3S5nBkMMDmpjGVJyM6Q2jHVMFtdWJCkeHMySc6mZxJ+0eZK3T7IgmUCDrcUQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-3.0.1.tgz", + "integrity": "sha512-6lMvf7xYEJ+oGeR5L8DFJJrowkefTK6ZgA4JiMqoClMkKq0s6yvsd3FZfCFvX1fQ0tpCD7fkuRVHsnUVgsHyNg==", "dev": true, "peerDependencies": { - "@sveltejs/kit": "^1.5.0" + "@sveltejs/kit": "^2.0.0" } }, "node_modules/@sveltejs/kit": { - "version": "1.27.7", - "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.27.7.tgz", - "integrity": "sha512-AzXYDoYt42clCBwLF9GTHsXyg2DFR31Ncyt8yxu8Aw4tgB433V+w+hcr1RTfAN9zKW2J2PY9FMQ8FoX/4Vw8CA==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.5.1.tgz", + "integrity": "sha512-TKj08o3mJCoQNLTdRdGkHPePTCPUGTgkew65RDqjVU3MtPVxljsofXQYfXndHfq0P7KoPRO/0/reF6HesU0Djw==", "dev": true, "hasInstallScript": true, "dependencies": { - "@sveltejs/vite-plugin-svelte": "^2.5.0", - "@types/cookie": "^0.5.1", - "cookie": "^0.5.0", - "devalue": "^4.3.1", + "@types/cookie": "^0.6.0", + "cookie": "^0.6.0", + "devalue": "^4.3.2", "esm-env": "^1.0.0", + "import-meta-resolve": "^4.0.0", "kleur": "^4.1.5", - "magic-string": "^0.30.0", - "mrmime": "^1.0.1", + "magic-string": "^0.30.5", + "mrmime": "^2.0.0", "sade": "^1.8.1", "set-cookie-parser": "^2.6.0", - "sirv": "^2.0.2", - "tiny-glob": "^0.2.9", - "undici": "~5.26.2" + "sirv": "^2.0.4", + "tiny-glob": "^0.2.9" }, "bin": { "svelte-kit": "svelte-kit.js" }, "engines": { - "node": "^16.14 || >=18" + "node": ">=18.13" }, "peerDependencies": { - "svelte": "^3.54.0 || ^4.0.0-next.0 || ^5.0.0-next.0", - "vite": "^4.0.0" + "@sveltejs/vite-plugin-svelte": "^3.0.0", + "svelte": "^4.0.0 || ^5.0.0-next.0", + "vite": "^5.0.3" } }, "node_modules/@sveltejs/vite-plugin-svelte": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.5.3.tgz", - "integrity": "sha512-erhNtXxE5/6xGZz/M9eXsmI7Pxa6MS7jyTy06zN3Ck++ldrppOnOlJwHHTsMC7DHDQdgUp4NAc4cDNQ9eGdB/w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-3.0.2.tgz", + "integrity": "sha512-MpmF/cju2HqUls50WyTHQBZUV3ovV/Uk8k66AN2gwHogNAG8wnW8xtZDhzNBsFJJuvmq1qnzA5kE7YfMJNFv2Q==", "dev": true, "dependencies": { - "@sveltejs/vite-plugin-svelte-inspector": "^1.0.4", + "@sveltejs/vite-plugin-svelte-inspector": "^2.0.0", "debug": "^4.3.4", "deepmerge": "^4.3.1", "kleur": "^4.1.5", - "magic-string": "^0.30.3", + "magic-string": "^0.30.5", "svelte-hmr": "^0.15.3", - "vitefu": "^0.2.4" + "vitefu": "^0.2.5" }, "engines": { - "node": "^14.18.0 || >= 16" + "node": "^18.0.0 || >=20" }, "peerDependencies": { - "svelte": "^3.54.0 || ^4.0.0 || ^5.0.0-next.0", - "vite": "^4.0.0" + "svelte": "^4.0.0 || ^5.0.0-next.0", + "vite": "^5.0.0" } }, "node_modules/@sveltejs/vite-plugin-svelte-inspector": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-1.0.4.tgz", - "integrity": "sha512-zjiuZ3yydBtwpF3bj0kQNV0YXe+iKE545QGZVTaylW3eAzFr+pJ/cwK8lZEaRp4JtaJXhD5DyWAV4AxLh6DgaQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-2.0.0.tgz", + "integrity": "sha512-gjr9ZFg1BSlIpfZ4PRewigrvYmHWbDrq2uvvPB1AmTWKuM+dI1JXQSUu2pIrYLb/QncyiIGkFDFKTwJ0XqQZZg==", "dev": true, "dependencies": { "debug": "^4.3.4" }, "engines": { - "node": "^14.18.0 || >= 16" + "node": "^18.0.0 || >=20" }, "peerDependencies": { - "@sveltejs/vite-plugin-svelte": "^2.2.0", - "svelte": "^3.54.0 || ^4.0.0", - "vite": "^4.0.0" + "@sveltejs/vite-plugin-svelte": "^3.0.0", + "svelte": "^4.0.0 || ^5.0.0-next.0", + "vite": "^5.0.0" } }, "node_modules/@swc/helpers": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.3.tgz", - "integrity": "sha512-FaruWX6KdudYloq1AHD/4nU+UsMTdNE8CKyrseXWEcgjDAbvkwJg2QGPAnfIJLIWsjZOSPLOAykK6fuYp4vp4A==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.6.tgz", + "integrity": "sha512-aYX01Ke9hunpoCexYAgQucEpARGQ5w/cqHFrIR+e9gdKb1QWTsVJuTJ2ozQzIAxLyRQe/m+2RqzkyOOGiMKRQA==", "dev": true, "dependencies": { "tslib": "^2.4.0" } }, "node_modules/@testing-library/dom": { - "version": "9.3.3", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.3.tgz", - "integrity": "sha512-fB0R+fa3AUqbLHWyxXa2kGVtf1Fe1ZZFr0Zp6AIbIAzXb2mKbEXl+PCQNUOaq5lbTab5tfctfXRNsWXxa2f7Aw==", + "version": "9.3.4", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.4.tgz", + "integrity": "sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.10.4", @@ -2235,9 +2470,9 @@ } }, "node_modules/@testing-library/svelte": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@testing-library/svelte/-/svelte-4.0.5.tgz", - "integrity": "sha512-P7X3mpYv/My4hBZfxVxTFV5KcA+EoWfRCguWP7WQdYj6HMdg/L+LiwG4ocvLe+hupedrC7dwcy85JlxKplJp2g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@testing-library/svelte/-/svelte-4.1.0.tgz", + "integrity": "sha512-MJqe7x9WowkiAVdk9mvazEC2ktFZdmK2OqFVoO557PC37aBemQ4ozqdK3yrG34Zg9kuln3qgTVeLSh08e69AMw==", "dev": true, "dependencies": { "@testing-library/dom": "^9.3.1" @@ -2250,9 +2485,9 @@ } }, "node_modules/@testing-library/user-event": { - "version": "14.5.1", - "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.5.1.tgz", - "integrity": "sha512-UCcUKrUYGj7ClomOo2SpNVvx4/fkd/2BbIHDCle8A0ax+P3bU7yJwDBDrS6ZwdTMARWTGODX1hEsCcO+7beJjg==", + "version": "14.5.2", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.5.2.tgz", + "integrity": "sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==", "dev": true, "engines": { "node": ">=12", @@ -2292,9 +2527,9 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.7", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.7.tgz", - "integrity": "sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==", + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", "dev": true, "peer": true, "dependencies": { @@ -2313,34 +2548,19 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.20.4", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.4.tgz", - "integrity": "sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", + "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", "dev": true, "peer": true, "dependencies": { "@babel/types": "^7.20.7" } }, - "node_modules/@types/chai": { - "version": "4.3.11", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.11.tgz", - "integrity": "sha512-qQR1dr2rGIHYlJulmr8Ioq3De0Le9E4MJ5AiaeAETJJpndT1uUNHsGFK3L/UIu+rbkQSdj8J/w2bCsBZc/Y5fQ==", - "dev": true - }, - "node_modules/@types/chai-subset": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.5.tgz", - "integrity": "sha512-c2mPnw+xHtXDoHmdtcCXGwyLMiauiAyxWMzhGpqHC4nqI/Y5G2XhTampslK2rb59kpcuHon03UH8W6iYUzw88A==", - "dev": true, - "dependencies": { - "@types/chai": "*" - } - }, "node_modules/@types/cookie": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.5.4.tgz", - "integrity": "sha512-7z/eR6O859gyWIAjuvBWFzNURmf2oPBmJlfVWkwehU5nzIyjwBsTh7WMmEEV4JFnHuQ3ex4oyTvfKzcyJVDBNA==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", "dev": true }, "node_modules/@types/deep-equal": { @@ -2395,9 +2615,9 @@ } }, "node_modules/@types/jest": { - "version": "29.5.11", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.11.tgz", - "integrity": "sha512-S2mHmYIVe13vrm6q4kN6fLYYAka15ALQki/vgDC3mIukEOx8WJlv0kQPM+d4w8Gp6u0uSdKND04IlTXBv0rwnQ==", + "version": "29.5.12", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", + "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", "dev": true, "dependencies": { "expect": "^29.0.0", @@ -2443,9 +2663,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.10.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.4.tgz", - "integrity": "sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg==", + "version": "20.11.19", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.19.tgz", + "integrity": "sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -2464,9 +2684,9 @@ "dev": true }, "node_modules/@types/semver": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", - "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.7.tgz", + "integrity": "sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg==", "dev": true }, "node_modules/@types/stack-utils": { @@ -2500,16 +2720,16 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.13.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.13.2.tgz", - "integrity": "sha512-3+9OGAWHhk4O1LlcwLBONbdXsAhLjyCFogJY/cWy2lxdVJ2JrcTF2pTGMaLl2AE7U1l31n8Py4a8bx5DLf/0dQ==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", + "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.13.2", - "@typescript-eslint/type-utils": "6.13.2", - "@typescript-eslint/utils": "6.13.2", - "@typescript-eslint/visitor-keys": "6.13.2", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/type-utils": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -2535,15 +2755,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "6.13.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.13.2.tgz", - "integrity": "sha512-MUkcC+7Wt/QOGeVlM8aGGJZy1XV5YKjTpq9jK6r6/iLsGXhBVaGP5N0UYvFsu9BFlSpwY9kMretzdBH01rkRXg==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.13.2", - "@typescript-eslint/types": "6.13.2", - "@typescript-eslint/typescript-estree": "6.13.2", - "@typescript-eslint/visitor-keys": "6.13.2", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4" }, "engines": { @@ -2563,13 +2783,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.13.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.13.2.tgz", - "integrity": "sha512-CXQA0xo7z6x13FeDYCgBkjWzNqzBn8RXaE3QVQVIUm74fWJLkJkaHmHdKStrxQllGh6Q4eUGyNpMe0b1hMkXFA==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.13.2", - "@typescript-eslint/visitor-keys": "6.13.2" + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -2580,13 +2800,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.13.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.13.2.tgz", - "integrity": "sha512-Qr6ssS1GFongzH2qfnWKkAQmMUyZSyOr0W54nZNU1MDfo+U4Mv3XveeLZzadc/yq8iYhQZHYT+eoXJqnACM1tw==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", + "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.13.2", - "@typescript-eslint/utils": "6.13.2", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/utils": "6.21.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -2607,9 +2827,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.13.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.13.2.tgz", - "integrity": "sha512-7sxbQ+EMRubQc3wTfTsycgYpSujyVbI1xw+3UMRUcrhSy+pN09y/lWzeKDbvhoqcRbHdc+APLs/PWYi/cisLPg==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -2620,16 +2840,17 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.13.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.13.2.tgz", - "integrity": "sha512-SuD8YLQv6WHnOEtKv8D6HZUzOub855cfPnPMKvdM/Bh1plv1f7Q/0iFUDLKKlxHcEstQnaUU4QZskgQq74t+3w==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.13.2", - "@typescript-eslint/visitor-keys": "6.13.2", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", + "minimatch": "9.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" }, @@ -2647,17 +2868,17 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "6.13.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.13.2.tgz", - "integrity": "sha512-b9Ptq4eAZUym4idijCRzl61oPCwwREcfDI8xGk751Vhzig5fFZR9CyzDz4Sp/nxSLBYxUPyh4QdIDqWykFhNmQ==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.13.2", - "@typescript-eslint/types": "6.13.2", - "@typescript-eslint/typescript-estree": "6.13.2", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", "semver": "^7.5.4" }, "engines": { @@ -2672,12 +2893,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.13.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.13.2.tgz", - "integrity": "sha512-OGznFs0eAQXJsp+xSd6k/O1UbFi/K/L7WjqeRoFE7vadjAF9y0uppXhYNQNEqygjou782maGClOoZwPqF0Drlw==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.13.2", + "@typescript-eslint/types": "6.21.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -2695,37 +2916,43 @@ "dev": true }, "node_modules/@vitest/expect": { - "version": "0.29.8", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.29.8.tgz", - "integrity": "sha512-xlcVXn5I5oTq6NiZSY3ykyWixBxr5mG8HYtjvpgg6KaqHm0mvhX18xuwl5YGxIRNt/A5jidd7CWcNHrSvgaQqQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.3.1.tgz", + "integrity": "sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw==", "dev": true, "dependencies": { - "@vitest/spy": "0.29.8", - "@vitest/utils": "0.29.8", - "chai": "^4.3.7" + "@vitest/spy": "1.3.1", + "@vitest/utils": "1.3.1", + "chai": "^4.3.10" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/runner": { - "version": "0.29.8", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.29.8.tgz", - "integrity": "sha512-FzdhnRDwEr/A3Oo1jtIk/B952BBvP32n1ObMEb23oEJNO+qO5cBet6M2XWIDQmA7BDKGKvmhUf2naXyp/2JEwQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.3.1.tgz", + "integrity": "sha512-5FzF9c3jG/z5bgCnjr8j9LNq/9OxV2uEBAITOXfoe3rdZJTdO7jzThth7FXv/6b+kdY65tpRQB7WaKhNZwX+Kg==", "dev": true, "dependencies": { - "@vitest/utils": "0.29.8", - "p-limit": "^4.0.0", - "pathe": "^1.1.0" + "@vitest/utils": "1.3.1", + "p-limit": "^5.0.0", + "pathe": "^1.1.1" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/runner/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz", + "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==", "dev": true, "dependencies": { "yocto-queue": "^1.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -2743,48 +2970,141 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@vitest/spy": { - "version": "0.29.8", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.29.8.tgz", - "integrity": "sha512-VdjBe9w34vOMl5I5mYEzNX8inTxrZ+tYUVk9jxaZJmHFwmDFC/GV3KBFTA/JKswr3XHvZL+FE/yq5EVhb6pSAw==", + "node_modules/@vitest/snapshot": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.3.1.tgz", + "integrity": "sha512-EF++BZbt6RZmOlE3SuTPu/NfwBF6q4ABS37HHXzs2LUVPBLx2QoY/K0fKpRChSo8eLiuxcbCVfqKgx/dplCDuQ==", "dev": true, "dependencies": { - "tinyspy": "^1.0.2" + "magic-string": "^0.30.5", + "pathe": "^1.1.1", + "pretty-format": "^29.7.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@vitest/snapshot/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@vitest/snapshot/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/@vitest/spy": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.3.1.tgz", + "integrity": "sha512-xAcW+S099ylC9VLU7eZfdT9myV67Nor9w9zhf0mGCYJSO+zM2839tOeROTdikOi/8Qeusffvxb/MyBSOja1Uig==", + "dev": true, + "dependencies": { + "tinyspy": "^2.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/ui": { - "version": "0.29.8", - "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-0.29.8.tgz", - "integrity": "sha512-+vbLd+c1R/XUWfzJsWeyjeiw13fwJ95I5tguxaqXRg61y9iYUKesVljg7Pttp2uo7VK+kAjvY91J41NZ1Vx3vg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-1.3.1.tgz", + "integrity": "sha512-2UrFLJ62c/eJGPHcclstMKlAR7E1WB1ITe1isuowEPJJHi3HfqofvsUqQ1cGrEF7kitG1DJuwURUA3HLDtQkXA==", "dev": true, "dependencies": { - "fast-glob": "^3.2.12", - "flatted": "^3.2.7", - "pathe": "^1.1.0", + "@vitest/utils": "1.3.1", + "fast-glob": "^3.3.2", + "fflate": "^0.8.1", + "flatted": "^3.2.9", + "pathe": "^1.1.1", "picocolors": "^1.0.0", - "sirv": "^2.0.2" + "sirv": "^2.0.4" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "vitest": "1.3.1" } }, "node_modules/@vitest/utils": { - "version": "0.29.8", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.29.8.tgz", - "integrity": "sha512-qGzuf3vrTbnoY+RjjVVIBYfuWMjn3UMUqyQtdGNZ6ZIIyte7B37exj6LaVkrZiUTvzSadVvO/tJm8AEgbGCBPg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.3.1.tgz", + "integrity": "sha512-d3Waie/299qqRyHTm2DjADeTaNdNSVsnwHPWrs20JMpjh6eiVq7ggggweO8rc4arhf6rRkWuHKwvxGvejUXZZQ==", "dev": true, "dependencies": { - "cli-truncate": "^3.1.0", - "diff": "^5.1.0", - "loupe": "^2.3.6", - "pretty-format": "^27.5.1" + "diff-sequences": "^29.6.3", + "estree-walker": "^3.0.3", + "loupe": "^2.3.7", + "pretty-format": "^29.7.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, + "node_modules/@vitest/utils/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@vitest/utils/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@vitest/utils/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, "node_modules/@vue/compiler-core": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.11.tgz", - "integrity": "sha512-h97/TGWBilnLuRaj58sxNrsUU66fwdRKLOLQ9N/5iNDfp+DZhYH9Obhe0bXxhedl8fjAgpRANpiZfbgWyruQ0w==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.19.tgz", + "integrity": "sha512-gj81785z0JNzRcU0Mq98E56e4ltO1yf8k5PQ+tV/7YHnbZkrM0fyFyuttnN8ngJZjbpofWE/m4qjKBiLl8Ju4w==", "peer": true, "dependencies": { - "@babel/parser": "^7.23.5", - "@vue/shared": "3.3.11", + "@babel/parser": "^7.23.9", + "@vue/shared": "3.4.19", + "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.0.2" } @@ -2796,30 +3116,29 @@ "peer": true }, "node_modules/@vue/compiler-dom": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.11.tgz", - "integrity": "sha512-zoAiUIqSKqAJ81WhfPXYmFGwDRuO+loqLxvXmfUdR5fOitPoUiIeFI9cTTyv9MU5O1+ZZglJVTusWzy+wfk5hw==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.19.tgz", + "integrity": "sha512-vm6+cogWrshjqEHTzIDCp72DKtea8Ry/QVpQRYoyTIg9k7QZDX6D8+HGURjtmatfgM8xgCFtJJaOlCaRYRK3QA==", "peer": true, "dependencies": { - "@vue/compiler-core": "3.3.11", - "@vue/shared": "3.3.11" + "@vue/compiler-core": "3.4.19", + "@vue/shared": "3.4.19" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.11.tgz", - "integrity": "sha512-U4iqPlHO0KQeK1mrsxCN0vZzw43/lL8POxgpzcJweopmqtoYy9nljJzWDIQS3EfjiYhfdtdk9Gtgz7MRXnz3GA==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.19.tgz", + "integrity": "sha512-LQ3U4SN0DlvV0xhr1lUsgLCYlwQfUfetyPxkKYu7dkfvx7g3ojrGAkw0AERLOKYXuAGnqFsEuytkdcComei3Yg==", "peer": true, "dependencies": { - "@babel/parser": "^7.23.5", - "@vue/compiler-core": "3.3.11", - "@vue/compiler-dom": "3.3.11", - "@vue/compiler-ssr": "3.3.11", - "@vue/reactivity-transform": "3.3.11", - "@vue/shared": "3.3.11", + "@babel/parser": "^7.23.9", + "@vue/compiler-core": "3.4.19", + "@vue/compiler-dom": "3.4.19", + "@vue/compiler-ssr": "3.4.19", + "@vue/shared": "3.4.19", "estree-walker": "^2.0.2", - "magic-string": "^0.30.5", - "postcss": "^8.4.32", + "magic-string": "^0.30.6", + "postcss": "^8.4.33", "source-map-js": "^1.0.2" } }, @@ -2830,81 +3149,62 @@ "peer": true }, "node_modules/@vue/compiler-ssr": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.11.tgz", - "integrity": "sha512-Zd66ZwMvndxRTgVPdo+muV4Rv9n9DwQ4SSgWWKWkPFebHQfVYRrVjeygmmDmPewsHyznCNvJ2P2d6iOOhdv8Qg==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.19.tgz", + "integrity": "sha512-P0PLKC4+u4OMJ8sinba/5Z/iDT84uMRRlrWzadgLA69opCpI1gG4N55qDSC+dedwq2fJtzmGald05LWR5TFfLw==", "peer": true, "dependencies": { - "@vue/compiler-dom": "3.3.11", - "@vue/shared": "3.3.11" + "@vue/compiler-dom": "3.4.19", + "@vue/shared": "3.4.19" } }, "node_modules/@vue/reactivity": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.11.tgz", - "integrity": "sha512-D5tcw091f0nuu+hXq5XANofD0OXnBmaRqMYl5B3fCR+mX+cXJIGNw/VNawBqkjLNWETrFW0i+xH9NvDbTPVh7g==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.19.tgz", + "integrity": "sha512-+VcwrQvLZgEclGZRHx4O2XhyEEcKaBi50WbxdVItEezUf4fqRh838Ix6amWTdX0CNb/b6t3Gkz3eOebfcSt+UA==", "peer": true, "dependencies": { - "@vue/shared": "3.3.11" + "@vue/shared": "3.4.19" } }, - "node_modules/@vue/reactivity-transform": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.11.tgz", - "integrity": "sha512-fPGjH0wqJo68A0wQ1k158utDq/cRyZNlFoxGwNScE28aUFOKFEnCBsvyD8jHn+0kd0UKVpuGuaZEQ6r9FJRqCg==", - "peer": true, - "dependencies": { - "@babel/parser": "^7.23.5", - "@vue/compiler-core": "3.3.11", - "@vue/shared": "3.3.11", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.5" - } - }, - "node_modules/@vue/reactivity-transform/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "peer": true - }, "node_modules/@vue/runtime-core": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.11.tgz", - "integrity": "sha512-g9ztHGwEbS5RyWaOpXuyIVFTschclnwhqEbdy5AwGhYOgc7m/q3NFwr50MirZwTTzX55JY8pSkeib9BX04NIpw==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.19.tgz", + "integrity": "sha512-/Z3tFwOrerJB/oyutmJGoYbuoadphDcJAd5jOuJE86THNZji9pYjZroQ2NFsZkTxOq0GJbb+s2kxTYToDiyZzw==", "peer": true, "dependencies": { - "@vue/reactivity": "3.3.11", - "@vue/shared": "3.3.11" + "@vue/reactivity": "3.4.19", + "@vue/shared": "3.4.19" } }, "node_modules/@vue/runtime-dom": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.11.tgz", - "integrity": "sha512-OlhtV1PVpbgk+I2zl+Y5rQtDNcCDs12rsRg71XwaA2/Rbllw6mBLMi57VOn8G0AjOJ4Mdb4k56V37+g8ukShpQ==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.19.tgz", + "integrity": "sha512-IyZzIDqfNCF0OyZOauL+F4yzjMPN2rPd8nhqPP2N1lBn3kYqJpPHHru+83Rkvo2lHz5mW+rEeIMEF9qY3PB94g==", "peer": true, "dependencies": { - "@vue/runtime-core": "3.3.11", - "@vue/shared": "3.3.11", - "csstype": "^3.1.2" + "@vue/runtime-core": "3.4.19", + "@vue/shared": "3.4.19", + "csstype": "^3.1.3" } }, "node_modules/@vue/server-renderer": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.11.tgz", - "integrity": "sha512-AIWk0VwwxCAm4wqtJyxBylRTXSy1wCLOKbWxHaHiu14wjsNYtiRCSgVuqEPVuDpErOlRdNnuRgipQfXRLjLN5A==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.19.tgz", + "integrity": "sha512-eAj2p0c429RZyyhtMRnttjcSToch+kTWxFPHlzGMkR28ZbF1PDlTcmGmlDxccBuqNd9iOQ7xPRPAGgPVj+YpQw==", "peer": true, "dependencies": { - "@vue/compiler-ssr": "3.3.11", - "@vue/shared": "3.3.11" + "@vue/compiler-ssr": "3.4.19", + "@vue/shared": "3.4.19" }, "peerDependencies": { - "vue": "3.3.11" + "vue": "3.4.19" } }, "node_modules/@vue/shared": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.11.tgz", - "integrity": "sha512-u2G8ZQ9IhMWTMXaWqZycnK4UthG1fA238CD+DP4Dm4WJi5hdUKKLg0RMRaRpDPNMdkTwIDkp7WtD0Rd9BH9fLw==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.19.tgz", + "integrity": "sha512-/KliRRHMF6LoiThEy+4c1Z4KB/gbPrGjWwJR+crg2otgrf/egKzRaCPvJ51S5oetgsgXLfc4Rm5ZgrKHZrtMSw==", "peer": true }, "node_modules/abab": { @@ -2915,9 +3215,9 @@ "dev": true }, "node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "bin": { "acorn": "bin/acorn" }, @@ -2935,9 +3235,9 @@ } }, "node_modules/acorn-walk": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.1.tgz", - "integrity": "sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", "dev": true, "engines": { "node": ">=0.4.0" @@ -2956,9 +3256,9 @@ } }, "node_modules/ai": { - "version": "2.2.28", - "resolved": "https://registry.npmjs.org/ai/-/ai-2.2.28.tgz", - "integrity": "sha512-NUPwtXjIghlkhrR8x9nEnzpaKnWVhABe4XsSYIRbwWS1f9M8DxV413W+bpQ52iKkzputuraipHSyjnAtgU88cA==", + "version": "2.2.36", + "resolved": "https://registry.npmjs.org/ai/-/ai-2.2.36.tgz", + "integrity": "sha512-QX3ZXgHjn4cQ233PHne1m7ZP+nfP93CkDEgNCIxuiDp+mhLEIEV10F1Qk3NozJ8mmSoyIJR82ea16kMZKOi8hw==", "dependencies": { "eventsource-parser": "1.0.0", "nanoid": "3.3.6", @@ -3026,9 +3326,9 @@ } }, "node_modules/analytics": { - "version": "0.8.9", - "resolved": "https://registry.npmjs.org/analytics/-/analytics-0.8.9.tgz", - "integrity": "sha512-oTbUzQpncMTslakqfK70GgB6bopk5hY+uuekwnadMkDyqNLgcD02KRzteTnO7q5Ko6wDECVtT8xi/6OuAMZykA==", + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/analytics/-/analytics-0.8.11.tgz", + "integrity": "sha512-gNLaprOiuZSviP8rC99E5uk+AWQZJk1OHS350v3XdpPDnsGyxHlNo7s9ZQJeOhvMbG5XOBY3fgZY/tpOl7hiGw==", "funding": [ { "type": "GitHub Sponsors", @@ -3036,7 +3336,7 @@ } ], "dependencies": { - "@analytics/core": "^0.12.7", + "@analytics/core": "^0.12.9", "@analytics/storage-utils": "^0.4.2" } }, @@ -3134,12 +3434,15 @@ } }, "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3169,9 +3472,12 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -3180,9 +3486,9 @@ } }, "node_modules/axobject-query": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", - "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.0.0.tgz", + "integrity": "sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==", "dependencies": { "dequal": "^2.0.3" } @@ -3326,13 +3632,12 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^1.0.0" } }, "node_modules/braces": { @@ -3348,9 +3653,9 @@ } }, "node_modules/browserslist": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", - "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", "dev": true, "funding": [ { @@ -3368,8 +3673,8 @@ ], "peer": true, "dependencies": { - "caniuse-lite": "^1.0.30001565", - "electron-to-chromium": "^1.4.601", + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", "node-releases": "^2.0.14", "update-browserslist-db": "^1.0.13" }, @@ -3416,13 +3721,18 @@ } }, "node_modules/call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3448,9 +3758,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001566", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001566.tgz", - "integrity": "sha512-ggIhCsTxmITBAMmK8yZjEhCO5/47jKXPu6Dha/wuCS4JePVL+3uiDEBuhu2aIoT+bqTOR8L76Ip1ARL9xYsEJA==", + "version": "1.0.30001588", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001588.tgz", + "integrity": "sha512-+hVY9jE44uKLkH0SrUTqxjxqNTOWHsbnQDIKjwkZ3lNTzUUVdBLBGXtj/q5Mp5u98r3droaZAewQuEDzjQdZlQ==", "dev": true, "funding": [ { @@ -3469,9 +3779,9 @@ "peer": true }, "node_modules/chai": { - "version": "4.3.10", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz", - "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", + "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", "dev": true, "dependencies": { "assertion-error": "^1.1.0", @@ -3525,16 +3835,10 @@ } }, "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -3547,6 +3851,9 @@ "engines": { "node": ">= 8.10.0" }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, "optionalDependencies": { "fsevents": "~2.3.2" } @@ -3585,22 +3892,6 @@ "dev": true, "peer": true }, - "node_modules/cli-truncate": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", - "dev": true, - "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -3616,38 +3907,6 @@ "node": ">=12" } }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "peer": true - }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "peer": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -3721,9 +3980,9 @@ "peer": true }, "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "dev": true, "engines": { "node": ">= 0.6" @@ -3937,16 +4196,19 @@ } }, "node_modules/define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/define-properties": { @@ -4006,15 +4268,6 @@ "integrity": "sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==", "dev": true }, - "node_modules/diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/diff-sequences": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", @@ -4073,29 +4326,23 @@ } }, "node_modules/dotenv": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", - "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/motdotla/dotenv?sponsor=1" + "url": "https://dotenvx.com" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, "node_modules/echarts": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.4.3.tgz", - "integrity": "sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.5.0.tgz", + "integrity": "sha512-rNYnNCzqDAPCr4m/fqyUFv7fD9qIsd50S6GDFgO1DxZhncCsNsG7IfUlAlvZe5oSEQxtsjnHiUuppzccry93Xw==", "dependencies": { "tslib": "2.3.0", - "zrender": "5.4.4" + "zrender": "5.5.0" } }, "node_modules/echarts/node_modules/tslib": { @@ -4104,9 +4351,9 @@ "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" }, "node_modules/electron-to-chromium": { - "version": "1.4.608", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.608.tgz", - "integrity": "sha512-J2f/3iIIm3Mo0npneITZ2UPe4B1bg8fTNrFjD8715F/k1BvbviRuqYGkET1PgprrczXYTHFvotbBOmUp6KE0uA==", + "version": "1.4.677", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.677.tgz", + "integrity": "sha512-erDa3CaDzwJOpyvfKhOiJjBVNnMM0qxHq47RheVVwsSQrgBA9ZSGV9kdaOfZDPXcHzhG7lBxhj6A7KvfLJBd6Q==", "dev": true, "peer": true }, @@ -4124,16 +4371,16 @@ } }, "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "peer": true }, "node_modules/entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, "engines": { "node": ">=0.12" }, @@ -4151,6 +4398,25 @@ "is-arrayish": "^0.2.1" } }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-get-iterator": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", @@ -4177,9 +4443,9 @@ "dev": true }, "node_modules/esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", "dev": true, "hasInstallScript": true, "bin": { @@ -4189,34 +4455,35 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true, "peer": true, "engines": { @@ -4236,15 +4503,15 @@ } }, "node_modules/eslint": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz", - "integrity": "sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.55.0", + "@eslint/js": "8.56.0", "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -4377,6 +4644,28 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/esm-env": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.0.0.tgz", @@ -4569,9 +4858,9 @@ "dev": true }, "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -4587,6 +4876,12 @@ "bser": "2.1.1" } }, + "node_modules/fflate": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", + "dev": true + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -4642,9 +4937,9 @@ } }, "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, "node_modules/focus-trap": { @@ -4743,15 +5038,19 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dependencies": { + "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4811,10 +5110,32 @@ "node": ">=10.13.0" } }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/globals": { - "version": "13.23.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", - "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -4899,20 +5220,20 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dependencies": { - "get-intrinsic": "^1.2.2" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "engines": { "node": ">= 0.4" }, @@ -4932,11 +5253,11 @@ } }, "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -4946,9 +5267,9 @@ } }, "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", + "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", "dependencies": { "function-bind": "^1.1.2" }, @@ -5025,18 +5346,18 @@ } }, "node_modules/ignore": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, "engines": { "node": ">= 4" } }, "node_modules/immutable": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", - "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz", + "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==", "dev": true }, "node_modules/import-fresh": { @@ -5075,6 +5396,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/import-meta-resolve": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.0.0.tgz", + "integrity": "sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -5110,11 +5441,11 @@ "dev": true }, "node_modules/internal-slot": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", - "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dependencies": { - "get-intrinsic": "^1.2.2", + "es-errors": "^1.3.0", "hasown": "^2.0.0", "side-channel": "^1.0.4" }, @@ -5138,13 +5469,15 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5243,15 +5576,13 @@ } }, "node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "peer": true, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/is-generator-fn": { @@ -5354,11 +5685,14 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5405,20 +5739,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", - "dependencies": { - "which-typed-array": "^1.1.11" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-weakmap": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", @@ -5469,15 +5789,15 @@ } }, "node_modules/istanbul-lib-instrument": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", - "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz", + "integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==", "dev": true, "peer": true, "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", "istanbul-lib-coverage": "^3.2.0", "semver": "^7.5.4" }, @@ -5516,9 +5836,9 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, "peer": true, "dependencies": { @@ -6538,9 +6858,9 @@ } }, "node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", "dev": true }, "node_modules/keyv": { @@ -6607,10 +6927,14 @@ "peer": true }, "node_modules/local-pkg": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", - "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", + "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", "dev": true, + "dependencies": { + "mlly": "^1.4.2", + "pkg-types": "^1.0.3" + }, "engines": { "node": ">=14" }, @@ -6696,9 +7020,9 @@ } }, "node_modules/magic-string": { - "version": "0.30.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", - "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", + "version": "0.30.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.7.tgz", + "integrity": "sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==", "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" }, @@ -6741,8 +7065,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "peer": true + "dev": true }, "node_modules/merge2": { "version": "1.4.1", @@ -6805,15 +7128,18 @@ } }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/minimist": { @@ -6838,15 +7164,15 @@ } }, "node_modules/mlly": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.4.2.tgz", - "integrity": "sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.6.0.tgz", + "integrity": "sha512-YOvg9hfYQmnaB56Yb+KrJE2u0Yzz5zR+sLejEvF4fzwzV1Al6hkf2vyHTwqCRyv0hCi9rVCqVoXpyYevQIRwLQ==", "dev": true, "dependencies": { - "acorn": "^8.10.0", - "pathe": "^1.1.1", + "acorn": "^8.11.3", + "pathe": "^1.1.2", "pkg-types": "^1.0.3", - "ufo": "^1.3.0" + "ufo": "^1.3.2" } }, "node_modules/mri": { @@ -6859,9 +7185,9 @@ } }, "node_modules/mrmime": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", - "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", + "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", "dev": true, "engines": { "node": ">=10" @@ -7198,9 +7524,9 @@ } }, "node_modules/pathe": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", - "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", "dev": true }, "node_modules/pathval": { @@ -7338,12 +7664,12 @@ } }, "node_modules/playwright": { - "version": "1.40.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.40.1.tgz", - "integrity": "sha512-2eHI7IioIpQ0bS1Ovg/HszsN/XKNwEG1kbzSDDmADpclKc7CyqkHw7Mg2JCz/bbCxg25QUPcjksoMW7JcIFQmw==", + "version": "1.41.2", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.41.2.tgz", + "integrity": "sha512-v0bOa6H2GJChDL8pAeLa/LZC4feoAMbSQm1/jF/ySsWWoaNItvrMP7GEkvEEFyCTUYKMxjQKaTSg5up7nR6/8A==", "dev": true, "dependencies": { - "playwright-core": "1.40.1" + "playwright-core": "1.41.2" }, "bin": { "playwright": "cli.js" @@ -7356,9 +7682,9 @@ } }, "node_modules/playwright-core": { - "version": "1.40.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.40.1.tgz", - "integrity": "sha512-+hkOycxPiV534c4HhpfX6yrlawqVUzITRKwHAmYfmsVreltEl6fAZJ3DPfLMOODw0H3s1Itd6MDCWmP1fl/QvQ==", + "version": "1.41.2", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.41.2.tgz", + "integrity": "sha512-VaTvwCA4Y8kxEe+kfm2+uUUw5Lubf38RxF7FpBxLPmGe5sdNkSg5e3ChEigaGrX7qdqT3pt2m/98LiyvU2x6CA==", "dev": true, "bin": { "playwright-core": "cli.js" @@ -7381,10 +7707,18 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/postcss": { - "version": "8.4.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", - "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", + "version": "8.4.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", "funding": [ { "type": "opencollective", @@ -7480,9 +7814,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "version": "6.0.15", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", + "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -7519,9 +7853,9 @@ } }, "node_modules/prettier": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.0.tgz", - "integrity": "sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", + "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -7534,9 +7868,9 @@ } }, "node_modules/prettier-plugin-svelte": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-3.1.2.tgz", - "integrity": "sha512-7xfMZtwgAWHMT0iZc8jN4o65zgbAQ3+O32V6W7pXrqNvKnHnkoyQCGCbKeUyXKZLbYE0YhFRnamfxfkEGxm8qA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-3.2.1.tgz", + "integrity": "sha512-ENAPbIxASf2R79IZwgkG5sBdeNA9kLRlXVvKKmTXh79zWTy0KKoT86XO2pHrTitUPINd+iXWy12MRmgzKGVckA==", "dev": true, "peerDependencies": { "prettier": "^3.0.0", @@ -7714,19 +8048,20 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", "dev": true }, "node_modules/regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -7837,18 +8172,34 @@ } }, "node_modules/rollup": { - "version": "3.29.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", - "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.12.0.tgz", + "integrity": "sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q==", "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, "bin": { "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=14.18.0", + "node": ">=18.0.0", "npm": ">=8.0.0" }, "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.12.0", + "@rollup/rollup-android-arm64": "4.12.0", + "@rollup/rollup-darwin-arm64": "4.12.0", + "@rollup/rollup-darwin-x64": "4.12.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.12.0", + "@rollup/rollup-linux-arm64-gnu": "4.12.0", + "@rollup/rollup-linux-arm64-musl": "4.12.0", + "@rollup/rollup-linux-riscv64-gnu": "4.12.0", + "@rollup/rollup-linux-x64-gnu": "4.12.0", + "@rollup/rollup-linux-x64-musl": "4.12.0", + "@rollup/rollup-win32-arm64-msvc": "4.12.0", + "@rollup/rollup-win32-ia32-msvc": "4.12.0", + "@rollup/rollup-win32-x64-msvc": "4.12.0", "fsevents": "~2.3.2" } }, @@ -7924,9 +8275,9 @@ } }, "node_modules/sass": { - "version": "1.69.5", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz", - "integrity": "sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==", + "version": "1.71.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.71.1.tgz", + "integrity": "sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==", "dev": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", @@ -7953,9 +8304,9 @@ } }, "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -7986,14 +8337,26 @@ "dev": true }, "node_modules/seroval": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/seroval/-/seroval-0.15.1.tgz", - "integrity": "sha512-OPVtf0qmeC7RW+ScVX+7aOS+xoIM7pWcZ0jOWg2aTZigCydgRB04adfteBRbecZnnrO1WuGQ+C3tLeBBzX2zSQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.0.4.tgz", + "integrity": "sha512-qQs/N+KfJu83rmszFQaTxcoJoPn6KNUruX4KmnmyD0oZkUoiNvJ1rpdYKDf4YHM05k+HOgCxa3yvf15QbVijGg==", "peer": true, "engines": { "node": ">=10" } }, + "node_modules/seroval-plugins": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/seroval-plugins/-/seroval-plugins-1.0.4.tgz", + "integrity": "sha512-DQ2IK6oQVvy8k+c2V5x5YCtUa/GGGsUwUBNN9UqohrZ0rWdUapBFpNMYP1bCyRHoxOJjdKGl+dieacFIpU/i1A==", + "peer": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "seroval": "^1.0" + } + }, "node_modules/set-cookie-parser": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", @@ -8001,27 +8364,30 @@ "dev": true }, "node_modules/set-function-length": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", + "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", "dependencies": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", + "define-data-property": "^1.1.2", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.3", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.1" }, "engines": { "node": ">= 0.4" } }, "node_modules/set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dependencies": { - "define-data-property": "^1.0.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -8049,13 +8415,17 @@ } }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", + "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8075,13 +8445,13 @@ "peer": true }, "node_modules/sirv": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz", - "integrity": "sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", + "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", "dev": true, "dependencies": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", "totalist": "^3.0.0" }, "engines": { @@ -8104,42 +8474,15 @@ "node": ">=8" } }, - "node_modules/slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/solid-js": { - "version": "1.8.7", - "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.8.7.tgz", - "integrity": "sha512-9dzrSVieh2zj3SnJ02II6xZkonR6c+j/91b7XZUNcC6xSaldlqjjGh98F1fk5cRJ8ZTkzqF5fPIWDxEOs6QZXA==", + "version": "1.8.15", + "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.8.15.tgz", + "integrity": "sha512-d0QP/efr3UVcwGgWVPveQQ0IHOH6iU7yUhc2piy8arNG8wxKmvUy1kFxyF8owpmfCWGB87usDKMaVnsNYZm+Vw==", "peer": true, "dependencies": { "csstype": "^3.1.0", - "seroval": "^0.15.1" + "seroval": "^1.0.3", + "seroval-plugins": "^1.0.3" } }, "node_modules/solid-swr-store": { @@ -8174,6 +8517,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -8243,9 +8587,9 @@ "dev": true }, "node_modules/std-env": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.6.0.tgz", - "integrity": "sha512-aFZ19IgVmhdB2uX599ve2kE6BIE3YMnQ6Gp6BURhW/oIzpXGKr878TQfAQZn1+i0Flcc/UKUy1gOlcfaUBCryg==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", + "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", "dev": true }, "node_modules/stop-iteration-iterator": { @@ -8274,47 +8618,18 @@ } }, "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "peer": true, "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": ">=8" } }, "node_modules/strip-ansi": { @@ -8374,17 +8689,23 @@ } }, "node_modules/strip-literal": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.3.0.tgz", - "integrity": "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.0.0.tgz", + "integrity": "sha512-f9vHgsCWBq2ugHAkGMiiYY+AYG0D/cbloKKg0nhaaaSNsujdGIpVXCNsrJpCKr5M0f4aI31mr13UjY6GAuXCKA==", "dev": true, "dependencies": { - "acorn": "^8.10.0" + "js-tokens": "^8.0.2" }, "funding": { "url": "https://github.com/sponsors/antfu" } }, + "node_modules/strip-literal/node_modules/js-tokens": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-8.0.3.tgz", + "integrity": "sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw==", + "dev": true + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -8411,16 +8732,17 @@ } }, "node_modules/svelte": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.8.tgz", - "integrity": "sha512-hU6dh1MPl8gh6klQZwK/n73GiAHiR95IkFsesLPbMeEZi36ydaXL/ZAb4g9sayT0MXzpxyZjR28yderJHxcmYA==", + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.11.tgz", + "integrity": "sha512-YIQk3J4X89wOLhjsqIW8tqY3JHPuBdtdOIkASP2PZeAMcSW9RsIjQzMesCrxOF3gdWYC0mKknlKF7OqmLM+Zqg==", "dependencies": { "@ampproject/remapping": "^2.2.1", "@jridgewell/sourcemap-codec": "^1.4.15", "@jridgewell/trace-mapping": "^0.3.18", + "@types/estree": "^1.0.1", "acorn": "^8.9.0", "aria-query": "^5.3.0", - "axobject-query": "^3.2.1", + "axobject-query": "^4.0.0", "code-red": "^1.0.3", "css-tree": "^2.3.1", "estree-walker": "^3.0.3", @@ -8434,9 +8756,9 @@ } }, "node_modules/svelte-check": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.6.2.tgz", - "integrity": "sha512-E6iFh4aUCGJLRz6QZXH3gcN/VFfkzwtruWSRmlKrLWQTiO6VzLsivR6q02WYLGNAGecV3EocqZuCDrC2uttZ0g==", + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.6.4.tgz", + "integrity": "sha512-mY/dqucqm46p72M8yZmn81WPZx9mN6uuw8UVfR3ZKQeLxQg5HDGO3HHm5AZuWZPYNMLJ+TRMn+TeN53HfQ/vsw==", "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.17", @@ -8456,9 +8778,9 @@ } }, "node_modules/svelte-confetti": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/svelte-confetti/-/svelte-confetti-1.3.1.tgz", - "integrity": "sha512-ljpyflZZzpyByDODM7xKzbYLWZpA54fLqjire2M7Rp6/Fedx6L9+p3CmBQ2j96cZcp++4ueF5A8TYZ8f22kh9w==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svelte-confetti/-/svelte-confetti-1.3.2.tgz", + "integrity": "sha512-R+JwFTC7hIgWVA/OuXrkj384B7CMoceb0t9VacyW6dORTQg0pWojVBB8Bo3tM30cLEQE48Fekzqgx+XSzHESMA==", "peerDependencies": { "svelte": "^4.0.0" } @@ -8516,27 +8838,28 @@ } }, "node_modules/svelte-preprocess": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.1.1.tgz", - "integrity": "sha512-p/Dp4hmrBW5mrCCq29lEMFpIJT2FZsRlouxEc5qpbOmXRbaFs7clLs8oKPwD3xCFyZfv1bIhvOzpQkhMEVQdMw==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.1.3.tgz", + "integrity": "sha512-xxAkmxGHT+J/GourS5mVJeOXZzne1FR5ljeOUAMXUkfEhkLEllRreXpbl3dIYJlcJRfL1LO1uIAPpBpBfiqGPw==", "dev": true, "hasInstallScript": true, "dependencies": { "@types/pug": "^2.0.6", "detect-indent": "^6.1.0", - "magic-string": "^0.27.0", + "magic-string": "^0.30.5", "sorcery": "^0.11.0", "strip-indent": "^3.0.0" }, "engines": { - "node": ">= 14.10.0" + "node": ">= 16.0.0", + "pnpm": "^8.0.0" }, "peerDependencies": { "@babel/core": "^7.10.2", "coffeescript": "^2.5.1", "less": "^3.11.3 || ^4.0.0", "postcss": "^7 || ^8", - "postcss-load-config": "^2.1.0 || ^3.0.0 || ^4.0.0", + "postcss-load-config": "^2.1.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", "pug": "^3.0.0", "sass": "^1.26.8", "stylus": "^0.55.0", @@ -8577,18 +8900,6 @@ } } }, - "node_modules/svelte-preprocess/node_modules/magic-string": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", - "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.13" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/svelte-sequential-preprocessor": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/svelte-sequential-preprocessor/-/svelte-sequential-preprocessor-2.0.1.tgz", @@ -8672,6 +8983,30 @@ "node": ">=8" } }, + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/test-exclude/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -8694,24 +9029,24 @@ } }, "node_modules/tinybench": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.5.1.tgz", - "integrity": "sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz", + "integrity": "sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==", "dev": true }, "node_modules/tinypool": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.4.0.tgz", - "integrity": "sha512-2ksntHOKf893wSAH4z/+JbPpi92esw8Gn9N2deXX+B0EO92hexAVI9GIZZPx7P5aYo5KULfeOSt3kMOmSOy6uA==", + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.2.tgz", + "integrity": "sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==", "dev": true, "engines": { "node": ">=14.0.0" } }, "node_modules/tinyspy": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-1.1.1.tgz", - "integrity": "sha512-UVq5AXt/gQlti7oxoIg5oi/9r0WpF7DGEVwXgqWSMmyN16+e3tl5lIvTaOpJ3TAtu5xFzWccFRM4R5NaWHF+4g==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz", + "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==", "dev": true, "engines": { "node": ">=14.0.0" @@ -8791,12 +9126,12 @@ } }, "node_modules/ts-api-utils": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", - "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.2.1.tgz", + "integrity": "sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==", "dev": true, "engines": { - "node": ">=16.13.0" + "node": ">=16" }, "peerDependencies": { "typescript": ">=4.2.0" @@ -8855,23 +9190,11 @@ } }, "node_modules/ufo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.2.tgz", - "integrity": "sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.4.0.tgz", + "integrity": "sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ==", "dev": true }, - "node_modules/undici": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.26.5.tgz", - "integrity": "sha512-cSb4bPFd5qgR7qr2jYAi0hlX9n5YKK2ONKkLFkxl+v/9BvC0sOpZjBHDBSXc5lWAf5ty9oZdRXytBIHzgUcerw==", - "dev": true, - "dependencies": { - "@fastify/busboy": "^2.0.0" - }, - "engines": { - "node": ">=14.0" - } - }, "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", @@ -8967,29 +9290,29 @@ } }, "node_modules/vite": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.1.tgz", - "integrity": "sha512-AXXFaAJ8yebyqzoNB9fu2pHoo/nWX+xZlaRwoeYUxEqBO+Zj4msE5G+BhGBll9lYEKv9Hfks52PAF2X7qDYXQA==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.4.tgz", + "integrity": "sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg==", "dev": true, "dependencies": { - "esbuild": "^0.18.10", - "postcss": "^8.4.27", - "rollup": "^3.27.1" + "esbuild": "^0.19.3", + "postcss": "^8.4.35", + "rollup": "^4.2.0" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": "^18.0.0 || >=20.0.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" }, "optionalDependencies": { - "fsevents": "~2.3.2" + "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": ">= 14", + "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", @@ -9022,26 +9345,25 @@ } }, "node_modules/vite-node": { - "version": "0.29.8", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.29.8.tgz", - "integrity": "sha512-b6OtCXfk65L6SElVM20q5G546yu10/kNrhg08afEoWlFRJXFq9/6glsvSVY+aI6YeC1tu2TtAqI2jHEQmOmsFw==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.3.1.tgz", + "integrity": "sha512-azbRrqRxlWTJEVbzInZCTchx0X69M/XPTCz4H+TLvlTcR/xH/3hkRqhOakT41fMJCMzXTu4UvegkZiEoJAWvng==", "dev": true, "dependencies": { "cac": "^6.7.14", "debug": "^4.3.4", - "mlly": "^1.1.0", - "pathe": "^1.1.0", + "pathe": "^1.1.1", "picocolors": "^1.0.0", - "vite": "^3.0.0 || ^4.0.0" + "vite": "^5.0.0" }, "bin": { "vite-node": "vite-node.mjs" }, "engines": { - "node": ">=v14.16.0" + "node": "^18.0.0 || >=20.0.0" }, "funding": { - "url": "https://github.com/sponsors/antfu" + "url": "https://opencollective.com/vitest" } }, "node_modules/vitefu": { @@ -9059,59 +9381,56 @@ } }, "node_modules/vitest": { - "version": "0.29.8", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.29.8.tgz", - "integrity": "sha512-JIAVi2GK5cvA6awGpH0HvH/gEG9PZ0a/WoxdiV3PmqK+3CjQMf8c+J/Vhv4mdZ2nRyXFw66sAg6qz7VNkaHfDQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.3.1.tgz", + "integrity": "sha512-/1QJqXs8YbCrfv/GPQ05wAZf2eakUPLPa18vkJAKE7RXOKfVHqMZZ1WlTjiwl6Gcn65M5vpNUB6EFLnEdRdEXQ==", "dev": true, "dependencies": { - "@types/chai": "^4.3.4", - "@types/chai-subset": "^1.3.3", - "@types/node": "*", - "@vitest/expect": "0.29.8", - "@vitest/runner": "0.29.8", - "@vitest/spy": "0.29.8", - "@vitest/utils": "0.29.8", - "acorn": "^8.8.1", - "acorn-walk": "^8.2.0", - "cac": "^6.7.14", - "chai": "^4.3.7", + "@vitest/expect": "1.3.1", + "@vitest/runner": "1.3.1", + "@vitest/snapshot": "1.3.1", + "@vitest/spy": "1.3.1", + "@vitest/utils": "1.3.1", + "acorn-walk": "^8.3.2", + "chai": "^4.3.10", "debug": "^4.3.4", - "local-pkg": "^0.4.2", - "pathe": "^1.1.0", + "execa": "^8.0.1", + "local-pkg": "^0.5.0", + "magic-string": "^0.30.5", + "pathe": "^1.1.1", "picocolors": "^1.0.0", - "source-map": "^0.6.1", - "std-env": "^3.3.1", - "strip-literal": "^1.0.0", - "tinybench": "^2.3.1", - "tinypool": "^0.4.0", - "tinyspy": "^1.0.2", - "vite": "^3.0.0 || ^4.0.0", - "vite-node": "0.29.8", + "std-env": "^3.5.0", + "strip-literal": "^2.0.0", + "tinybench": "^2.5.1", + "tinypool": "^0.8.2", + "vite": "^5.0.0", + "vite-node": "1.3.1", "why-is-node-running": "^2.2.2" }, "bin": { "vitest": "vitest.mjs" }, "engines": { - "node": ">=v14.16.0" + "node": "^18.0.0 || >=20.0.0" }, "funding": { - "url": "https://github.com/sponsors/antfu" + "url": "https://opencollective.com/vitest" }, "peerDependencies": { "@edge-runtime/vm": "*", - "@vitest/browser": "*", - "@vitest/ui": "*", + "@types/node": "^18.0.0 || >=20.0.0", + "@vitest/browser": "1.3.1", + "@vitest/ui": "1.3.1", "happy-dom": "*", - "jsdom": "*", - "playwright": "*", - "safaridriver": "*", - "webdriverio": "*" + "jsdom": "*" }, "peerDependenciesMeta": { "@edge-runtime/vm": { "optional": true }, + "@types/node": { + "optional": true + }, "@vitest/browser": { "optional": true }, @@ -9123,29 +9442,154 @@ }, "jsdom": { "optional": true - }, - "playwright": { - "optional": true - }, - "safaridriver": { - "optional": true - }, - "webdriverio": { - "optional": true } } }, + "node_modules/vitest/node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "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" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/vitest/node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vitest/node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true, + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/vitest/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vitest/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vitest/node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vitest/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vitest/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vitest/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/vitest/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/vue": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.11.tgz", - "integrity": "sha512-d4oBctG92CRO1cQfVBZp6WJAs0n8AK4Xf5fNjQCBeKCvMI1efGQ5E3Alt1slFJS9fZuPcFoiAiqFvQlv1X7t/w==", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.19.tgz", + "integrity": "sha512-W/7Fc9KUkajFU8dBeDluM4sRGc/aa4YJnOYck8dkjgZoXtVsn3OeTGni66FV1l3+nvPA7VBFYtPioaGKUmEADw==", "peer": true, "dependencies": { - "@vue/compiler-dom": "3.3.11", - "@vue/compiler-sfc": "3.3.11", - "@vue/runtime-dom": "3.3.11", - "@vue/server-renderer": "3.3.11", - "@vue/shared": "3.3.11" + "@vue/compiler-dom": "3.4.19", + "@vue/compiler-sfc": "3.4.19", + "@vue/runtime-dom": "3.4.19", + "@vue/server-renderer": "3.4.19", + "@vue/shared": "3.4.19" }, "peerDependencies": { "typescript": "*" @@ -9178,11 +9622,6 @@ "makeerror": "1.0.12" } }, - "node_modules/web-vitals": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-3.5.0.tgz", - "integrity": "sha512-f5YnCHVG9Y6uLCePD4tY8bO/Ge15NPEQWtvm3tPzDKygloiqtb4SVqRHBcrIAqo2ztqX5XueqDn97zHF0LdT6w==" - }, "node_modules/webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", @@ -9271,15 +9710,15 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", - "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz", + "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", + "available-typed-arrays": "^1.0.6", + "call-bind": "^1.0.5", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "has-tostringtag": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -9322,38 +9761,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "peer": true - }, - "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "peer": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -9375,9 +9782,9 @@ } }, "node_modules/ws": { - "version": "8.14.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", - "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", "dev": true, "engines": { "node": ">=10.0.0" @@ -9465,38 +9872,6 @@ "node": ">=12" } }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "peer": true - }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "peer": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -9510,9 +9885,9 @@ } }, "node_modules/zrender": { - "version": "5.4.4", - "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.4.4.tgz", - "integrity": "sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.5.0.tgz", + "integrity": "sha512-O3MilSi/9mwoovx77m6ROZM7sXShR/O/JIanvzTwjN3FORfLSr81PsUGd7jlaYOeds9d8tw82oP44+3YucVo+w==", "dependencies": { "tslib": "2.3.0" } diff --git a/package.json b/package.json index 410b4d658..3c8ad84db 100644 --- a/package.json +++ b/package.json @@ -10,17 +10,17 @@ "sync": "svelte-kit sync", "check": "svelte-check --tsconfig ./tsconfig.json --fail-on-warnings --threshold warning", "check:watch": "svelte-check --tsconfig ./tsconfig.json --watch", - "lint": "prettier --ignore-path .gitignore --check --plugin prettier-plugin-svelte . && eslint .", - "format": "prettier --ignore-path .gitignore --write --plugin prettier-plugin-svelte .", - "test": "vitest run", - "test:ui": "vitest --ui", - "test:watch": "vitest watch", + "lint": "prettier --check . && eslint .", + "format": "prettier --write .", + "test": "TZ=EST vitest run", + "test:ui": "TZ=EST vitest --ui", + "test:watch": "TZ=EST vitest watch", "e2e": "playwright test tests/e2e" }, "dependencies": { - "@appwrite.io/console": "^0.4.2", - "@appwrite.io/pink": "0.2.0", - "@appwrite.io/pink-icons": "0.2.0", + "@appwrite.io/console": "^0.6.0", + "@appwrite.io/pink": "0.8.0", + "@appwrite.io/pink-icons": "0.8.0", "@popperjs/core": "^2.11.8", "@sentry/svelte": "^7.66.0", "@sentry/tracing": "^7.66.0", @@ -37,16 +37,15 @@ "pretty-bytes": "^6.1.1", "prismjs": "^1.29.0", "svelte-confetti": "^1.3.0", - "tippy.js": "^6.3.7", - "web-vitals": "^3.4.0" + "tippy.js": "^6.3.7" }, "devDependencies": { "@melt-ui/pp": "^0.1.4", "@melt-ui/svelte": "^0.61.2", "@playwright/test": "^1.37.1", - "@sveltejs/adapter-static": "^2.0.3", - "@sveltejs/kit": "^1.24.0", - "@sveltejs/vite-plugin-svelte": "^2.4.5", + "@sveltejs/adapter-static": "^3.0.1", + "@sveltejs/kit": "^2.3.4", + "@sveltejs/vite-plugin-svelte": "^3.0.1", "@testing-library/dom": "^9.0.1", "@testing-library/jest-dom": "^5.16.5", "@testing-library/svelte": "^4.0.3", @@ -55,24 +54,24 @@ "@types/prismjs": "^1.26.0", "@typescript-eslint/eslint-plugin": "^6.5.0", "@typescript-eslint/parser": "^6.5.0", - "@vitest/ui": "^0.29.7", + "@vitest/ui": "^1.2.1", "eslint": "^8.48.0", "eslint-config-prettier": "^9.0.0", "eslint-plugin-svelte": "^2.33.0", "jsdom": "^22.1.0", "kleur": "^4.1.5", - "prettier": "^3.0.3", - "prettier-plugin-svelte": "^3.0.3", + "prettier": "^3.2.2", + "prettier-plugin-svelte": "^3.1.2", "sass": "^1.66.1", - "svelte": "^4.2.0", + "svelte": "^4.2.9", "svelte-check": "^3.5.1", "svelte-jester": "^2.3.2", "svelte-preprocess": "^5.0.4", "svelte-sequential-preprocessor": "^2.0.1", "tslib": "^2.6.2", "typescript": "^5.2.2", - "vite": "^4.4.9", - "vitest": "^0.29.7" + "vite": "^5.0.11", + "vitest": "^1.2.1" }, "type": "module" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml deleted file mode 100644 index 84295b64a..000000000 --- a/pnpm-lock.yaml +++ /dev/null @@ -1,7647 +0,0 @@ -lockfileVersion: '6.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -dependencies: - '@appwrite.io/console': - specifier: ^0.3.0 - version: 0.3.0 - '@appwrite.io/pink': - specifier: 0.1.0 - version: 0.1.0 - '@appwrite.io/pink-icons': - specifier: ^0.1.0 - version: 0.1.0 - '@popperjs/core': - specifier: ^2.11.8 - version: 2.11.8 - '@sentry/svelte': - specifier: ^7.66.0 - version: 7.85.0(svelte@4.2.8) - '@sentry/tracing': - specifier: ^7.66.0 - version: 7.85.0 - ai: - specifier: ^2.2.11 - version: 2.2.27(react@18.2.0)(solid-js@1.8.7)(svelte@4.2.8)(vue@3.3.10) - analytics: - specifier: ^0.8.9 - version: 0.8.9(@types/dlv@1.1.4) - dayjs: - specifier: ^1.11.9 - version: 1.11.10 - deep-equal: - specifier: ^2.2.2 - version: 2.2.3 - dotenv: - specifier: ^16.3.1 - version: 16.3.1 - echarts: - specifier: ^5.4.3 - version: 5.4.3 - logrocket: - specifier: ^5.0.1 - version: 5.0.1 - nanoid: - specifier: ^4.0.2 - version: 4.0.2 - plausible-tracker: - specifier: ^0.3.8 - version: 0.3.8 - pretty-bytes: - specifier: ^6.1.1 - version: 6.1.1 - prismjs: - specifier: ^1.29.0 - version: 1.29.0 - svelte-confetti: - specifier: ^1.3.0 - version: 1.3.1(svelte@4.2.8) - tippy.js: - specifier: ^6.3.7 - version: 6.3.7 - web-vitals: - specifier: ^3.4.0 - version: 3.5.0 - -devDependencies: - '@playwright/test': - specifier: ^1.37.1 - version: 1.40.1 - '@sveltejs/adapter-static': - specifier: ^2.0.3 - version: 2.0.3(@sveltejs/kit@1.27.6) - '@sveltejs/kit': - specifier: ^1.24.0 - version: 1.27.6(svelte@4.2.8)(vite@4.5.1) - '@sveltejs/vite-plugin-svelte': - specifier: ^2.4.5 - version: 2.5.3(svelte@4.2.8)(vite@4.5.1) - '@testing-library/dom': - specifier: ^9.0.1 - version: 9.3.3 - '@testing-library/jest-dom': - specifier: ^5.16.5 - version: 5.17.0 - '@testing-library/svelte': - specifier: ^4.0.3 - version: 4.0.5(svelte@4.2.8) - '@testing-library/user-event': - specifier: ^14.4.3 - version: 14.5.1(@testing-library/dom@9.3.3) - '@types/deep-equal': - specifier: ^1.0.1 - version: 1.0.4 - '@types/prismjs': - specifier: ^1.26.0 - version: 1.26.3 - '@typescript-eslint/eslint-plugin': - specifier: ^6.5.0 - version: 6.13.2(@typescript-eslint/parser@6.13.2)(eslint@8.55.0)(typescript@5.3.2) - '@typescript-eslint/parser': - specifier: ^6.5.0 - version: 6.13.2(eslint@8.55.0)(typescript@5.3.2) - '@vitest/ui': - specifier: ^0.29.7 - version: 0.29.8 - eslint: - specifier: ^8.48.0 - version: 8.55.0 - eslint-config-prettier: - specifier: ^9.0.0 - version: 9.1.0(eslint@8.55.0) - eslint-plugin-svelte: - specifier: ^2.33.0 - version: 2.35.1(eslint@8.55.0)(svelte@4.2.8) - jsdom: - specifier: ^22.1.0 - version: 22.1.0 - kleur: - specifier: ^4.1.5 - version: 4.1.5 - prettier: - specifier: ^3.0.3 - version: 3.1.0 - prettier-plugin-svelte: - specifier: ^3.0.3 - version: 3.1.2(prettier@3.1.0)(svelte@4.2.8) - sass: - specifier: ^1.66.1 - version: 1.69.5 - svelte: - specifier: ^4.2.0 - version: 4.2.8 - svelte-check: - specifier: ^3.5.1 - version: 3.6.2(@babel/core@7.23.5)(postcss@8.4.32)(sass@1.69.5)(svelte@4.2.8) - svelte-jester: - specifier: ^2.3.2 - version: 2.3.2(jest@29.7.0)(svelte@4.2.8) - svelte-preprocess: - specifier: ^5.0.4 - version: 5.1.1(@babel/core@7.23.5)(postcss@8.4.32)(sass@1.69.5)(svelte@4.2.8)(typescript@5.3.2) - tslib: - specifier: ^2.6.2 - version: 2.6.2 - typescript: - specifier: ^5.2.2 - version: 5.3.2 - vite: - specifier: ^4.4.9 - version: 4.5.1(@types/node@20.10.3)(sass@1.69.5) - vitest: - specifier: ^0.29.7 - version: 0.29.8(@vitest/ui@0.29.8)(jsdom@22.1.0)(sass@1.69.5) - -packages: - /@aashutoshrathi/word-wrap@1.2.6: - resolution: - { - integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== - } - engines: { node: '>=0.10.0' } - dev: true - - /@adobe/css-tools@4.3.2: - resolution: - { - integrity: sha512-DA5a1C0gD/pLOvhv33YMrbf2FK3oUzwNl9oOJqE4XVjuEtt6XIakRcsd7eLiOSPkp1kTRQGICTA8cKra/vFbjw== - } - dev: true - - /@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.20 - - /@analytics/cookie-utils@0.2.12: - resolution: - { - integrity: sha512-2h/yuIu3kmu+ZJlKmlT6GoRvUEY2k1BbQBezEv5kGhnn9KpmzPz715Y3GmM2i+m7Y0QmBdVUoA260dQZkofs2A== - } - dependencies: - '@analytics/global-storage-utils': 0.1.7 - dev: false - - /@analytics/core@0.12.7(@types/dlv@1.1.4): - resolution: - { - integrity: sha512-etmIPCoxWLoUZ/o1o2zvIk4cdVHa8I1xUQtTuLA+YXQ4SsFbm75ZoMXJBqWrNSENpqCJgoL6hizl5uTbkNN+1Q== - } - dependencies: - '@analytics/global-storage-utils': 0.1.7 - '@analytics/type-utils': 0.6.2 - analytics-utils: 1.0.12(@types/dlv@1.1.4) - transitivePeerDependencies: - - '@types/dlv' - dev: false - - /@analytics/global-storage-utils@0.1.7: - resolution: - { - integrity: sha512-V+spzGLZYm4biZT4uefaylm80SrLXf8WOTv9hCgA46cLcyxx3LD4GCpssp1lj+RcWLl/uXJQBRO4Mnn/o1x6Gw== - } - dependencies: - '@analytics/type-utils': 0.6.2 - dev: false - - /@analytics/localstorage-utils@0.1.10: - resolution: - { - integrity: sha512-uJS+Jp1yLG5VFCgA5T82ZODYBS0xuDQx0NtAZrgbqt9j51BX3TcgmOez5LVkrUNu/lpbxjCLq35I4TKj78VmOQ== - } - dependencies: - '@analytics/global-storage-utils': 0.1.7 - dev: false - - /@analytics/session-storage-utils@0.0.7: - resolution: - { - integrity: sha512-PSv40UxG96HVcjY15e3zOqU2n8IqXnH8XvTkg1X43uXNTKVSebiI2kUjA3Q7ESFbw5DPwcLbJhV7GforpuBLDw== - } - dependencies: - '@analytics/global-storage-utils': 0.1.7 - dev: false - - /@analytics/storage-utils@0.4.2: - resolution: - { - integrity: sha512-AXObwyVQw9h2uJh1t2hUgabtVxzYpW+7uKVbdHQK80vr3Td5rrmCxrCxarh7HUuAgSDZ0bZWqmYxVgmwKceaLg== - } - dependencies: - '@analytics/cookie-utils': 0.2.12 - '@analytics/global-storage-utils': 0.1.7 - '@analytics/localstorage-utils': 0.1.10 - '@analytics/session-storage-utils': 0.0.7 - '@analytics/type-utils': 0.6.2 - dev: false - - /@analytics/type-utils@0.6.2: - resolution: - { - integrity: sha512-TD+xbmsBLyYy/IxFimW/YL/9L2IEnM7/EoV9Aeh56U64Ify8o27HJcKjo38XY9Tcn0uOq1AX3thkKgvtWvwFQg== - } - dev: false - - /@appwrite.io/console@0.3.0: - resolution: - { - integrity: sha512-XHKQHirzQliXoDpMLakSdXwpq9aPoeTABNhW8Z7MK3p6oBfp2gMplDD43Fbd91JREXoJ+RG8okX0z0nIc6hDiQ== - } - dependencies: - cross-fetch: 3.1.5 - isomorphic-form-data: 2.0.0 - transitivePeerDependencies: - - encoding - dev: false - - /@appwrite.io/pink-icons@0.1.0: - resolution: - { - integrity: sha512-Y5DmvosdCoBD0oyqKV+ncbXTzQuhX0WOe4N7uonMaz1NaFm3ODaIb/CF77hV2vg86oOQ+f+BirdhfPsBue2pNA== - } - dev: false - - /@appwrite.io/pink@0.1.0: - resolution: - { - integrity: sha512-z+4wiTH2PBMrbxvXiNjGQY0hs6ziCbKSb2rK0O/2M3aa9CHN/dBDSTpWCcED8G9BWDkeS5XMVZrQbyrdqMVc/Q== - } - dependencies: - '@appwrite.io/pink-icons': 0.1.0 - normalize.css: 8.0.1 - the-new-css-reset: 1.11.2 - dev: false - - /@babel/code-frame@7.23.5: - resolution: - { - integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== - } - engines: { node: '>=6.9.0' } - dependencies: - '@babel/highlight': 7.23.4 - chalk: 2.4.2 - dev: true - - /@babel/compat-data@7.23.5: - resolution: - { - integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== - } - engines: { node: '>=6.9.0' } - dev: true - - /@babel/core@7.23.5: - resolution: - { - integrity: sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g== - } - engines: { node: '>=6.9.0' } - dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.5 - '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) - '@babel/helpers': 7.23.5 - '@babel/parser': 7.23.5 - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.5 - '@babel/types': 7.23.5 - convert-source-map: 2.0.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.23.5: - resolution: - { - integrity: sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA== - } - engines: { node: '>=6.9.0' } - dependencies: - '@babel/types': 7.23.5 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 - jsesc: 2.5.2 - dev: true - - /@babel/helper-compilation-targets@7.22.15: - resolution: - { - integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== - } - engines: { node: '>=6.9.0' } - dependencies: - '@babel/compat-data': 7.23.5 - '@babel/helper-validator-option': 7.23.5 - browserslist: 4.22.2 - lru-cache: 5.1.1 - semver: 6.3.1 - dev: true - - /@babel/helper-environment-visitor@7.22.20: - resolution: - { - integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== - } - engines: { node: '>=6.9.0' } - dev: true - - /@babel/helper-function-name@7.23.0: - resolution: - { - integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== - } - engines: { node: '>=6.9.0' } - dependencies: - '@babel/template': 7.22.15 - '@babel/types': 7.23.5 - dev: true - - /@babel/helper-hoist-variables@7.22.5: - resolution: - { - integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== - } - engines: { node: '>=6.9.0' } - dependencies: - '@babel/types': 7.23.5 - dev: true - - /@babel/helper-module-imports@7.22.15: - resolution: - { - integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== - } - engines: { node: '>=6.9.0' } - dependencies: - '@babel/types': 7.23.5 - dev: true - - /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.5): - resolution: - { - integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== - } - engines: { node: '>=6.9.0' } - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.20 - dev: true - - /@babel/helper-plugin-utils@7.22.5: - resolution: - { - integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== - } - engines: { node: '>=6.9.0' } - 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.23.5 - 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.23.5 - dev: true - - /@babel/helper-string-parser@7.23.4: - resolution: - { - integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== - } - engines: { node: '>=6.9.0' } - - /@babel/helper-validator-identifier@7.22.20: - resolution: - { - integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== - } - engines: { node: '>=6.9.0' } - - /@babel/helper-validator-option@7.23.5: - resolution: - { - integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== - } - engines: { node: '>=6.9.0' } - dev: true - - /@babel/helpers@7.23.5: - resolution: - { - integrity: sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg== - } - engines: { node: '>=6.9.0' } - dependencies: - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.5 - '@babel/types': 7.23.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/highlight@7.23.4: - resolution: - { - integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== - } - engines: { node: '>=6.9.0' } - dependencies: - '@babel/helper-validator-identifier': 7.22.20 - chalk: 2.4.2 - js-tokens: 4.0.0 - dev: true - - /@babel/parser@7.23.5: - resolution: - { - integrity: sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ== - } - engines: { node: '>=6.0.0' } - hasBin: true - dependencies: - '@babel/types': 7.23.5 - - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.5): - resolution: - { - integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - } - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.5): - resolution: - { - integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== - } - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.5): - resolution: - { - integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - } - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.5): - resolution: - { - integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== - } - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.5): - resolution: - { - integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - } - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.5): - resolution: - { - integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== - } - engines: { node: '>=6.9.0' } - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.5): - resolution: - { - integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - } - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.5): - resolution: - { - integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - } - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.5): - resolution: - { - integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - } - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.5): - resolution: - { - integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - } - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.5): - resolution: - { - integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - } - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.5): - resolution: - { - integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - } - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.5): - resolution: - { - integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - } - engines: { node: '>=6.9.0' } - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.5): - resolution: - { - integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== - } - engines: { node: '>=6.9.0' } - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/runtime@7.23.5: - resolution: - { - integrity: sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w== - } - engines: { node: '>=6.9.0' } - dependencies: - regenerator-runtime: 0.14.0 - dev: true - - /@babel/template@7.22.15: - resolution: - { - integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== - } - engines: { node: '>=6.9.0' } - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/parser': 7.23.5 - '@babel/types': 7.23.5 - dev: true - - /@babel/traverse@7.23.5: - resolution: - { - integrity: sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w== - } - engines: { node: '>=6.9.0' } - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.23.5 - '@babel/types': 7.23.5 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/types@7.23.5: - resolution: - { - integrity: sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w== - } - engines: { node: '>=6.9.0' } - dependencies: - '@babel/helper-string-parser': 7.23.4 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 - - /@bcoe/v8-coverage@0.2.3: - resolution: - { - integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== - } - 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-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-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/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-x64@0.18.20: - resolution: - { - integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ== - } - 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-x64@0.18.20: - resolution: - { - integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ== - } - 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-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-ia32@0.18.20: - resolution: - { - integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA== - } - 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-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-ppc64@0.18.20: - resolution: - { - integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA== - } - 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-s390x@0.18.20: - resolution: - { - integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ== - } - 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/netbsd-x64@0.18.20: - resolution: - { - integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A== - } - 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/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/win32-arm64@0.18.20: - resolution: - { - integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg== - } - 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-x64@0.18.20: - resolution: - { - integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ== - } - engines: { node: '>=12' } - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@eslint-community/eslint-utils@4.4.0(eslint@8.55.0): - resolution: - { - integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - dependencies: - eslint: 8.55.0 - eslint-visitor-keys: 3.4.3 - dev: true - - /@eslint-community/regexpp@4.10.0: - resolution: - { - integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== - } - engines: { node: ^12.0.0 || ^14.0.0 || >=16.0.0 } - dev: true - - /@eslint/eslintrc@2.1.4: - resolution: - { - integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } - dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 9.6.1 - globals: 13.23.0 - ignore: 5.3.0 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - dev: true - - /@eslint/js@8.55.0: - resolution: - { - integrity: sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA== - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } - dev: true - - /@fastify/busboy@2.1.0: - resolution: - { - integrity: sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA== - } - engines: { node: '>=14' } - dev: true - - /@humanwhocodes/config-array@0.11.13: - resolution: - { - integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ== - } - engines: { node: '>=10.10.0' } - dependencies: - '@humanwhocodes/object-schema': 2.0.1 - debug: 4.3.4 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@humanwhocodes/module-importer@1.0.1: - resolution: - { - integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - } - engines: { node: '>=12.22' } - dev: true - - /@humanwhocodes/object-schema@2.0.1: - resolution: - { - integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== - } - dev: true - - /@istanbuljs/load-nyc-config@1.1.0: - resolution: - { - integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== - } - engines: { node: '>=8' } - dependencies: - camelcase: 5.3.1 - find-up: 4.1.0 - get-package-type: 0.1.0 - js-yaml: 3.14.1 - resolve-from: 5.0.0 - dev: true - - /@istanbuljs/schema@0.1.3: - resolution: - { - integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== - } - engines: { node: '>=8' } - dev: true - - /@jest/console@29.7.0: - resolution: - { - integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - '@jest/types': 29.6.3 - '@types/node': 20.10.3 - chalk: 4.1.2 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - slash: 3.0.0 - dev: true - - /@jest/core@29.7.0: - resolution: - { - integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - dependencies: - '@jest/console': 29.7.0 - '@jest/reporters': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.10.3 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - ci-info: 3.9.0 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.10.3) - jest-haste-map: 29.7.0 - jest-message-util: 29.7.0 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-resolve-dependencies: 29.7.0 - jest-runner: 29.7.0 - jest-runtime: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - jest-watcher: 29.7.0 - micromatch: 4.0.5 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-ansi: 6.0.1 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - ts-node - dev: true - - /@jest/environment@29.7.0: - resolution: - { - integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.10.3 - jest-mock: 29.7.0 - dev: true - - /@jest/expect-utils@29.7.0: - resolution: - { - integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - jest-get-type: 29.6.3 - dev: true - - /@jest/expect@29.7.0: - resolution: - { - integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - expect: 29.7.0 - jest-snapshot: 29.7.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@jest/fake-timers@29.7.0: - resolution: - { - integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - '@jest/types': 29.6.3 - '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.10.3 - jest-message-util: 29.7.0 - jest-mock: 29.7.0 - jest-util: 29.7.0 - dev: true - - /@jest/globals@29.7.0: - resolution: - { - integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - '@jest/environment': 29.7.0 - '@jest/expect': 29.7.0 - '@jest/types': 29.6.3 - jest-mock: 29.7.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@jest/reporters@29.7.0: - resolution: - { - integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - dependencies: - '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.20 - '@types/node': 20.10.3 - chalk: 4.1.2 - collect-v8-coverage: 1.0.2 - exit: 0.1.2 - glob: 7.2.3 - graceful-fs: 4.2.11 - istanbul-lib-coverage: 3.2.2 - istanbul-lib-instrument: 6.0.1 - istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.6 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - jest-worker: 29.7.0 - slash: 3.0.0 - string-length: 4.0.2 - strip-ansi: 6.0.1 - v8-to-istanbul: 9.2.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@jest/schemas@29.6.3: - resolution: - { - integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - '@sinclair/typebox': 0.27.8 - dev: true - - /@jest/source-map@29.6.3: - resolution: - { - integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - '@jridgewell/trace-mapping': 0.3.20 - callsites: 3.1.0 - graceful-fs: 4.2.11 - dev: true - - /@jest/test-result@29.7.0: - resolution: - { - integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - '@jest/console': 29.7.0 - '@jest/types': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.6 - collect-v8-coverage: 1.0.2 - dev: true - - /@jest/test-sequencer@29.7.0: - resolution: - { - integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - '@jest/test-result': 29.7.0 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - slash: 3.0.0 - dev: true - - /@jest/transform@29.7.0: - resolution: - { - integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - '@babel/core': 7.23.5 - '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.20 - babel-plugin-istanbul: 6.1.1 - chalk: 4.1.2 - convert-source-map: 2.0.0 - fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - micromatch: 4.0.5 - pirates: 4.0.6 - slash: 3.0.0 - write-file-atomic: 4.0.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@jest/types@29.6.3: - resolution: - { - integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - '@jest/schemas': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 20.10.3 - '@types/yargs': 17.0.32 - chalk: 4.1.2 - 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.20 - - /@jridgewell/resolve-uri@3.1.1: - resolution: - { - integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - } - engines: { node: '>=6.0.0' } - - /@jridgewell/set-array@1.1.2: - resolution: - { - integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - } - engines: { node: '>=6.0.0' } - - /@jridgewell/sourcemap-codec@1.4.15: - resolution: - { - integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - } - - /@jridgewell/trace-mapping@0.3.20: - resolution: - { - integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== - } - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 - - /@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 - - /@playwright/test@1.40.1: - resolution: - { - integrity: sha512-EaaawMTOeEItCRvfmkI9v6rBkF1svM8wjl/YPRrg2N2Wmp+4qJYkWtJsbew1szfKKDm6fPLy4YAanBhIlf9dWw== - } - engines: { node: '>=16' } - hasBin: true - dependencies: - playwright: 1.40.1 - dev: true - - /@polka/url@1.0.0-next.24: - resolution: - { - integrity: sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ== - } - dev: true - - /@popperjs/core@2.11.8: - resolution: - { - integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== - } - dev: false - - /@sentry-internal/feedback@7.85.0: - resolution: - { - integrity: sha512-MlbIN+N8CWFJBjbqMmARe4+UPo9QRhRar0YoOfmNA2Xqk/EwXcjHWkealosHznXH7tqVbjB25QJpHtDystft/Q== - } - engines: { node: '>=12' } - dependencies: - '@sentry/core': 7.85.0 - '@sentry/types': 7.85.0 - '@sentry/utils': 7.85.0 - dev: false - - /@sentry-internal/tracing@7.85.0: - resolution: - { - integrity: sha512-p3YMUwkPCy2su9cm/3+7QYR4RiMI0+07DU1BZtht9NLTzY2O87/yvUbn1v2yHR3vJQTy/+7N0ud9/mPBFznRQQ== - } - engines: { node: '>=8' } - dependencies: - '@sentry/core': 7.85.0 - '@sentry/types': 7.85.0 - '@sentry/utils': 7.85.0 - dev: false - - /@sentry/browser@7.85.0: - resolution: - { - integrity: sha512-x4sH7vTQnZQgy1U7NuN8XwhleAw7YMQitccHeC5m+kpIKGUO7w4Mdvu8rD3dnjmVmZvASpnwocAxy57/vCU6Ww== - } - engines: { node: '>=8' } - dependencies: - '@sentry-internal/feedback': 7.85.0 - '@sentry-internal/tracing': 7.85.0 - '@sentry/core': 7.85.0 - '@sentry/replay': 7.85.0 - '@sentry/types': 7.85.0 - '@sentry/utils': 7.85.0 - dev: false - - /@sentry/core@7.85.0: - resolution: - { - integrity: sha512-DFDAc4tWmHN5IWhr7XbHCiyF1Xgb95jz8Uj/JTX9atlgodId1UIbER77qpEmH3eQGid/QBdqrlR98zCixgSbwg== - } - engines: { node: '>=8' } - dependencies: - '@sentry/types': 7.85.0 - '@sentry/utils': 7.85.0 - dev: false - - /@sentry/replay@7.85.0: - resolution: - { - integrity: sha512-zVtTKfO+lu5qTwHpETI/oGo8hU3rdKHr3CdI1vRLw+d60PcAa/pWVlXsQeLRTw8PFwE358gHcpFZezj/11afew== - } - engines: { node: '>=12' } - dependencies: - '@sentry-internal/tracing': 7.85.0 - '@sentry/core': 7.85.0 - '@sentry/types': 7.85.0 - '@sentry/utils': 7.85.0 - dev: false - - /@sentry/svelte@7.85.0(svelte@4.2.8): - resolution: - { - integrity: sha512-XKXMpNJJ2GShl08kQvw8G4/aq2zaSpBkNEK3JNN6jAcLfMdHqbc8DSRFiDXdZt8udEa/4s3RqUOj/nApckmi0A== - } - engines: { node: '>=8' } - peerDependencies: - svelte: 3.x || 4.x - dependencies: - '@sentry/browser': 7.85.0 - '@sentry/types': 7.85.0 - '@sentry/utils': 7.85.0 - magic-string: 0.30.5 - svelte: 4.2.8 - dev: false - - /@sentry/tracing@7.85.0: - resolution: - { - integrity: sha512-L3bpqiM+zu5f3o6zh6hx3xEzVENyhrkuMlpUOyDo0mUytqp763HqF1xz+R+trzze7R5VWrxJaRPARsCKlXu4Ig== - } - engines: { node: '>=8' } - dependencies: - '@sentry-internal/tracing': 7.85.0 - dev: false - - /@sentry/types@7.85.0: - resolution: - { - integrity: sha512-R5jR4XkK5tBU2jDiPdSVqzkmjYRr666bcGaFGUHB/xDQCjPsjk+pEmCCL+vpuWoaZmQJUE1hVU7rgnVX81w8zg== - } - engines: { node: '>=8' } - dev: false - - /@sentry/utils@7.85.0: - resolution: - { - integrity: sha512-JZ7seNOLvhjAQ8GeB3GYknPQJkuhF88xAYOaESZP3xPOWBMFUN+IO4RqjMqMLFDniOwsVQS7GB/MfP+hxufieg== - } - engines: { node: '>=8' } - dependencies: - '@sentry/types': 7.85.0 - dev: false - - /@sinclair/typebox@0.27.8: - resolution: - { - integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== - } - dev: true - - /@sinonjs/commons@3.0.0: - resolution: - { - integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA== - } - dependencies: - type-detect: 4.0.8 - dev: true - - /@sinonjs/fake-timers@10.3.0: - resolution: - { - integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== - } - dependencies: - '@sinonjs/commons': 3.0.0 - dev: true - - /@sveltejs/adapter-static@2.0.3(@sveltejs/kit@1.27.6): - resolution: - { - integrity: sha512-VUqTfXsxYGugCpMqQv1U0LIdbR3S5nBkMMDmpjGVJyM6Q2jHVMFtdWJCkeHMySc6mZxJ+0eZK3T7IgmUCDrcUQ== - } - peerDependencies: - '@sveltejs/kit': ^1.5.0 - dependencies: - '@sveltejs/kit': 1.27.6(svelte@4.2.8)(vite@4.5.1) - dev: true - - /@sveltejs/kit@1.27.6(svelte@4.2.8)(vite@4.5.1): - resolution: - { - integrity: sha512-GsjTkMbKzXdbeRg0tk8S7HNShQ4879ftRr0ZHaZfjbig1xQwG57Bvcm9U9/mpLJtCapLbLWUnygKrgcLISLC8A== - } - engines: { node: ^16.14 || >=18 } - hasBin: true - requiresBuild: true - peerDependencies: - svelte: ^3.54.0 || ^4.0.0-next.0 || ^5.0.0-next.0 - vite: ^4.0.0 - dependencies: - '@sveltejs/vite-plugin-svelte': 2.5.3(svelte@4.2.8)(vite@4.5.1) - '@types/cookie': 0.5.4 - cookie: 0.5.0 - devalue: 4.3.2 - esm-env: 1.0.0 - kleur: 4.1.5 - magic-string: 0.30.5 - mrmime: 1.0.1 - sade: 1.8.1 - set-cookie-parser: 2.6.0 - sirv: 2.0.3 - svelte: 4.2.8 - tiny-glob: 0.2.9 - undici: 5.26.5 - vite: 4.5.1(@types/node@20.10.3)(sass@1.69.5) - transitivePeerDependencies: - - supports-color - dev: true - - /@sveltejs/vite-plugin-svelte-inspector@1.0.4(@sveltejs/vite-plugin-svelte@2.5.3)(svelte@4.2.8)(vite@4.5.1): - resolution: - { - integrity: sha512-zjiuZ3yydBtwpF3bj0kQNV0YXe+iKE545QGZVTaylW3eAzFr+pJ/cwK8lZEaRp4JtaJXhD5DyWAV4AxLh6DgaQ== - } - engines: { node: ^14.18.0 || >= 16 } - peerDependencies: - '@sveltejs/vite-plugin-svelte': ^2.2.0 - svelte: ^3.54.0 || ^4.0.0 - vite: ^4.0.0 - dependencies: - '@sveltejs/vite-plugin-svelte': 2.5.3(svelte@4.2.8)(vite@4.5.1) - debug: 4.3.4 - svelte: 4.2.8 - vite: 4.5.1(@types/node@20.10.3)(sass@1.69.5) - transitivePeerDependencies: - - supports-color - dev: true - - /@sveltejs/vite-plugin-svelte@2.5.3(svelte@4.2.8)(vite@4.5.1): - resolution: - { - integrity: sha512-erhNtXxE5/6xGZz/M9eXsmI7Pxa6MS7jyTy06zN3Ck++ldrppOnOlJwHHTsMC7DHDQdgUp4NAc4cDNQ9eGdB/w== - } - engines: { node: ^14.18.0 || >= 16 } - peerDependencies: - svelte: ^3.54.0 || ^4.0.0 || ^5.0.0-next.0 - vite: ^4.0.0 - dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 1.0.4(@sveltejs/vite-plugin-svelte@2.5.3)(svelte@4.2.8)(vite@4.5.1) - debug: 4.3.4 - deepmerge: 4.3.1 - kleur: 4.1.5 - magic-string: 0.30.5 - svelte: 4.2.8 - svelte-hmr: 0.15.3(svelte@4.2.8) - vite: 4.5.1(@types/node@20.10.3)(sass@1.69.5) - vitefu: 0.2.5(vite@4.5.1) - transitivePeerDependencies: - - supports-color - dev: true - - /@testing-library/dom@9.3.3: - resolution: - { - integrity: sha512-fB0R+fa3AUqbLHWyxXa2kGVtf1Fe1ZZFr0Zp6AIbIAzXb2mKbEXl+PCQNUOaq5lbTab5tfctfXRNsWXxa2f7Aw== - } - engines: { node: '>=14' } - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/runtime': 7.23.5 - '@types/aria-query': 5.0.4 - aria-query: 5.1.3 - chalk: 4.1.2 - dom-accessibility-api: 0.5.16 - lz-string: 1.5.0 - pretty-format: 27.5.1 - dev: true - - /@testing-library/jest-dom@5.17.0: - resolution: - { - integrity: sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg== - } - engines: { node: '>=8', npm: '>=6', yarn: '>=1' } - dependencies: - '@adobe/css-tools': 4.3.2 - '@babel/runtime': 7.23.5 - '@types/testing-library__jest-dom': 5.14.9 - aria-query: 5.3.0 - chalk: 3.0.0 - css.escape: 1.5.1 - dom-accessibility-api: 0.5.16 - lodash: 4.17.21 - redent: 3.0.0 - dev: true - - /@testing-library/svelte@4.0.5(svelte@4.2.8): - resolution: - { - integrity: sha512-P7X3mpYv/My4hBZfxVxTFV5KcA+EoWfRCguWP7WQdYj6HMdg/L+LiwG4ocvLe+hupedrC7dwcy85JlxKplJp2g== - } - engines: { node: '>= 10' } - peerDependencies: - svelte: ^3 || ^4 - dependencies: - '@testing-library/dom': 9.3.3 - svelte: 4.2.8 - dev: true - - /@testing-library/user-event@14.5.1(@testing-library/dom@9.3.3): - resolution: - { - integrity: sha512-UCcUKrUYGj7ClomOo2SpNVvx4/fkd/2BbIHDCle8A0ax+P3bU7yJwDBDrS6ZwdTMARWTGODX1hEsCcO+7beJjg== - } - engines: { node: '>=12', npm: '>=6' } - peerDependencies: - '@testing-library/dom': '>=7.21.4' - dependencies: - '@testing-library/dom': 9.3.3 - dev: true - - /@tootallnate/once@2.0.0: - resolution: - { - integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== - } - engines: { node: '>= 10' } - dev: true - - /@types/aria-query@5.0.4: - resolution: - { - integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw== - } - dev: true - - /@types/babel__core@7.20.5: - resolution: - { - integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== - } - dependencies: - '@babel/parser': 7.23.5 - '@babel/types': 7.23.5 - '@types/babel__generator': 7.6.7 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.4 - dev: true - - /@types/babel__generator@7.6.7: - resolution: - { - integrity: sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ== - } - dependencies: - '@babel/types': 7.23.5 - dev: true - - /@types/babel__template@7.4.4: - resolution: - { - integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== - } - dependencies: - '@babel/parser': 7.23.5 - '@babel/types': 7.23.5 - dev: true - - /@types/babel__traverse@7.20.4: - resolution: - { - integrity: sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA== - } - dependencies: - '@babel/types': 7.23.5 - dev: true - - /@types/chai-subset@1.3.5: - resolution: - { - integrity: sha512-c2mPnw+xHtXDoHmdtcCXGwyLMiauiAyxWMzhGpqHC4nqI/Y5G2XhTampslK2rb59kpcuHon03UH8W6iYUzw88A== - } - dependencies: - '@types/chai': 4.3.11 - dev: true - - /@types/chai@4.3.11: - resolution: - { - integrity: sha512-qQR1dr2rGIHYlJulmr8Ioq3De0Le9E4MJ5AiaeAETJJpndT1uUNHsGFK3L/UIu+rbkQSdj8J/w2bCsBZc/Y5fQ== - } - dev: true - - /@types/cookie@0.5.4: - resolution: - { - integrity: sha512-7z/eR6O859gyWIAjuvBWFzNURmf2oPBmJlfVWkwehU5nzIyjwBsTh7WMmEEV4JFnHuQ3ex4oyTvfKzcyJVDBNA== - } - dev: true - - /@types/deep-equal@1.0.4: - resolution: - { - integrity: sha512-tqdiS4otQP4KmY0PR3u6KbZ5EWvhNdUoS/jc93UuK23C220lOZ/9TvjfxdPcKvqwwDVtmtSCrnr0p/2dirAxkA== - } - dev: true - - /@types/dlv@1.1.4: - resolution: - { - integrity: sha512-m8KmImw4Jt+4rIgupwfivrWEOnj1LzkmKkqbh075uG13eTQ1ZxHWT6T0vIdSQhLIjQCiR0n0lZdtyDOPO1x2Mw== - } - dev: false - - /@types/estree@1.0.5: - resolution: - { - integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== - } - - /@types/graceful-fs@4.1.9: - resolution: - { - integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== - } - dependencies: - '@types/node': 20.10.3 - dev: true - - /@types/istanbul-lib-coverage@2.0.6: - resolution: - { - integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== - } - dev: true - - /@types/istanbul-lib-report@3.0.3: - resolution: - { - integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== - } - dependencies: - '@types/istanbul-lib-coverage': 2.0.6 - dev: true - - /@types/istanbul-reports@3.0.4: - resolution: - { - integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== - } - dependencies: - '@types/istanbul-lib-report': 3.0.3 - dev: true - - /@types/jest@29.5.10: - resolution: - { - integrity: sha512-tE4yxKEphEyxj9s4inideLHktW/x6DwesIwWZ9NN1FKf9zbJYsnhBoA9vrHA/IuIOKwPa5PcFBNV4lpMIOEzyQ== - } - dependencies: - expect: 29.7.0 - pretty-format: 29.7.0 - dev: true - - /@types/json-schema@7.0.15: - resolution: - { - integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== - } - dev: true - - /@types/node@20.10.3: - resolution: - { - integrity: sha512-XJavIpZqiXID5Yxnxv3RUDKTN5b81ddNC3ecsA0SoFXz/QU8OGBwZGMomiq0zw+uuqbL/krztv/DINAQ/EV4gg== - } - dependencies: - undici-types: 5.26.5 - dev: true - - /@types/prismjs@1.26.3: - resolution: - { - integrity: sha512-A0D0aTXvjlqJ5ZILMz3rNfDBOx9hHxLZYv2by47Sm/pqW35zzjusrZTryatjN/Rf8Us2gZrJD+KeHbUSTux1Cw== - } - dev: true - - /@types/pug@2.0.10: - resolution: - { - integrity: sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA== - } - dev: true - - /@types/semver@7.5.6: - resolution: - { - integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A== - } - dev: true - - /@types/stack-utils@2.0.3: - resolution: - { - integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== - } - dev: true - - /@types/testing-library__jest-dom@5.14.9: - resolution: - { - integrity: sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw== - } - dependencies: - '@types/jest': 29.5.10 - dev: true - - /@types/yargs-parser@21.0.3: - resolution: - { - integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== - } - dev: true - - /@types/yargs@17.0.32: - resolution: - { - integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== - } - dependencies: - '@types/yargs-parser': 21.0.3 - dev: true - - /@typescript-eslint/eslint-plugin@6.13.2(@typescript-eslint/parser@6.13.2)(eslint@8.55.0)(typescript@5.3.2): - resolution: - { - integrity: sha512-3+9OGAWHhk4O1LlcwLBONbdXsAhLjyCFogJY/cWy2lxdVJ2JrcTF2pTGMaLl2AE7U1l31n8Py4a8bx5DLf/0dQ== - } - engines: { node: ^16.0.0 || >=18.0.0 } - peerDependencies: - '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.13.2(eslint@8.55.0)(typescript@5.3.2) - '@typescript-eslint/scope-manager': 6.13.2 - '@typescript-eslint/type-utils': 6.13.2(eslint@8.55.0)(typescript@5.3.2) - '@typescript-eslint/utils': 6.13.2(eslint@8.55.0)(typescript@5.3.2) - '@typescript-eslint/visitor-keys': 6.13.2 - debug: 4.3.4 - eslint: 8.55.0 - graphemer: 1.4.0 - ignore: 5.3.0 - natural-compare: 1.4.0 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.2) - typescript: 5.3.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/parser@6.13.2(eslint@8.55.0)(typescript@5.3.2): - resolution: - { - integrity: sha512-MUkcC+7Wt/QOGeVlM8aGGJZy1XV5YKjTpq9jK6r6/iLsGXhBVaGP5N0UYvFsu9BFlSpwY9kMretzdBH01rkRXg== - } - engines: { node: ^16.0.0 || >=18.0.0 } - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': 6.13.2 - '@typescript-eslint/types': 6.13.2 - '@typescript-eslint/typescript-estree': 6.13.2(typescript@5.3.2) - '@typescript-eslint/visitor-keys': 6.13.2 - debug: 4.3.4 - eslint: 8.55.0 - typescript: 5.3.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/scope-manager@6.13.2: - resolution: - { - integrity: sha512-CXQA0xo7z6x13FeDYCgBkjWzNqzBn8RXaE3QVQVIUm74fWJLkJkaHmHdKStrxQllGh6Q4eUGyNpMe0b1hMkXFA== - } - engines: { node: ^16.0.0 || >=18.0.0 } - dependencies: - '@typescript-eslint/types': 6.13.2 - '@typescript-eslint/visitor-keys': 6.13.2 - dev: true - - /@typescript-eslint/type-utils@6.13.2(eslint@8.55.0)(typescript@5.3.2): - resolution: - { - integrity: sha512-Qr6ssS1GFongzH2qfnWKkAQmMUyZSyOr0W54nZNU1MDfo+U4Mv3XveeLZzadc/yq8iYhQZHYT+eoXJqnACM1tw== - } - engines: { node: ^16.0.0 || >=18.0.0 } - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/typescript-estree': 6.13.2(typescript@5.3.2) - '@typescript-eslint/utils': 6.13.2(eslint@8.55.0)(typescript@5.3.2) - debug: 4.3.4 - eslint: 8.55.0 - ts-api-utils: 1.0.3(typescript@5.3.2) - typescript: 5.3.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/types@6.13.2: - resolution: - { - integrity: sha512-7sxbQ+EMRubQc3wTfTsycgYpSujyVbI1xw+3UMRUcrhSy+pN09y/lWzeKDbvhoqcRbHdc+APLs/PWYi/cisLPg== - } - engines: { node: ^16.0.0 || >=18.0.0 } - dev: true - - /@typescript-eslint/typescript-estree@6.13.2(typescript@5.3.2): - resolution: - { - integrity: sha512-SuD8YLQv6WHnOEtKv8D6HZUzOub855cfPnPMKvdM/Bh1plv1f7Q/0iFUDLKKlxHcEstQnaUU4QZskgQq74t+3w== - } - engines: { node: ^16.0.0 || >=18.0.0 } - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/types': 6.13.2 - '@typescript-eslint/visitor-keys': 6.13.2 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.2) - typescript: 5.3.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/utils@6.13.2(eslint@8.55.0)(typescript@5.3.2): - resolution: - { - integrity: sha512-b9Ptq4eAZUym4idijCRzl61oPCwwREcfDI8xGk751Vhzig5fFZR9CyzDz4Sp/nxSLBYxUPyh4QdIDqWykFhNmQ== - } - engines: { node: ^16.0.0 || >=18.0.0 } - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 6.13.2 - '@typescript-eslint/types': 6.13.2 - '@typescript-eslint/typescript-estree': 6.13.2(typescript@5.3.2) - eslint: 8.55.0 - semver: 7.5.4 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /@typescript-eslint/visitor-keys@6.13.2: - resolution: - { - integrity: sha512-OGznFs0eAQXJsp+xSd6k/O1UbFi/K/L7WjqeRoFE7vadjAF9y0uppXhYNQNEqygjou782maGClOoZwPqF0Drlw== - } - engines: { node: ^16.0.0 || >=18.0.0 } - dependencies: - '@typescript-eslint/types': 6.13.2 - eslint-visitor-keys: 3.4.3 - dev: true - - /@ungap/structured-clone@1.2.0: - resolution: - { - integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== - } - dev: true - - /@vitest/expect@0.29.8: - resolution: - { - integrity: sha512-xlcVXn5I5oTq6NiZSY3ykyWixBxr5mG8HYtjvpgg6KaqHm0mvhX18xuwl5YGxIRNt/A5jidd7CWcNHrSvgaQqQ== - } - dependencies: - '@vitest/spy': 0.29.8 - '@vitest/utils': 0.29.8 - chai: 4.3.10 - dev: true - - /@vitest/runner@0.29.8: - resolution: - { - integrity: sha512-FzdhnRDwEr/A3Oo1jtIk/B952BBvP32n1ObMEb23oEJNO+qO5cBet6M2XWIDQmA7BDKGKvmhUf2naXyp/2JEwQ== - } - dependencies: - '@vitest/utils': 0.29.8 - p-limit: 4.0.0 - pathe: 1.1.1 - dev: true - - /@vitest/spy@0.29.8: - resolution: - { - integrity: sha512-VdjBe9w34vOMl5I5mYEzNX8inTxrZ+tYUVk9jxaZJmHFwmDFC/GV3KBFTA/JKswr3XHvZL+FE/yq5EVhb6pSAw== - } - dependencies: - tinyspy: 1.1.1 - dev: true - - /@vitest/ui@0.29.8: - resolution: - { - integrity: sha512-+vbLd+c1R/XUWfzJsWeyjeiw13fwJ95I5tguxaqXRg61y9iYUKesVljg7Pttp2uo7VK+kAjvY91J41NZ1Vx3vg== - } - dependencies: - fast-glob: 3.3.2 - flatted: 3.2.9 - pathe: 1.1.1 - picocolors: 1.0.0 - sirv: 2.0.3 - dev: true - - /@vitest/utils@0.29.8: - resolution: - { - integrity: sha512-qGzuf3vrTbnoY+RjjVVIBYfuWMjn3UMUqyQtdGNZ6ZIIyte7B37exj6LaVkrZiUTvzSadVvO/tJm8AEgbGCBPg== - } - dependencies: - cli-truncate: 3.1.0 - diff: 5.1.0 - loupe: 2.3.7 - pretty-format: 27.5.1 - dev: true - - /@vue/compiler-core@3.3.10: - resolution: - { - integrity: sha512-doe0hODR1+i1menPkRzJ5MNR6G+9uiZHIknK3Zn5OcIztu6GGw7u0XUzf3AgB8h/dfsZC9eouzoLo3c3+N/cVA== - } - dependencies: - '@babel/parser': 7.23.5 - '@vue/shared': 3.3.10 - estree-walker: 2.0.2 - source-map-js: 1.0.2 - dev: false - - /@vue/compiler-dom@3.3.10: - resolution: - { - integrity: sha512-NCrqF5fm10GXZIK0GrEAauBqdy+F2LZRt3yNHzrYjpYBuRssQbuPLtSnSNjyR9luHKkWSH8we5LMB3g+4z2HvA== - } - dependencies: - '@vue/compiler-core': 3.3.10 - '@vue/shared': 3.3.10 - dev: false - - /@vue/compiler-sfc@3.3.10: - resolution: - { - integrity: sha512-xpcTe7Rw7QefOTRFFTlcfzozccvjM40dT45JtrE3onGm/jBLZ0JhpKu3jkV7rbDFLeeagR/5RlJ2Y9SvyS0lAg== - } - dependencies: - '@babel/parser': 7.23.5 - '@vue/compiler-core': 3.3.10 - '@vue/compiler-dom': 3.3.10 - '@vue/compiler-ssr': 3.3.10 - '@vue/reactivity-transform': 3.3.10 - '@vue/shared': 3.3.10 - estree-walker: 2.0.2 - magic-string: 0.30.5 - postcss: 8.4.32 - source-map-js: 1.0.2 - dev: false - - /@vue/compiler-ssr@3.3.10: - resolution: - { - integrity: sha512-12iM4jA4GEbskwXMmPcskK5wImc2ohKm408+o9iox3tfN9qua8xL0THIZtoe9OJHnXP4eOWZpgCAAThEveNlqQ== - } - dependencies: - '@vue/compiler-dom': 3.3.10 - '@vue/shared': 3.3.10 - dev: false - - /@vue/reactivity-transform@3.3.10: - resolution: - { - integrity: sha512-0xBdk+CKHWT+Gev8oZ63Tc0qFfj935YZx+UAynlutnrDZ4diFCVFMWixn65HzjE3S1iJppWOo6Tt1OzASH7VEg== - } - dependencies: - '@babel/parser': 7.23.5 - '@vue/compiler-core': 3.3.10 - '@vue/shared': 3.3.10 - estree-walker: 2.0.2 - magic-string: 0.30.5 - dev: false - - /@vue/reactivity@3.3.10: - resolution: - { - integrity: sha512-H5Z7rOY/JLO+e5a6/FEXaQ1TMuOvY4LDVgT+/+HKubEAgs9qeeZ+NhADSeEtrNQeiKLDuzeKc8v0CUFpB6Pqgw== - } - dependencies: - '@vue/shared': 3.3.10 - dev: false - - /@vue/runtime-core@3.3.10: - resolution: - { - integrity: sha512-DZ0v31oTN4YHX9JEU5VW1LoIVgFovWgIVb30bWn9DG9a7oA415idcwsRNNajqTx8HQJyOaWfRKoyuP2P2TYIag== - } - dependencies: - '@vue/reactivity': 3.3.10 - '@vue/shared': 3.3.10 - dev: false - - /@vue/runtime-dom@3.3.10: - resolution: - { - integrity: sha512-c/jKb3ny05KJcYk0j1m7Wbhrxq7mZYr06GhKykDMNRRR9S+/dGT8KpHuNQjv3/8U4JshfkAk6TpecPD3B21Ijw== - } - dependencies: - '@vue/runtime-core': 3.3.10 - '@vue/shared': 3.3.10 - csstype: 3.1.2 - dev: false - - /@vue/server-renderer@3.3.10(vue@3.3.10): - resolution: - { - integrity: sha512-0i6ww3sBV3SKlF3YTjSVqKQ74xialMbjVYGy7cOTi7Imd8ediE7t72SK3qnvhrTAhOvlQhq6Bk6nFPdXxe0sAg== - } - peerDependencies: - vue: 3.3.10 - dependencies: - '@vue/compiler-ssr': 3.3.10 - '@vue/shared': 3.3.10 - vue: 3.3.10(typescript@5.3.2) - dev: false - - /@vue/shared@3.3.10: - resolution: - { - integrity: sha512-2y3Y2J1a3RhFa0WisHvACJR2ncvWiVHcP8t0Inxo+NKz+8RKO4ZV8eZgCxRgQoA6ITfV12L4E6POOL9HOU5nqw== - } - dev: false - - /abab@2.0.6: - resolution: - { - integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== - } - deprecated: Use your platform's native atob() and btoa() methods instead - dev: true - - /acorn-jsx@5.3.2(acorn@8.11.2): - resolution: - { - integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - } - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - acorn: 8.11.2 - dev: true - - /acorn-walk@8.3.0: - resolution: - { - integrity: sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA== - } - engines: { node: '>=0.4.0' } - dev: true - - /acorn@8.11.2: - resolution: - { - integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== - } - engines: { node: '>=0.4.0' } - hasBin: 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 - - /ai@2.2.27(react@18.2.0)(solid-js@1.8.7)(svelte@4.2.8)(vue@3.3.10): - resolution: - { - integrity: sha512-s/F1CfduvLVAnrWHKqwvJLBeGadXNb7D4fmYQv+YcTxUTmqKZYPlQ5wikxteeKmJ1QajTpPI0lz0/zIm/4a7vw== - } - engines: { node: '>=14.6' } - peerDependencies: - react: ^18.2.0 - solid-js: ^1.7.7 - svelte: ^3.0.0 || ^4.0.0 - vue: ^3.3.4 - peerDependenciesMeta: - react: - optional: true - solid-js: - optional: true - svelte: - optional: true - vue: - optional: true - dependencies: - eventsource-parser: 1.0.0 - nanoid: 3.3.6 - react: 18.2.0 - solid-js: 1.8.7 - solid-swr-store: 0.10.7(solid-js@1.8.7)(swr-store@0.10.6) - sswr: 2.0.0(svelte@4.2.8) - svelte: 4.2.8 - swr: 2.2.0(react@18.2.0) - swr-store: 0.10.6 - swrv: 1.0.4(vue@3.3.10) - vue: 3.3.10(typescript@5.3.2) - dev: false - - /ajv@6.12.6: - resolution: - { - integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - } - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - dev: true - - /analytics-utils@1.0.12(@types/dlv@1.1.4): - resolution: - { - integrity: sha512-WvV2YWgsnXLxaY0QYux0crpBAg/0JA763NmbMVz22jKhMPo7dpTBet8G2IlF7ixTjLDzGlkHk1ZaKqqQmjJ+4w== - } - peerDependencies: - '@types/dlv': ^1.0.0 - dependencies: - '@analytics/type-utils': 0.6.2 - '@types/dlv': 1.1.4 - dlv: 1.1.3 - dev: false - - /analytics@0.8.9(@types/dlv@1.1.4): - resolution: - { - integrity: sha512-oTbUzQpncMTslakqfK70GgB6bopk5hY+uuekwnadMkDyqNLgcD02KRzteTnO7q5Ko6wDECVtT8xi/6OuAMZykA== - } - dependencies: - '@analytics/core': 0.12.7(@types/dlv@1.1.4) - '@analytics/storage-utils': 0.4.2 - transitivePeerDependencies: - - '@types/dlv' - dev: false - - /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@5.2.0: - resolution: - { - integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== - } - engines: { node: '>=10' } - 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 - - /argparse@1.0.10: - resolution: - { - integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - } - dependencies: - sprintf-js: 1.0.3 - dev: true - - /argparse@2.0.1: - resolution: - { - integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - } - dev: true - - /aria-query@5.1.3: - resolution: - { - integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== - } - dependencies: - deep-equal: 2.2.3 - dev: true - - /aria-query@5.3.0: - resolution: - { - integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== - } - dependencies: - dequal: 2.0.3 - - /array-buffer-byte-length@1.0.0: - resolution: - { - integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== - } - dependencies: - call-bind: 1.0.5 - is-array-buffer: 3.0.2 - - /array-union@2.1.0: - resolution: - { - integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - } - engines: { node: '>=8' } - dev: true - - /assertion-error@1.1.0: - resolution: - { - integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== - } - dev: true - - /asynckit@0.4.0: - resolution: - { - integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - } - - /available-typed-arrays@1.0.5: - resolution: - { - integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== - } - engines: { node: '>= 0.4' } - - /axobject-query@3.2.1: - resolution: - { - integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg== - } - dependencies: - dequal: 2.0.3 - - /babel-jest@29.7.0(@babel/core@7.23.5): - resolution: - { - integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - peerDependencies: - '@babel/core': ^7.8.0 - dependencies: - '@babel/core': 7.23.5 - '@jest/transform': 29.7.0 - '@types/babel__core': 7.20.5 - babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.23.5) - chalk: 4.1.2 - graceful-fs: 4.2.11 - slash: 3.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /babel-plugin-istanbul@6.1.1: - resolution: - { - integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== - } - engines: { node: '>=8' } - dependencies: - '@babel/helper-plugin-utils': 7.22.5 - '@istanbuljs/load-nyc-config': 1.1.0 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-instrument: 5.2.1 - test-exclude: 6.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /babel-plugin-jest-hoist@29.6.3: - resolution: - { - integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - '@babel/template': 7.22.15 - '@babel/types': 7.23.5 - '@types/babel__core': 7.20.5 - '@types/babel__traverse': 7.20.4 - dev: true - - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.5): - resolution: - { - integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== - } - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.5 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.5) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.5) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.5) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.5) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.5) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.5) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.5) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.5) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.5) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.5) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.5) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.5) - dev: true - - /babel-preset-jest@29.6.3(@babel/core@7.23.5): - resolution: - { - integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.5 - babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.5) - dev: true - - /balanced-match@1.0.2: - resolution: - { - integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - } - dev: true - - /binary-extensions@2.2.0: - resolution: - { - integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - } - engines: { node: '>=8' } - 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 - - /braces@3.0.2: - resolution: - { - integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - } - engines: { node: '>=8' } - dependencies: - fill-range: 7.0.1 - dev: true - - /browserslist@4.22.2: - resolution: - { - integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== - } - engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } - hasBin: true - dependencies: - caniuse-lite: 1.0.30001566 - electron-to-chromium: 1.4.603 - node-releases: 2.0.14 - update-browserslist-db: 1.0.13(browserslist@4.22.2) - dev: true - - /bser@2.1.1: - resolution: - { - integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - } - dependencies: - node-int64: 0.4.0 - dev: true - - /buffer-crc32@0.2.13: - resolution: - { - integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== - } - dev: true - - /buffer-from@1.1.2: - resolution: - { - integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - } - dev: true - - /cac@6.7.14: - resolution: - { - integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== - } - engines: { node: '>=8' } - dev: true - - /call-bind@1.0.5: - resolution: - { - integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== - } - dependencies: - function-bind: 1.1.2 - get-intrinsic: 1.2.2 - set-function-length: 1.1.1 - - /callsites@3.1.0: - resolution: - { - integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - } - engines: { node: '>=6' } - dev: true - - /camelcase@5.3.1: - resolution: - { - integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - } - engines: { node: '>=6' } - dev: true - - /camelcase@6.3.0: - resolution: - { - integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - } - engines: { node: '>=10' } - dev: true - - /caniuse-lite@1.0.30001566: - resolution: - { - integrity: sha512-ggIhCsTxmITBAMmK8yZjEhCO5/47jKXPu6Dha/wuCS4JePVL+3uiDEBuhu2aIoT+bqTOR8L76Ip1ARL9xYsEJA== - } - dev: true - - /chai@4.3.10: - resolution: - { - integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g== - } - engines: { node: '>=4' } - dependencies: - assertion-error: 1.1.0 - check-error: 1.0.3 - deep-eql: 4.1.3 - get-func-name: 2.0.2 - loupe: 2.3.7 - pathval: 1.1.1 - type-detect: 4.0.8 - 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@3.0.0: - resolution: - { - integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - } - engines: { node: '>=8' } - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.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 - - /char-regex@1.0.2: - resolution: - { - integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== - } - engines: { node: '>=10' } - dev: true - - /check-error@1.0.3: - resolution: - { - integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== - } - dependencies: - get-func-name: 2.0.2 - 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 - - /ci-info@3.9.0: - resolution: - { - integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== - } - engines: { node: '>=8' } - dev: true - - /cjs-module-lexer@1.2.3: - resolution: - { - integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== - } - dev: true - - /cli-truncate@3.1.0: - resolution: - { - integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } - dependencies: - slice-ansi: 5.0.0 - string-width: 5.1.2 - 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 - - /co@4.6.0: - resolution: - { - integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== - } - engines: { iojs: '>= 1.0.0', node: '>= 0.12.0' } - dev: true - - /code-red@1.0.4: - resolution: - { - integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw== - } - dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - '@types/estree': 1.0.5 - acorn: 8.11.2 - estree-walker: 3.0.3 - periscopic: 3.1.0 - - /collect-v8-coverage@1.0.2: - resolution: - { - integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== - } - 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 - - /combined-stream@1.0.8: - resolution: - { - integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - } - engines: { node: '>= 0.8' } - dependencies: - delayed-stream: 1.0.0 - - /concat-map@0.0.1: - resolution: - { - integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - } - dev: true - - /convert-source-map@2.0.0: - resolution: - { - integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== - } - dev: true - - /cookie@0.5.0: - resolution: - { - integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== - } - engines: { node: '>= 0.6' } - dev: true - - /create-jest@29.7.0: - resolution: - { - integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - hasBin: true - dependencies: - '@jest/types': 29.6.3 - chalk: 4.1.2 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.10.3) - jest-util: 29.7.0 - prompts: 2.4.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - dev: true - - /cross-fetch@3.1.5: - resolution: - { - integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== - } - dependencies: - node-fetch: 2.6.7 - transitivePeerDependencies: - - encoding - dev: false - - /cross-spawn@7.0.3: - resolution: - { - integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - } - engines: { node: '>= 8' } - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - dev: true - - /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 - - /css.escape@1.5.1: - resolution: - { - integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== - } - dev: true - - /cssesc@3.0.0: - resolution: - { - integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - } - engines: { node: '>=4' } - hasBin: true - dev: true - - /cssstyle@3.0.0: - resolution: - { - integrity: sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg== - } - engines: { node: '>=14' } - dependencies: - rrweb-cssom: 0.6.0 - dev: true - - /csstype@3.1.2: - resolution: - { - integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== - } - dev: false - - /data-urls@4.0.0: - resolution: - { - integrity: sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g== - } - engines: { node: '>=14' } - dependencies: - abab: 2.0.6 - whatwg-mimetype: 3.0.0 - whatwg-url: 12.0.1 - dev: true - - /dayjs@1.11.10: - resolution: - { - integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ== - } - dev: false - - /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 - - /decimal.js@10.4.3: - resolution: - { - integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== - } - dev: true - - /dedent@1.5.1: - resolution: - { - integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== - } - peerDependencies: - babel-plugin-macros: ^3.1.0 - peerDependenciesMeta: - babel-plugin-macros: - optional: true - dev: true - - /deep-eql@4.1.3: - resolution: - { - integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== - } - engines: { node: '>=6' } - dependencies: - type-detect: 4.0.8 - dev: true - - /deep-equal@2.2.3: - resolution: - { - integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA== - } - engines: { node: '>= 0.4' } - dependencies: - array-buffer-byte-length: 1.0.0 - call-bind: 1.0.5 - es-get-iterator: 1.1.3 - get-intrinsic: 1.2.2 - is-arguments: 1.1.1 - is-array-buffer: 3.0.2 - is-date-object: 1.0.5 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 - isarray: 2.0.5 - object-is: 1.1.5 - object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.1 - side-channel: 1.0.4 - which-boxed-primitive: 1.0.2 - which-collection: 1.0.1 - which-typed-array: 1.1.13 - - /deep-is@0.1.4: - resolution: - { - integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - } - dev: true - - /deepmerge@4.3.1: - resolution: - { - integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - } - engines: { node: '>=0.10.0' } - dev: true - - /define-data-property@1.1.1: - resolution: - { - integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== - } - engines: { node: '>= 0.4' } - dependencies: - get-intrinsic: 1.2.2 - gopd: 1.0.1 - has-property-descriptors: 1.0.1 - - /define-properties@1.2.1: - resolution: - { - integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== - } - engines: { node: '>= 0.4' } - dependencies: - define-data-property: 1.1.1 - has-property-descriptors: 1.0.1 - object-keys: 1.1.1 - - /delayed-stream@1.0.0: - resolution: - { - integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - } - engines: { node: '>=0.4.0' } - - /dequal@2.0.3: - resolution: - { - integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== - } - engines: { node: '>=6' } - - /detect-indent@6.1.0: - resolution: - { - integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== - } - engines: { node: '>=8' } - dev: true - - /detect-newline@3.1.0: - resolution: - { - integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== - } - engines: { node: '>=8' } - dev: true - - /devalue@4.3.2: - resolution: - { - integrity: sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg== - } - dev: true - - /diff-sequences@29.6.3: - resolution: - { - integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - 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 - - /dlv@1.1.3: - resolution: - { - integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== - } - dev: false - - /doctrine@3.0.0: - resolution: - { - integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - } - engines: { node: '>=6.0.0' } - dependencies: - esutils: 2.0.3 - dev: true - - /dom-accessibility-api@0.5.16: - resolution: - { - integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg== - } - dev: true - - /domexception@4.0.0: - resolution: - { - integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw== - } - engines: { node: '>=12' } - deprecated: Use your platform's native DOMException instead - dependencies: - webidl-conversions: 7.0.0 - dev: true - - /dotenv@16.3.1: - resolution: - { - integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ== - } - engines: { node: '>=12' } - dev: false - - /eastasianwidth@0.2.0: - resolution: - { - integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - } - dev: true - - /echarts@5.4.3: - resolution: - { - integrity: sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA== - } - dependencies: - tslib: 2.3.0 - zrender: 5.4.4 - dev: false - - /electron-to-chromium@1.4.603: - resolution: - { - integrity: sha512-Dvo5OGjnl7AZTU632dFJtWj0uJK835eeOVQIuRcmBmsFsTNn3cL05FqOyHAfGQDIoHfLhyJ1Tya3PJ0ceMz54g== - } - dev: true - - /emittery@0.13.1: - resolution: - { - integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== - } - engines: { node: '>=12' } - 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 - - /entities@4.5.0: - resolution: - { - integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== - } - engines: { node: '>=0.12' } - dev: true - - /error-ex@1.3.2: - resolution: - { - integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - } - dependencies: - is-arrayish: 0.2.1 - dev: true - - /es-get-iterator@1.1.3: - resolution: - { - integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== - } - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - has-symbols: 1.0.3 - is-arguments: 1.1.1 - is-map: 2.0.2 - is-set: 2.0.2 - is-string: 1.0.7 - isarray: 2.0.5 - stop-iteration-iterator: 1.0.0 - - /es6-promise@3.3.1: - resolution: - { - integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg== - } - 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 - - /escalade@3.1.1: - resolution: - { - integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - } - engines: { node: '>=6' } - dev: true - - /escape-string-regexp@1.0.5: - resolution: - { - integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - } - engines: { node: '>=0.8.0' } - dev: true - - /escape-string-regexp@2.0.0: - resolution: - { - integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - } - engines: { node: '>=8' } - dev: true - - /escape-string-regexp@4.0.0: - resolution: - { - integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - } - engines: { node: '>=10' } - dev: true - - /eslint-compat-utils@0.1.2(eslint@8.55.0): - resolution: - { - integrity: sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg== - } - engines: { node: '>=12' } - peerDependencies: - eslint: '>=6.0.0' - dependencies: - eslint: 8.55.0 - dev: true - - /eslint-config-prettier@9.1.0(eslint@8.55.0): - resolution: - { - integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== - } - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - dependencies: - eslint: 8.55.0 - dev: true - - /eslint-plugin-svelte@2.35.1(eslint@8.55.0)(svelte@4.2.8): - resolution: - { - integrity: sha512-IF8TpLnROSGy98Z3NrsKXWDSCbNY2ReHDcrYTuXZMbfX7VmESISR78TWgO9zdg4Dht1X8coub5jKwHzP0ExRug== - } - engines: { node: ^14.17.0 || >=16.0.0 } - peerDependencies: - eslint: ^7.0.0 || ^8.0.0-0 - svelte: ^3.37.0 || ^4.0.0 - peerDependenciesMeta: - svelte: - optional: true - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) - '@jridgewell/sourcemap-codec': 1.4.15 - debug: 4.3.4 - eslint: 8.55.0 - eslint-compat-utils: 0.1.2(eslint@8.55.0) - esutils: 2.0.3 - known-css-properties: 0.29.0 - postcss: 8.4.32 - postcss-load-config: 3.1.4(postcss@8.4.32) - postcss-safe-parser: 6.0.0(postcss@8.4.32) - postcss-selector-parser: 6.0.13 - semver: 7.5.4 - svelte: 4.2.8 - svelte-eslint-parser: 0.33.1(svelte@4.2.8) - transitivePeerDependencies: - - supports-color - - ts-node - dev: true - - /eslint-scope@7.2.2: - resolution: - { - integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - dev: true - - /eslint-visitor-keys@3.4.3: - resolution: - { - integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } - dev: true - - /eslint@8.55.0: - resolution: - { - integrity: sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA== - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } - hasBin: true - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) - '@eslint-community/regexpp': 4.10.0 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.55.0 - '@humanwhocodes/config-array': 0.11.13 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4 - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.5.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.23.0 - graphemer: 1.4.0 - ignore: 5.3.0 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.3 - strip-ansi: 6.0.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - dev: true - - /esm-env@1.0.0: - resolution: - { - integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA== - } - dev: true - - /espree@9.6.1: - resolution: - { - integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } - dependencies: - acorn: 8.11.2 - acorn-jsx: 5.3.2(acorn@8.11.2) - eslint-visitor-keys: 3.4.3 - dev: true - - /esprima@4.0.1: - resolution: - { - integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - } - engines: { node: '>=4' } - hasBin: true - dev: true - - /esquery@1.5.0: - resolution: - { - integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== - } - engines: { node: '>=0.10' } - dependencies: - estraverse: 5.3.0 - dev: true - - /esrecurse@4.3.0: - resolution: - { - integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - } - engines: { node: '>=4.0' } - dependencies: - estraverse: 5.3.0 - dev: true - - /estraverse@5.3.0: - resolution: - { - integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - } - engines: { node: '>=4.0' } - dev: true - - /estree-walker@2.0.2: - resolution: - { - integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== - } - dev: false - - /estree-walker@3.0.3: - resolution: - { - integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== - } - dependencies: - '@types/estree': 1.0.5 - - /esutils@2.0.3: - resolution: - { - integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - } - engines: { node: '>=0.10.0' } - dev: true - - /eventsource-parser@1.0.0: - resolution: - { - integrity: sha512-9jgfSCa3dmEme2ES3mPByGXfgZ87VbP97tng1G2nWwWx6bV2nYxm2AWCrbQjXToSe+yYlqaZNtxffR9IeQr95g== - } - engines: { node: '>=14.18' } - dev: false - - /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 - - /exit@0.1.2: - resolution: - { - integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== - } - engines: { node: '>= 0.8.0' } - dev: true - - /expect@29.7.0: - resolution: - { - integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - '@jest/expect-utils': 29.7.0 - jest-get-type: 29.6.3 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - dev: true - - /fast-deep-equal@3.1.3: - resolution: - { - integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - } - dev: true - - /fast-glob@3.3.2: - resolution: - { - integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== - } - engines: { node: '>=8.6.0' } - 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 - - /fast-json-stable-stringify@2.1.0: - resolution: - { - integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - } - dev: true - - /fast-levenshtein@2.0.6: - resolution: - { - integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - } - dev: true - - /fastq@1.15.0: - resolution: - { - integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== - } - dependencies: - reusify: 1.0.4 - dev: true - - /fb-watchman@2.0.2: - resolution: - { - integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== - } - dependencies: - bser: 2.1.1 - dev: true - - /file-entry-cache@6.0.1: - resolution: - { - integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - } - engines: { node: ^10.12.0 || >=12.0.0 } - dependencies: - flat-cache: 3.2.0 - dev: true - - /fill-range@7.0.1: - resolution: - { - integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - } - engines: { node: '>=8' } - dependencies: - to-regex-range: 5.0.1 - dev: true - - /find-up@4.1.0: - resolution: - { - integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - } - engines: { node: '>=8' } - dependencies: - locate-path: 5.0.0 - path-exists: 4.0.0 - dev: true - - /find-up@5.0.0: - resolution: - { - integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - } - engines: { node: '>=10' } - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - dev: true - - /flat-cache@3.2.0: - resolution: - { - integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== - } - engines: { node: ^10.12.0 || >=12.0.0 } - dependencies: - flatted: 3.2.9 - keyv: 4.5.4 - rimraf: 3.0.2 - dev: true - - /flatted@3.2.9: - resolution: - { - integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== - } - dev: true - - /for-each@0.3.3: - resolution: - { - integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - } - dependencies: - is-callable: 1.2.7 - - /form-data@2.5.1: - resolution: - { - integrity: sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== - } - engines: { node: '>= 0.12' } - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - dev: false - - /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 - - /fs.realpath@1.0.0: - resolution: - { - integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - } - dev: true - - /fsevents@2.3.2: - resolution: - { - integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - } - engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } - os: [darwin] - requiresBuild: true - dev: true - optional: 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.2: - resolution: - { - integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - } - - /functions-have-names@1.2.3: - resolution: - { - integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - } - - /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-func-name@2.0.2: - resolution: - { - integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== - } - dev: true - - /get-intrinsic@1.2.2: - resolution: - { - integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== - } - dependencies: - function-bind: 1.1.2 - has-proto: 1.0.1 - has-symbols: 1.0.3 - hasown: 2.0.0 - - /get-package-type@0.1.0: - resolution: - { - integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== - } - engines: { node: '>=8.0.0' } - dev: true - - /get-stream@6.0.1: - resolution: - { - integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - } - engines: { node: '>=10' } - 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-parent@6.0.2: - resolution: - { - integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - } - engines: { node: '>=10.13.0' } - dependencies: - is-glob: 4.0.3 - dev: true - - /glob@7.2.3: - resolution: - { - integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - } - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - - /globals@11.12.0: - resolution: - { - integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - } - engines: { node: '>=4' } - dev: true - - /globals@13.23.0: - resolution: - { - integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA== - } - engines: { node: '>=8' } - dependencies: - type-fest: 0.20.2 - dev: true - - /globalyzer@0.1.0: - resolution: - { - integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q== - } - dev: true - - /globby@11.1.0: - resolution: - { - integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - } - engines: { node: '>=10' } - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.0 - merge2: 1.4.1 - slash: 3.0.0 - dev: true - - /globrex@0.1.2: - resolution: - { - integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== - } - dev: true - - /gopd@1.0.1: - resolution: - { - integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - } - dependencies: - get-intrinsic: 1.2.2 - - /graceful-fs@4.2.11: - resolution: - { - integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - } - dev: true - - /graphemer@1.4.0: - resolution: - { - integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== - } - dev: true - - /has-bigints@1.0.2: - resolution: - { - integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - } - - /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.1: - resolution: - { - integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== - } - dependencies: - get-intrinsic: 1.2.2 - - /has-proto@1.0.1: - resolution: - { - integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== - } - engines: { node: '>= 0.4' } - - /has-symbols@1.0.3: - resolution: - { - integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - } - engines: { node: '>= 0.4' } - - /has-tostringtag@1.0.0: - resolution: - { - integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - } - engines: { node: '>= 0.4' } - dependencies: - has-symbols: 1.0.3 - - /hasown@2.0.0: - resolution: - { - integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== - } - engines: { node: '>= 0.4' } - dependencies: - function-bind: 1.1.2 - - /html-encoding-sniffer@3.0.0: - resolution: - { - integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA== - } - engines: { node: '>=12' } - dependencies: - whatwg-encoding: 2.0.0 - dev: true - - /html-escaper@2.0.2: - resolution: - { - integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - } - 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 - - /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 - - /human-signals@2.1.0: - resolution: - { - integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - } - engines: { node: '>=10.17.0' } - dev: true - - /iconv-lite@0.6.3: - resolution: - { - integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - } - engines: { node: '>=0.10.0' } - dependencies: - safer-buffer: 2.1.2 - dev: true - - /ignore@5.3.0: - resolution: - { - integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== - } - engines: { node: '>= 4' } - dev: true - - /immutable@4.3.4: - resolution: - { - integrity: sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA== - } - dev: true - - /import-fresh@3.3.0: - resolution: - { - integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - } - engines: { node: '>=6' } - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - dev: true - - /import-local@3.1.0: - resolution: - { - integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== - } - engines: { node: '>=8' } - hasBin: true - dependencies: - pkg-dir: 4.2.0 - resolve-cwd: 3.0.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 - - /internal-slot@1.0.6: - resolution: - { - integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== - } - engines: { node: '>= 0.4' } - dependencies: - get-intrinsic: 1.2.2 - hasown: 2.0.0 - side-channel: 1.0.4 - - /is-arguments@1.1.1: - resolution: - { - integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - } - engines: { node: '>= 0.4' } - dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 - - /is-array-buffer@3.0.2: - resolution: - { - integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== - } - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-typed-array: 1.1.12 - - /is-arrayish@0.2.1: - resolution: - { - integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - } - dev: true - - /is-bigint@1.0.4: - resolution: - { - integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - } - dependencies: - has-bigints: 1.0.2 - - /is-binary-path@2.1.0: - resolution: - { - integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - } - engines: { node: '>=8' } - dependencies: - binary-extensions: 2.2.0 - dev: true - - /is-boolean-object@1.1.2: - resolution: - { - integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - } - engines: { node: '>= 0.4' } - dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 - - /is-callable@1.2.7: - resolution: - { - integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - } - engines: { node: '>= 0.4' } - - /is-core-module@2.13.1: - resolution: - { - integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== - } - dependencies: - hasown: 2.0.0 - dev: true - - /is-date-object@1.0.5: - resolution: - { - integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - } - engines: { node: '>= 0.4' } - dependencies: - has-tostringtag: 1.0.0 - - /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-fullwidth-code-point@4.0.0: - resolution: - { - integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== - } - engines: { node: '>=12' } - dev: true - - /is-generator-fn@2.1.0: - resolution: - { - integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== - } - engines: { node: '>=6' } - 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-map@2.0.2: - resolution: - { - integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== - } - - /is-number-object@1.0.7: - resolution: - { - integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== - } - engines: { node: '>= 0.4' } - dependencies: - has-tostringtag: 1.0.0 - - /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-potential-custom-element-name@1.0.1: - resolution: - { - integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== - } - dev: true - - /is-reference@3.0.2: - resolution: - { - integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg== - } - dependencies: - '@types/estree': 1.0.5 - - /is-regex@1.1.4: - resolution: - { - integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - } - engines: { node: '>= 0.4' } - dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 - - /is-set@2.0.2: - resolution: - { - integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== - } - - /is-shared-array-buffer@1.0.2: - resolution: - { - integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== - } - dependencies: - call-bind: 1.0.5 - - /is-stream@2.0.1: - resolution: - { - integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - } - engines: { node: '>=8' } - dev: true - - /is-string@1.0.7: - resolution: - { - integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - } - engines: { node: '>= 0.4' } - dependencies: - has-tostringtag: 1.0.0 - - /is-symbol@1.0.4: - resolution: - { - integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - } - engines: { node: '>= 0.4' } - dependencies: - has-symbols: 1.0.3 - - /is-typed-array@1.1.12: - resolution: - { - integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== - } - engines: { node: '>= 0.4' } - dependencies: - which-typed-array: 1.1.13 - - /is-weakmap@2.0.1: - resolution: - { - integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== - } - - /is-weakset@2.0.2: - resolution: - { - integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== - } - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - - /isarray@2.0.5: - resolution: - { - integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - } - - /isexe@2.0.0: - resolution: - { - integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - } - dev: true - - /isomorphic-form-data@2.0.0: - resolution: - { - integrity: sha512-TYgVnXWeESVmQSg4GLVbalmQ+B4NPi/H4eWxqALKj63KsUrcu301YDjBqaOw3h+cbak7Na4Xyps3BiptHtxTfg== - } - dependencies: - form-data: 2.5.1 - dev: false - - /istanbul-lib-coverage@3.2.2: - resolution: - { - integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== - } - engines: { node: '>=8' } - dev: true - - /istanbul-lib-instrument@5.2.1: - resolution: - { - integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== - } - engines: { node: '>=8' } - dependencies: - '@babel/core': 7.23.5 - '@babel/parser': 7.23.5 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.2 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - - /istanbul-lib-instrument@6.0.1: - resolution: - { - integrity: sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA== - } - engines: { node: '>=10' } - dependencies: - '@babel/core': 7.23.5 - '@babel/parser': 7.23.5 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.2 - semver: 7.5.4 - transitivePeerDependencies: - - supports-color - dev: true - - /istanbul-lib-report@3.0.1: - resolution: - { - integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== - } - engines: { node: '>=10' } - dependencies: - istanbul-lib-coverage: 3.2.2 - make-dir: 4.0.0 - supports-color: 7.2.0 - dev: true - - /istanbul-lib-source-maps@4.0.1: - resolution: - { - integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== - } - engines: { node: '>=10' } - dependencies: - debug: 4.3.4 - istanbul-lib-coverage: 3.2.2 - source-map: 0.6.1 - transitivePeerDependencies: - - supports-color - dev: true - - /istanbul-reports@3.1.6: - resolution: - { - integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== - } - engines: { node: '>=8' } - dependencies: - html-escaper: 2.0.2 - istanbul-lib-report: 3.0.1 - dev: true - - /jest-changed-files@29.7.0: - resolution: - { - integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - execa: 5.1.1 - jest-util: 29.7.0 - p-limit: 3.1.0 - dev: true - - /jest-circus@29.7.0: - resolution: - { - integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - '@jest/environment': 29.7.0 - '@jest/expect': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.10.3 - chalk: 4.1.2 - co: 4.6.0 - dedent: 1.5.1 - is-generator-fn: 2.1.0 - jest-each: 29.7.0 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-runtime: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - p-limit: 3.1.0 - pretty-format: 29.7.0 - pure-rand: 6.0.4 - slash: 3.0.0 - stack-utils: 2.0.6 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - dev: true - - /jest-cli@29.7.0: - resolution: - { - integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - dependencies: - '@jest/core': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - chalk: 4.1.2 - create-jest: 29.7.0 - exit: 0.1.2 - import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.10.3) - jest-util: 29.7.0 - jest-validate: 29.7.0 - yargs: 17.7.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - dev: true - - /jest-config@29.7.0(@types/node@20.10.3): - resolution: - { - integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - peerDependencies: - '@types/node': '*' - ts-node: '>=9.0.0' - peerDependenciesMeta: - '@types/node': - optional: true - ts-node: - optional: true - dependencies: - '@babel/core': 7.23.5 - '@jest/test-sequencer': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.10.3 - babel-jest: 29.7.0(@babel/core@7.23.5) - chalk: 4.1.2 - ci-info: 3.9.0 - deepmerge: 4.3.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-circus: 29.7.0 - jest-environment-node: 29.7.0 - jest-get-type: 29.6.3 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-runner: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - micromatch: 4.0.5 - parse-json: 5.2.0 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - dev: true - - /jest-diff@29.7.0: - resolution: - { - integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - chalk: 4.1.2 - diff-sequences: 29.6.3 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - dev: true - - /jest-docblock@29.7.0: - resolution: - { - integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - detect-newline: 3.1.0 - dev: true - - /jest-each@29.7.0: - resolution: - { - integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - '@jest/types': 29.6.3 - chalk: 4.1.2 - jest-get-type: 29.6.3 - jest-util: 29.7.0 - pretty-format: 29.7.0 - dev: true - - /jest-environment-node@29.7.0: - resolution: - { - integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - '@jest/environment': 29.7.0 - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.10.3 - jest-mock: 29.7.0 - jest-util: 29.7.0 - dev: true - - /jest-get-type@29.6.3: - resolution: - { - integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dev: true - - /jest-haste-map@29.7.0: - resolution: - { - integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - '@jest/types': 29.6.3 - '@types/graceful-fs': 4.1.9 - '@types/node': 20.10.3 - anymatch: 3.1.3 - fb-watchman: 2.0.2 - graceful-fs: 4.2.11 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - jest-worker: 29.7.0 - micromatch: 4.0.5 - walker: 1.0.8 - optionalDependencies: - fsevents: 2.3.3 - dev: true - - /jest-leak-detector@29.7.0: - resolution: - { - integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - dev: true - - /jest-matcher-utils@29.7.0: - resolution: - { - integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - chalk: 4.1.2 - jest-diff: 29.7.0 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - dev: true - - /jest-message-util@29.7.0: - resolution: - { - integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - '@babel/code-frame': 7.23.5 - '@jest/types': 29.6.3 - '@types/stack-utils': 2.0.3 - chalk: 4.1.2 - graceful-fs: 4.2.11 - micromatch: 4.0.5 - pretty-format: 29.7.0 - slash: 3.0.0 - stack-utils: 2.0.6 - dev: true - - /jest-mock@29.7.0: - resolution: - { - integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - '@jest/types': 29.6.3 - '@types/node': 20.10.3 - jest-util: 29.7.0 - dev: true - - /jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): - resolution: - { - integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== - } - engines: { node: '>=6' } - peerDependencies: - jest-resolve: '*' - peerDependenciesMeta: - jest-resolve: - optional: true - dependencies: - jest-resolve: 29.7.0 - dev: true - - /jest-regex-util@29.6.3: - resolution: - { - integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dev: true - - /jest-resolve-dependencies@29.7.0: - resolution: - { - integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - jest-regex-util: 29.6.3 - jest-snapshot: 29.7.0 - transitivePeerDependencies: - - supports-color - dev: true - - /jest-resolve@29.7.0: - resolution: - { - integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - chalk: 4.1.2 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) - jest-util: 29.7.0 - jest-validate: 29.7.0 - resolve: 1.22.8 - resolve.exports: 2.0.2 - slash: 3.0.0 - dev: true - - /jest-runner@29.7.0: - resolution: - { - integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - '@jest/console': 29.7.0 - '@jest/environment': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.10.3 - chalk: 4.1.2 - emittery: 0.13.1 - graceful-fs: 4.2.11 - jest-docblock: 29.7.0 - jest-environment-node: 29.7.0 - jest-haste-map: 29.7.0 - jest-leak-detector: 29.7.0 - jest-message-util: 29.7.0 - jest-resolve: 29.7.0 - jest-runtime: 29.7.0 - jest-util: 29.7.0 - jest-watcher: 29.7.0 - jest-worker: 29.7.0 - p-limit: 3.1.0 - source-map-support: 0.5.13 - transitivePeerDependencies: - - supports-color - dev: true - - /jest-runtime@29.7.0: - resolution: - { - integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - '@jest/environment': 29.7.0 - '@jest/fake-timers': 29.7.0 - '@jest/globals': 29.7.0 - '@jest/source-map': 29.6.3 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.10.3 - chalk: 4.1.2 - cjs-module-lexer: 1.2.3 - collect-v8-coverage: 1.0.2 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-message-util: 29.7.0 - jest-mock: 29.7.0 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - slash: 3.0.0 - strip-bom: 4.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /jest-snapshot@29.7.0: - resolution: - { - integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - '@babel/core': 7.23.5 - '@babel/generator': 7.23.5 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.5) - '@babel/types': 7.23.5 - '@jest/expect-utils': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.5) - chalk: 4.1.2 - expect: 29.7.0 - graceful-fs: 4.2.11 - jest-diff: 29.7.0 - jest-get-type: 29.6.3 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - natural-compare: 1.4.0 - pretty-format: 29.7.0 - semver: 7.5.4 - transitivePeerDependencies: - - supports-color - dev: true - - /jest-util@29.7.0: - resolution: - { - integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - '@jest/types': 29.6.3 - '@types/node': 20.10.3 - chalk: 4.1.2 - ci-info: 3.9.0 - graceful-fs: 4.2.11 - picomatch: 2.3.1 - dev: true - - /jest-validate@29.7.0: - resolution: - { - integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - '@jest/types': 29.6.3 - camelcase: 6.3.0 - chalk: 4.1.2 - jest-get-type: 29.6.3 - leven: 3.1.0 - pretty-format: 29.7.0 - dev: true - - /jest-watcher@29.7.0: - resolution: - { - integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.10.3 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - emittery: 0.13.1 - jest-util: 29.7.0 - string-length: 4.0.2 - dev: true - - /jest-worker@29.7.0: - resolution: - { - integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - '@types/node': 20.10.3 - jest-util: 29.7.0 - merge-stream: 2.0.0 - supports-color: 8.1.1 - dev: true - - /jest@29.7.0: - resolution: - { - integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - dependencies: - '@jest/core': 29.7.0 - '@jest/types': 29.6.3 - import-local: 3.1.0 - jest-cli: 29.7.0 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - dev: true - - /js-tokens@4.0.0: - resolution: - { - integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - } - - /js-yaml@3.14.1: - resolution: - { - integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - } - hasBin: true - dependencies: - argparse: 1.0.10 - esprima: 4.0.1 - dev: true - - /js-yaml@4.1.0: - resolution: - { - integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - } - hasBin: true - dependencies: - argparse: 2.0.1 - dev: true - - /jsdom@22.1.0: - resolution: - { - integrity: sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw== - } - engines: { node: '>=16' } - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true - dependencies: - abab: 2.0.6 - cssstyle: 3.0.0 - data-urls: 4.0.0 - decimal.js: 10.4.3 - domexception: 4.0.0 - form-data: 4.0.0 - html-encoding-sniffer: 3.0.0 - http-proxy-agent: 5.0.0 - https-proxy-agent: 5.0.1 - is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.7 - parse5: 7.1.2 - rrweb-cssom: 0.6.0 - saxes: 6.0.0 - symbol-tree: 3.2.4 - tough-cookie: 4.1.3 - w3c-xmlserializer: 4.0.0 - webidl-conversions: 7.0.0 - whatwg-encoding: 2.0.0 - whatwg-mimetype: 3.0.0 - whatwg-url: 12.0.1 - ws: 8.14.2 - xml-name-validator: 4.0.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true - - /jsesc@2.5.2: - resolution: - { - integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - } - engines: { node: '>=4' } - hasBin: true - dev: true - - /json-buffer@3.0.1: - resolution: - { - integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - } - dev: true - - /json-parse-even-better-errors@2.3.1: - resolution: - { - integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - } - dev: true - - /json-schema-traverse@0.4.1: - resolution: - { - integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - } - dev: true - - /json-stable-stringify-without-jsonify@1.0.1: - resolution: - { - integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - } - dev: true - - /json5@2.2.3: - resolution: - { - integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - } - engines: { node: '>=6' } - hasBin: true - dev: true - - /jsonc-parser@3.2.0: - resolution: - { - integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== - } - dev: true - - /keyv@4.5.4: - resolution: - { - integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== - } - dependencies: - json-buffer: 3.0.1 - dev: true - - /kleur@3.0.3: - resolution: - { - integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - } - engines: { node: '>=6' } - dev: true - - /kleur@4.1.5: - resolution: - { - integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== - } - engines: { node: '>=6' } - dev: true - - /known-css-properties@0.29.0: - resolution: - { - integrity: sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ== - } - dev: true - - /leven@3.1.0: - resolution: - { - integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - } - engines: { node: '>=6' } - dev: true - - /levn@0.4.1: - resolution: - { - integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - } - engines: { node: '>= 0.8.0' } - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - dev: true - - /lilconfig@2.1.0: - resolution: - { - integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== - } - engines: { node: '>=10' } - dev: true - - /lines-and-columns@1.2.4: - resolution: - { - integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - } - dev: true - - /local-pkg@0.4.3: - resolution: - { - integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g== - } - engines: { node: '>=14' } - dev: true - - /locate-character@3.0.0: - resolution: - { - integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA== - } - - /locate-path@5.0.0: - resolution: - { - integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - } - engines: { node: '>=8' } - dependencies: - p-locate: 4.1.0 - dev: true - - /locate-path@6.0.0: - resolution: - { - integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - } - engines: { node: '>=10' } - dependencies: - p-locate: 5.0.0 - dev: true - - /lodash.merge@4.6.2: - resolution: - { - integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - } - dev: true - - /lodash@4.17.21: - resolution: - { - integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - } - dev: true - - /logrocket@5.0.1: - resolution: - { - integrity: sha512-czWLcDkBJ+V/wooBQtPW76RAS2rszjsfkQumqPO3zPCQka8dcjsuGJxJhcxAuMZf5WDZd/zkvfDZCBJ6zeCQYg== - } - dev: false - - /loose-envify@1.4.0: - resolution: - { - integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - } - hasBin: true - dependencies: - js-tokens: 4.0.0 - dev: false - - /loupe@2.3.7: - resolution: - { - integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== - } - dependencies: - get-func-name: 2.0.2 - 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 - - /lz-string@1.5.0: - resolution: - { - integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== - } - hasBin: true - 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.5: - resolution: - { - integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA== - } - engines: { node: '>=12' } - dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - - /make-dir@4.0.0: - resolution: - { - integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== - } - engines: { node: '>=10' } - dependencies: - semver: 7.5.4 - dev: true - - /makeerror@1.0.12: - resolution: - { - integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== - } - dependencies: - tmpl: 1.0.5 - dev: true - - /mdn-data@2.0.30: - resolution: - { - integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== - } - - /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' } - - /mime-types@2.1.35: - resolution: - { - integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - } - engines: { node: '>= 0.6' } - dependencies: - mime-db: 1.52.0 - - /mimic-fn@2.1.0: - resolution: - { - integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - } - engines: { node: '>=6' } - dev: true - - /min-indent@1.0.1: - resolution: - { - integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== - } - engines: { node: '>=4' } - dev: true - - /minimatch@3.1.2: - resolution: - { - integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - } - dependencies: - brace-expansion: 1.1.11 - dev: true - - /minimist@1.2.8: - resolution: - { - integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - } - dev: true - - /mkdirp@0.5.6: - resolution: - { - integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - } - hasBin: true - dependencies: - minimist: 1.2.8 - dev: true - - /mlly@1.4.2: - resolution: - { - integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg== - } - dependencies: - acorn: 8.11.2 - pathe: 1.1.1 - pkg-types: 1.0.3 - ufo: 1.3.2 - 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.1.2: - resolution: - { - integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - } - 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: false - - /nanoid@3.3.7: - resolution: - { - integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== - } - engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } - hasBin: true - - /nanoid@4.0.2: - resolution: - { - integrity: sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw== - } - engines: { node: ^14 || ^16 || >=18 } - hasBin: true - dev: false - - /natural-compare@1.4.0: - resolution: - { - integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - } - dev: true - - /node-fetch@2.6.7: - resolution: - { - integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - } - engines: { node: 4.x || >=6.0.0 } - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - dependencies: - whatwg-url: 5.0.0 - dev: false - - /node-int64@0.4.0: - resolution: - { - integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== - } - dev: true - - /node-releases@2.0.14: - resolution: - { - integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== - } - dev: true - - /normalize-path@3.0.0: - resolution: - { - integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - } - engines: { node: '>=0.10.0' } - dev: true - - /normalize.css@8.0.1: - resolution: - { - integrity: sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg== - } - dev: false - - /npm-run-path@4.0.1: - resolution: - { - integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - } - engines: { node: '>=8' } - dependencies: - path-key: 3.1.1 - dev: true - - /nwsapi@2.2.7: - resolution: - { - integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== - } - dev: true - - /object-inspect@1.13.1: - resolution: - { - integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== - } - - /object-is@1.1.5: - resolution: - { - integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== - } - engines: { node: '>= 0.4' } - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - - /object-keys@1.1.1: - resolution: - { - integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - } - engines: { node: '>= 0.4' } - - /object.assign@4.1.5: - resolution: - { - integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== - } - engines: { node: '>= 0.4' } - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - has-symbols: 1.0.3 - object-keys: 1.1.1 - - /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 - - /optionator@0.9.3: - resolution: - { - integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== - } - engines: { node: '>= 0.8.0' } - dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - dev: true - - /p-limit@2.3.0: - resolution: - { - integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - } - engines: { node: '>=6' } - dependencies: - p-try: 2.2.0 - dev: true - - /p-limit@3.1.0: - resolution: - { - integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - } - engines: { node: '>=10' } - dependencies: - yocto-queue: 0.1.0 - dev: true - - /p-limit@4.0.0: - resolution: - { - integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== - } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } - dependencies: - yocto-queue: 1.0.0 - dev: true - - /p-locate@4.1.0: - resolution: - { - integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - } - engines: { node: '>=8' } - dependencies: - p-limit: 2.3.0 - dev: true - - /p-locate@5.0.0: - resolution: - { - integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - } - engines: { node: '>=10' } - dependencies: - p-limit: 3.1.0 - dev: true - - /p-try@2.2.0: - resolution: - { - integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - } - engines: { node: '>=6' } - dev: true - - /parent-module@1.0.1: - resolution: - { - integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - } - engines: { node: '>=6' } - dependencies: - callsites: 3.1.0 - dev: true - - /parse-json@5.2.0: - resolution: - { - integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - } - engines: { node: '>=8' } - dependencies: - '@babel/code-frame': 7.23.5 - error-ex: 1.3.2 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - dev: true - - /parse5@7.1.2: - resolution: - { - integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== - } - dependencies: - entities: 4.5.0 - dev: true - - /path-exists@4.0.0: - resolution: - { - integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - } - engines: { node: '>=8' } - dev: true - - /path-is-absolute@1.0.1: - resolution: - { - integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - } - engines: { node: '>=0.10.0' } - dev: true - - /path-key@3.1.1: - resolution: - { - integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - } - engines: { node: '>=8' } - dev: true - - /path-parse@1.0.7: - resolution: - { - integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - } - 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 - - /pathval@1.1.1: - resolution: - { - integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== - } - dev: true - - /periscopic@3.1.0: - resolution: - { - integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw== - } - dependencies: - '@types/estree': 1.0.5 - estree-walker: 3.0.3 - is-reference: 3.0.2 - - /picocolors@1.0.0: - resolution: - { - integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - } - - /picomatch@2.3.1: - resolution: - { - integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - } - engines: { node: '>=8.6' } - dev: true - - /pirates@4.0.6: - resolution: - { - integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== - } - engines: { node: '>= 6' } - dev: true - - /pkg-dir@4.2.0: - resolution: - { - integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - } - engines: { node: '>=8' } - dependencies: - find-up: 4.1.0 - dev: true - - /pkg-types@1.0.3: - resolution: - { - integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== - } - dependencies: - jsonc-parser: 3.2.0 - mlly: 1.4.2 - pathe: 1.1.1 - dev: true - - /plausible-tracker@0.3.8: - resolution: - { - integrity: sha512-lmOWYQ7s9KOUJ1R+YTOR3HrjdbxIS2Z4de0P/Jx2dQPteznJl2eX3tXxKClpvbfyGP59B5bbhW8ftN59HbbFSg== - } - engines: { node: '>=10' } - dev: false - - /playwright-core@1.40.1: - resolution: - { - integrity: sha512-+hkOycxPiV534c4HhpfX6yrlawqVUzITRKwHAmYfmsVreltEl6fAZJ3DPfLMOODw0H3s1Itd6MDCWmP1fl/QvQ== - } - engines: { node: '>=16' } - hasBin: true - dev: true - - /playwright@1.40.1: - resolution: - { - integrity: sha512-2eHI7IioIpQ0bS1Ovg/HszsN/XKNwEG1kbzSDDmADpclKc7CyqkHw7Mg2JCz/bbCxg25QUPcjksoMW7JcIFQmw== - } - engines: { node: '>=16' } - hasBin: true - dependencies: - playwright-core: 1.40.1 - optionalDependencies: - fsevents: 2.3.2 - dev: true - - /postcss-load-config@3.1.4(postcss@8.4.32): - resolution: - { - integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg== - } - engines: { node: '>= 10' } - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - dependencies: - lilconfig: 2.1.0 - postcss: 8.4.32 - yaml: 1.10.2 - dev: true - - /postcss-safe-parser@6.0.0(postcss@8.4.32): - resolution: - { - integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ== - } - engines: { node: '>=12.0' } - peerDependencies: - postcss: ^8.3.3 - dependencies: - postcss: 8.4.32 - dev: true - - /postcss-scss@4.0.9(postcss@8.4.32): - resolution: - { - integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A== - } - engines: { node: '>=12.0' } - peerDependencies: - postcss: ^8.4.29 - dependencies: - postcss: 8.4.32 - 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@8.4.32: - resolution: - { - integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw== - } - engines: { node: ^10 || ^12 || >=14 } - dependencies: - nanoid: 3.3.7 - picocolors: 1.0.0 - source-map-js: 1.0.2 - - /prelude-ls@1.2.1: - resolution: - { - integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - } - engines: { node: '>= 0.8.0' } - dev: true - - /prettier-plugin-svelte@3.1.2(prettier@3.1.0)(svelte@4.2.8): - resolution: - { - integrity: sha512-7xfMZtwgAWHMT0iZc8jN4o65zgbAQ3+O32V6W7pXrqNvKnHnkoyQCGCbKeUyXKZLbYE0YhFRnamfxfkEGxm8qA== - } - peerDependencies: - prettier: ^3.0.0 - svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0 - dependencies: - prettier: 3.1.0 - svelte: 4.2.8 - dev: true - - /prettier@3.1.0: - resolution: - { - integrity: sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw== - } - engines: { node: '>=14' } - hasBin: true - dev: true - - /pretty-bytes@6.1.1: - resolution: - { - integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ== - } - engines: { node: ^14.13.1 || >=16.0.0 } - dev: false - - /pretty-format@27.5.1: - resolution: - { - integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== - } - engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } - dependencies: - ansi-regex: 5.0.1 - ansi-styles: 5.2.0 - react-is: 17.0.2 - dev: true - - /pretty-format@29.7.0: - resolution: - { - integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== - } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - dependencies: - '@jest/schemas': 29.6.3 - ansi-styles: 5.2.0 - react-is: 18.2.0 - dev: true - - /prismjs@1.29.0: - resolution: - { - integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q== - } - engines: { node: '>=6' } - dev: false - - /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 - - /psl@1.9.0: - resolution: - { - integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== - } - dev: true - - /punycode@2.3.1: - resolution: - { - integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== - } - engines: { node: '>=6' } - dev: true - - /pure-rand@6.0.4: - resolution: - { - integrity: sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA== - } - dev: true - - /querystringify@2.2.0: - resolution: - { - integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - } - dev: true - - /queue-microtask@1.2.3: - resolution: - { - integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - } - dev: true - - /react-is@17.0.2: - resolution: - { - integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== - } - dev: true - - /react-is@18.2.0: - resolution: - { - integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== - } - dev: true - - /react@18.2.0: - resolution: - { - integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== - } - engines: { node: '>=0.10.0' } - dependencies: - loose-envify: 1.4.0 - dev: false - - /readdirp@3.6.0: - resolution: - { - integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - } - engines: { node: '>=8.10.0' } - dependencies: - picomatch: 2.3.1 - dev: true - - /redent@3.0.0: - resolution: - { - integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== - } - engines: { node: '>=8' } - dependencies: - indent-string: 4.0.0 - strip-indent: 3.0.0 - dev: true - - /regenerator-runtime@0.14.0: - resolution: - { - integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== - } - dev: true - - /regexp.prototype.flags@1.5.1: - resolution: - { - integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== - } - engines: { node: '>= 0.4' } - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - set-function-name: 2.0.1 - - /require-directory@2.1.1: - resolution: - { - integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - } - engines: { node: '>=0.10.0' } - dev: true - - /requires-port@1.0.0: - resolution: - { - integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - } - dev: true - - /resolve-cwd@3.0.0: - resolution: - { - integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - } - engines: { node: '>=8' } - dependencies: - resolve-from: 5.0.0 - dev: true - - /resolve-from@4.0.0: - resolution: - { - integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - } - engines: { node: '>=4' } - dev: true - - /resolve-from@5.0.0: - resolution: - { - integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - } - engines: { node: '>=8' } - dev: true - - /resolve.exports@2.0.2: - resolution: - { - integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== - } - engines: { node: '>=10' } - dev: true - - /resolve@1.22.8: - resolution: - { - integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== - } - hasBin: true - dependencies: - is-core-module: 2.13.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - 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@2.7.1: - resolution: - { - integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - } - hasBin: true - dependencies: - glob: 7.2.3 - dev: true - - /rimraf@3.0.2: - resolution: - { - integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - } - hasBin: true - dependencies: - glob: 7.2.3 - dev: true - - /rollup@3.29.4: - resolution: - { - integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw== - } - engines: { node: '>=14.18.0', npm: '>=8.0.0' } - hasBin: true - optionalDependencies: - fsevents: 2.3.3 - dev: true - - /rrweb-cssom@0.6.0: - resolution: - { - integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw== - } - dev: true - - /run-parallel@1.2.0: - resolution: - { - integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - } - dependencies: - queue-microtask: 1.2.3 - dev: true - - /sade@1.8.1: - resolution: - { - integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A== - } - engines: { node: '>=6' } - dependencies: - mri: 1.2.0 - dev: true - - /safer-buffer@2.1.2: - resolution: - { - integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - } - dev: true - - /sander@0.5.1: - resolution: - { - integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA== - } - dependencies: - es6-promise: 3.3.1 - graceful-fs: 4.2.11 - mkdirp: 0.5.6 - rimraf: 2.7.1 - dev: true - - /sass@1.69.5: - resolution: - { - integrity: sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ== - } - engines: { node: '>=14.0.0' } - hasBin: true - dependencies: - chokidar: 3.5.3 - immutable: 4.3.4 - source-map-js: 1.0.2 - dev: true - - /saxes@6.0.0: - resolution: - { - integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== - } - engines: { node: '>=v12.22.7' } - dependencies: - xmlchars: 2.2.0 - 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 - - /seroval@0.15.1: - resolution: - { - integrity: sha512-OPVtf0qmeC7RW+ScVX+7aOS+xoIM7pWcZ0jOWg2aTZigCydgRB04adfteBRbecZnnrO1WuGQ+C3tLeBBzX2zSQ== - } - engines: { node: '>=10' } - dev: false - - /set-cookie-parser@2.6.0: - resolution: - { - integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ== - } - dev: true - - /set-function-length@1.1.1: - resolution: - { - integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== - } - engines: { node: '>= 0.4' } - dependencies: - define-data-property: 1.1.1 - get-intrinsic: 1.2.2 - gopd: 1.0.1 - has-property-descriptors: 1.0.1 - - /set-function-name@2.0.1: - resolution: - { - integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== - } - engines: { node: '>= 0.4' } - dependencies: - define-data-property: 1.1.1 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.1 - - /shebang-command@2.0.0: - resolution: - { - integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - } - engines: { node: '>=8' } - dependencies: - shebang-regex: 3.0.0 - dev: true - - /shebang-regex@3.0.0: - resolution: - { - integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - } - engines: { node: '>=8' } - dev: true - - /side-channel@1.0.4: - resolution: - { - integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - } - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - object-inspect: 1.13.1 - - /siginfo@2.0.0: - resolution: - { - integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== - } - dev: true - - /signal-exit@3.0.7: - resolution: - { - integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - } - dev: true - - /sirv@2.0.3: - resolution: - { - integrity: sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA== - } - engines: { node: '>= 10' } - dependencies: - '@polka/url': 1.0.0-next.24 - mrmime: 1.0.1 - totalist: 3.0.1 - dev: true - - /sisteransi@1.0.5: - resolution: - { - integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - } - dev: true - - /slash@3.0.0: - resolution: - { - integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - } - engines: { node: '>=8' } - dev: true - - /slice-ansi@5.0.0: - resolution: - { - integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== - } - engines: { node: '>=12' } - dependencies: - ansi-styles: 6.2.1 - is-fullwidth-code-point: 4.0.0 - dev: true - - /solid-js@1.8.7: - resolution: - { - integrity: sha512-9dzrSVieh2zj3SnJ02II6xZkonR6c+j/91b7XZUNcC6xSaldlqjjGh98F1fk5cRJ8ZTkzqF5fPIWDxEOs6QZXA== - } - dependencies: - csstype: 3.1.2 - seroval: 0.15.1 - dev: false - - /solid-swr-store@0.10.7(solid-js@1.8.7)(swr-store@0.10.6): - resolution: - { - integrity: sha512-A6d68aJmRP471aWqKKPE2tpgOiR5fH4qXQNfKIec+Vap+MGQm3tvXlT8n0I8UgJSlNAsSAUuw2VTviH2h3Vv5g== - } - engines: { node: '>=10' } - peerDependencies: - solid-js: ^1.2 - swr-store: ^0.10 - dependencies: - solid-js: 1.8.7 - swr-store: 0.10.6 - dev: false - - /sorcery@0.11.0: - resolution: - { - integrity: sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw== - } - hasBin: true - dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - buffer-crc32: 0.2.13 - minimist: 1.2.8 - sander: 0.5.1 - dev: true - - /source-map-js@1.0.2: - resolution: - { - integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - } - engines: { node: '>=0.10.0' } - - /source-map-support@0.5.13: - resolution: - { - integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== - } - 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 - - /sprintf-js@1.0.3: - resolution: - { - integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - } - dev: true - - /sswr@2.0.0(svelte@4.2.8): - resolution: - { - integrity: sha512-mV0kkeBHcjcb0M5NqKtKVg/uTIYNlIIniyDfSGrSfxpEdM9C365jK0z55pl9K0xAkNTJi2OAOVFQpgMPUk+V0w== - } - peerDependencies: - svelte: ^4.0.0 - dependencies: - svelte: 4.2.8 - swrev: 4.0.0 - dev: false - - /stack-utils@2.0.6: - resolution: - { - integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== - } - engines: { node: '>=10' } - dependencies: - escape-string-regexp: 2.0.0 - dev: true - - /stackback@0.0.2: - resolution: - { - integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== - } - dev: true - - /std-env@3.6.0: - resolution: - { - integrity: sha512-aFZ19IgVmhdB2uX599ve2kE6BIE3YMnQ6Gp6BURhW/oIzpXGKr878TQfAQZn1+i0Flcc/UKUy1gOlcfaUBCryg== - } - dev: true - - /stop-iteration-iterator@1.0.0: - resolution: - { - integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== - } - engines: { node: '>= 0.4' } - dependencies: - internal-slot: 1.0.6 - - /string-length@4.0.2: - resolution: - { - integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== - } - engines: { node: '>=10' } - dependencies: - char-regex: 1.0.2 - strip-ansi: 6.0.1 - 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 - - /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-bom@4.0.0: - resolution: - { - integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== - } - engines: { node: '>=8' } - dev: true - - /strip-final-newline@2.0.0: - resolution: - { - integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - } - engines: { node: '>=6' } - dev: true - - /strip-indent@3.0.0: - resolution: - { - integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== - } - engines: { node: '>=8' } - dependencies: - min-indent: 1.0.1 - dev: true - - /strip-json-comments@3.1.1: - resolution: - { - integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - } - engines: { node: '>=8' } - dev: true - - /strip-literal@1.3.0: - resolution: - { - integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg== - } - dependencies: - acorn: 8.11.2 - 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@8.1.1: - resolution: - { - integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - } - engines: { node: '>=10' } - dependencies: - has-flag: 4.0.0 - dev: true - - /supports-preserve-symlinks-flag@1.0.0: - resolution: - { - integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - } - engines: { node: '>= 0.4' } - dev: true - - /svelte-check@3.6.2(@babel/core@7.23.5)(postcss@8.4.32)(sass@1.69.5)(svelte@4.2.8): - resolution: - { - integrity: sha512-E6iFh4aUCGJLRz6QZXH3gcN/VFfkzwtruWSRmlKrLWQTiO6VzLsivR6q02WYLGNAGecV3EocqZuCDrC2uttZ0g== - } - hasBin: true - peerDependencies: - svelte: ^3.55.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0 - dependencies: - '@jridgewell/trace-mapping': 0.3.20 - chokidar: 3.5.3 - fast-glob: 3.3.2 - import-fresh: 3.3.0 - picocolors: 1.0.0 - sade: 1.8.1 - svelte: 4.2.8 - svelte-preprocess: 5.1.1(@babel/core@7.23.5)(postcss@8.4.32)(sass@1.69.5)(svelte@4.2.8)(typescript@5.3.2) - typescript: 5.3.2 - transitivePeerDependencies: - - '@babel/core' - - coffeescript - - less - - postcss - - postcss-load-config - - pug - - sass - - stylus - - sugarss - dev: true - - /svelte-confetti@1.3.1(svelte@4.2.8): - resolution: - { - integrity: sha512-ljpyflZZzpyByDODM7xKzbYLWZpA54fLqjire2M7Rp6/Fedx6L9+p3CmBQ2j96cZcp++4ueF5A8TYZ8f22kh9w== - } - peerDependencies: - svelte: ^4.0.0 - dependencies: - svelte: 4.2.8 - dev: false - - /svelte-eslint-parser@0.33.1(svelte@4.2.8): - resolution: - { - integrity: sha512-vo7xPGTlKBGdLH8T5L64FipvTrqv3OQRx9d2z5X05KKZDlF4rQk8KViZO4flKERY+5BiVdOh7zZ7JGJWo5P0uA== - } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } - peerDependencies: - svelte: ^3.37.0 || ^4.0.0 - peerDependenciesMeta: - svelte: - optional: true - dependencies: - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - postcss: 8.4.32 - postcss-scss: 4.0.9(postcss@8.4.32) - svelte: 4.2.8 - dev: true - - /svelte-hmr@0.15.3(svelte@4.2.8): - resolution: - { - integrity: sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ== - } - engines: { node: ^12.20 || ^14.13.1 || >= 16 } - peerDependencies: - svelte: ^3.19.0 || ^4.0.0 - dependencies: - svelte: 4.2.8 - dev: true - - /svelte-jester@2.3.2(jest@29.7.0)(svelte@4.2.8): - resolution: - { - integrity: sha512-JtxSz4FWAaCRBXbPsh4LcDs4Ua7zdXgLC0TZvT1R56hRV0dymmNP+abw67DTPF7sQPyNxWsOKd0Sl7Q8SnP8kg== - } - engines: { node: '>=14' } - peerDependencies: - jest: '>= 27' - svelte: '>= 3' - dependencies: - jest: 29.7.0 - svelte: 4.2.8 - dev: true - - /svelte-preprocess@5.1.1(@babel/core@7.23.5)(postcss@8.4.32)(sass@1.69.5)(svelte@4.2.8)(typescript@5.3.2): - resolution: - { - integrity: sha512-p/Dp4hmrBW5mrCCq29lEMFpIJT2FZsRlouxEc5qpbOmXRbaFs7clLs8oKPwD3xCFyZfv1bIhvOzpQkhMEVQdMw== - } - engines: { node: '>= 14.10.0' } - requiresBuild: true - peerDependencies: - '@babel/core': ^7.10.2 - coffeescript: ^2.5.1 - less: ^3.11.3 || ^4.0.0 - postcss: ^7 || ^8 - postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0 - pug: ^3.0.0 - sass: ^1.26.8 - stylus: ^0.55.0 - sugarss: ^2.0.0 || ^3.0.0 || ^4.0.0 - svelte: ^3.23.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0 - typescript: '>=3.9.5 || ^4.0.0 || ^5.0.0' - peerDependenciesMeta: - '@babel/core': - optional: true - coffeescript: - optional: true - less: - optional: true - postcss: - optional: true - postcss-load-config: - optional: true - pug: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - typescript: - optional: true - dependencies: - '@babel/core': 7.23.5 - '@types/pug': 2.0.10 - detect-indent: 6.1.0 - magic-string: 0.27.0 - postcss: 8.4.32 - sass: 1.69.5 - sorcery: 0.11.0 - strip-indent: 3.0.0 - svelte: 4.2.8 - typescript: 5.3.2 - dev: true - - /svelte@4.2.8: - resolution: - { - integrity: sha512-hU6dh1MPl8gh6klQZwK/n73GiAHiR95IkFsesLPbMeEZi36ydaXL/ZAb4g9sayT0MXzpxyZjR28yderJHxcmYA== - } - engines: { node: '>=16' } - dependencies: - '@ampproject/remapping': 2.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.20 - acorn: 8.11.2 - aria-query: 5.3.0 - axobject-query: 3.2.1 - code-red: 1.0.4 - css-tree: 2.3.1 - estree-walker: 3.0.3 - is-reference: 3.0.2 - locate-character: 3.0.0 - magic-string: 0.30.5 - periscopic: 3.1.0 - - /swr-store@0.10.6: - resolution: - { - integrity: sha512-xPjB1hARSiRaNNlUQvWSVrG5SirCjk2TmaUyzzvk69SZQan9hCJqw/5rG9iL7xElHU784GxRPISClq4488/XVw== - } - engines: { node: '>=10' } - dependencies: - dequal: 2.0.3 - dev: false - - /swr@2.2.0(react@18.2.0): - resolution: - { - integrity: sha512-AjqHOv2lAhkuUdIiBu9xbuettzAzWXmCEcLONNKJRba87WAefz8Ca9d6ds/SzrPc235n1IxWYdhJ2zF3MNUaoQ== - } - peerDependencies: - react: ^16.11.0 || ^17.0.0 || ^18.0.0 - dependencies: - react: 18.2.0 - use-sync-external-store: 1.2.0(react@18.2.0) - dev: false - - /swrev@4.0.0: - resolution: - { - integrity: sha512-LqVcOHSB4cPGgitD1riJ1Hh4vdmITOp+BkmfmXRh4hSF/t7EnS4iD+SOTmq7w5pPm/SiPeto4ADbKS6dHUDWFA== - } - dev: false - - /swrv@1.0.4(vue@3.3.10): - resolution: - { - integrity: sha512-zjEkcP8Ywmj+xOJW3lIT65ciY/4AL4e/Or7Gj0MzU3zBJNMdJiT8geVZhINavnlHRMMCcJLHhraLTAiDOTmQ9g== - } - peerDependencies: - vue: '>=3.2.26 < 4' - dependencies: - vue: 3.3.10(typescript@5.3.2) - dev: false - - /symbol-tree@3.2.4: - resolution: - { - integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - } - dev: true - - /test-exclude@6.0.0: - resolution: - { - integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== - } - engines: { node: '>=8' } - dependencies: - '@istanbuljs/schema': 0.1.3 - glob: 7.2.3 - minimatch: 3.1.2 - dev: true - - /text-table@0.2.0: - resolution: - { - integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - } - dev: true - - /the-new-css-reset@1.11.2: - resolution: - { - integrity: sha512-m/JQ/srn+e5SAI7MVCZOJ1hoxoE1w1uA96birT52Y9769GN9e0M4K1PBxlz05Vq4HprX11ASBjM2TcQs4WXnXg== - } - dev: false - - /tiny-glob@0.2.9: - resolution: - { - integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg== - } - dependencies: - globalyzer: 0.1.0 - globrex: 0.1.2 - dev: true - - /tinybench@2.5.1: - resolution: - { - integrity: sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg== - } - dev: true - - /tinypool@0.4.0: - resolution: - { - integrity: sha512-2ksntHOKf893wSAH4z/+JbPpi92esw8Gn9N2deXX+B0EO92hexAVI9GIZZPx7P5aYo5KULfeOSt3kMOmSOy6uA== - } - engines: { node: '>=14.0.0' } - dev: true - - /tinyspy@1.1.1: - resolution: - { - integrity: sha512-UVq5AXt/gQlti7oxoIg5oi/9r0WpF7DGEVwXgqWSMmyN16+e3tl5lIvTaOpJ3TAtu5xFzWccFRM4R5NaWHF+4g== - } - engines: { node: '>=14.0.0' } - dev: true - - /tippy.js@6.3.7: - resolution: - { - integrity: sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ== - } - dependencies: - '@popperjs/core': 2.11.8 - dev: false - - /tmpl@1.0.5: - resolution: - { - integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== - } - dev: true - - /to-fast-properties@2.0.0: - resolution: - { - integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - } - engines: { node: '>=4' } - - /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 - - /totalist@3.0.1: - resolution: - { - integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ== - } - engines: { node: '>=6' } - dev: true - - /tough-cookie@4.1.3: - resolution: - { - integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== - } - engines: { node: '>=6' } - dependencies: - psl: 1.9.0 - punycode: 2.3.1 - universalify: 0.2.0 - url-parse: 1.5.10 - dev: true - - /tr46@0.0.3: - resolution: - { - integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - } - dev: false - - /tr46@4.1.1: - resolution: - { - integrity: sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw== - } - engines: { node: '>=14' } - dependencies: - punycode: 2.3.1 - dev: true - - /ts-api-utils@1.0.3(typescript@5.3.2): - resolution: - { - integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg== - } - engines: { node: '>=16.13.0' } - peerDependencies: - typescript: '>=4.2.0' - dependencies: - typescript: 5.3.2 - dev: true - - /tslib@2.3.0: - resolution: - { - integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg== - } - dev: false - - /tslib@2.6.2: - resolution: - { - integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - } - dev: true - - /type-check@0.4.0: - resolution: - { - integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - } - engines: { node: '>= 0.8.0' } - dependencies: - prelude-ls: 1.2.1 - dev: true - - /type-detect@4.0.8: - resolution: - { - integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - } - engines: { node: '>=4' } - dev: true - - /type-fest@0.20.2: - resolution: - { - integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - } - engines: { node: '>=10' } - dev: true - - /type-fest@0.21.3: - resolution: - { - integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - } - engines: { node: '>=10' } - dev: true - - /typescript@5.3.2: - resolution: - { - integrity: sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ== - } - engines: { node: '>=14.17' } - hasBin: true - - /ufo@1.3.2: - resolution: - { - integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA== - } - dev: true - - /undici-types@5.26.5: - resolution: - { - integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== - } - dev: true - - /undici@5.26.5: - resolution: - { - integrity: sha512-cSb4bPFd5qgR7qr2jYAi0hlX9n5YKK2ONKkLFkxl+v/9BvC0sOpZjBHDBSXc5lWAf5ty9oZdRXytBIHzgUcerw== - } - engines: { node: '>=14.0' } - dependencies: - '@fastify/busboy': 2.1.0 - dev: true - - /universalify@0.2.0: - resolution: - { - integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== - } - engines: { node: '>= 4.0.0' } - dev: true - - /update-browserslist-db@1.0.13(browserslist@4.22.2): - resolution: - { - integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== - } - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - dependencies: - browserslist: 4.22.2 - escalade: 3.1.1 - picocolors: 1.0.0 - dev: true - - /uri-js@4.4.1: - resolution: - { - integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - } - dependencies: - punycode: 2.3.1 - dev: true - - /url-parse@1.5.10: - resolution: - { - integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== - } - dependencies: - querystringify: 2.2.0 - requires-port: 1.0.0 - dev: true - - /use-sync-external-store@1.2.0(react@18.2.0): - resolution: - { - integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== - } - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - react: 18.2.0 - dev: false - - /util-deprecate@1.0.2: - resolution: - { - integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - } - dev: true - - /v8-to-istanbul@9.2.0: - resolution: - { - integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== - } - engines: { node: '>=10.12.0' } - dependencies: - '@jridgewell/trace-mapping': 0.3.20 - '@types/istanbul-lib-coverage': 2.0.6 - convert-source-map: 2.0.0 - dev: true - - /vite-node@0.29.8(@types/node@20.10.3)(sass@1.69.5): - resolution: - { - integrity: sha512-b6OtCXfk65L6SElVM20q5G546yu10/kNrhg08afEoWlFRJXFq9/6glsvSVY+aI6YeC1tu2TtAqI2jHEQmOmsFw== - } - engines: { node: '>=v14.16.0' } - hasBin: true - dependencies: - cac: 6.7.14 - debug: 4.3.4 - mlly: 1.4.2 - pathe: 1.1.1 - picocolors: 1.0.0 - vite: 4.5.1(@types/node@20.10.3)(sass@1.69.5) - transitivePeerDependencies: - - '@types/node' - - less - - lightningcss - - sass - - stylus - - sugarss - - supports-color - - terser - dev: true - - /vite@4.5.1(@types/node@20.10.3)(sass@1.69.5): - resolution: - { - integrity: sha512-AXXFaAJ8yebyqzoNB9fu2pHoo/nWX+xZlaRwoeYUxEqBO+Zj4msE5G+BhGBll9lYEKv9Hfks52PAF2X7qDYXQA== - } - 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: - '@types/node': 20.10.3 - esbuild: 0.18.20 - postcss: 8.4.32 - rollup: 3.29.4 - sass: 1.69.5 - optionalDependencies: - fsevents: 2.3.3 - dev: true - - /vitefu@0.2.5(vite@4.5.1): - resolution: - { - integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q== - } - peerDependencies: - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 - peerDependenciesMeta: - vite: - optional: true - dependencies: - vite: 4.5.1(@types/node@20.10.3)(sass@1.69.5) - dev: true - - /vitest@0.29.8(@vitest/ui@0.29.8)(jsdom@22.1.0)(sass@1.69.5): - resolution: - { - integrity: sha512-JIAVi2GK5cvA6awGpH0HvH/gEG9PZ0a/WoxdiV3PmqK+3CjQMf8c+J/Vhv4mdZ2nRyXFw66sAg6qz7VNkaHfDQ== - } - engines: { node: '>=v14.16.0' } - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@vitest/browser': '*' - '@vitest/ui': '*' - happy-dom: '*' - jsdom: '*' - playwright: '*' - safaridriver: '*' - webdriverio: '*' - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@vitest/browser': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - playwright: - optional: true - safaridriver: - optional: true - webdriverio: - optional: true - dependencies: - '@types/chai': 4.3.11 - '@types/chai-subset': 1.3.5 - '@types/node': 20.10.3 - '@vitest/expect': 0.29.8 - '@vitest/runner': 0.29.8 - '@vitest/spy': 0.29.8 - '@vitest/ui': 0.29.8 - '@vitest/utils': 0.29.8 - acorn: 8.11.2 - acorn-walk: 8.3.0 - cac: 6.7.14 - chai: 4.3.10 - debug: 4.3.4 - jsdom: 22.1.0 - local-pkg: 0.4.3 - pathe: 1.1.1 - picocolors: 1.0.0 - source-map: 0.6.1 - std-env: 3.6.0 - strip-literal: 1.3.0 - tinybench: 2.5.1 - tinypool: 0.4.0 - tinyspy: 1.1.1 - vite: 4.5.1(@types/node@20.10.3)(sass@1.69.5) - vite-node: 0.29.8(@types/node@20.10.3)(sass@1.69.5) - why-is-node-running: 2.2.2 - transitivePeerDependencies: - - less - - lightningcss - - sass - - stylus - - sugarss - - supports-color - - terser - dev: true - - /vue@3.3.10(typescript@5.3.2): - resolution: - { - integrity: sha512-zg6SIXZdTBwiqCw/1p+m04VyHjLfwtjwz8N57sPaBhEex31ND0RYECVOC1YrRwMRmxFf5T1dabl6SGUbMKKuVw== - } - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@vue/compiler-dom': 3.3.10 - '@vue/compiler-sfc': 3.3.10 - '@vue/runtime-dom': 3.3.10 - '@vue/server-renderer': 3.3.10(vue@3.3.10) - '@vue/shared': 3.3.10 - typescript: 5.3.2 - dev: false - - /w3c-xmlserializer@4.0.0: - resolution: - { - integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw== - } - engines: { node: '>=14' } - dependencies: - xml-name-validator: 4.0.0 - dev: true - - /walker@1.0.8: - resolution: - { - integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== - } - dependencies: - makeerror: 1.0.12 - dev: true - - /web-vitals@3.5.0: - resolution: - { - integrity: sha512-f5YnCHVG9Y6uLCePD4tY8bO/Ge15NPEQWtvm3tPzDKygloiqtb4SVqRHBcrIAqo2ztqX5XueqDn97zHF0LdT6w== - } - dev: false - - /webidl-conversions@3.0.1: - resolution: - { - integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - } - dev: false - - /webidl-conversions@7.0.0: - resolution: - { - integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== - } - engines: { node: '>=12' } - dev: true - - /whatwg-encoding@2.0.0: - resolution: - { - integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== - } - engines: { node: '>=12' } - dependencies: - iconv-lite: 0.6.3 - dev: true - - /whatwg-mimetype@3.0.0: - resolution: - { - integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== - } - engines: { node: '>=12' } - dev: true - - /whatwg-url@12.0.1: - resolution: - { - integrity: sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ== - } - engines: { node: '>=14' } - dependencies: - tr46: 4.1.1 - webidl-conversions: 7.0.0 - dev: true - - /whatwg-url@5.0.0: - resolution: - { - integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - } - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - dev: false - - /which-boxed-primitive@1.0.2: - resolution: - { - integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - } - dependencies: - is-bigint: 1.0.4 - is-boolean-object: 1.1.2 - is-number-object: 1.0.7 - is-string: 1.0.7 - is-symbol: 1.0.4 - - /which-collection@1.0.1: - resolution: - { - integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== - } - dependencies: - is-map: 2.0.2 - is-set: 2.0.2 - is-weakmap: 2.0.1 - is-weakset: 2.0.2 - - /which-typed-array@1.1.13: - resolution: - { - integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== - } - engines: { node: '>= 0.4' } - dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.0 - - /which@2.0.2: - resolution: - { - integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - } - engines: { node: '>= 8' } - hasBin: true - dependencies: - isexe: 2.0.0 - dev: true - - /why-is-node-running@2.2.2: - resolution: - { - integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA== - } - engines: { node: '>=8' } - hasBin: true - dependencies: - siginfo: 2.0.0 - stackback: 0.0.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 - - /wrappy@1.0.2: - resolution: - { - integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - } - dev: true - - /write-file-atomic@4.0.2: - resolution: - { - integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== - } - engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } - dependencies: - imurmurhash: 0.1.4 - signal-exit: 3.0.7 - dev: true - - /ws@8.14.2: - resolution: - { - integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g== - } - 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 - - /xml-name-validator@4.0.0: - resolution: - { - integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== - } - engines: { node: '>=12' } - dev: true - - /xmlchars@2.2.0: - resolution: - { - integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== - } - 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@1.10.2: - resolution: - { - integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - } - engines: { node: '>= 6' } - 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 - - /yocto-queue@0.1.0: - resolution: - { - integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - } - engines: { node: '>=10' } - dev: true - - /yocto-queue@1.0.0: - resolution: - { - integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== - } - engines: { node: '>=12.20' } - dev: true - - /zrender@5.4.4: - resolution: - { - integrity: sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw== - } - dependencies: - tslib: 2.3.0 - dev: false diff --git a/src/app.html b/src/app.html index 300a4f0c7..a53c61628 100644 --- a/src/app.html +++ b/src/app.html @@ -3,7 +3,10 @@ + + + -interface Window { - VERCEL_ANALYTICS_ID: string | false; -} +interface Window {} diff --git a/src/hooks.client.ts b/src/hooks.client.ts new file mode 100644 index 000000000..2345ffb2c --- /dev/null +++ b/src/hooks.client.ts @@ -0,0 +1,13 @@ +import { AppwriteException } from '@appwrite.io/console'; +import type { HandleClientError } from '@sveltejs/kit'; + +export const handleError: HandleClientError = async ({ error, message, status }) => { + if (error instanceof AppwriteException && error.code === 0) { + status = undefined; + message = error.message; + } + return { + message, + status + }; +}; diff --git a/src/lib/actions/analytics.ts b/src/lib/actions/analytics.ts index 8a15993fc..4c9cb3be8 100644 --- a/src/lib/actions/analytics.ts +++ b/src/lib/actions/analytics.ts @@ -139,6 +139,7 @@ export function isTrackingAllowed() { } export enum Submit { + DownloadDPA = 'submit_download_dpa', Error = 'submit_error', AccountCreate = 'submit_account_create', AccountLogin = 'submit_account_login', @@ -150,6 +151,7 @@ export enum Submit { AccountDelete = 'submit_account_delete', AccountDeleteSession = 'submit_account_delete_session', AccountDeleteAllSessions = 'submit_account_delete_all_sessions', + AccountAuthenticatorDelete = 'submit_account_authenticator_delete', UserCreate = 'submit_user_create', UserDelete = 'submit_user_delete', UserUpdateEmail = 'submit_user_update_email', @@ -161,6 +163,9 @@ export enum Submit { UserUpdateStatus = 'submit_user_update_status', UserUpdateVerificationEmail = 'submit_user_update_verification_email', UserUpdateVerificationPhone = 'submit_user_update_verification_phone', + UserTargetCreate = 'submit_user_target_create', + UserTargetDelete = 'submit_user_target_delete', + UserAuthenticatorDelete = 'submit_user_authenticator_delete', OrganizationCreate = 'submit_organization_create', OrganizationDelete = 'submit_organization_delete', OrganizationUpdateName = 'submit_organization_update_name', @@ -242,6 +247,7 @@ export enum Submit { WebhookUpdateUrl = 'submit_webhook_update_url', WebhookUpdateEvents = 'submit_webhook_update_events', WebhookUpdateName = 'submit_webhook_update_name', + WebhookUpdateEnabled = 'submit_webhook_update_enabled', WebhookUpdateSecurity = 'submit_webhook_update_security', BucketCreate = 'submit_bucket_create', BucketDelete = 'submit_bucket_delete', @@ -262,6 +268,8 @@ export enum Submit { PaymentMethodCreate = 'submit_payment_method_create', PaymentMethodUpdate = 'submit_payment_method_update', PaymentMethodDelete = 'submit_payment_method_delete', + RetryPayment = 'submit_retry_payment', + VerifyPayment = 'submit_verify_payment', BillingAddressCreate = 'submit_billing_address_create', BillingAddressUpdate = 'submit_billing_address_update', BillingAddressDelete = 'submit_billing_address_delete', @@ -287,5 +295,17 @@ export enum Submit { SmsResetTemplate = 'submit_sms_reset_template', SmsUpdateInviteTemplate = 'submit_sms_update_invite_template', SmsUpdateLoginTemplate = 'submit_sms_update_login_template', - SmsUpdateVerificationTemplate = 'submit_sms_update_verification_template' + SmsUpdateVerificationTemplate = 'submit_sms_update_verification_template', + MessagingProviderCreate = 'submit_messaging_provider_create', + MessagingProviderDelete = 'submit_messaging_provider_delete', + MessagingProviderUpdate = 'submit_messaging_provider_update', + MessagingMessageCreate = 'submit_messaging_message_create', + MessagingMessageUpdate = 'submit_messaging_message_update', + MessagingMessageDelete = 'submit_messaging_message_delete', + MessagingTopicCreate = 'submit_messaging_topic_create', + MessagingTopicDelete = 'submit_messaging_topic_delete', + MessagingTopicUpdateName = 'submit_messaging_topic_update_name', + MessagingTopicUpdatePermissions = 'submit_messaging_topic_update_permissions', + MessagingTopicSubscriberAdd = 'submit_messaging_topic_subscriber_add', + MessagingTopicSubscriberDelete = 'submit_messaging_topic_subscriber_delete' } diff --git a/src/lib/commandCenter/commands.ts b/src/lib/commandCenter/commands.ts index f12bbe2ed..959542e46 100644 --- a/src/lib/commandCenter/commands.ts +++ b/src/lib/commandCenter/commands.ts @@ -5,6 +5,7 @@ import { onMount } from 'svelte'; import { derived, writable } from 'svelte/store'; import { nanoid } from 'nanoid/non-secure'; import { trackEvent } from '$lib/actions/analytics'; +import { omit } from '$lib/helpers/omit'; const groups = [ 'ungrouped', @@ -17,6 +18,10 @@ const groups = [ 'platforms', 'databases', 'functions', + 'messaging', + 'messages', + 'providers', + 'topics', 'storage', 'domains', 'webhooks', @@ -44,6 +49,7 @@ type BaseCommand = { forceEnable?: boolean; group?: CommandGroup; icon?: string; + image?: string; rank?: number; nested?: boolean; keepOpen?: boolean; @@ -69,7 +75,23 @@ export const disabledMap = writable>(new Map()); // Derived stores export const commands = derived(commandMap, ($commandMap) => { - return Array.from($commandMap.values()).flat(); + const res: Command[] = []; + const keys = new Set(); + + const allCommands = Array.from($commandMap.values()).flat().toReversed(); + + for (const command of allCommands) { + if (isKeyedCommand(command) && !command.disabled) { + const keysString = command.keys.join('+'); + if (keys.has(keysString)) { + res.push(omit(command, 'keys')); + continue; + } + keys.add(keysString); + } + res.push(command); + } + return res; }); const commandsEnabled = derived(disabledMap, ($disabledMap) => { @@ -109,9 +131,9 @@ function hasDisputing(command: KeyedCommand, allCommands: Command[]) { } export const commandCenterKeyDownHandler = derived( - [commandMap, commandsEnabled, wizard], - ([$commandMap, enabled, $wizard]) => { - const commandsArr = Array.from($commandMap.values()).flat(); + [commands, commandsEnabled, wizard], + ([$commands, enabled, $wizard]) => { + const commandsArr = $commands; let recentKeyCodes: number[] = []; let validCommands: KeyedCommand[] = []; diff --git a/src/lib/commandCenter/panels/createMessage.svelte b/src/lib/commandCenter/panels/createMessage.svelte new file mode 100644 index 000000000..db1cd5437 --- /dev/null +++ b/src/lib/commandCenter/panels/createMessage.svelte @@ -0,0 +1,73 @@ + + + diff --git a/src/lib/commandCenter/panels/index.ts b/src/lib/commandCenter/panels/index.ts index c1d8a59f1..a3a139fb3 100644 --- a/src/lib/commandCenter/panels/index.ts +++ b/src/lib/commandCenter/panels/index.ts @@ -78,3 +78,9 @@ export const FilesPanel: SubPanel = { name: 'Files', component: Files }; + +import CreateMessage from './createMessage.svelte'; +export const CreateMessagePanel: SubPanel = { + name: 'Create Message', + component: CreateMessage +}; diff --git a/src/lib/commandCenter/panels/root.svelte b/src/lib/commandCenter/panels/root.svelte index 66850914f..3aca62151 100644 --- a/src/lib/commandCenter/panels/root.svelte +++ b/src/lib/commandCenter/panels/root.svelte @@ -2,6 +2,8 @@ This is the root command panel. It precedes all other command panels. --> + +{#if ($orgMissingPaymentMethod.billingPlan === BillingPlan.PRO || $orgMissingPaymentMethod.billingPlan === BillingPlan.SCALE) && !$orgMissingPaymentMethod.paymentMethodId && !$orgMissingPaymentMethod.backupPaymentMethodId && !$page.url.pathname.includes('/console/account')} + + + Add a payment method to {$orgMissingPaymentMethod.name} to avoid service interruptions to + your projects. + + + + + +{/if} diff --git a/src/lib/components/billing/alerts/paymentMandate.svelte b/src/lib/components/billing/alerts/paymentMandate.svelte new file mode 100644 index 000000000..9799ddcc3 --- /dev/null +++ b/src/lib/components/billing/alerts/paymentMandate.svelte @@ -0,0 +1,26 @@ + + +{#if $paymentMissingMandate && $paymentMissingMandate.country === 'in' && $paymentMissingMandate.mandateId === null && !$page.url.pathname.includes('/console/account')} + + The payment method for {$organization.name} needs to be verified. + + + + +{/if} diff --git a/src/lib/components/billing/alerts/tooManyFreeOrgs.svelte b/src/lib/components/billing/alerts/tooManyFreeOrgs.svelte deleted file mode 100644 index cf37e4d45..000000000 --- a/src/lib/components/billing/alerts/tooManyFreeOrgs.svelte +++ /dev/null @@ -1,13 +0,0 @@ - - - - All but one organization will be automatically upgraded to a Pro plan on 31 January 2024. - You can add a payment method or transfer projects from your settings. - - - - - diff --git a/src/lib/components/billing/couponInput.svelte b/src/lib/components/billing/couponInput.svelte index 1f81a3a74..369619afe 100644 --- a/src/lib/components/billing/couponInput.svelte +++ b/src/lib/components/billing/couponInput.svelte @@ -1,5 +1,6 @@ - + - - - {element.brand} ending in {element.last4} - + + + + + {element.brand} ending in {element.last4} + + + {#if element.$id === backupMethod} + Backup + {:else if element.$id === defaultMethod} + Default + {/if} + + {#if !!defaultMethod && element.$id !== defaultMethod && group === element.$id && showSetAsDefault && element.$id !== backupMethod} +
    + +
+ {/if}
@@ -73,6 +107,14 @@ + {#if showSetAsDefault} +
    + +
+ {/if}
diff --git a/src/lib/components/cardGrid.svelte b/src/lib/components/cardGrid.svelte index 67e0d2ad4..b9356a15e 100644 --- a/src/lib/components/cardGrid.svelte +++ b/src/lib/components/cardGrid.svelte @@ -3,6 +3,7 @@ export let danger = false; export let hideOverflow = false; + export let hideFooter = false; @@ -14,7 +15,7 @@ - {#if $$slots.actions} + {#if $$slots.actions && !hideFooter}
diff --git a/src/lib/components/clickableListItem.svelte b/src/lib/components/clickableListItem.svelte index 78a4dbe08..03e6c294b 100644 --- a/src/lib/components/clickableListItem.svelte +++ b/src/lib/components/clickableListItem.svelte @@ -1,18 +1,39 @@
  • - - {#if $$slots.default} -
    - -
    - {/if} - {#if $$slots.desc} -
    -

    -
    - {/if} -
    + {#if href} + + {#if $$slots.default} +
    + +
    + {/if} + {#if $$slots.desc} +
    +

    +
    + {/if} +
    + {:else} + + {/if}
  • diff --git a/src/lib/components/collapsibleItem.svelte b/src/lib/components/collapsibleItem.svelte index 8397454dc..3420b555c 100644 --- a/src/lib/components/collapsibleItem.svelte +++ b/src/lib/components/collapsibleItem.svelte @@ -3,10 +3,11 @@ export let withIndentation = false; export let open = false; + export let disabled = false;
  • -
    +
    - + {#if $$slots.subtitle} - + {/if}
    -
  • + + diff --git a/src/lib/components/consent.svelte b/src/lib/components/consent.svelte new file mode 100644 index 000000000..d0ecd9e1c --- /dev/null +++ b/src/lib/components/consent.svelte @@ -0,0 +1,149 @@ + + + + +{#if $show} + +{/if} + + +

    + We use cookies to improve your site experience. The "strictly necessary" cookies are + required for Appwrite to function. +

    +
    +
    + +
    + Strictly necessary cookies +

    + These are the cookies required for Appwrite to function. +

    +
    +
    +
    + +
    + + (optional) +

    + We include analytics cookies to understand how you use our product and design + better experiences. +

    +
    +
    +
    + + + + +
    + + diff --git a/src/lib/components/creditCardBrandImage.svelte b/src/lib/components/creditCardBrandImage.svelte index 6bfe34c7c..1a542bb53 100644 --- a/src/lib/components/creditCardBrandImage.svelte +++ b/src/lib/components/creditCardBrandImage.svelte @@ -1,12 +1,14 @@ diff --git a/src/lib/components/drop.svelte b/src/lib/components/drop.svelte index d6c899df2..3e5fc91fe 100644 --- a/src/lib/components/drop.svelte +++ b/src/lib/components/drop.svelte @@ -12,7 +12,11 @@ export let childStart = false; export let noStyle = false; export let fullWidth = false; + export let wrapperFullWidth = false; export let fixed = false; + export let display = 'block'; + export let arrowSize = 10; + export let isPopover = false; const dispatch = createEventDispatcher<{ blur: undefined; @@ -31,13 +35,14 @@ { name: 'arrow', options: { - element: arrow + element: arrow, + padding: arrowSize * 1.75 } }, { name: 'offset', options: { - offset: [0, noArrow ? 0 : 6] + offset: [noArrow ? 0 : -arrowSize, noArrow ? 0 : arrowSize / 1.5] } }, { @@ -100,16 +105,26 @@ -
    +
    -
    +
    {#if show} {/if} @@ -117,36 +132,50 @@ diff --git a/src/lib/components/dropList.svelte b/src/lib/components/dropList.svelte index dd8271f1d..c6ad97dd1 100644 --- a/src/lib/components/dropList.svelte +++ b/src/lib/components/dropList.svelte @@ -11,10 +11,20 @@ export let noStyle = false; export let width: string = null; export let fullWidth = false; + export let wrapperFullWidth = false; export let position: 'relative' | 'static' = 'relative'; - +
    + class="u-flex u-flex-vertical u-cross-center u-gap-24 u-width-full-line u-overflow-hidden u-padding-block-8"> {#if !noMedia} +
    +
    + diff --git a/src/lib/components/eventModal.svelte b/src/lib/components/eventModal.svelte index 18440bea2..c125ddacb 100644 --- a/src/lib/components/eventModal.svelte +++ b/src/lib/components/eventModal.svelte @@ -332,7 +332,7 @@
    {:else}
    - diff --git a/src/lib/components/fakeModal.svelte b/src/lib/components/fakeModal.svelte index 4daec9409..23bb89aa7 100644 --- a/src/lib/components/fakeModal.svelte +++ b/src/lib/components/fakeModal.svelte @@ -110,17 +110,19 @@
    {#if $$slots.footer} diff --git a/src/lib/components/filePicker.svelte b/src/lib/components/filePicker.svelte new file mode 100644 index 000000000..3ec802af3 --- /dev/null +++ b/src/lib/components/filePicker.svelte @@ -0,0 +1,544 @@ + + + + + +
    + + + +
    +
    + + diff --git a/src/lib/components/filters/content.svelte b/src/lib/components/filters/content.svelte index 098376a90..023ed61ff 100644 --- a/src/lib/components/filters/content.svelte +++ b/src/lib/components/filters/content.svelte @@ -118,10 +118,12 @@
      ({ - label: c.title, - value: c.id - }))} + options={$columns + .filter((c) => c.filter !== false) + .map((c) => ({ + label: c.title, + value: c.id + }))} placeholder="Select column" bind:value={columnId} />
    {#if column && operator && !operator?.hideInput} -
    +
      {#if column.type === 'integer' || column.type === 'double'} {:else if column.type === 'boolean'} @@ -148,7 +150,7 @@ {:else} {/if} -
    + {/if}
    - {:else} diff --git a/src/lib/components/trim.svelte b/src/lib/components/trim.svelte index 2d56222c3..27da7d77f 100644 --- a/src/lib/components/trim.svelte +++ b/src/lib/components/trim.svelte @@ -16,16 +16,13 @@ - - {#if showTooltip} - - - - {:else} - - {/if} + + diff --git a/src/lib/components/viewSelector.svelte b/src/lib/components/viewSelector.svelte index 0ece86889..69f7f0947 100644 --- a/src/lib/components/viewSelector.svelte +++ b/src/lib/components/viewSelector.svelte @@ -16,6 +16,7 @@ export let hideColumns = false; export let allowNoColumns = false; export let showColsTextMobile = false; + export let fullWidthMobile = false; let showSelectColumns = false; @@ -31,12 +32,15 @@ } else { const prefs = preferences.get($page.route); - columns.set( - $columns.map((column) => { - column.show = prefs.columns?.includes(column.id) ?? true; - return column; - }) - ); + // Override the shown columns only if a preference was set + if (prefs?.columns) { + columns.set( + $columns.map((column) => { + column.show = prefs.columns?.includes(column.id) ?? true; + return column; + }) + ); + } } columns.subscribe((ctx) => { @@ -71,8 +75,11 @@
    {#if !hideColumns && view === View.Table} {#if $columns?.length} - - + +
    + +
    +
    + + {/if}
    diff --git a/src/lib/elements/forms/inputEmail.svelte b/src/lib/elements/forms/inputEmail.svelte index 4b7d16731..6fa48dd68 100644 --- a/src/lib/elements/forms/inputEmail.svelte +++ b/src/lib/elements/forms/inputEmail.svelte @@ -1,7 +1,8 @@ - +
    - import { Trim } from '$lib/components'; + import { Drop, Trim } from '$lib/components'; import { humanFileSize } from '$lib/helpers/sizeConvertion'; - import { onMount } from 'svelte'; + import { SvelteComponent, onMount } from 'svelte'; import { Helper, Label } from '.'; export let label: string = null; @@ -13,9 +13,12 @@ export let optionalText: string = null; export let tooltip: string = null; export let error: string = null; + export let popover: typeof SvelteComponent = null; + export let popoverProps: Record = {}; let input: HTMLInputElement; let hovering = false; + let show = false; function setFiles(value: FileList) { if (!value) return; @@ -97,7 +100,30 @@
    {#if label} {/if}
    + import { Drop, Trim } from '$lib/components'; + import FilePicker from '$lib/components/filePicker.svelte'; + import { humanFileSize } from '$lib/helpers/sizeConvertion'; + import type { Models } from '@appwrite.io/console'; + import { Label } from '.'; + + export let label: string = null; + export let value: Models.File = null; + export let disabled = false; + + export let optionalText: string = null; + export let tooltip: string = null; + export let isPopoverDefined = true; + + let show = false; + + function onSelect(file: Models.File) { + value = file; + } + + +
    + {#if label} + + {/if} +
    +
    +
    +
    +
    +
    + Select a file to upload + Select a file to upload +
    +
    +
    + Max file size: 1MB + +
    + + {#if value} + {@const fileSize = humanFileSize(value.sizeOriginal)} +
      +
    • +
    • +
    + {/if} +
    +
    +
    + +{#if show} + +{/if} diff --git a/src/lib/elements/forms/inputPassword.svelte b/src/lib/elements/forms/inputPassword.svelte index 21860c71a..a51744cce 100644 --- a/src/lib/elements/forms/inputPassword.svelte +++ b/src/lib/elements/forms/inputPassword.svelte @@ -1,6 +1,7 @@ - +
    diff --git a/src/lib/elements/forms/inputPhone.svelte b/src/lib/elements/forms/inputPhone.svelte index 8c630aa4a..52b5e1153 100644 --- a/src/lib/elements/forms/inputPhone.svelte +++ b/src/lib/elements/forms/inputPhone.svelte @@ -1,6 +1,7 @@ - +
    {/if} +
    {#if error} {error} diff --git a/src/lib/elements/forms/inputSearch.svelte b/src/lib/elements/forms/inputSearch.svelte index b48debce7..b4edb489a 100644 --- a/src/lib/elements/forms/inputSearch.svelte +++ b/src/lib/elements/forms/inputSearch.svelte @@ -9,6 +9,7 @@ export let disabled = false; export let autofocus = false; export let isWithEndButton = true; + export let style: string = ''; const dispatch = createEventDispatcher(); let element: HTMLInputElement; @@ -53,6 +54,7 @@ {placeholder} {disabled} {required} + {style} type="search" class="input-text" bind:this={element} diff --git a/src/lib/elements/forms/inputSelectSearch.svelte b/src/lib/elements/forms/inputSelectSearch.svelte index 2199bbd8e..6d1fad7df 100644 --- a/src/lib/elements/forms/inputSelectSearch.svelte +++ b/src/lib/elements/forms/inputSelectSearch.svelte @@ -24,7 +24,6 @@ export let hideRequired = false; export let disabled = false; export let fullWidth = false; - export let fullWidthDrop = true; export let autofocus = false; export let interactiveOutput = false; // stretch is used inside of a flex container to give the element flex:1 @@ -120,7 +119,6 @@ scrollable placement="bottom-end" position="static" - fullWidth={fullWidthDrop} fixed>
    @@ -97,7 +98,7 @@ {excess.name}

    -

    ${excess.amount}

    +

    {formatCurrency(excess.amount)}

    {/if} {#if ['users', 'executions'].includes(excess.name)} @@ -107,13 +108,15 @@ >{abbreviateNumber(excess.value)} {excess.name}

    -

    ${excess.amount}

    +

    {formatCurrency(excess.amount)}

    {/if} {/each}
  • Total to-date:

    -

    ${currentInvoice?.amount}

    +

    + {formatCurrency(currentInvoice?.amount ?? 0)} +

  • @@ -136,7 +139,12 @@
    @@ -145,7 +153,12 @@ + + + + + + + diff --git a/src/routes/console/organization-[organization]/billing/store.ts b/src/routes/console/organization-[organization]/billing/store.ts index e75622d62..ca081c291 100644 --- a/src/routes/console/organization-[organization]/billing/store.ts +++ b/src/routes/console/organization-[organization]/billing/store.ts @@ -1,6 +1,6 @@ import { page } from '$app/stores'; import type { WizardStepsType } from '$lib/layout/wizard.svelte'; -import type { AggregationList } from '$lib/sdk/billing'; +import type { AggregationList, Invoice } from '$lib/sdk/billing'; import { derived, writable } from 'svelte/store'; export const aggregationList = derived( @@ -13,3 +13,6 @@ export const addCreditWizardStore = writable<{ coupon: string; paymentMethodId: coupon: null, paymentMethodId: null }); + +export const selectedInvoice = writable(null); +export const showRetryModal = writable(false); diff --git a/src/routes/console/organization-[organization]/billing/wizard/addCredit.svelte b/src/routes/console/organization-[organization]/billing/wizard/addCredit.svelte index 3e4a3707b..d62ffc7ab 100644 --- a/src/routes/console/organization-[organization]/billing/wizard/addCredit.svelte +++ b/src/routes/console/organization-[organization]/billing/wizard/addCredit.svelte @@ -4,6 +4,7 @@ import type { Coupon } from '$lib/sdk/billing'; import { sdk } from '$lib/stores/sdk'; import { wizard } from '$lib/stores/wizard'; + import { onMount } from 'svelte'; import { addCreditWizardStore } from '../store'; let coupon: string; @@ -18,6 +19,7 @@ try { const response = await sdk.forConsole.billing.getCoupon(coupon); couponData = response; + $addCreditWizardStore.coupon = coupon; coupon = null; } catch (error) { couponData.code = coupon; @@ -26,10 +28,17 @@ throw new Error(error); } } + + onMount(() => { + if ($addCreditWizardStore.coupon) { + coupon = $addCreditWizardStore.coupon; + validateCoupon(); + } + }); - Add credits + Credits Add Appwrite credits to your organization. A payment method is required before credits can be applied. @@ -41,6 +50,6 @@ $addCreditWizardStore.coupon = e.detail.code; }} let:data> - {data.code} has been successfully added + {data.code.toUpperCase()} has been successfully added diff --git a/src/routes/console/organization-[organization]/billing/wizard/paymentDetails.svelte b/src/routes/console/organization-[organization]/billing/wizard/paymentDetails.svelte index b4f54264d..72dfd81c2 100644 --- a/src/routes/console/organization-[organization]/billing/wizard/paymentDetails.svelte +++ b/src/routes/console/organization-[organization]/billing/wizard/paymentDetails.svelte @@ -41,7 +41,7 @@ - Payment details + Details Add a payment method to your organization. You will not be charged until you upgrade to a Pro or Scale plan. diff --git a/src/routes/console/organization-[organization]/createMember.svelte b/src/routes/console/organization-[organization]/createMember.svelte index 5bd7742ba..a0c4ff0dc 100644 --- a/src/routes/console/organization-[organization]/createMember.svelte +++ b/src/routes/console/organization-[organization]/createMember.svelte @@ -11,6 +11,7 @@ import { Submit, trackEvent, trackError } from '$lib/actions/analytics'; import { isCloud } from '$lib/system'; import { plansInfo } from '$lib/stores/billing'; + import { formatCurrency } from '$lib/helpers/numbers'; export let showCreate = false; @@ -56,14 +57,14 @@ } - + {#if isCloud} {#if $organization?.billingPlan === BillingPlan.SCALE} You can add unlimited organization members on the {plan.name} plan at no cost. {:else if $organization?.billingPlan === BillingPlan.PRO} You can add unlimited organization members on the {plan.name} plan for - ${plan.addons.member.price} each per billing period. + {formatCurrency(plan.addons.member.price)} each per billing period. {/if} {/if} diff --git a/src/routes/console/organization-[organization]/createProject.svelte b/src/routes/console/organization-[organization]/createProject.svelte index e0f80e179..0f042d0c5 100644 --- a/src/routes/console/organization-[organization]/createProject.svelte +++ b/src/routes/console/organization-[organization]/createProject.svelte @@ -6,7 +6,7 @@ import { InputText, Button, FormList } from '$lib/elements/forms'; import { addNotification } from '$lib/stores/notifications'; import { sdk } from '$lib/stores/sdk'; - import { ID } from '@appwrite.io/console'; + import { ID, Region } from '@appwrite.io/console'; import { createEventDispatcher } from 'svelte'; export let show = false; @@ -18,15 +18,18 @@ let name: string; let showCustomId = false; let error: string; + let disabled: boolean = false; async function create() { try { + disabled = true; const project = await sdk.forConsole.projects.create( id ?? ID.unique(), name, teamId, - 'default' + Region.Default ); + show = false; dispatch('created', project); trackEvent(Submit.ProjectCreate, { customId: !!id, @@ -40,6 +43,7 @@ } catch (e) { error = e.message; trackError(e, Submit.ProjectCreate); + disabled = false; } } @@ -61,6 +65,6 @@ - + diff --git a/src/routes/console/organization-[organization]/createProjectCloud.svelte b/src/routes/console/organization-[organization]/createProjectCloud.svelte index 7072e6b0f..b63acf97f 100644 --- a/src/routes/console/organization-[organization]/createProjectCloud.svelte +++ b/src/routes/console/organization-[organization]/createProjectCloud.svelte @@ -10,7 +10,7 @@ import { Dependencies } from '$lib/constants'; import { page } from '$app/stores'; import { Submit, trackEvent, trackError } from '$lib/actions/analytics'; - import { ID } from '@appwrite.io/console'; + import { ID, Region } from '@appwrite.io/console'; import { createProject } from './wizard/store'; import { wizard } from '$lib/stores/wizard'; @@ -22,11 +22,12 @@ async function create() { try { + // TODO: fix typing once SDK is updated const project = await sdk.forConsole.projects.create( $createProject?.id ?? ID.unique(), $createProject.name, teamId, - $createProject.region + $createProject.region as Region ); trackEvent(Submit.ProjectCreate, { customId: !!$createProject?.id, @@ -58,11 +59,11 @@ const stepsComponents: WizardStepsType = new Map(); stepsComponents.set(1, { - label: 'Project details', + label: 'Details', component: Step1 }); stepsComponents.set(2, { - label: 'Select region', + label: 'Region', component: Step2 }); diff --git a/src/routes/console/organization-[organization]/excesLimitModal.svelte b/src/routes/console/organization-[organization]/excesLimitModal.svelte index b3a58ac1c..848f1b51e 100644 --- a/src/routes/console/organization-[organization]/excesLimitModal.svelte +++ b/src/routes/console/organization-[organization]/excesLimitModal.svelte @@ -13,7 +13,7 @@ import ChangeOrganizationTierCloud from '../changeOrganizationTierCloud.svelte'; import { goto } from '$app/navigation'; import { last } from '$lib/helpers/array'; - import { BillingPlan } from '$lib/constants'; + import { trackEvent } from '$lib/actions/analytics'; export let show = false; const plan = $plansInfo?.get($organization.billingPlan); @@ -57,29 +57,14 @@ - - Your usage exceeds the {tierToPlan($organization.billingPlan).name} plan limits - - - Appwrite Pro is now available. To facilitate a smooth transition for your projects, Starter plan - will maintain its current state of unlimited resource usage. This extension will be in effect - until January 31st, 2024. - - {#if $organization.billingPlan === BillingPlan.STARTER} -

    - Usage for {$organization.name} organization has reached the limits of the {tierToPlan( - $organization.billingPlan - ).name} plan. Consider upgrading to increase your resource usage. -

    - {:else} -

    - Usage for {$organization.name} organization has reached the limits of the {tierToPlan( - $organization.billingPlan - ).name} plan. Excess usage fees will apply. -

    - {/if} +

    + Usage for {$organization.name} organization has reached the limits of the {tierToPlan( + $organization.billingPlan + ).name} plan. Excess usage fees will apply. +

    +
    @@ -89,13 +74,20 @@ on:click={() => { show = false; goto(`/console/organization-${$organization.$id}/usage`); - }}>View usage - + }}> + View usage + + trackEvent('click_organization_upgrade', { + from: 'button', + source: 'limit_reached_modal' + }); + }}> + Upgrade plan +
    diff --git a/src/routes/console/organization-[organization]/header.svelte b/src/routes/console/organization-[organization]/header.svelte index 23c2d23d8..67777d4e0 100644 --- a/src/routes/console/organization-[organization]/header.svelte +++ b/src/routes/console/organization-[organization]/header.svelte @@ -78,7 +78,7 @@ }, ...permanentTabSettings ] - : permanentTabs; + : [...permanentTabs, ...permanentTabSettings]; {#if $organization?.$id} @@ -94,7 +94,7 @@ {#if isCloud && $organization?.billingPlan === BillingPlan.STARTER} FREE {/if} - {#if isCloud && $organization?.billingTrialStartDate && $daysLeftInTrial > 0} + {#if isCloud && $organization?.billingTrialStartDate && $daysLeftInTrial > 0 && $organization.billingPlan !== BillingPlan.STARTER}
    - Name + Name Email - Joined - + 2FA + - + {#each data.organizationMembers.memberships as member} @@ -85,8 +87,17 @@
    {member.userEmail} - - {member.joined ? toLocaleDate(member.joined) : ''} + + + {#if member.mfa} + {#if member.invited && !member.joined} diff --git a/src/routes/console/organization-[organization]/settings/+page.svelte b/src/routes/console/organization-[organization]/settings/+page.svelte index 0b90d5da2..4b09765ee 100644 --- a/src/routes/console/organization-[organization]/settings/+page.svelte +++ b/src/routes/console/organization-[organization]/settings/+page.svelte @@ -8,8 +8,10 @@ import { invalidate } from '$app/navigation'; import { Dependencies } from '$lib/constants'; import { onMount } from 'svelte'; - import Delete from './deleteOrganization.svelte'; + import Delete from './deleteOrganizationModal.svelte'; + import DownloadDPA from './downloadDPA.svelte'; import { Submit, trackEvent, trackError } from '$lib/actions/analytics'; + import { isCloud } from '$lib/system'; export let data; let name: string; @@ -63,6 +65,10 @@ + {#if isCloud} + + {/if} +
    Delete organization @@ -93,4 +99,6 @@ {/if} - +{#if isCloud && data.invoices} + +{/if} diff --git a/src/routes/console/organization-[organization]/settings/+page.ts b/src/routes/console/organization-[organization]/settings/+page.ts index f4db3678f..c3d520eb2 100644 --- a/src/routes/console/organization-[organization]/settings/+page.ts +++ b/src/routes/console/organization-[organization]/settings/+page.ts @@ -2,12 +2,14 @@ import type { PageLoad } from './$types'; import { Dependencies } from '$lib/constants'; import { sdk } from '$lib/stores/sdk'; import { Query } from '@appwrite.io/console'; +import { isCloud } from '$lib/system'; export const load: PageLoad = async ({ depends, parent }) => { const { organization } = await parent(); depends(Dependencies.ORGANIZATION); + return { projects: await sdk.forConsole.projects.list([Query.equal('teamId', organization.$id)]), - invoices: await sdk.forConsole.billing.listInvoices(organization.$id) + invoices: isCloud ? await sdk.forConsole.billing.listInvoices(organization.$id) : undefined }; }; diff --git a/src/routes/console/organization-[organization]/settings/deleteOrganization.svelte b/src/routes/console/organization-[organization]/settings/deleteOrganizationModal.svelte similarity index 100% rename from src/routes/console/organization-[organization]/settings/deleteOrganization.svelte rename to src/routes/console/organization-[organization]/settings/deleteOrganizationModal.svelte diff --git a/src/routes/console/organization-[organization]/settings/downloadDPA.svelte b/src/routes/console/organization-[organization]/settings/downloadDPA.svelte new file mode 100644 index 000000000..868dc3b54 --- /dev/null +++ b/src/routes/console/organization-[organization]/settings/downloadDPA.svelte @@ -0,0 +1,54 @@ + + + +
    + Download DPA document +
    +

    + After downloading, have the DPA signed by your organization's compliance authority, such as + your CEO or Compliance Manager, and submit it to privacy@appwrite.io. +

    + + +
    + Data Processing Agreement (DPA) document +
    +

    + The DPA is a legal document that describes the roles and responsibilities of + Appwrite and the organization when personal data is processed. Learn more about the DPA. +

    + +
    +
    +
    diff --git a/src/routes/console/organization-[organization]/usage/[[invoice]]/+page.svelte b/src/routes/console/organization-[organization]/usage/[[invoice]]/+page.svelte index 475e23ed5..38779b21b 100644 --- a/src/routes/console/organization-[organization]/usage/[[invoice]]/+page.svelte +++ b/src/routes/console/organization-[organization]/usage/[[invoice]]/+page.svelte @@ -13,6 +13,7 @@ import { accumulateFromEndingTotal, total } from '$lib/layout/usage.svelte'; import type { OrganizationUsage } from '$lib/sdk/billing'; import { BillingPlan } from '$lib/constants'; + import { trackEvent } from '$lib/actions/analytics'; export let data; @@ -42,7 +43,14 @@ Usage {#if $organization?.billingPlan === BillingPlan.STARTER} - {/if} @@ -217,7 +225,7 @@ {@const max = getServiceLimit('executions', tier)} - Project Details + Details - Select region + Regions Choose a deployment region for your project. This region cannot be changed. diff --git a/src/routes/console/project-[project]/+error.svelte b/src/routes/console/project-[project]/+error.svelte index 243be6e42..be0053176 100644 --- a/src/routes/console/project-[project]/+error.svelte +++ b/src/routes/console/project-[project]/+error.svelte @@ -5,6 +5,6 @@ - {$page.status} + {$page.error.status || 'Invalid Argument'}

    {$page.error.message}

    diff --git a/src/routes/console/project-[project]/+layout.svelte b/src/routes/console/project-[project]/+layout.svelte index d8f26f01b..a2cdf33f5 100644 --- a/src/routes/console/project-[project]/+layout.svelte +++ b/src/routes/console/project-[project]/+layout.svelte @@ -15,6 +15,7 @@ userSearcher } from '$lib/commandCenter/searchers'; import { MigrationBox } from '$lib/components'; + import { page } from '$app/stores'; onMount(() => { return sdk.forConsole.client.subscribe(['project', 'console'], (response) => { @@ -27,20 +28,20 @@ }); $: $registerCommands([ - { - label: 'Go to Databases', - callback: () => { - goto(`/console/project-${$project.$id}/databases`); - }, - keys: ['d'], - group: 'navigation' - }, { label: 'Go to Auth', callback: () => { goto(`/console/project-${$project.$id}/auth`); }, - keys: ['a'], + keys: ['g', 'a'], + group: 'navigation' + }, + { + label: 'Go to Databases', + callback: () => { + goto(`/console/project-${$project.$id}/databases`); + }, + keys: ['g', 'd'], group: 'navigation' }, { @@ -48,7 +49,16 @@ callback: () => { goto(`/console/project-${$project.$id}/functions`); }, - keys: ['f'], + keys: ['g', 'f'], + group: 'navigation' + }, + { + label: 'Go to Messaging', + callback: () => { + goto(`/console/project-${$project.$id}/messaging`); + }, + keys: ['g', 'm'], + disabled: $page.url.pathname.endsWith('messaging'), group: 'navigation' }, { @@ -56,23 +66,23 @@ callback: () => { goto(`/console/project-${$project.$id}/storage`); }, - keys: ['s'], + keys: ['g', 's'], group: 'navigation' }, { - label: 'Go to settings', + label: 'Go to Settings', callback: () => { goto(`/console/project-${$project.$id}/settings`); }, - keys: ['p'], + keys: ['g', 'e'], group: 'navigation' }, { - label: 'Go to overview', + label: 'Go to Overview', callback: () => { goto(`/console/project-${$project.$id}`); }, - keys: ['o'], + keys: ['g', 'o'], group: 'navigation' } ]); diff --git a/src/routes/console/project-[project]/+layout.ts b/src/routes/console/project-[project]/+layout.ts index 98096bd90..156a24f34 100644 --- a/src/routes/console/project-[project]/+layout.ts +++ b/src/routes/console/project-[project]/+layout.ts @@ -5,6 +5,7 @@ import type { LayoutLoad } from './$types'; import { preferences } from '$lib/stores/preferences'; import { failedInvoice } from '$lib/stores/billing'; import { isCloud } from '$lib/system'; +import type { Organization } from '$lib/stores/organization'; export const load: LayoutLoad = async ({ params, depends }) => { depends(Dependencies.PROJECT); @@ -22,9 +23,9 @@ export const load: LayoutLoad = async ({ params, depends }) => { return { project, - organization: await sdk.forConsole.teams.get(project.teamId) + organization: await (sdk.forConsole.teams.get(project.teamId) as Promise) }; } catch (e) { - throw error(e.code, e.message); + error(e.code, e.message); } }; diff --git a/src/routes/console/project-[project]/+page.ts b/src/routes/console/project-[project]/+page.ts index 05525234d..021a67bc0 100644 --- a/src/routes/console/project-[project]/+page.ts +++ b/src/routes/console/project-[project]/+page.ts @@ -3,5 +3,5 @@ import { base } from '$app/paths'; import type { PageLoad } from './$types'; export const load: PageLoad = async ({ params }) => { - throw redirect(302, `${base}/console/project-${params.project}/overview`); + redirect(302, `${base}/console/project-${params.project}/overview`); }; diff --git a/src/routes/console/project-[project]/auth/appleOAuth.svelte b/src/routes/console/project-[project]/auth/(providers)/appleOAuth.svelte similarity index 95% rename from src/routes/console/project-[project]/auth/appleOAuth.svelte rename to src/routes/console/project-[project]/auth/(providers)/appleOAuth.svelte index c14b2e5f7..982422b3f 100644 --- a/src/routes/console/project-[project]/auth/appleOAuth.svelte +++ b/src/routes/console/project-[project]/auth/(providers)/appleOAuth.svelte @@ -5,11 +5,12 @@ import type { Provider } from '$lib/stores/oauth-providers'; import { sdk } from '$lib/stores/sdk'; import { onMount } from 'svelte'; - import { updateOAuth } from './updateOAuth'; + import { updateOAuth } from '../updateOAuth'; const projectId = $page.params.project; export let provider: Provider; + export let show = false; let appId: string = null; let enabled: boolean = null; @@ -37,7 +38,7 @@ $: secret = keyID && teamID && p8 ? JSON.stringify({ keyID, teamID, p8 }) : provider.secret; - + {provider.name} OAuth2 Settings

    diff --git a/src/routes/console/project-[project]/auth/auth0OAuth.svelte b/src/routes/console/project-[project]/auth/(providers)/auth0OAuth.svelte similarity index 95% rename from src/routes/console/project-[project]/auth/auth0OAuth.svelte rename to src/routes/console/project-[project]/auth/(providers)/auth0OAuth.svelte index 51a25c834..0607180a5 100644 --- a/src/routes/console/project-[project]/auth/auth0OAuth.svelte +++ b/src/routes/console/project-[project]/auth/(providers)/auth0OAuth.svelte @@ -5,9 +5,10 @@ import type { Provider } from '$lib/stores/oauth-providers'; import { sdk } from '$lib/stores/sdk'; import { onMount } from 'svelte'; - import { updateOAuth } from './updateOAuth'; + import { updateOAuth } from '../updateOAuth'; export let provider: Provider; + export let show = false; let appId: string = null; let enabled: boolean = null; @@ -38,7 +39,7 @@ : provider.secret; - + {provider.name} OAuth2 Settings

    diff --git a/src/routes/console/project-[project]/auth/authentikOAuth.svelte b/src/routes/console/project-[project]/auth/(providers)/authentikOAuth.svelte similarity index 95% rename from src/routes/console/project-[project]/auth/authentikOAuth.svelte rename to src/routes/console/project-[project]/auth/(providers)/authentikOAuth.svelte index 7df8877a5..f7d6dcd37 100644 --- a/src/routes/console/project-[project]/auth/authentikOAuth.svelte +++ b/src/routes/console/project-[project]/auth/(providers)/authentikOAuth.svelte @@ -5,9 +5,10 @@ import type { Provider } from '$lib/stores/oauth-providers'; import { sdk } from '$lib/stores/sdk'; import { onMount } from 'svelte'; - import { updateOAuth } from './updateOAuth'; + import { updateOAuth } from '../updateOAuth'; export let provider: Provider; + export let show = false; let appId: string = null; let enabled: boolean = null; @@ -38,7 +39,7 @@ : provider.secret; - + {provider.name} OAuth2 Settings

    diff --git a/src/routes/console/project-[project]/auth/gitlabOAuth.svelte b/src/routes/console/project-[project]/auth/(providers)/gitlabOAuth.svelte similarity index 95% rename from src/routes/console/project-[project]/auth/gitlabOAuth.svelte rename to src/routes/console/project-[project]/auth/(providers)/gitlabOAuth.svelte index e93d4ae8f..95f80675e 100644 --- a/src/routes/console/project-[project]/auth/gitlabOAuth.svelte +++ b/src/routes/console/project-[project]/auth/(providers)/gitlabOAuth.svelte @@ -5,9 +5,10 @@ import type { Provider } from '$lib/stores/oauth-providers'; import { sdk } from '$lib/stores/sdk'; import { onMount } from 'svelte'; - import { updateOAuth } from './updateOAuth'; + import { updateOAuth } from '../updateOAuth'; export let provider: Provider; + export let show = false; let appId: string = null; let enabled: boolean = null; @@ -36,7 +37,7 @@ clientSecret && endpoint ? JSON.stringify({ clientSecret, endpoint }) : provider.secret; - + {provider.name} OAuth2 Settings

    diff --git a/src/routes/console/project-[project]/auth/googleOAuth.svelte b/src/routes/console/project-[project]/auth/(providers)/googleOAuth.svelte similarity index 95% rename from src/routes/console/project-[project]/auth/googleOAuth.svelte rename to src/routes/console/project-[project]/auth/(providers)/googleOAuth.svelte index c06c99b6f..defd59038 100644 --- a/src/routes/console/project-[project]/auth/googleOAuth.svelte +++ b/src/routes/console/project-[project]/auth/(providers)/googleOAuth.svelte @@ -5,9 +5,10 @@ import type { Provider } from '$lib/stores/oauth-providers'; import { sdk } from '$lib/stores/sdk'; import { onMount } from 'svelte'; - import { updateOAuth } from './updateOAuth'; + import { updateOAuth } from '../updateOAuth'; export let provider: Provider; + export let show = false; const projectId = $page.params.project; @@ -34,7 +35,7 @@ }; - + {provider.name} OAuth2 Settings

    diff --git a/src/routes/console/project-[project]/auth/mainOAuth.svelte b/src/routes/console/project-[project]/auth/(providers)/mainOAuth.svelte similarity index 94% rename from src/routes/console/project-[project]/auth/mainOAuth.svelte rename to src/routes/console/project-[project]/auth/(providers)/mainOAuth.svelte index f8c11649e..184fcd00c 100644 --- a/src/routes/console/project-[project]/auth/mainOAuth.svelte +++ b/src/routes/console/project-[project]/auth/(providers)/mainOAuth.svelte @@ -5,9 +5,10 @@ import type { Provider } from '$lib/stores/oauth-providers'; import { sdk } from '$lib/stores/sdk'; import { onMount } from 'svelte'; - import { updateOAuth } from './updateOAuth'; + import { updateOAuth } from '../updateOAuth'; export let provider: Provider; + export let show = false; const projectId = $page.params.project; @@ -34,7 +35,7 @@ }; - + {provider.name} OAuth2 Settings

    diff --git a/src/routes/console/project-[project]/auth/microsoftOAuth.svelte b/src/routes/console/project-[project]/auth/(providers)/microsoftOAuth.svelte similarity index 95% rename from src/routes/console/project-[project]/auth/microsoftOAuth.svelte rename to src/routes/console/project-[project]/auth/(providers)/microsoftOAuth.svelte index 266713e8e..7fd451af5 100644 --- a/src/routes/console/project-[project]/auth/microsoftOAuth.svelte +++ b/src/routes/console/project-[project]/auth/(providers)/microsoftOAuth.svelte @@ -5,9 +5,10 @@ import type { Provider } from '$lib/stores/oauth-providers'; import { sdk } from '$lib/stores/sdk'; import { onMount } from 'svelte'; - import { updateOAuth } from './updateOAuth'; + import { updateOAuth } from '../updateOAuth'; export let provider: Provider; + export let show = false; let appId: string = null; let enabled: boolean = null; @@ -37,7 +38,7 @@ clientSecret && tenantID ? JSON.stringify({ clientSecret, tenantID }) : provider.secret; - + {provider.name} OAuth2 Settings

    diff --git a/src/routes/console/project-[project]/auth/oidcOAuth.svelte b/src/routes/console/project-[project]/auth/(providers)/oidcOAuth.svelte similarity index 96% rename from src/routes/console/project-[project]/auth/oidcOAuth.svelte rename to src/routes/console/project-[project]/auth/(providers)/oidcOAuth.svelte index 719759e14..f00f07e30 100644 --- a/src/routes/console/project-[project]/auth/oidcOAuth.svelte +++ b/src/routes/console/project-[project]/auth/(providers)/oidcOAuth.svelte @@ -5,11 +5,12 @@ import type { Provider } from '$lib/stores/oauth-providers'; import { sdk } from '$lib/stores/sdk'; import { onMount } from 'svelte'; - import { updateOAuth } from './updateOAuth'; + import { updateOAuth } from '../updateOAuth'; const projectId = $page.params.project; export let provider: Provider; + export let show = false; let appId: string = null; let enabled: boolean = null; @@ -60,7 +61,7 @@ : provider.secret; - + {provider.name} OAuth2 Settings

    diff --git a/src/routes/console/project-[project]/auth/oktaOAuth.svelte b/src/routes/console/project-[project]/auth/(providers)/oktaOAuth.svelte similarity index 95% rename from src/routes/console/project-[project]/auth/oktaOAuth.svelte rename to src/routes/console/project-[project]/auth/(providers)/oktaOAuth.svelte index b9e640f8d..6e23ca60c 100644 --- a/src/routes/console/project-[project]/auth/oktaOAuth.svelte +++ b/src/routes/console/project-[project]/auth/(providers)/oktaOAuth.svelte @@ -5,11 +5,12 @@ import type { Provider } from '$lib/stores/oauth-providers'; import { sdk } from '$lib/stores/sdk'; import { onMount } from 'svelte'; - import { updateOAuth } from './updateOAuth'; + import { updateOAuth } from '../updateOAuth'; const projectId = $page.params.project; export let provider: Provider; + export let show = false; let appId: string = null; let enabled: boolean = null; @@ -42,7 +43,7 @@ : provider.secret; - + {provider.name} OAuth2 Settings

    diff --git a/src/routes/console/project-[project]/auth/+layout.svelte b/src/routes/console/project-[project]/auth/+layout.svelte index cfb6a198b..ca114d653 100644 --- a/src/routes/console/project-[project]/auth/+layout.svelte +++ b/src/routes/console/project-[project]/auth/+layout.svelte @@ -1,7 +1,8 @@ + +

    + + + {'{{user}}'} + {'{{project}}'} + {'{{otp}}'} + +
    diff --git a/src/routes/console/project-[project]/auth/templates/emailMagicUrlTemplate.svelte b/src/routes/console/project-[project]/auth/templates/emailMagicUrlTemplate.svelte index 9d5041acf..0941013bf 100644 --- a/src/routes/console/project-[project]/auth/templates/emailMagicUrlTemplate.svelte +++ b/src/routes/console/project-[project]/auth/templates/emailMagicUrlTemplate.svelte @@ -39,7 +39,6 @@
    - {'{{team}}'} {'{{user}}'} {'{{project}}'} {'{{redirect}}'} diff --git a/src/routes/console/project-[project]/auth/templates/emailRecoveryTemplate.svelte b/src/routes/console/project-[project]/auth/templates/emailRecoveryTemplate.svelte index 674ff61e5..bba93231c 100644 --- a/src/routes/console/project-[project]/auth/templates/emailRecoveryTemplate.svelte +++ b/src/routes/console/project-[project]/auth/templates/emailRecoveryTemplate.svelte @@ -38,7 +38,6 @@
    - {'{{team}}'} {'{{user}}'} {'{{project}}'} {'{{redirect}}'} diff --git a/src/routes/console/project-[project]/auth/templates/emailTemplate.svelte b/src/routes/console/project-[project]/auth/templates/emailTemplate.svelte index d045dfacc..87d47ea93 100644 --- a/src/routes/console/project-[project]/auth/templates/emailTemplate.svelte +++ b/src/routes/console/project-[project]/auth/templates/emailTemplate.svelte @@ -15,6 +15,7 @@ import deepEqual from 'deep-equal'; import { Submit, trackError, trackEvent } from '$lib/actions/analytics'; import { Box } from '$lib/components'; + import type { EmailTemplateLocale, EmailTemplateType } from '@appwrite.io/console'; export let loading = false; let openResetModal = false; @@ -29,6 +30,14 @@ }); return; } + + // TODO: uncomment after SDK is updated + // if (!isValueOfStringEnum(TemplateType, $emailTemplate.type)) { + // throw new Error(`Invalid template type: ${$emailTemplate.type}`); + // } + // if (!isValueOfStringEnum(TemplateLocale, $emailTemplate.locale)) { + // throw new Error(`Invalid template locale: ${$emailTemplate.locale}`); + // } try { switch ($emailTemplate.type) { case 'invitation': @@ -44,10 +53,11 @@ eventType = Submit.EmailUpdateVerificationTemplate; break; } + // TODO: fix TemplateType and TemplateLocale typing once SDK is updated await sdk.forConsole.projects.updateEmailTemplate( $project.$id, - $emailTemplate.type ? $emailTemplate.type : undefined, - $emailTemplate.locale ? $emailTemplate.locale : undefined, + $emailTemplate.type ? ($emailTemplate.type as EmailTemplateType) : undefined, + $emailTemplate.locale ? ($emailTemplate.locale as EmailTemplateLocale) : undefined, $emailTemplate.subject ? $emailTemplate.subject : undefined, $emailTemplate.message ? $emailTemplate.message : undefined, $emailTemplate.senderName ? $emailTemplate.senderName : undefined, @@ -106,7 +116,11 @@ tooltip="Set up an SMTP server to edit the sender email" placeholder="Enter sender email" readonly={!isSmtpEnabled} /> - + {#if $$slots.default}
  • diff --git a/src/routes/console/project-[project]/auth/templates/emailVerificationTemplate.svelte b/src/routes/console/project-[project]/auth/templates/emailVerificationTemplate.svelte index 55f8c5f98..6ac693b0a 100644 --- a/src/routes/console/project-[project]/auth/templates/emailVerificationTemplate.svelte +++ b/src/routes/console/project-[project]/auth/templates/emailVerificationTemplate.svelte @@ -39,7 +39,6 @@ - {'{{team}}'} {'{{user}}'} {'{{project}}'} {'{{redirect}}'} diff --git a/src/routes/console/project-[project]/auth/templates/resetEmail.svelte b/src/routes/console/project-[project]/auth/templates/resetEmail.svelte index a62df21de..123a95df9 100644 --- a/src/routes/console/project-[project]/auth/templates/resetEmail.svelte +++ b/src/routes/console/project-[project]/auth/templates/resetEmail.svelte @@ -4,6 +4,7 @@ import { Button } from '$lib/elements/forms'; import { addNotification } from '$lib/stores/notifications'; import { sdk } from '$lib/stores/sdk'; + import type { EmailTemplateLocale, EmailTemplateType } from '@appwrite.io/console'; import { project } from '../../store'; import { loadEmailTemplate } from './+page.svelte'; import { baseEmailTemplate, emailTemplate } from './store'; @@ -14,10 +15,11 @@ async function reset() { try { + // TODO: fix TemplateType and TemplateLocale typing once SDK is updated await sdk.forConsole.projects.deleteEmailTemplate( $project.$id, - $emailTemplate.type, - $emailTemplate.locale + $emailTemplate.type as EmailTemplateType, + $emailTemplate.locale as EmailTemplateLocale ); $emailTemplate = await loadEmailTemplate( $project.$id, diff --git a/src/routes/console/project-[project]/auth/templates/resetSms.svelte b/src/routes/console/project-[project]/auth/templates/resetSms.svelte index ed91fd01b..3ee20b634 100644 --- a/src/routes/console/project-[project]/auth/templates/resetSms.svelte +++ b/src/routes/console/project-[project]/auth/templates/resetSms.svelte @@ -3,6 +3,7 @@ import { Modal } from '$lib/components'; import { Button } from '$lib/elements/forms'; import { sdk } from '$lib/stores/sdk'; + import type { SmsTemplateLocale, SmsTemplateType } from '@appwrite.io/console'; import { project } from '../../store'; import { loadSmsTemplate } from './+page.svelte'; import { baseSmsTemplate, smsTemplate } from './store'; @@ -13,10 +14,11 @@ async function reset() { try { + // TODO: fix TemplateType and TemplateLocale typing once SDK is updated await sdk.forConsole.projects.deleteSmsTemplate( $project.$id, - $smsTemplate.type, - $smsTemplate.locale + $smsTemplate.type as SmsTemplateType, + $smsTemplate.locale as SmsTemplateLocale ); $smsTemplate = await loadSmsTemplate( diff --git a/src/routes/console/project-[project]/auth/templates/smsTemplate.svelte b/src/routes/console/project-[project]/auth/templates/smsTemplate.svelte index 6a955f017..326ae5555 100644 --- a/src/routes/console/project-[project]/auth/templates/smsTemplate.svelte +++ b/src/routes/console/project-[project]/auth/templates/smsTemplate.svelte @@ -8,6 +8,7 @@ import deepEqual from 'deep-equal'; import { Submit, trackError, trackEvent } from '$lib/actions/analytics'; import { Box } from '$lib/components'; + import type { SmsTemplateLocale, SmsTemplateType } from '@appwrite.io/console'; export let loading = false; const projectId = $page.params.project; @@ -35,10 +36,11 @@ eventType = Submit.SmsUpdateVerificationTemplate; break; } + // TODO: fix TemplateType and TemplateLocale typing once SDK is updated await sdk.forConsole.projects.updateSmsTemplate( projectId, - $smsTemplate.type, - $smsTemplate.locale, + $smsTemplate.type as SmsTemplateType, + $smsTemplate.locale as SmsTemplateLocale, $smsTemplate.message ); diff --git a/src/routes/console/project-[project]/auth/updateOAuth.ts b/src/routes/console/project-[project]/auth/updateOAuth.ts index f148c41a3..dade0a767 100644 --- a/src/routes/console/project-[project]/auth/updateOAuth.ts +++ b/src/routes/console/project-[project]/auth/updateOAuth.ts @@ -1,9 +1,11 @@ import { invalidate } from '$app/navigation'; import { Submit, trackError, trackEvent } from '$lib/actions/analytics'; import { Dependencies } from '$lib/constants'; +import { isValueOfStringEnum } from '$lib/helpers/types'; import { addNotification } from '$lib/stores/notifications'; import type { Provider } from '$lib/stores/oauth-providers'; import { sdk } from '$lib/stores/sdk'; +import { OAuthProvider } from '@appwrite.io/console'; type Args = { projectId: string; @@ -26,6 +28,9 @@ export async function updateOAuth({ enabled }: Args): Promise { try { + if (!isValueOfStringEnum(OAuthProvider, provider.key)) { + throw new Error(`Invalid OAuth2 provider: ${provider.key}`); + } await sdk.forConsole.projects.updateOAuth2( projectId, provider.key, diff --git a/src/routes/console/project-[project]/auth/usage/[[period]]/+page.ts b/src/routes/console/project-[project]/auth/usage/[[period]]/+page.ts index 977d7e7b3..0b035de7c 100644 --- a/src/routes/console/project-[project]/auth/usage/[[period]]/+page.ts +++ b/src/routes/console/project-[project]/auth/usage/[[period]]/+page.ts @@ -1,19 +1,16 @@ -import type { Metric, UsageUsers } from '$lib/sdk/usage'; +import { isValueOfStringEnum } from '$lib/helpers/types'; import { sdk } from '$lib/stores/sdk'; +import { UserUsageRange } from '@appwrite.io/console'; import type { PageLoad } from './$types'; import { error } from '@sveltejs/kit'; export const load: PageLoad = async ({ params }) => { - const { period } = params; + const period = isValueOfStringEnum(UserUsageRange, params.period) + ? params.period + : UserUsageRange.ThirtyDays; try { - const response = (await sdk.forProject.users.getUsage( - period ?? '30d' - )) as unknown as UsageUsers; - return { - usersTotal: response.usersTotal, - users: response.users as Metric[] - }; + return sdk.forProject.users.getUsage(period); } catch (e) { - throw error(e.code, e.message); + error(e.code, e.message); } }; diff --git a/src/routes/console/project-[project]/auth/user-[user]/+layout.ts b/src/routes/console/project-[project]/auth/user-[user]/+layout.ts index 64adc0d20..e0cc98485 100644 --- a/src/routes/console/project-[project]/auth/user-[user]/+layout.ts +++ b/src/routes/console/project-[project]/auth/user-[user]/+layout.ts @@ -12,9 +12,10 @@ export const load: LayoutLoad = async ({ params, depends }) => { return { header: Header, breadcrumbs: Breadcrumbs, - user: await sdk.forProject.users.get(params.user) + user: await sdk.forProject.users.get(params.user), + userFactors: await sdk.forProject.users.listMfaFactors(params.user) }; } catch (e) { - throw error(e.code, e.message); + error(e.code, e.message); } }; diff --git a/src/routes/console/project-[project]/auth/user-[user]/+page.svelte b/src/routes/console/project-[project]/auth/user-[user]/+page.svelte index 04ef2f14a..d63f21039 100644 --- a/src/routes/console/project-[project]/auth/user-[user]/+page.svelte +++ b/src/routes/console/project-[project]/auth/user-[user]/+page.svelte @@ -3,6 +3,7 @@ import DangerZone from './dangerZone.svelte'; import UpdateEmail from './updateEmail.svelte'; import UpdateLabels from './updateLabels.svelte'; + import UpdateMfa from './updateMfa.svelte'; import UpdateName from './updateName.svelte'; import UpdatePassword from './updatePassword.svelte'; import UpdatePhone from './updatePhone.svelte'; @@ -18,5 +19,6 @@ + diff --git a/src/routes/console/project-[project]/auth/user-[user]/deleteMfa.svelte b/src/routes/console/project-[project]/auth/user-[user]/deleteMfa.svelte new file mode 100644 index 000000000..26d586c60 --- /dev/null +++ b/src/routes/console/project-[project]/auth/user-[user]/deleteMfa.svelte @@ -0,0 +1,51 @@ + + + +

    Are you sure you want to delete this authentication?

    +

    This action is irreversible.

    + + + + + diff --git a/src/routes/console/project-[project]/auth/user-[user]/header.svelte b/src/routes/console/project-[project]/auth/user-[user]/header.svelte index 06f7d48f2..e3e0641fc 100644 --- a/src/routes/console/project-[project]/auth/user-[user]/header.svelte +++ b/src/routes/console/project-[project]/auth/user-[user]/header.svelte @@ -19,6 +19,11 @@ title: 'Memberships', event: 'memberships' }, + { + href: `${path}/targets`, + title: 'Targets', + event: 'targets' + }, { href: `${path}/sessions`, title: 'Sessions', diff --git a/src/routes/console/project-[project]/auth/user-[user]/sessions/+page.svelte b/src/routes/console/project-[project]/auth/user-[user]/sessions/+page.svelte index e58c335cd..43ea4d746 100644 --- a/src/routes/console/project-[project]/auth/user-[user]/sessions/+page.svelte +++ b/src/routes/console/project-[project]/auth/user-[user]/sessions/+page.svelte @@ -11,8 +11,10 @@ TableHeader, TableRow } from '$lib/elements/table'; + import { isValueOfStringEnum } from '$lib/helpers/types'; import { Container, ContainerHeader } from '$lib/layout'; import { sdk } from '$lib/stores/sdk'; + import { Browser } from '@appwrite.io/console'; import DeleteAllSessions from '../deleteAllSessions.svelte'; import DeleteSessions from '../deleteSession.svelte'; import type { PageData } from './$types'; @@ -23,8 +25,11 @@ let showDeleteAll = false; let selectedSessionId: string; - const getBrowser = (clientCode: string) => - sdk.forProject.avatars.getBrowser(clientCode, 40, 40); + function getBrowser(clientCode: string) { + const code = clientCode.toLowerCase(); + if (!isValueOfStringEnum(Browser, code)) return ''; + return sdk.forProject.avatars.getBrowser(code, 40, 40); + } @@ -46,15 +51,23 @@ {#each data.sessions.sessions as session} + {@const browser = getBrowser(session.clientCode)}
    - {session.clientName} + {#if browser} + {session.clientName} + {:else} +

    {session.clientName} diff --git a/src/routes/console/project-[project]/auth/user-[user]/store.ts b/src/routes/console/project-[project]/auth/user-[user]/store.ts index 787647b42..909a293de 100644 --- a/src/routes/console/project-[project]/auth/user-[user]/store.ts +++ b/src/routes/console/project-[project]/auth/user-[user]/store.ts @@ -6,3 +6,4 @@ export const user = derived( page, ($page) => $page.data.user as Models.User> ); +export const userFactors = derived(page, ($page) => $page.data.userFactors as Models.MfaFactors); diff --git a/src/routes/console/project-[project]/auth/user-[user]/targets/+page.svelte b/src/routes/console/project-[project]/auth/user-[user]/targets/+page.svelte new file mode 100644 index 000000000..ee5a50d96 --- /dev/null +++ b/src/routes/console/project-[project]/auth/user-[user]/targets/+page.svelte @@ -0,0 +1,124 @@ + + + +

    +
    + Targets + +
    + +
    + +
    + +
    + +
    + +
    +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + {#if data.targets.total} + + + + {:else if $hasPageQueries} + + + {:else} + +
    +

    No targets are assigned to this user. Messages can not be sent to them.

    +

    + Need a hand? Check out our . +

    +
    +
    + {/if} + + + (showAdd = false)} /> diff --git a/src/routes/console/project-[project]/auth/user-[user]/targets/+page.ts b/src/routes/console/project-[project]/auth/user-[user]/targets/+page.ts new file mode 100644 index 000000000..bb0f4968c --- /dev/null +++ b/src/routes/console/project-[project]/auth/user-[user]/targets/+page.ts @@ -0,0 +1,51 @@ +import { queries, queryParamToMap } from '$lib/components/filters'; +import { Dependencies, PAGE_LIMIT } from '$lib/constants'; +import { getLimit, getPage, getQuery, pageToOffset } from '$lib/helpers/load'; +import { sdk } from '$lib/stores/sdk'; +import { Query, type Models } from '@appwrite.io/console'; +import type { PageLoad } from './$types'; + +export const load: PageLoad = async ({ params, url, route, depends }) => { + depends(Dependencies.USER_TARGETS); + + const page = getPage(url); + const limit = getLimit(url, route, PAGE_LIMIT); + const offset = pageToOffset(page, limit); + const query = getQuery(url); + + const parsedQueries = queryParamToMap(query || '[]'); + queries.set(parsedQueries); + + const targets = await sdk.forProject.users.listTargets(params.user, [ + Query.limit(limit), + Query.offset(offset), + Query.orderDesc(''), + ...parsedQueries.values() + ]); + + const promisesById: Record> = {}; + targets.targets.forEach((target) => { + if (target.providerId && !promisesById[target.providerId]) { + promisesById[target.providerId] = sdk.forProject.messaging.getProvider( + target.providerId + ); + } + }); + + const providersById: Record = {}; + const resolved = await Promise.allSettled(Object.values(promisesById)); + resolved.forEach((result) => { + if (result.status === 'fulfilled') { + const provider = result.value; + providersById[provider.$id] = provider; + } + }); + + return { + offset, + limit, + query, + targets, + providersById + }; +}; diff --git a/src/routes/console/project-[project]/auth/user-[user]/targets/create.svelte b/src/routes/console/project-[project]/auth/user-[user]/targets/create.svelte new file mode 100644 index 000000000..db5825c29 --- /dev/null +++ b/src/routes/console/project-[project]/auth/user-[user]/targets/create.svelte @@ -0,0 +1,131 @@ + + + + + + {#if providerType === MessagingProviderType.Push} + + + + {:else if providerType === MessagingProviderType.Email} + + {:else if providerType === MessagingProviderType.Sms} + + {/if} + + {#if !showCustomId} +
    + (showCustomId = !showCustomId)} + > +
    + {:else} + + {/if} +
    + + + + +
    diff --git a/src/routes/console/project-[project]/auth/user-[user]/targets/store.ts b/src/routes/console/project-[project]/auth/user-[user]/targets/store.ts new file mode 100644 index 000000000..d3b900a72 --- /dev/null +++ b/src/routes/console/project-[project]/auth/user-[user]/targets/store.ts @@ -0,0 +1,10 @@ +import type { Column } from '$lib/helpers/types'; +import { writable } from 'svelte/store'; + +export const columns = writable([ + { id: '$id', title: 'Target ID', type: 'string', show: true, width: 140 }, + { id: 'target', title: 'Target', type: 'string', show: true, filter: false, width: 140 }, + { id: 'providerType', title: 'Type', type: 'string', show: true, filter: true, width: 80 }, + { id: 'provider', title: 'Provider', type: 'string', show: true, filter: false, width: 80 }, + { id: '$createdAt', title: 'Created', type: 'datetime', show: true, width: 100 } +]); diff --git a/src/routes/console/project-[project]/auth/user-[user]/targets/table.svelte b/src/routes/console/project-[project]/auth/user-[user]/targets/table.svelte new file mode 100644 index 000000000..fb945b6c8 --- /dev/null +++ b/src/routes/console/project-[project]/auth/user-[user]/targets/table.svelte @@ -0,0 +1,162 @@ + + + + + d.$id)} /> + {#each $columns as column} + {#if column.show} + {column.title} + {/if} + {/each} + + + {#each data.targets.targets as target (target.$id)} + {@const provider = data.providersById[target.providerId]} + + + + {#each $columns as column} + {#if column.show} + {#if column.id === '$id'} + {#key $columns} + + + {target[column.id]} + + + {/key} + {:else if column.id === 'target'} + + {#if target.providerType === MessagingProviderType.Push} + {target.name} + {:else} + {target.identifier} + {/if} + + {:else if column.id === 'providerType'} + + + + {:else if column.id === 'provider'} + + {#if provider} + + {/if} + + {:else if column.id === '$createdAt'} + + {toLocaleDateTime(target[column.id])} + + {:else} + + {target[column.id]} + + {/if} + {/if} + {/each} + + {/each} + + + + 0}> +
    +
    + {selectedIds.length} +

    + + {selectedIds.length > 1 ? 'subscribers' : 'subscriber'} + + selected +

    +
    + +
    + + +
    +
    +
    + + +

    + Are you sure you want to delete {selectedIds.length} + {selectedIds.length > 1 ? 'targets' : 'target'}? +

    + + + + +
    diff --git a/src/routes/console/project-[project]/auth/user-[user]/updateLabels.svelte b/src/routes/console/project-[project]/auth/user-[user]/updateLabels.svelte index d0e631601..5d28ed15c 100644 --- a/src/routes/console/project-[project]/auth/user-[user]/updateLabels.svelte +++ b/src/routes/console/project-[project]/auth/user-[user]/updateLabels.svelte @@ -17,25 +17,12 @@ let error = ''; onMount(async () => { - // TODO: Remove type cast when console SDK is updated - labels = [...($user as unknown as { labels: string[] }).labels]; + labels = [...$user.labels]; }); async function updateLabels() { try { - // TODO: Use SDK method when console SDK is updated - // await sdk.forProject.users.updateLabels($user.$id, labels); - const path = `/users/${$user.$id}/labels`; - await sdk.forProject.client.call( - 'PUT', - new URL(sdk.forConsole.client.config.endpoint + path), - { - 'content-type': 'application/json' - }, - { - labels: labels - } - ); + await sdk.forProject.users.updateLabels($user.$id, labels); await invalidate(Dependencies.USER); isDisabled = true; diff --git a/src/routes/console/project-[project]/auth/user-[user]/updateMfa.svelte b/src/routes/console/project-[project]/auth/user-[user]/updateMfa.svelte new file mode 100644 index 000000000..3a99efa4a --- /dev/null +++ b/src/routes/console/project-[project]/auth/user-[user]/updateMfa.svelte @@ -0,0 +1,104 @@ + + +
    + + Multi-factor authentication +

    MFA allow users to enhance the security of their account in you app.

    + + + + + {#if $userFactors.totp} +
    + + Authenticator + + + + + TOTP (One-time code) + + + + + +
    + + {:else} + +

    + No authenticators have been enabled. Once the user adds an authenticator, + you’ll see it here. +

    +
    + {/if} + + + + + + + + + diff --git a/src/routes/console/project-[project]/databases/database-[database]/+layout.ts b/src/routes/console/project-[project]/databases/database-[database]/+layout.ts index 5ee2dffce..ddf96d3d4 100644 --- a/src/routes/console/project-[project]/databases/database-[database]/+layout.ts +++ b/src/routes/console/project-[project]/databases/database-[database]/+layout.ts @@ -15,6 +15,6 @@ export const load: LayoutLoad = async ({ params, depends }) => { database: await sdk.forProject.databases.get(params.database) }; } catch (e) { - throw error(e.code, e.message); + error(e.code, e.message); } }; diff --git a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/+layout.svelte b/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/+layout.svelte index ce8c1071f..004e4e971 100644 --- a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/+layout.svelte +++ b/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/+layout.svelte @@ -136,6 +136,45 @@ disabled: $page.url.pathname.endsWith('settings'), group: 'collections' }, + { + label: 'Display Name', + async callback() { + await goto( + `/console/project-${$project.$id}/databases/database-${$database.$id}/collection-${$collection.$id}/settings#display-name` + ); + }, + group: 'collections', + disabled: + $page.url.pathname.endsWith('display-name') || + $page.url.pathname.endsWith('settings'), + icon: 'eye' + }, + { + label: 'Permissions', + async callback() { + await goto( + `/console/project-${$project.$id}/databases/database-${$database.$id}/collection-${$collection.$id}/settings#permissions` + ); + }, + group: 'collections', + disabled: + $page.url.pathname.endsWith('permissions') || + $page.url.pathname.endsWith('settings'), + icon: 'puzzle' + }, + { + label: 'Document security', + async callback() { + await goto( + `/console/project-${$project.$id}/databases/database-${$database.$id}/collection-${$collection.$id}/settings#document-security` + ); + }, + group: 'collections', + disabled: + $page.url.pathname.endsWith('document-security') || + $page.url.pathname.endsWith('settings'), + icon: 'lock-closed' + }, { label: 'Create index', keys: $page.url.pathname.endsWith('indexes') ? ['c'] : ['c', 'i'], diff --git a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/+layout.ts b/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/+layout.ts index 7f4f6779b..369ca174e 100644 --- a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/+layout.ts +++ b/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/+layout.ts @@ -23,6 +23,6 @@ export const load: LayoutLoad = async ({ params, depends }) => { ]) }; } catch (e) { - throw error(e.code, e.message); + error(e.code, e.message); } }; diff --git a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/+page.svelte b/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/+page.svelte index c62211449..e2948ef64 100644 --- a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/+page.svelte +++ b/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/+page.svelte @@ -1,8 +1,7 @@ + + +
    +

    +

    +

    {error}

    +
    + + + + +
    diff --git a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/indexes/+page.svelte b/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/indexes/+page.svelte index 4cc2d4263..a3d50bb09 100644 --- a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/indexes/+page.svelte +++ b/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/indexes/+page.svelte @@ -20,6 +20,7 @@ import { Button } from '$lib/elements/forms'; import CreateAttributeDropdown from '../attributes/createAttributeDropdown.svelte'; import type { Option } from '../attributes/store'; + import FailedModal from '../failedModal.svelte'; let showDropdown = []; let selectedIndex: Models.Index = null; @@ -29,6 +30,8 @@ let showCreateAttribute = false; let showCreateDropdown = false; let selectedAttribute: Option['name'] = null; + let showFailed = false; + let error = ''; @@ -60,13 +63,24 @@
    {index.key} {#if index.status !== 'available'} - - {index.status} - +
    + + {index.status} + + {#if index.error} + + {/if} +
    {/if}
    @@ -162,3 +176,5 @@ {/if} + + diff --git a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/indexes/createIndex.svelte b/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/indexes/createIndex.svelte index b02606536..998677ebc 100644 --- a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/indexes/createIndex.svelte +++ b/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/indexes/createIndex.svelte @@ -9,6 +9,7 @@ import { remove } from '$lib/helpers/array'; import { addNotification } from '$lib/stores/notifications'; import { sdk } from '$lib/stores/sdk'; + import { IndexType } from '@appwrite.io/console'; import { isRelationship } from '../document-[document]/attributes/store'; import { indexes, type Attributes } from '../store'; import { collection } from '../store'; @@ -22,11 +23,11 @@ let error: string; let key = `index_${$indexes.length + 1}`; let types = [ - { value: 'key', label: 'Key' }, - { value: 'unique', label: 'Unique' }, - { value: 'fulltext', label: 'FullText' } + { value: IndexType.Key, label: 'Key' }, + { value: IndexType.Unique, label: 'Unique' }, + { value: IndexType.Fulltext, label: 'FullText' } ]; - let selectedType = 'key'; + let selectedType = IndexType.Key; let attributeOptions = $collection.attributes .filter((attribute) => !isRelationship(attribute)) @@ -41,7 +42,7 @@ attributeList = externalAttribute ? [{ value: externalAttribute.key, order: 'ASC' }] : [{ value: '', order: 'ASC' }]; - selectedType = 'key'; + selectedType = IndexType.Key; key = `index_${$indexes.length + 1}`; } diff --git a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/settings/displayName.svelte b/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/settings/displayName.svelte index ed2e408a5..e98f77d31 100644 --- a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/settings/displayName.svelte +++ b/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/settings/displayName.svelte @@ -55,7 +55,7 @@
    - Display name + Display name

    Select string attributes as display names for your documents. The selected names will be used as short forms to identify documents in the Appwrite console, like when creating diff --git a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/settings/updatePermissions.svelte b/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/settings/updatePermissions.svelte index 686aca1d8..b32bb7723 100644 --- a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/settings/updatePermissions.svelte +++ b/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/settings/updatePermissions.svelte @@ -56,7 +56,7 @@ - Permissions + Permissions

    Choose who can access your collection and documents. For more about - Document security + Document security { - const response = (await sdk.forProject.databases.getCollectionUsage( - params.database, - params.collection, - params.period ?? '30d' - )) as unknown as UsageCollection; - - return { - documentsTotal: response.documentsTotal, - documents: response.documents as Metric[] - }; + const period = isValueOfStringEnum(DatabaseUsageRange, params.period) + ? params.period + : DatabaseUsageRange.ThirtyDays; + return sdk.forProject.databases.getCollectionUsage(params.database, params.collection, period); }; diff --git a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/wizard/step1.svelte b/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/wizard/step1.svelte index fc7bb5c78..b14c3a728 100644 --- a/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/wizard/step1.svelte +++ b/src/routes/console/project-[project]/databases/database-[database]/collection-[collection]/wizard/step1.svelte @@ -5,7 +5,7 @@ - Create data + Data Provide document data based on attributes you created earlier. diff --git a/src/routes/console/project-[project]/databases/database-[database]/usage/[[period]]/+page.ts b/src/routes/console/project-[project]/databases/database-[database]/usage/[[period]]/+page.ts index 407173bb8..64b477a48 100644 --- a/src/routes/console/project-[project]/databases/database-[database]/usage/[[period]]/+page.ts +++ b/src/routes/console/project-[project]/databases/database-[database]/usage/[[period]]/+page.ts @@ -1,15 +1,11 @@ -import type { Metric, UsageDatabase } from '$lib/sdk/usage'; +import { isValueOfStringEnum } from '$lib/helpers/types'; import { sdk } from '$lib/stores/sdk'; +import { DatabaseUsageRange } from '@appwrite.io/console'; import type { PageLoad } from './$types'; export const load: PageLoad = async ({ params }) => { - const response = (await sdk.forProject.databases.getDatabaseUsage( - params.database, - params.period ?? '30d' - )) as unknown as UsageDatabase; - - return { - collectionsTotal: response.collectionsTotal, - collections: response.collections as Metric[] - }; + const period = isValueOfStringEnum(DatabaseUsageRange, params.period) + ? params.period + : DatabaseUsageRange.ThirtyDays; + return sdk.forProject.databases.getDatabaseUsage(params.database, period); }; diff --git a/src/routes/console/project-[project]/databases/usage/[[period]]/+page.ts b/src/routes/console/project-[project]/databases/usage/[[period]]/+page.ts index 1c99afacd..47e4f5dfa 100644 --- a/src/routes/console/project-[project]/databases/usage/[[period]]/+page.ts +++ b/src/routes/console/project-[project]/databases/usage/[[period]]/+page.ts @@ -1,19 +1,16 @@ -import type { Metric, UsageDatabases } from '$lib/sdk/usage'; +import { isValueOfStringEnum } from '$lib/helpers/types'; import { sdk } from '$lib/stores/sdk'; +import { DatabaseUsageRange } from '@appwrite.io/console'; import type { PageLoad } from './$types'; import { error } from '@sveltejs/kit'; export const load: PageLoad = async ({ params }) => { - const { period } = params; + const period = isValueOfStringEnum(DatabaseUsageRange, params.period) + ? params.period + : DatabaseUsageRange.ThirtyDays; try { - const response = (await sdk.forProject.databases.getUsage( - period ?? '30d' - )) as unknown as UsageDatabases; - return { - databasesTotal: response.databasesTotal, - databases: response.databases as Metric[] - }; + return sdk.forProject.databases.getUsage(period); } catch (e) { - throw error(e.code, e.message); + error(e.code, e.message); } }; diff --git a/src/routes/console/project-[project]/functions/+layout.ts b/src/routes/console/project-[project]/functions/+layout.ts index 9c1e53c79..68ecb719d 100644 --- a/src/routes/console/project-[project]/functions/+layout.ts +++ b/src/routes/console/project-[project]/functions/+layout.ts @@ -8,10 +8,15 @@ import type { LayoutLoad } from './$types'; export const load: LayoutLoad = async ({ depends }) => { depends(Dependencies.FUNCTION_INSTALLATIONS); + const [runtimesList, installations] = await Promise.all([ + sdk.forProject.functions.listRuntimes(), + sdk.forProject.vcs.listInstallations([Query.limit(100)]) + ]); + return { header: Header, breadcrumbs: Breadcrumbs, - runtimesList: sdk.forProject.functions.listRuntimes(), - installations: sdk.forProject.vcs.listInstallations([Query.limit(100)]) + runtimesList, + installations }; }; diff --git a/src/routes/console/project-[project]/functions/createFunction.svelte b/src/routes/console/project-[project]/functions/createFunction.svelte index f748facf6..8da3df129 100644 --- a/src/routes/console/project-[project]/functions/createFunction.svelte +++ b/src/routes/console/project-[project]/functions/createFunction.svelte @@ -16,7 +16,8 @@ import { base } from '$app/paths'; import { page } from '$app/stores'; import { Submit, trackEvent, trackError } from '$lib/actions/analytics'; - import { ID } from '@appwrite.io/console'; + import { ID, Runtime } from '@appwrite.io/console'; + import { isValueOfStringEnum } from '$lib/helpers/types'; const projectId = $page.params.project; @@ -26,6 +27,9 @@ async function create() { try { + if (!isValueOfStringEnum(Runtime, $createFunction.runtime)) { + throw new Error(`Invalid runtime: ${$createFunction.runtime}`); + } const response = await sdk.forProject.functions.create( $createFunction.id ?? ID.unique(), $createFunction.name, diff --git a/src/routes/console/project-[project]/functions/function-[function]/+layout.svelte b/src/routes/console/project-[project]/functions/function-[function]/+layout.svelte index d693ef604..8ae5bc6d4 100644 --- a/src/routes/console/project-[project]/functions/function-[function]/+layout.svelte +++ b/src/routes/console/project-[project]/functions/function-[function]/+layout.svelte @@ -5,7 +5,7 @@ import { Dependencies } from '$lib/constants'; import { invalidate, goto } from '$app/navigation'; import { registerCommands } from '$lib/commandCenter'; - import { execute, func, showCreateDeployment } from './store'; + import { func, showCreateDeployment } from './store'; import { project } from '../../store'; import type { Models } from '@appwrite.io/console'; import Execute from './execute.svelte'; @@ -147,4 +147,4 @@ - + diff --git a/src/routes/console/project-[project]/functions/function-[function]/+layout.ts b/src/routes/console/project-[project]/functions/function-[function]/+layout.ts index dd5c79081..347572ad9 100644 --- a/src/routes/console/project-[project]/functions/function-[function]/+layout.ts +++ b/src/routes/console/project-[project]/functions/function-[function]/+layout.ts @@ -22,6 +22,6 @@ export const load: LayoutLoad = async ({ params, depends }) => { ]) }; } catch (e) { - throw error(e.code, e.message); + error(e.code, e.message); } }; diff --git a/src/routes/console/project-[project]/functions/function-[function]/+page.svelte b/src/routes/console/project-[project]/functions/function-[function]/+page.svelte index 1462e407d..aa0c3c17b 100644 --- a/src/routes/console/project-[project]/functions/function-[function]/+page.svelte +++ b/src/routes/console/project-[project]/functions/function-[function]/+page.svelte @@ -25,7 +25,7 @@ TableRow, TableScroll } from '$lib/elements/table'; - import { deploymentList, execute, func, proxyRuleList } from './store'; + import { deploymentList, execute, func, proxyRuleList, showFunctionExecute } from './store'; import { Container, ContainerHeader } from '$lib/layout'; import { app } from '$lib/stores/app'; import { calculateSize, humanFileSize } from '$lib/helpers/sizeConvertion'; @@ -151,7 +151,10 @@ diff --git a/src/routes/console/project-[project]/functions/function-[function]/domains/+page.svelte b/src/routes/console/project-[project]/functions/function-[function]/domains/+page.svelte index 03f8ddbfc..a10b67620 100644 --- a/src/routes/console/project-[project]/functions/function-[function]/domains/+page.svelte +++ b/src/routes/console/project-[project]/functions/function-[function]/domains/+page.svelte @@ -1,8 +1,9 @@ @@ -10,7 +11,7 @@ Domains diff --git a/src/routes/console/project-[project]/functions/function-[function]/domains/+page.ts b/src/routes/console/project-[project]/functions/function-[function]/domains/+page.ts index 1f48d6d0d..e5f407297 100644 --- a/src/routes/console/project-[project]/functions/function-[function]/domains/+page.ts +++ b/src/routes/console/project-[project]/functions/function-[function]/domains/+page.ts @@ -1,15 +1,14 @@ import { Dependencies } from '$lib/constants'; import { sdk } from '$lib/stores/sdk'; -import { Query } from '@appwrite.io/console'; +import { Query, ResourceType } from '@appwrite.io/console'; import type { PageLoad } from './$types'; -import { ProxyTypes } from '$lib/pages/domains/index.svelte'; export const load: PageLoad = async ({ depends, params }) => { depends(Dependencies.FUNCTION_DOMAINS); return { rules: await sdk.forProject.proxy.listRules([ - Query.equal('resourceType', ProxyTypes.FUNCTION), + Query.equal('resourceType', ResourceType.Function), Query.equal('resourceId', params.function) ]) }; diff --git a/src/routes/console/project-[project]/functions/function-[function]/execute.svelte b/src/routes/console/project-[project]/functions/function-[function]/execute.svelte index 278a3ceab..aea981107 100644 --- a/src/routes/console/project-[project]/functions/function-[function]/execute.svelte +++ b/src/routes/console/project-[project]/functions/function-[function]/execute.svelte @@ -15,32 +15,26 @@ import Label from '$lib/elements/forms/label.svelte'; import { addNotification } from '$lib/stores/notifications'; import { sdk } from '$lib/stores/sdk'; - import type { Models } from '@appwrite.io/console'; - - export let selectedFunction: Models.Function = null; + import { showFunctionExecute, execute } from './store'; + import { ExecutionMethod } from '@appwrite.io/console'; let path = '/'; - let method = 'GET'; + let method = ExecutionMethod.GET; let body = ''; let headers: [string, string][] = [['', '']]; let error: string = null; const methodOptions = [ - { label: 'GET', value: 'GET' }, - { label: 'POST', value: 'POST' }, - { label: 'PUT', value: 'PUT' }, - { label: 'PATCH', value: 'PATCH' }, - { label: 'DELETE', value: 'DELETE' }, - { label: 'OPTIONS', value: 'OPTIONS' } + { label: 'GET', value: ExecutionMethod.GET }, + { label: 'POST', value: ExecutionMethod.POST }, + { label: 'PUT', value: ExecutionMethod.PUT }, + { label: 'PATCH', value: ExecutionMethod.PATCH }, + { label: 'DELETE', value: ExecutionMethod.DELETE }, + { label: 'OPTIONS', value: ExecutionMethod.OPTIONS } ]; - let show = false; let submitting = false; - $: if (selectedFunction && !show) { - show = true; - } - const handleSubmit = async () => { submitting = true; try { @@ -51,7 +45,7 @@ } await sdk.forProject.functions.createExecution( - selectedFunction.$id, + $execute.$id, body, true, path, @@ -60,7 +54,7 @@ ); if (!$page.url?.toString()?.includes('/executions')) { await goto( - `${base}/console/project-${$page.params.project}/functions/function-${selectedFunction.$id}/executions` + `${base}/console/project-${$page.params.project}/functions/function-${$execute.$id}/executions` ); } invalidate(Dependencies.EXECUTIONS); @@ -79,8 +73,8 @@ }; function close() { - selectedFunction = null; - show = false; + $execute = null; + $showFunctionExecute = false; } afterNavigate(close); @@ -89,10 +83,9 @@

    Manually execute your function. - {#if selectedFunction?.version !== 'v3'} + {#if $execute?.version !== 'v3'} Customizable execution data now available for functions v3.0 @@ -121,11 +114,7 @@ - + {:else} @@ -214,7 +203,7 @@ diff --git a/src/routes/console/project-[project]/functions/function-[function]/executions/+page.svelte b/src/routes/console/project-[project]/functions/function-[function]/executions/+page.svelte index 6db3add0d..0b14ea74f 100644 --- a/src/routes/console/project-[project]/functions/function-[function]/executions/+page.svelte +++ b/src/routes/console/project-[project]/functions/function-[function]/executions/+page.svelte @@ -19,19 +19,16 @@ import { log } from '$lib/stores/logs'; import { sdk } from '$lib/stores/sdk'; import { onMount } from 'svelte'; - import { func } from '../store'; + import { func, execute, showFunctionExecute } from '../store'; import type { Models } from '@appwrite.io/console'; import { organization } from '$lib/stores/organization'; import { getServiceLimit, showUsageRatesModal } from '$lib/stores/billing'; import { project } from '$routes/console/project-[project]/store'; import Create from '../create.svelte'; - import Execute from '../execute.svelte'; import { abbreviateNumber } from '$lib/helpers/numbers'; export let data; - let selectedFunction: Models.Function = null; - onMount(() => { return sdk.forConsole.client.subscribe('console', (response) => { if (response.events.includes('functions.*.executions.*')) { @@ -54,7 +51,10 @@ title="Executions" buttonText="Execute now" buttonEvent="execute_function" - buttonMethod={() => (selectedFunction = $func)}> + buttonMethod={() => { + $execute = $func; + $showFunctionExecute = true; + }}>

    The {tier} plan has limits

      @@ -169,7 +169,3 @@ {/if} - - - - diff --git a/src/routes/console/project-[project]/functions/function-[function]/settings/+page.ts b/src/routes/console/project-[project]/functions/function-[function]/settings/+page.ts index cf2a5f98b..818c56a6e 100644 --- a/src/routes/console/project-[project]/functions/function-[function]/settings/+page.ts +++ b/src/routes/console/project-[project]/functions/function-[function]/settings/+page.ts @@ -31,8 +31,6 @@ export const load: PageLoad = async ({ params, depends }) => { return { variables, - globalVariables, - runtimesList: sdk.forProject.functions.listRuntimes(), - installations: sdk.forProject.vcs.listInstallations() + globalVariables }; }; diff --git a/src/routes/console/project-[project]/functions/function-[function]/settings/disconnectRepo.svelte b/src/routes/console/project-[project]/functions/function-[function]/settings/disconnectRepo.svelte index 353d2276b..c8769402c 100644 --- a/src/routes/console/project-[project]/functions/function-[function]/settings/disconnectRepo.svelte +++ b/src/routes/console/project-[project]/functions/function-[function]/settings/disconnectRepo.svelte @@ -9,6 +9,8 @@ import { sdk } from '$lib/stores/sdk'; import { createEventDispatcher } from 'svelte'; import { func } from '../store'; + import { isValueOfStringEnum } from '$lib/helpers/types'; + import { Runtime } from '@appwrite.io/console'; export let show = false; const functionId = $page.params.function; @@ -18,6 +20,9 @@ const handleSubmit = async () => { try { + if (!isValueOfStringEnum(Runtime, $func.runtime)) { + throw new Error(`Invalid runtime: ${$func.runtime}`); + } await sdk.forProject.functions.update( functionId, $func.name, diff --git a/src/routes/console/project-[project]/functions/function-[function]/settings/executeFunction.svelte b/src/routes/console/project-[project]/functions/function-[function]/settings/executeFunction.svelte index 112bc2758..ba4d81ea3 100644 --- a/src/routes/console/project-[project]/functions/function-[function]/settings/executeFunction.svelte +++ b/src/routes/console/project-[project]/functions/function-[function]/settings/executeFunction.svelte @@ -2,7 +2,7 @@ import { CardGrid, Heading, SvgIcon } from '$lib/components'; import { Button } from '$lib/elements/forms'; import { toLocaleDateTime } from '$lib/helpers/date'; - import { execute, func } from '../store'; + import { execute, func, showFunctionExecute } from '../store'; @@ -26,6 +26,11 @@ - + diff --git a/src/routes/console/project-[project]/functions/function-[function]/settings/gitConfigurationModal.svelte b/src/routes/console/project-[project]/functions/function-[function]/settings/gitConfigurationModal.svelte index 5e47e5619..6a8dc10d4 100644 --- a/src/routes/console/project-[project]/functions/function-[function]/settings/gitConfigurationModal.svelte +++ b/src/routes/console/project-[project]/functions/function-[function]/settings/gitConfigurationModal.svelte @@ -8,12 +8,13 @@ import { timeFromNow, toLocaleDateTime } from '$lib/helpers/date'; import { addNotification } from '$lib/stores/notifications'; import { sdk } from '$lib/stores/sdk'; - import type { Models } from '@appwrite.io/console'; + import { Runtime, type Models } from '@appwrite.io/console'; import { func, repositories } from '../store'; import { invalidate } from '$app/navigation'; import InputSelectSearch from '$lib/elements/forms/inputSelectSearch.svelte'; import { sortBranches } from './updateConfiguration.svelte'; import { installations } from '$lib/wizards/functions/store'; + import { isValueOfStringEnum } from '$lib/helpers/types'; export let show: boolean; @@ -48,6 +49,9 @@ async function handleSubmit() { try { + if (!isValueOfStringEnum(Runtime, $func.runtime)) { + throw new Error(`Invalid runtime: ${$func.runtime}`); + } await sdk.forProject.functions.update( functionId, $func.name, diff --git a/src/routes/console/project-[project]/functions/function-[function]/settings/updateConfiguration.svelte b/src/routes/console/project-[project]/functions/function-[function]/settings/updateConfiguration.svelte index c609d0493..df247fcc8 100644 --- a/src/routes/console/project-[project]/functions/function-[function]/settings/updateConfiguration.svelte +++ b/src/routes/console/project-[project]/functions/function-[function]/settings/updateConfiguration.svelte @@ -36,7 +36,7 @@ } from '$lib/elements/forms'; import { addNotification } from '$lib/stores/notifications'; import { sdk } from '$lib/stores/sdk'; - import type { Models } from '@appwrite.io/console'; + import { Runtime, type Models } from '@appwrite.io/console'; import { func } from '../store'; import GitInstallationModal from '$routes/console/project-[project]/settings/GitInstallationModal.svelte'; import GitConfigurationModal from './gitConfigurationModal.svelte'; @@ -50,6 +50,7 @@ import { installations } from '$lib/wizards/functions/store'; import { isSelfHosted } from '$lib/system'; import { consoleVariables } from '$routes/console/store'; + import { isValueOfStringEnum } from '$lib/helpers/types'; const functionId = $page.params.function; const isVcsEnabled = $consoleVariables?._APP_VCS_ENABLED === true; @@ -114,6 +115,9 @@ async function updateConfiguration() { try { + if (!isValueOfStringEnum(Runtime, $func.runtime)) { + throw new Error(`Invalid runtime: ${$func.runtime}`); + } await sdk.forProject.functions.update( functionId, $func.name, diff --git a/src/routes/console/project-[project]/functions/function-[function]/settings/updateEvents.svelte b/src/routes/console/project-[project]/functions/function-[function]/settings/updateEvents.svelte index 6de2d8048..853aa6172 100644 --- a/src/routes/console/project-[project]/functions/function-[function]/settings/updateEvents.svelte +++ b/src/routes/console/project-[project]/functions/function-[function]/settings/updateEvents.svelte @@ -19,6 +19,8 @@ import { Button } from '$lib/elements/forms'; import DropList from '$lib/components/dropList.svelte'; import DropListItem from '$lib/components/dropListItem.svelte'; + import { isValueOfStringEnum } from '$lib/helpers/types'; + import { Runtime } from '@appwrite.io/console'; const functionId = $page.params.function; const eventSet: Writable> = writable(new Set($func.events)); @@ -29,6 +31,9 @@ async function updateEvents() { try { + if (!isValueOfStringEnum(Runtime, $func.runtime)) { + throw new Error(`Invalid runtime: ${$func.runtime}`); + } await sdk.forProject.functions.update( functionId, $func.name, diff --git a/src/routes/console/project-[project]/functions/function-[function]/settings/updateLogging.svelte b/src/routes/console/project-[project]/functions/function-[function]/settings/updateLogging.svelte index 7adfd6a5f..2f6e4afb8 100644 --- a/src/routes/console/project-[project]/functions/function-[function]/settings/updateLogging.svelte +++ b/src/routes/console/project-[project]/functions/function-[function]/settings/updateLogging.svelte @@ -11,6 +11,8 @@ import { project } from '$routes/console/project-[project]/store'; import { onMount } from 'svelte'; import { func } from '../store'; + import { isValueOfStringEnum } from '$lib/helpers/types'; + import { Runtime } from '@appwrite.io/console'; const functionId = $page.params.function; let functionLogging: boolean = null; @@ -21,6 +23,9 @@ async function updateLogging() { try { + if (!isValueOfStringEnum(Runtime, $func.runtime)) { + throw new Error(`Invalid runtime: ${$func.runtime}`); + } await sdk.forProject.functions.update( functionId, $func.name, diff --git a/src/routes/console/project-[project]/functions/function-[function]/settings/updateName.svelte b/src/routes/console/project-[project]/functions/function-[function]/settings/updateName.svelte index 690c76260..8f44fd549 100644 --- a/src/routes/console/project-[project]/functions/function-[function]/settings/updateName.svelte +++ b/src/routes/console/project-[project]/functions/function-[function]/settings/updateName.svelte @@ -9,6 +9,8 @@ import { sdk } from '$lib/stores/sdk'; import { onMount } from 'svelte'; import { func } from '../store'; + import { isValueOfStringEnum } from '$lib/helpers/types'; + import { Runtime } from '@appwrite.io/console'; const functionId = $page.params.function; let functionName: string = null; @@ -19,6 +21,9 @@ async function updateName() { try { + if (!isValueOfStringEnum(Runtime, $func.runtime)) { + throw new Error(`Invalid runtime: ${$func.runtime}`); + } await sdk.forProject.functions.update( functionId, functionName, diff --git a/src/routes/console/project-[project]/functions/function-[function]/settings/updatePermissions.svelte b/src/routes/console/project-[project]/functions/function-[function]/settings/updatePermissions.svelte index 949a5f9d5..8af6ef6e3 100644 --- a/src/routes/console/project-[project]/functions/function-[function]/settings/updatePermissions.svelte +++ b/src/routes/console/project-[project]/functions/function-[function]/settings/updatePermissions.svelte @@ -11,6 +11,8 @@ import { func } from '../store'; import { Roles } from '$lib/components/permissions'; import { symmetricDifference } from '$lib/helpers/array'; + import { isValueOfStringEnum } from '$lib/helpers/types'; + import { Runtime } from '@appwrite.io/console'; const functionId = $page.params.function; @@ -23,6 +25,9 @@ async function updatePermissions() { try { + if (!isValueOfStringEnum(Runtime, $func.runtime)) { + throw new Error(`Invalid runtime: ${$func.runtime}`); + } await sdk.forProject.functions.update( functionId, $func.name, diff --git a/src/routes/console/project-[project]/functions/function-[function]/settings/updateRuntime.svelte b/src/routes/console/project-[project]/functions/function-[function]/settings/updateRuntime.svelte index fc871f283..a4a2f806c 100644 --- a/src/routes/console/project-[project]/functions/function-[function]/settings/updateRuntime.svelte +++ b/src/routes/console/project-[project]/functions/function-[function]/settings/updateRuntime.svelte @@ -11,6 +11,8 @@ import { func } from '../store'; import InputSelect from '$lib/elements/forms/inputSelect.svelte'; import { runtimesList } from '../../store'; + import { isValueOfStringEnum } from '$lib/helpers/types'; + import { Runtime } from '@appwrite.io/console'; const functionId = $page.params.function; let runtime: string = null; @@ -29,6 +31,9 @@ async function updateRuntime() { try { + if (!isValueOfStringEnum(Runtime, runtime)) { + throw new Error(`Invalid runtime: ${runtime}`); + } await sdk.forProject.functions.update( functionId, $func.name, diff --git a/src/routes/console/project-[project]/functions/function-[function]/settings/updateSchedule.svelte b/src/routes/console/project-[project]/functions/function-[function]/settings/updateSchedule.svelte index 514a76722..ecd707039 100644 --- a/src/routes/console/project-[project]/functions/function-[function]/settings/updateSchedule.svelte +++ b/src/routes/console/project-[project]/functions/function-[function]/settings/updateSchedule.svelte @@ -9,6 +9,8 @@ import { sdk } from '$lib/stores/sdk'; import { onMount } from 'svelte'; import { func } from '../store'; + import { isValueOfStringEnum } from '$lib/helpers/types'; + import { Runtime } from '@appwrite.io/console'; const functionId = $page.params.function; let functionSchedule: string = null; @@ -19,6 +21,9 @@ async function updateSchedule() { try { + if (!isValueOfStringEnum(Runtime, $func.runtime)) { + throw new Error(`Invalid runtime: ${$func.runtime}`); + } await sdk.forProject.functions.update( functionId, $func.name, diff --git a/src/routes/console/project-[project]/functions/function-[function]/settings/updateTimeout.svelte b/src/routes/console/project-[project]/functions/function-[function]/settings/updateTimeout.svelte index 797c32030..c36303279 100644 --- a/src/routes/console/project-[project]/functions/function-[function]/settings/updateTimeout.svelte +++ b/src/routes/console/project-[project]/functions/function-[function]/settings/updateTimeout.svelte @@ -9,6 +9,8 @@ import { sdk } from '$lib/stores/sdk'; import { onMount } from 'svelte'; import { func } from '../store'; + import { isValueOfStringEnum } from '$lib/helpers/types'; + import { Runtime } from '@appwrite.io/console'; const functionId = $page.params.function; let timeout: number = null; @@ -19,6 +21,9 @@ async function updateTimeout() { try { + if (!isValueOfStringEnum(Runtime, $func.runtime)) { + throw new Error(`Invalid runtime: ${$func.runtime}`); + } await sdk.forProject.functions.update( functionId, $func.name, diff --git a/src/routes/console/project-[project]/functions/function-[function]/store.ts b/src/routes/console/project-[project]/functions/function-[function]/store.ts index c08ec380a..0bc01a1d4 100644 --- a/src/routes/console/project-[project]/functions/function-[function]/store.ts +++ b/src/routes/console/project-[project]/functions/function-[function]/store.ts @@ -12,6 +12,8 @@ export const proxyRuleList = derived( ($page) => $page.data.proxyRuleList as Models.ProxyRuleList ); export const execute: Writable = writable(); +export const showFunctionExecute: Writable = writable(false); + export const repositories: Writable<{ search: string; installationId: string; diff --git a/src/routes/console/project-[project]/functions/function-[function]/usage/[[period]]/+page.ts b/src/routes/console/project-[project]/functions/function-[function]/usage/[[period]]/+page.ts index dfeafeb47..1766c60a0 100644 --- a/src/routes/console/project-[project]/functions/function-[function]/usage/[[period]]/+page.ts +++ b/src/routes/console/project-[project]/functions/function-[function]/usage/[[period]]/+page.ts @@ -1,20 +1,16 @@ -import type { Metric, UsageFunctions } from '$lib/sdk/usage'; import { sdk } from '$lib/stores/sdk'; +import { FunctionUsageRange } from '@appwrite.io/console'; import type { PageLoad } from './$types'; import { error } from '@sveltejs/kit'; +import { isValueOfStringEnum } from '$lib/helpers/types'; export const load: PageLoad = async ({ params }) => { try { - const response = (await sdk.forProject.functions.getFunctionUsage( - params.function, - params.period ?? '30d' - )) as unknown as UsageFunctions; - - return { - executionsTotal: response.executionsTotal, - executions: response.executions as Metric[] - }; + const period = isValueOfStringEnum(FunctionUsageRange, params.period) + ? params.period + : FunctionUsageRange.ThirtyDays; + return sdk.forProject.functions.getFunctionUsage(params.function, period); } catch (e) { - throw error(e.code, e.message); + error(e.code, e.message); } }; diff --git a/src/routes/console/project-[project]/functions/wizard/step1.svelte b/src/routes/console/project-[project]/functions/wizard/step1.svelte index 17408aacb..8700c7bbe 100644 --- a/src/routes/console/project-[project]/functions/wizard/step1.svelte +++ b/src/routes/console/project-[project]/functions/wizard/step1.svelte @@ -20,7 +20,7 @@ - Configuration function + Configuration Create your new Appwrite Function. + import { goto } from '$app/navigation'; + import { page } from '$app/stores'; + import { + addSubPanel, + registerCommands, + registerSearchers, + updateCommandGroupRanks + } from '$lib/commandCenter'; + import { CreateMessagePanel } from '$lib/commandCenter/panels'; + import { messagesSearcher } from '$lib/commandCenter/searchers/messages'; + import { providersSearcher } from '$lib/commandCenter/searchers/providers'; + import { topicsSearcher } from '$lib/commandCenter/searchers/topics'; + import { project } from '../store'; + + // TODO: finalize the commands + $: $registerCommands([ + { + label: 'Create message', + keys: $page.url.pathname.endsWith('messaging') ? ['c'] : ['c', 'm'], + callback() { + addSubPanel(CreateMessagePanel); + }, + icon: 'plus', + group: 'messaging' + }, + { + label: 'Go to Topics', + keys: ['g', 't'], + callback() { + goto(`/console/project-${$project.$id}/messaging/topics`); + }, + disabled: + $page.url.pathname.endsWith('topics') || $page.url.pathname.includes('message-'), + group: 'messaging', + rank: 1 + }, + { + label: 'Go to Providers', + keys: ['g', 'p'], + callback() { + goto(`/console/project-${$project.$id}/messaging/providers`); + }, + disabled: + $page.url.pathname.endsWith('providers') || $page.url.pathname.includes('message-'), + group: 'messaging', + rank: 2 + } + ]); + + $registerSearchers(messagesSearcher, providersSearcher, topicsSearcher); + + $: $updateCommandGroupRanks({ messaging: 400, providers: 300, topics: 200, navigation: 100 }); + + + + Messaging - Appwrite + + + diff --git a/src/routes/console/project-[project]/messaging/+layout.ts b/src/routes/console/project-[project]/messaging/+layout.ts new file mode 100644 index 000000000..7db345058 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/+layout.ts @@ -0,0 +1,10 @@ +import Breadcrumbs from './breadcrumbs.svelte'; +import Header from './header.svelte'; +import type { LayoutLoad } from './$types'; + +export const load: LayoutLoad = async () => { + return { + header: Header, + breadcrumbs: Breadcrumbs + }; +}; diff --git a/src/routes/console/project-[project]/messaging/+page.svelte b/src/routes/console/project-[project]/messaging/+page.svelte new file mode 100644 index 000000000..a9272aee3 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/+page.svelte @@ -0,0 +1,306 @@ + + + + +
      + +
      +
      +
      + +
      +
      + + + +
      +
      +
      +
      +
      + +
      +
      + +
      +
      +
      + {#if data.messages.total} + + + d.$id)} /> + {#each $columns as column} + {#if column.show} + {column.title} + {/if} + {/each} + + + {#each data.messages.messages as message (message.$id)} + + + + {#each $columns as column (column.id)} + {#if column.show} + {#if column.id === '$id'} + {#key $columns} + + {message.$id} + + {/key} + {:else if column.id === 'message'} + + {#if message.providerType === MessagingProviderType.Push} + {message.data.title} + {:else if message.providerType === MessagingProviderType.Sms} + {message.data.content} + {:else if message.providerType === MessagingProviderType.Email} + {message.data.subject} + {:else} + Invalid provider + {/if} + + {:else if column.id === 'providerType'} + + + + {:else if column.id === 'status'} + + + + {#if message.status === 'failed'} + + {/if} + + + {:else if column.type === 'datetime'} + + {#if !message[column.id]} + - + {:else} + {toLocaleDateTime(message[column.id])} + {/if} + + {:else} + + {message[column.id]} + + {/if} + {/if} + {/each} + + {/each} + + + + 0}> +
      +
      + {selected.length} +

      + + {selected.length > 1 ? 'messages' : 'message'} + + selected +

      +
      + +
      + + +
      +
      +
      + + + {:else if $hasPageQueries} + + {:else if data.search} + +
      + Sorry, we couldn't find '{data.search}' +

      There are no messages that match your search.

      +
      +
      + + +
      +
      + {:else} + ($showCreate = true)}> +
      + + Create your first message to get started. + +

      + Need a hand? Learn more in our documentation. +

      +
      +
      + + + + +
      +
      + {/if} +
      + + + + +

      + Are you sure you want to delete {selected.length} + {selected.length > 1 ? 'messages' : 'message'}? +

      + + + + +
      diff --git a/src/routes/console/project-[project]/messaging/+page.ts b/src/routes/console/project-[project]/messaging/+page.ts new file mode 100644 index 000000000..1e84dd190 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/+page.ts @@ -0,0 +1,49 @@ +import { queries, queryParamToMap } from '$lib/components/filters'; +import { CARD_LIMIT, Dependencies } from '$lib/constants'; +import { + View, + getLimit, + getPage, + getQuery, + getSearch, + getView, + pageToOffset +} from '$lib/helpers/load'; +import { sdk } from '$lib/stores/sdk'; +import { Query, type Models } from '@appwrite.io/console'; +import type { PageLoad } from './$types'; + +export const load: PageLoad = async ({ depends, url, route }) => { + depends(Dependencies.MESSAGING_MESSAGES); + + const page = getPage(url); + const search = getSearch(url); + const view = getView(url, route, View.Grid); + const limit = getLimit(url, route, CARD_LIMIT); + const offset = pageToOffset(page, limit); + const query = getQuery(url); + + const parsedQueries = queryParamToMap(query || '[]'); + queries.set(parsedQueries); + + return { + offset, + limit, + search, + query, + page, + view, + messages: (await sdk.forProject.messaging.listMessages( + [ + Query.limit(limit), + Query.offset(offset), + Query.orderDesc(''), + ...parsedQueries.values() + ], + search || undefined + )) as { + total: number; + messages: (Models.Message & { data: Record })[]; // Add typing for message.data + } + }; +}; diff --git a/src/routes/console/project-[project]/messaging/actions.svelte b/src/routes/console/project-[project]/messaging/actions.svelte new file mode 100644 index 000000000..f52264348 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/actions.svelte @@ -0,0 +1,49 @@ + + + + + + (showTopics = true)}>Select topics + (showUserTargets = true)}>Select targets + + + + { + showTopics = false; + dispatch('addTopics', e.detail); + }} /> + { + showUserTargets = false; + dispatch('addTargets', e.detail); + }}> + Select existing targets to which you want to send this message. + diff --git a/src/routes/console/project-[project]/messaging/breadcrumbs.svelte b/src/routes/console/project-[project]/messaging/breadcrumbs.svelte new file mode 100644 index 000000000..9e28bee67 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/breadcrumbs.svelte @@ -0,0 +1,22 @@ + + + diff --git a/src/routes/console/project-[project]/messaging/bubble-tail-dark.svg b/src/routes/console/project-[project]/messaging/bubble-tail-dark.svg new file mode 100644 index 000000000..b5e7c0ba7 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/bubble-tail-dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/routes/console/project-[project]/messaging/bubble-tail-light.svg b/src/routes/console/project-[project]/messaging/bubble-tail-light.svg new file mode 100644 index 000000000..9dcbbe34f --- /dev/null +++ b/src/routes/console/project-[project]/messaging/bubble-tail-light.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/routes/console/project-[project]/messaging/create.svelte b/src/routes/console/project-[project]/messaging/create.svelte new file mode 100644 index 000000000..7cf554d2a --- /dev/null +++ b/src/routes/console/project-[project]/messaging/create.svelte @@ -0,0 +1,153 @@ + + + diff --git a/src/routes/console/project-[project]/messaging/createMessageDropdown.svelte b/src/routes/console/project-[project]/messaging/createMessageDropdown.svelte new file mode 100644 index 000000000..4e23952a0 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/createMessageDropdown.svelte @@ -0,0 +1,70 @@ + + + + + + + + {#each Object.entries(providers) as [type, option]} + { + if ( + type !== MessagingProviderType.Email && + type !== MessagingProviderType.Sms && + type !== MessagingProviderType.Push + ) + return; + $providerType = type; + $topicsById = {}; + $targetsById = {}; + const common = { + topics: [], + users: [], + targets: [] + }; + switch (type) { + case MessagingProviderType.Email: + $messageParams[$providerType] = { + ...common, + subject: '', + content: '' + }; + break; + case MessagingProviderType.Sms: + $messageParams[$providerType] = { + ...common, + content: '' + }; + break; + case MessagingProviderType.Push: + $messageParams[$providerType] = { + ...common, + title: '', + body: '', + data: [['', '']] + }; + break; + } + showCreateDropdown = false; + wizard.start(Create); + }}> + {option.name} + + {/each} + + diff --git a/src/routes/console/project-[project]/messaging/failedModal.svelte b/src/routes/console/project-[project]/messaging/failedModal.svelte new file mode 100644 index 000000000..208350b71 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/failedModal.svelte @@ -0,0 +1,30 @@ + + + +
      +

      +

      +

      + The message has been sent with errors. Please refer to the logs below for more + information. +

      +
      + +
      +
      + + + + +
      diff --git a/src/routes/console/project-[project]/messaging/header.svelte b/src/routes/console/project-[project]/messaging/header.svelte new file mode 100644 index 000000000..9534915ab --- /dev/null +++ b/src/routes/console/project-[project]/messaging/header.svelte @@ -0,0 +1,44 @@ + + + + + Messaging + + + {#each tabs as tab} + + {tab.title} + + {/each} + + diff --git a/src/routes/console/project-[project]/messaging/message-[message]/+layout.svelte b/src/routes/console/project-[project]/messaging/message-[message]/+layout.svelte new file mode 100644 index 000000000..9d2f6426e --- /dev/null +++ b/src/routes/console/project-[project]/messaging/message-[message]/+layout.svelte @@ -0,0 +1,5 @@ + + Message - Appwrite + + + diff --git a/src/routes/console/project-[project]/messaging/message-[message]/+layout.ts b/src/routes/console/project-[project]/messaging/message-[message]/+layout.ts new file mode 100644 index 000000000..7e3985ea3 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/message-[message]/+layout.ts @@ -0,0 +1,57 @@ +import type { LayoutLoad } from './$types'; +import Breadcrumbs from './breadcrumbs.svelte'; +import Header from './header.svelte'; +import { sdk } from '$lib/stores/sdk'; +import { Dependencies } from '$lib/constants'; +import { error } from '@sveltejs/kit'; +import type { Models } from '@appwrite.io/console'; + +export const load: LayoutLoad = async ({ params, depends }) => { + depends(Dependencies.MESSAGING_MESSAGE); + + try { + const message = await sdk.forProject.messaging.getMessage(params.message); + + const topicsById: Record = {}; + const topicsPromise = Promise.allSettled( + message.topics.map((topicId) => sdk.forProject.messaging.getTopic(topicId)) + ).then((results) => { + results.forEach((result) => { + if (result.status === 'fulfilled') { + topicsById[result.value.$id] = result.value; + } + }); + }); + + const targetsById: Record = {}; + const targetsPromise = sdk.forProject.messaging + .listTargets(params.message) + .then((response) => { + response.targets.forEach((target) => { + targetsById[target.$id] = target; + }); + }); + + await Promise.allSettled([topicsPromise, targetsPromise]); + + const usersById: Record> = {}; + const usersPromise = Object.values(targetsById).map((target) => + sdk.forProject.users.get(target.userId).then((user) => { + usersById[user.$id] = user; + }) + ); + + await Promise.allSettled(usersPromise); + + return { + message, + topicsById, + targetsById, + usersById, + header: Header, + breadcrumbs: Breadcrumbs + }; + } catch (e) { + throw error(e.code, e.message); + } +}; diff --git a/src/routes/console/project-[project]/messaging/message-[message]/+page.svelte b/src/routes/console/project-[project]/messaging/message-[message]/+page.svelte new file mode 100644 index 000000000..878c47ffd --- /dev/null +++ b/src/routes/console/project-[project]/messaging/message-[message]/+page.svelte @@ -0,0 +1,40 @@ + + + + + {#if $message.providerType === MessagingProviderType.Email} + + {:else if $message.providerType === MessagingProviderType.Sms} + + {:else if $message.providerType === MessagingProviderType.Push} + + {/if} + + + {#if $message.status !== 'processing'} + + {/if} + diff --git a/src/routes/console/project-[project]/messaging/message-[message]/breadcrumbs.svelte b/src/routes/console/project-[project]/messaging/message-[message]/breadcrumbs.svelte new file mode 100644 index 000000000..caf1d7778 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/message-[message]/breadcrumbs.svelte @@ -0,0 +1,24 @@ + + + diff --git a/src/routes/console/project-[project]/messaging/message-[message]/cancelModal.svelte b/src/routes/console/project-[project]/messaging/message-[message]/cancelModal.svelte new file mode 100644 index 000000000..39802b18d --- /dev/null +++ b/src/routes/console/project-[project]/messaging/message-[message]/cancelModal.svelte @@ -0,0 +1,95 @@ + + + +
      +

      + Are you sure you want to cancel the scheduling of {message.data.title ?? + message.data.subject ?? + message.data.content ?? + 'Message'}? +

      +
      + + + +
      diff --git a/src/routes/console/project-[project]/messaging/message-[message]/delete.svelte b/src/routes/console/project-[project]/messaging/message-[message]/delete.svelte new file mode 100644 index 000000000..4ffdf4b2d --- /dev/null +++ b/src/routes/console/project-[project]/messaging/message-[message]/delete.svelte @@ -0,0 +1,42 @@ + + + + Delete message +

      + The message will be permanently deleted{message.status === 'scheduled' + ? ', and its delivery will be canceled' + : ''}. This action is irreversible. +

      + + + +
      + {message.data.title ?? + message.data.subject ?? + message.data.content ?? + 'Message'} +
      +
      +

      + Last updated: {toLocaleDateTime(message.$updatedAt)} +

      +
      +
      + + + + +
      + + diff --git a/src/routes/console/project-[project]/messaging/message-[message]/deleteModal.svelte b/src/routes/console/project-[project]/messaging/message-[message]/deleteModal.svelte new file mode 100644 index 000000000..0f6396df3 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/message-[message]/deleteModal.svelte @@ -0,0 +1,82 @@ + + + +

      + Are you sure you want to delete + {#if description} + {description}{:else} + this message + {/if}? +

      + +

      + {#if message.status === 'draft'} + This action is irreversible. + {:else if message.status === 'scheduled'} + This is a scheduled message. Deleting it will result in the cancellation of its + delivery. This action is irreversible. + {:else if message.status === 'sent'} + The message has already been sent. After deleting it, you will no longer see it here. + {:else if message.status === 'failed'} + The message has been sent with errors. After deleting it, you will no longer see it + here. + {/if} +

      + + + + +
      diff --git a/src/routes/console/project-[project]/messaging/message-[message]/emailMessage.svelte b/src/routes/console/project-[project]/messaging/message-[message]/emailMessage.svelte new file mode 100644 index 000000000..6fcaad6d4 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/message-[message]/emailMessage.svelte @@ -0,0 +1,93 @@ + + + + +
      + Message +
      + + + + + + + Enable the HTML mode if your message contains HTML tags. + + + + + + + +
      + diff --git a/src/routes/console/project-[project]/messaging/message-[message]/header.svelte b/src/routes/console/project-[project]/messaging/message-[message]/header.svelte new file mode 100644 index 000000000..f97cc9e21 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/message-[message]/header.svelte @@ -0,0 +1,17 @@ + + + + + + {$message.data.title ?? $message.data.subject ?? $message.data.content ?? 'Message'} + + {$message.$id} + + diff --git a/src/routes/console/project-[project]/messaging/message-[message]/overview.svelte b/src/routes/console/project-[project]/messaging/message-[message]/overview.svelte new file mode 100644 index 000000000..c9bbe244f --- /dev/null +++ b/src/routes/console/project-[project]/messaging/message-[message]/overview.svelte @@ -0,0 +1,77 @@ + + + +
      + + + + + +
      + +
      +
      +

      Created: {toLocaleDateTime(message.$createdAt)}

      + {#if message.scheduledAt} +

      Scheduled at: {toLocaleDateTime(message.scheduledAt)}

      + {/if} + {#if message.deliveredAt} +

      Sent at: {toLocaleDateTime(message.deliveredAt)}

      + {/if} +
      +
      + +
      +
      +
      + + + {#if message.status === 'draft'} +
      + + +
      + {:else if message.status === 'scheduled'} +
      + + +
      + {:else if message.status === 'failed'} + + {/if} +
      +
      + + + + + + + + diff --git a/src/routes/console/project-[project]/messaging/message-[message]/pushMessage.svelte b/src/routes/console/project-[project]/messaging/message-[message]/pushMessage.svelte new file mode 100644 index 000000000..843947b85 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/message-[message]/pushMessage.svelte @@ -0,0 +1,200 @@ + + +
      + +
      + Message +
      + +
      +
      + + + + + + + + + + + +
      +
        + {#each customData || [] as _, rowIndex} + + + + + + + + {/each} +
      + {#if dataError} + {dataError} + {/if} + +
      + +
      +
      + + + +
      + diff --git a/src/routes/console/project-[project]/messaging/message-[message]/scheduleModal.svelte b/src/routes/console/project-[project]/messaging/message-[message]/scheduleModal.svelte new file mode 100644 index 000000000..a8d749d2c --- /dev/null +++ b/src/routes/console/project-[project]/messaging/message-[message]/scheduleModal.svelte @@ -0,0 +1,138 @@ + + + +
      + +
      + + +
      +
      + + {#if !dateTime || isNaN(dateTime.getTime())} + The message will be sent later + {:else} + The message will be sent at {dateTime.toLocaleString('en', formatOptions)} + {/if} + +
      + + + + +
      diff --git a/src/routes/console/project-[project]/messaging/message-[message]/sendModal.svelte b/src/routes/console/project-[project]/messaging/message-[message]/sendModal.svelte new file mode 100644 index 000000000..fdfaa1d5c --- /dev/null +++ b/src/routes/console/project-[project]/messaging/message-[message]/sendModal.svelte @@ -0,0 +1,100 @@ + + + +
      +

      + You are about to send a message to an estimated {totalTargets} targets. Would you like to proceed? +

      + +

      This action is irreversible.

      +
      + + + + +
      diff --git a/src/routes/console/project-[project]/messaging/message-[message]/smsMessage.svelte b/src/routes/console/project-[project]/messaging/message-[message]/smsMessage.svelte new file mode 100644 index 000000000..d71353c40 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/message-[message]/smsMessage.svelte @@ -0,0 +1,68 @@ + + +
      + +
      + Message + +
      + + + + + + + + +
      +
      diff --git a/src/routes/console/project-[project]/messaging/message-[message]/store.ts b/src/routes/console/project-[project]/messaging/message-[message]/store.ts new file mode 100644 index 000000000..6cbce74b9 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/message-[message]/store.ts @@ -0,0 +1,8 @@ +import { derived } from 'svelte/store'; +import { page } from '$app/stores'; +import type { Models } from '@appwrite.io/console'; + +export const message = derived( + page, + ($page) => $page.data.message as Models.Message & { data: Record } +); diff --git a/src/routes/console/project-[project]/messaging/message-[message]/updateTargets.svelte b/src/routes/console/project-[project]/messaging/message-[message]/updateTargets.svelte new file mode 100644 index 000000000..8c112fba9 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/message-[message]/updateTargets.svelte @@ -0,0 +1,208 @@ + + +
      + + Targets + + {@const sum = targetIds.length} + {#if sum} +
      +
      + Target +
      + {#if message.status == 'draft'} + + {/if} +
      +
      + + + + + + + + {#each targets.slice(offset, offset + limit) as target (target.$id)} + + +
      + + + + {#if target.providerType === MessagingProviderType.Push} + {target.name} + {:else} + {target.identifier} + {/if} + + +
      +
      + + {#if message.status === 'draft'} +
      + +
      + {/if} +
      +
      + {/each} +
      +
      +
      +

      Total targets: {sum}

      + +
      +
      + {:else if message.status == 'draft'} + (showTargets = true)}>Add a target + {:else} + +
      + No targets have been selected. +

      + Need a hand? Check out our . +

      +
      +
      + {/if} +
      + + + +
      +
      + + { + showTargets = false; + targetsById = e.detail; + }}> + Select existing targets to which you want to send this message. + diff --git a/src/routes/console/project-[project]/messaging/message-[message]/updateTopics.svelte b/src/routes/console/project-[project]/messaging/message-[message]/updateTopics.svelte new file mode 100644 index 000000000..be240b2d1 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/message-[message]/updateTopics.svelte @@ -0,0 +1,189 @@ + + +
      + + Topics + + {@const sum = topicIds.length} + {#if sum} +
      +
      + Topic +
      + {#if message.status == 'draft'} + + {/if} +
      +
      + + + + + + + {#each topics.slice(offset, offset + limit) as topic (topic.$id)} + + +
      + + + + {topic.name} + + + ({getTotal(topic)} targets) + + + +
      +
      + + {#if message.status === 'draft'} +
      + +
      + {/if} +
      +
      + {/each} +
      +
      +
      +

      Total topics: {sum}

      + +
      +
      + {:else if message.status == 'draft'} + (showTopics = true)}>Add a topic + {:else} + +
      + No topics have been selected. +

      + Need a hand? Check out our . +

      +
      +
      + {/if} +
      + + + +
      +
      + + { + showTopics = false; + topicsById = e.detail; + }} /> diff --git a/src/routes/console/project-[project]/messaging/messageStatusPill.svelte b/src/routes/console/project-[project]/messaging/messageStatusPill.svelte new file mode 100644 index 000000000..49f2684cb --- /dev/null +++ b/src/routes/console/project-[project]/messaging/messageStatusPill.svelte @@ -0,0 +1,16 @@ + + + + + {status} + + diff --git a/src/routes/console/project-[project]/messaging/provider.svelte b/src/routes/console/project-[project]/messaging/provider.svelte new file mode 100644 index 000000000..a78eb75c0 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/provider.svelte @@ -0,0 +1,105 @@ + + + + +{#if icon === ''} + Invalid provider +{:else} +
      + {#if !noIcon} +
      + {#if provider === Providers.SMTP} + + {:else} + {name + {/if} +
      + {/if} + + {name || displayName} + +
      +{/if} diff --git a/src/routes/console/project-[project]/messaging/providerType.svelte b/src/routes/console/project-[project]/messaging/providerType.svelte new file mode 100644 index 000000000..91f16310e --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providerType.svelte @@ -0,0 +1,54 @@ + + +{#if text === ''} + Invalid provider type +{:else} +
      + {#if !noIcon} +
      +
      + {/if} + + {text} + +
      +{/if} diff --git a/src/routes/console/project-[project]/messaging/providers/+page.svelte b/src/routes/console/project-[project]/messaging/providers/+page.svelte new file mode 100644 index 000000000..ca097cf8f --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/+page.svelte @@ -0,0 +1,114 @@ + + + +
      +
      + Providers +
      + +
      +
      + + +
      + + + +
      +
      +
      +
      + + +
      +
      + + +
      +
      +
      + {#if data.providers.total} + + + + {:else if $hasPageQueries} + + {:else if data.search && data.search !== 'empty'} + +
      + Sorry, we couldn't find '{data.search}' +

      There are no providers that match your search.

      +
      + +
      + {:else} + +
      + + Create your first provider to get started. + +

      + Need a hand? Learn more in our documentation. +

      +
      +
      + + + + +
      +
      + {/if} + diff --git a/src/routes/console/project-[project]/messaging/providers/+page.ts b/src/routes/console/project-[project]/messaging/providers/+page.ts new file mode 100644 index 000000000..28a6df5bb --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/+page.ts @@ -0,0 +1,45 @@ +import { Query } from '@appwrite.io/console'; +import { sdk } from '$lib/stores/sdk'; +import { + View, + getLimit, + getPage, + getQuery, + getSearch, + getView, + pageToOffset +} from '$lib/helpers/load'; +import { Dependencies, PAGE_LIMIT } from '$lib/constants'; +import { queries, queryParamToMap } from '$lib/components/filters'; + +export const load = async ({ depends, url, route }) => { + depends(Dependencies.MESSAGING_PROVIDERS); + + const page = getPage(url); + const search = getSearch(url); + const view = getView(url, route, View.Grid); + const limit = getLimit(url, route, PAGE_LIMIT); + const offset = pageToOffset(page, limit); + const query = getQuery(url); + + const parsedQueries = queryParamToMap(query || '[]'); + queries.set(parsedQueries); + + return { + offset, + limit, + search, + query, + page, + view, + providers: await sdk.forProject.messaging.listProviders( + [ + Query.limit(limit), + Query.offset(offset), + Query.orderDesc(''), + ...parsedQueries.values() + ], + search || undefined + ) + }; +}; diff --git a/src/routes/console/project-[project]/messaging/providers/create.svelte b/src/routes/console/project-[project]/messaging/providers/create.svelte new file mode 100644 index 000000000..60da9ed89 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/create.svelte @@ -0,0 +1,168 @@ + + + diff --git a/src/routes/console/project-[project]/messaging/providers/createProviderDropdown.svelte b/src/routes/console/project-[project]/messaging/providers/createProviderDropdown.svelte new file mode 100644 index 000000000..6c8ad722d --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/createProviderDropdown.svelte @@ -0,0 +1,45 @@ + + + + + + + + {#each Object.entries(providers) as [type, option]} + { + if ( + type !== MessagingProviderType.Email && + type !== MessagingProviderType.Sms && + type !== MessagingProviderType.Push + ) + return; + $providerType = type; + const p = Object.keys(providers[type].providers).shift(); + if (p && isValueOfStringEnum(Providers, p)) { + $provider = p; + } + showCreateDropdown = false; + wizard.start(Create); + }}> + {option.name} + + {/each} + + diff --git a/src/routes/console/project-[project]/messaging/providers/popoverContent.svelte b/src/routes/console/project-[project]/messaging/providers/popoverContent.svelte new file mode 100644 index 000000000..7b9a1e723 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/popoverContent.svelte @@ -0,0 +1,34 @@ + + +
      + {#each lines as line} +

      {@html line}

      + {/each} + + {#if image} + + {/if} +
      + + diff --git a/src/routes/console/project-[project]/messaging/providers/provider-[provider]/+layout.svelte b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/+layout.svelte new file mode 100644 index 000000000..944197a93 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/+layout.svelte @@ -0,0 +1,5 @@ + + Provider - Appwrite + + + diff --git a/src/routes/console/project-[project]/messaging/providers/provider-[provider]/+layout.ts b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/+layout.ts new file mode 100644 index 000000000..c0e35225a --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/+layout.ts @@ -0,0 +1,15 @@ +import type { LayoutLoad } from './$types'; +import Breadcrumbs from './breadcrumbs.svelte'; +import Header from './header.svelte'; +import { sdk } from '$lib/stores/sdk'; +import { Dependencies } from '$lib/constants'; + +export const load: LayoutLoad = async ({ params, depends }) => { + depends(Dependencies.MESSAGING_PROVIDER); + + return { + header: Header, + breadcrumbs: Breadcrumbs, + provider: await sdk.forProject.messaging.getProvider(params.provider) + }; +}; diff --git a/src/routes/console/project-[project]/messaging/providers/provider-[provider]/+page.svelte b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/+page.svelte new file mode 100644 index 000000000..e54e44eba --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/+page.svelte @@ -0,0 +1,161 @@ + + + + + + + + diff --git a/src/routes/console/project-[project]/messaging/providers/provider-[provider]/breadcrumbs.svelte b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/breadcrumbs.svelte new file mode 100644 index 000000000..5a3f26f90 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/breadcrumbs.svelte @@ -0,0 +1,27 @@ + + + diff --git a/src/routes/console/project-[project]/messaging/providers/provider-[provider]/dangerZone.svelte b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/dangerZone.svelte new file mode 100644 index 000000000..7befc15c0 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/dangerZone.svelte @@ -0,0 +1,45 @@ + + + + + +
      + Delete provider +
      +

      The provider's instance will be permanently deleted. This action is irreversible.

      + + + +
      {$provider.name}
      +
      +

      + Last updated: {toLocaleDateTime($provider.$updatedAt)} +

      +
      +
      + + + + +
      + + diff --git a/src/routes/console/project-[project]/messaging/providers/provider-[provider]/deleteProvider.svelte b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/deleteProvider.svelte new file mode 100644 index 000000000..485f84adf --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/deleteProvider.svelte @@ -0,0 +1,49 @@ + + + +

      + Are you sure you want to delete {$provider.name} from '{$project.name}'? +

      + + + + +
      diff --git a/src/routes/console/project-[project]/messaging/providers/provider-[provider]/header.svelte b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/header.svelte new file mode 100644 index 000000000..d78a0f0d4 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/header.svelte @@ -0,0 +1,17 @@ + + + + + + {$provider?.name ? $provider?.name : '-'} + + {$provider?.$id} + + diff --git a/src/routes/console/project-[project]/messaging/providers/provider-[provider]/store.ts b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/store.ts new file mode 100644 index 000000000..d4211320e --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/store.ts @@ -0,0 +1,5 @@ +import { derived } from 'svelte/store'; +import { page } from '$app/stores'; +import type { Models } from '@appwrite.io/console'; + +export const provider = derived(page, ($page) => $page.data.provider as Models.Provider); diff --git a/src/routes/console/project-[project]/messaging/providers/provider-[provider]/updateName.svelte b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/updateName.svelte new file mode 100644 index 000000000..93991d10e --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/updateName.svelte @@ -0,0 +1,121 @@ + + +
      + + Name + + +
        + +
      +
      + + + + +
      + diff --git a/src/routes/console/project-[project]/messaging/providers/provider-[provider]/updateSettings.svelte b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/updateSettings.svelte new file mode 100644 index 000000000..e1fe4b242 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/updateSettings.svelte @@ -0,0 +1,242 @@ + + +
      + +
      + Settings +
      +

      + Configure the settings to to send {message}, or to complete the + provider settings. +

      + + + + + +
      + +
      +
      +
      + + + diff --git a/src/routes/console/project-[project]/messaging/providers/provider-[provider]/updateStatus.svelte b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/updateStatus.svelte new file mode 100644 index 000000000..adb34d307 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/updateStatus.svelte @@ -0,0 +1,161 @@ + + + +
      + + {$providerData.name} + +
      + +
      +
      +
        + +
      +
      +

      + Provider: +

      +

      Type:

      +

      Created: {toLocaleDateTime($providerData.$createdAt)}

      +
      +
      +
      +
      + + +
      + +
      +
      +
      diff --git a/src/routes/console/project-[project]/messaging/providers/settingsFormInput.svelte b/src/routes/console/project-[project]/messaging/providers/settingsFormInput.svelte new file mode 100644 index 000000000..615e13353 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/settingsFormInput.svelte @@ -0,0 +1,139 @@ + + +{#if input.type === 'text'} + +{:else if input.type === 'password'} + +{:else if input.type === 'email'} + +{:else if input.type === 'domain'} + +{:else if input.type === 'phone'} + +{:else if input.type === 'file'} + +{:else if input.type === 'switch'} + + +

      {@html input.description}

      +
      +
      +{:else if input.type === 'checkbox'} + + + {input.description} + + +{:else if input.type === 'select'} + +{/if} diff --git a/src/routes/console/project-[project]/messaging/providers/settingsFormList.svelte b/src/routes/console/project-[project]/messaging/providers/settingsFormList.svelte new file mode 100644 index 000000000..356ea4759 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/settingsFormList.svelte @@ -0,0 +1,48 @@ + + + + {#each inputs as input} + {#if Array.isArray(input)} + + {#each input as i} +
      + +
      + {/each} +
      + {:else} + + {/if} + {/each} +
      diff --git a/src/routes/console/project-[project]/messaging/providers/store.ts b/src/routes/console/project-[project]/messaging/providers/store.ts new file mode 100644 index 000000000..fd597b9e2 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/store.ts @@ -0,0 +1,668 @@ +import type { Column } from '$lib/helpers/types'; +import { writable } from 'svelte/store'; +import { Providers } from '../provider.svelte'; +import { MessagingProviderType, SmtpEncryption } from '@appwrite.io/console'; + +export const columns = writable([ + { id: '$id', title: 'Provider ID', type: 'string', show: true }, + { id: 'name', title: 'Name', type: 'string', show: true }, + { id: 'provider', title: 'Provider', type: 'string', show: true }, + { id: 'type', title: 'Type', type: 'string', show: true }, + { id: 'enabled', title: 'Status', type: 'boolean', show: true } +]); + +export type ProviderInput = { + label: string; + name: string; + type: + | 'text' + | 'password' + | 'phone' + | 'email' + | 'domain' + | 'file' + | 'switch' + | 'select' + | 'checkbox'; + placeholder?: string; + description?: string; + tooltip?: string; + popover?: string[]; + popoverImage?: { src: { light: string; dark: string }; alt: string }; + allowedFileExtensions?: string[]; + optional?: boolean; + options?: { label: string; value: string | number | boolean }[]; +}; + +type ProvidersMap = { + [key in MessagingProviderType]: { + name: string; + text: string; + icon: string; + providers: { + [key in Providers]?: { + imageIcon?: string; + classIcon?: string; + title: string; + description: string; + needAHand?: string[]; + configure: (ProviderInput | ProviderInput[])[]; + }; + }; + }; +}; + +export const providers: ProvidersMap = { + [MessagingProviderType.Push]: { + name: 'Push notification', + text: 'notifications', + icon: 'device-mobile', + providers: { + [Providers.FCM]: { + imageIcon: 'firebase', + title: 'FCM', + description: 'Firebase Cloud Messaging', + needAHand: [ + 'Create a Firebase project.', + 'Head to Firebase dashboard -> Settings -> Project settings -> Cloud Messaging.', + "If FCM is disabled, click the three-dots menu and open the link. On the following page, click 'Enable' (it might take a few minutes for the action to complete)." + ], + configure: [ + { + label: 'Service account JSON (.json file)', + name: 'serviceAccountJSON', + type: 'file', + allowedFileExtensions: ['json'], + placeholder: 'Enter service account JSON', + popover: [ + 'How to get the FCM service account JSON?', + 'Head to Project settings -> Service accounts -> Generate new private key.', + 'Generating the new key will result in the download of a JSON file.' + ], + popoverImage: { + src: { + light: '/images/messaging/fcm-service-account-json-light.png', + dark: '/images/messaging/fcm-service-account-json-dark.png' + }, + alt: 'Screenshot of how to generate the Firebase Service Account JSON file' + } + } + ] + }, + [Providers.APNS]: { + imageIcon: 'apple', + title: 'APNS', + description: 'Apple Push Notification Service', + configure: [ + { + label: 'Team ID', + name: 'teamId', + type: 'text', + placeholder: 'Enter team ID', + popover: [ + 'How to get the team ID?', + 'Head to Apple Developer Member Center -> Membership details -> Team ID.' + ], + popoverImage: { + src: { + light: '/images/messaging/apns-team-id.png', + dark: '/images/messaging/apns-team-id.png' + }, + alt: 'Screenshot of where to find the Team ID in the Apple Developer Member Center' + } + }, + { + label: 'Bundle ID', + name: 'bundleId', + type: 'text', + placeholder: 'Enter bundle ID', + popover: [ + 'How to get the bundle ID?', + 'Head to Apple Developer Member Center -> Certificates, Identifiers & Profiles -> Identifiers.' + ], + popoverImage: { + src: { + light: '/images/messaging/apns-bundle-id.png', + dark: '/images/messaging/apns-bundle-id.png' + }, + alt: 'Screenshot of where to find the Bundle ID in the Apple Developer Member Center' + } + }, + { + label: 'Authentication key ID', + name: 'authKeyId', + type: 'text', + placeholder: 'Enter key ID', + popover: [ + 'How to get the auth key ID?', + 'Head to Apple Developer Member Center -> Certificates, Identifiers & Profiles -> Keys.', + 'Click on your key to view details.' + ], + popoverImage: { + src: { + light: '/images/messaging/apns-authentication-key-id.png', + dark: '/images/messaging/apns-authentication-key-id.png' + }, + alt: 'Screenshot of how to find the Authentication Key ID in the Apple Developer Member Center' + } + }, + { + label: 'Auth key (.p8 file)', + name: 'authKey', + type: 'file', + allowedFileExtensions: ['p8'], + popover: [ + 'How to get the authentication key?', + 'Head to Apple Developer Member Center (under Program resources) -> Certificates, Identifiers & Profiles -> Keys.', + 'Create a key and give it a name. Enable the Apple Push Notifications service (APNS), and register your key.' + ], + popoverImage: { + src: { + light: '/images/messaging/apns-auth-key.png', + dark: '/images/messaging/apns-auth-key.png' + }, + alt: 'Screenshot of where to download the Authentication Key in the Apple Developer Member Center' + } + }, + { + label: 'Sandbox', + name: 'sandbox', + type: 'switch', + description: + 'Enable sandbox mode for testing on apps signed with development provisioning profiles. Learn more.' + } + ] + } + // [Providers.MQTT]: { + // imageIcon: 'mqtt', + // title: 'MQTT', + // description: 'Message Queuing Telemetry Transport' + // } + } + }, + [MessagingProviderType.Email]: { + name: 'Email', + text: 'emails', + icon: 'mail', + providers: { + [Providers.Mailgun]: { + imageIcon: 'mailgun', + title: 'Mailgun', + description: '', + configure: [ + { + label: 'API key', + name: 'apiKey', + type: 'password', + placeholder: 'Enter API key', + popover: [ + 'How to get the API key?', + 'Create an account in Mailgun.', + 'Head to Profile -> API Security -> Add new key.' + ] + }, + { + label: 'Domain', + name: 'domain', + type: 'domain', + placeholder: 'Enter domain', + popover: [ + 'How to create a domain?', + 'Head to Sending -> Domains -> Add new domain.', + 'Follow Mailgun instructions to verify the domain name.' + ] + }, + { + label: 'EU region', + name: 'isEuRegion', + type: 'switch', + description: + 'Enable the EU region setting if your domain is within the European Union.' + }, + [ + { + label: 'Sender email', + name: 'fromEmail', + type: 'email', + placeholder: 'Enter email' + }, + { + label: 'Sender name', + name: 'fromName', + type: 'text', + optional: true, + placeholder: 'Enter name' + } + ], + [ + { + label: 'Reply-to email', + name: 'replyToEmail', + type: 'email', + optional: true, + placeholder: 'Enter email' + }, + { + label: 'Reply-to name', + name: 'replyToName', + type: 'text', + optional: true, + placeholder: 'Enter name' + } + ] + ] + }, + [Providers.Sendgrid]: { + imageIcon: 'sendgrid', + title: 'SendGrid', + description: '', + configure: [ + { + label: 'API key', + name: 'apiKey', + type: 'password', + placeholder: 'Enter API key', + popover: [ + 'How to get the API key?', + 'Create an account in SendGrid.', + 'Head to Settings -> API Keys -> Create API key.' + ] + }, + [ + { + label: 'Sender email', + name: 'fromEmail', + type: 'email', + placeholder: 'Enter email' + }, + { + label: 'Sender name', + name: 'fromName', + type: 'text', + optional: true, + placeholder: 'Enter name' + } + ], + [ + { + label: 'Reply-to email', + name: 'replyToEmail', + type: 'email', + optional: true, + placeholder: 'Enter email' + }, + { + label: 'Reply-to name', + name: 'replyToName', + type: 'text', + optional: true, + placeholder: 'Enter name' + } + ] + ] + }, + [Providers.SMTP]: { + classIcon: 'mail', + title: 'SMTP', + description: 'Generic SMTP server.', + configure: [ + { + label: 'Server host', + name: 'host', + type: 'text', + placeholder: 'smtp.server.com' + }, + { + label: 'Server port', + name: 'port', + type: 'text', + optional: true, + placeholder: 'Enter port' + }, + { + label: 'Username', + name: 'username', + type: 'text', + optional: true, + placeholder: 'Enter username' + }, + { + label: 'Password', + name: 'password', + type: 'password', + optional: true, + placeholder: 'Enter password' + }, + { + label: 'Encryption', + name: 'encryption', + type: 'select', + options: [ + { label: 'None', value: SmtpEncryption.None }, + { label: 'SSL', value: SmtpEncryption.Ssl }, + { label: 'TLS', value: SmtpEncryption.Tls } + ] + }, + { + label: 'Auto TLS', + name: 'autoTLS', + description: 'Automatically uses TLS encryption if available.', + type: 'checkbox', + optional: true + }, + [ + { + label: 'Sender email', + name: 'fromEmail', + type: 'email', + placeholder: 'Enter email' + }, + { + label: 'Sender name', + name: 'fromName', + type: 'text', + optional: true, + placeholder: 'Enter name' + } + ], + [ + { + label: 'Reply-to email', + name: 'replyToEmail', + type: 'email', + optional: true, + placeholder: 'Enter email' + }, + { + label: 'Reply-to name', + name: 'replyToName', + type: 'text', + optional: true, + placeholder: 'Enter name' + } + ], + { + label: 'X-Mailer header', + name: 'mailer', + type: 'text', + optional: true, + placeholder: 'Enter mailer', + tooltip: + 'The X-Mailer header is used to identify the software or client used for composing or sending the email. It typically includes information such as the name and version of the email program, aiding in troubleshooting and debugging.' + } + ] + } + } + }, + + [MessagingProviderType.Sms]: { + name: 'SMS', + text: 'SMS', + icon: 'annotation', + providers: { + [Providers.Twilio]: { + imageIcon: 'twilio', + title: 'Twilio', + description: '', + needAHand: [ + 'Create an account in Twilio.', + 'Head to Twilio console -> Get a Twilio phone number.' + ], + configure: [ + { + label: 'Account SID', + name: 'accountSid', + type: 'text', + placeholder: 'Enter Account SID', + popover: [ + 'How to get the Account SID?', + 'Head to Twilio console -> Account info -> Account SID.' + ] + }, + { + label: 'Auth token', + name: 'authToken', + type: 'password', + placeholder: 'Enter Auth token', + popover: [ + 'How to get the Auth token?', + 'Head to Twilio console -> Account info -> Auth Token.' + ] + }, + { + label: 'Sender number', + name: 'from', + type: 'phone', + placeholder: 'Enter phone', + popover: [ + 'How to get sender number?', + 'Head to Twilio console -> Develop -> Phone Numbers -> Manage -> Active Numbers.', + 'If you have multiple Twilio phone numbers, you can select one as the default number.' + ] + } + ] + }, + [Providers.Msg91]: { + imageIcon: 'msg91', + title: 'MSG91', + description: '', + configure: [ + { + label: 'Auth key', + name: 'authKey', + type: 'password', + placeholder: 'Enter auth key', + popover: [ + 'How to get the Auth key?', + 'Create an account in MSG91.', + 'Click to open the Username dropdown -> Authkey -> Verify your mobile number -> Create Authkey.' + ] + }, + { + label: 'Sender ID', + name: 'senderId', + type: 'text', + placeholder: 'Enter sender ID', + popover: [ + 'How to create a Sender ID?', + 'Head to MSG91 dashboard -> SMS -> Sender ID -> Create sender ID.' + ] + }, + { + label: 'Sender number', + name: 'from', + type: 'phone', + placeholder: 'Enter phone' + } + ] + }, + [Providers.Telesign]: { + imageIcon: 'telesign', + title: 'Telesign', + description: '', + configure: [ + { + label: 'Customer ID', + name: 'customerId', + type: 'text', + placeholder: 'Enter customer ID' + }, + { + label: 'API Key', + name: 'apiKey', + type: 'password', + placeholder: 'Enter API key', + popover: [ + 'How to get the API key?', + 'Create an account in Telesign.', + 'Head to Telesign portal -> Profile -> API Keys.' + ] + }, + { + label: 'Sender number', + name: 'from', + type: 'phone', + placeholder: 'Enter phone' + } + ] + }, + [Providers.Textmagic]: { + imageIcon: 'textmagic', + title: 'Textmagic', + description: '', + configure: [ + { + label: 'API key', + name: 'apiKey', + type: 'password', + placeholder: 'Enter API key', + popover: [ + 'How to get the API key?', + 'Create an account in Textmagic.', + 'Head to Textmagic dashboard -> Services -> API -> Add new API key.' + ] + }, + { + label: 'Username', + name: 'username', + type: 'text', + placeholder: 'Enter username' + }, + { + label: 'Sender number', + name: 'from', + type: 'phone', + placeholder: 'Enter phone' + } + ] + }, + [Providers.Vonage]: { + imageIcon: 'vonage', + title: 'Vonage', + description: '', + configure: [ + { + label: 'API key', + name: 'apiKey', + type: 'password', + placeholder: 'Enter API key', + popover: [ + 'How to get the API key?', + 'Create an account in Vonage.', + 'Head to Vonage dashboard and copy the API key.' + ] + }, + { + label: 'API secret', + name: 'apiSecret', + type: 'password', + placeholder: 'Enter API secret', + popover: [ + 'How to get the API secret?', + 'Head to Vonage dashboard and copy the API secret.' + ] + }, + { + label: 'Sender number', + name: 'from', + type: 'phone', + placeholder: 'Enter phone' + } + ] + } + } + } +}; + +type ProviderParams = { + providerId: string; + name: string; + enabled: boolean; +}; + +/** + * SMS providers + */ +export type TwilioProviderParams = ProviderParams & { + accountSid: string; + authToken: string; + from: string; +}; + +export type Msg91ProviderParams = ProviderParams & { + from: string; + senderId: string; + authKey: string; +}; + +export type TelesignProviderParams = ProviderParams & { + from: string; + customerId: string; + apiKey: string; +}; + +export type TextmagicProviderParams = ProviderParams & { + from: string; + username: string; + apiKey: string; +}; + +export type VonageProviderParams = ProviderParams & { + from: string; + apiKey: string; + apiSecret: string; +}; + +/** + * Email providers + */ +export type MailgunProviderParams = ProviderParams & { + fromEmail: string; + fromName: string; + replyToEmail: string; + replyToName: string; + isEuRegion: boolean; + apiKey: string; + domain: string; +}; + +export type SendgridProviderParams = ProviderParams & { + fromEmail: string; + fromName: string; + replyToEmail: string; + replyToName: string; + apiKey: string; +}; + +export type SMTPProviderParams = ProviderParams & { + fromEmail: string; + fromName: string; + replyToEmail: string; + replyToName: string; + host: string; + port: number; + username: string; + password: string; + encryption: SmtpEncryption; + autoTLS: boolean; + mailer: string; +}; + +/** + * Push providers + */ +export type FCMProviderParams = ProviderParams & { + serviceAccountJSON: string; +}; + +export type APNSProviderParams = ProviderParams & { + authKey: string; + authKeyId: string; + teamId: string; + bundleId: string; + sandbox: boolean; +}; + +export type MQTTProviderParams = ProviderParams & { + serverKey: string; +}; diff --git a/src/routes/console/project-[project]/messaging/providers/table.svelte b/src/routes/console/project-[project]/messaging/providers/table.svelte new file mode 100644 index 000000000..541308dab --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/table.svelte @@ -0,0 +1,156 @@ + + + + + d.$id)} /> + {#each $columns as column} + {#if column.show} + {column.title} + {/if} + {/each} + + + {#each data.providers.providers as provider (provider.$id)} + + + {#each $columns as column} + {#if column.show} + {#if column.id === '$id'} + {#key $columns} + + {provider.$id} + + {/key} + {:else if column.id === 'provider'} + + + + {:else if column.id === 'type'} + + + + {:else if column.id === 'enabled'} + + + {#if provider.enabled} + + {/if} + + {provider.enabled ? 'enabled' : 'disabled'} + + + + {:else} + + {provider[column.id]} + + {/if} + {/if} + {/each} + + {/each} + + + + 0}> +
      +
      + {selectedIds.length} +

      + + {selectedIds.length > 1 ? 'providers' : 'provider'} + + selected +

      +
      + +
      + + +
      +
      +
      + + +

      + Are you sure you want to delete {selectedIds.length} + {selectedIds.length > 1 ? 'providers' : 'provider'}? +

      + + + + +
      diff --git a/src/routes/console/project-[project]/messaging/providers/wizard/provider.svelte b/src/routes/console/project-[project]/messaging/providers/wizard/provider.svelte new file mode 100644 index 000000000..e56bf339d --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/wizard/provider.svelte @@ -0,0 +1,189 @@ + + + + Provider +
      + + + + {#if !showCustomId} +
      + (showCustomId = !showCustomId)} + > +
      + {:else} + + {/if} +

      + Select a provider you would like to enable for sending {providers[$providerType].text}. +

      +
      + {#each Object.entries(providers[$providerType].providers) as [value, option]} + + {option.title} + {#if option.description} + {option.description} + {/if} + + {/each} +
      +
      + + + diff --git a/src/routes/console/project-[project]/messaging/providers/wizard/settings.svelte b/src/routes/console/project-[project]/messaging/providers/wizard/settings.svelte new file mode 100644 index 000000000..23c2ec44b --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/wizard/settings.svelte @@ -0,0 +1,182 @@ + + + + Settings + + Set up the credentials below to enable {providers[$providerType].providers[$provider].title} + for sending + {providers[$providerType].text}. + + + + +
      +

      Need a hand?

      + +
      + {#if providers[$providerType].providers[$provider].needAHand} + {@const needAHand = providers[$providerType].providers[$provider].needAHand} +
      + + + +
      +
      +
      + How to enable + {#if $providerType == MessagingProviderType.Push}notifications{:else}{/if} service? +
      +
      +
      + {#each needAHand as p} +

      + {@html p} +

      + {/each} +
      +
      +
      +
      +
      + {/if} + + + +
      +
      +
      +
      +

      Read the full guide in the documentation

      +
      +
      +
      + ($newMemberModal = true)}> +
      +
      +
      +
      +

      Invite a team member to complete this step

      +
      +
      +
      +
      +
      +
      + + + + + diff --git a/src/routes/console/project-[project]/messaging/providers/wizard/store.ts b/src/routes/console/project-[project]/messaging/providers/wizard/store.ts new file mode 100644 index 000000000..41741b3ce --- /dev/null +++ b/src/routes/console/project-[project]/messaging/providers/wizard/store.ts @@ -0,0 +1,41 @@ +import type { MessagingProviderType } from '@appwrite.io/console'; +import { writable } from 'svelte/store'; +import type { Providers } from '../../provider.svelte'; +import type { + APNSProviderParams, + FCMProviderParams, + MailgunProviderParams, + Msg91ProviderParams, + SMTPProviderParams, + SendgridProviderParams, + TelesignProviderParams, + TextmagicProviderParams, + TwilioProviderParams, + VonageProviderParams +} from '../store'; + +export const providerType = writable(null); +export const provider = writable(null); +export const providerParams = writable<{ + twilio: Partial; + msg91: Partial; + telesign: Partial; + textmagic: Partial; + vonage: Partial; + mailgun: Partial; + sendgrid: Partial; + smtp: Partial; + fcm: Partial; + apns: Partial; +}>({ + twilio: null, + msg91: null, + telesign: null, + textmagic: null, + vonage: null, + mailgun: null, + sendgrid: null, + smtp: null, + fcm: null, + apns: null +}); diff --git a/src/routes/console/project-[project]/messaging/push-notification-preview-dark.svg b/src/routes/console/project-[project]/messaging/push-notification-preview-dark.svg new file mode 100644 index 000000000..777dec267 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/push-notification-preview-dark.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/routes/console/project-[project]/messaging/push-notification-preview-light.svg b/src/routes/console/project-[project]/messaging/push-notification-preview-light.svg new file mode 100644 index 000000000..7fd66545d --- /dev/null +++ b/src/routes/console/project-[project]/messaging/push-notification-preview-light.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/routes/console/project-[project]/messaging/pushPhone.svelte b/src/routes/console/project-[project]/messaging/pushPhone.svelte new file mode 100644 index 000000000..a6fb893f7 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/pushPhone.svelte @@ -0,0 +1,73 @@ + + +
      +
      +
      +
      + {$project.name} +
      +
      now
      +
      +
      +

      {title || 'Message Title'}

      +

      + {body || 'Enter your message in the input field on the left to see it here'} +

      +
      +
      +
      + + diff --git a/src/routes/console/project-[project]/messaging/sms-preview-dark.svg b/src/routes/console/project-[project]/messaging/sms-preview-dark.svg new file mode 100644 index 000000000..cafc7a33b --- /dev/null +++ b/src/routes/console/project-[project]/messaging/sms-preview-dark.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/routes/console/project-[project]/messaging/sms-preview-light.svg b/src/routes/console/project-[project]/messaging/sms-preview-light.svg new file mode 100644 index 000000000..9e9099038 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/sms-preview-light.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/routes/console/project-[project]/messaging/smsPhone.svelte b/src/routes/console/project-[project]/messaging/smsPhone.svelte new file mode 100644 index 000000000..46191efd1 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/smsPhone.svelte @@ -0,0 +1,122 @@ + + +
      +
      + {getIntials($project.name)} +
      +
      {$project.name}
      +
      +
      + Today {getTime()} +
      +
      +
      + {content || 'Enter your message in the input field on the left to see it here'} +
      +
      +
      +
      + + diff --git a/src/routes/console/project-[project]/messaging/store.ts b/src/routes/console/project-[project]/messaging/store.ts new file mode 100644 index 000000000..cdd4bffdc --- /dev/null +++ b/src/routes/console/project-[project]/messaging/store.ts @@ -0,0 +1,7 @@ +import type { Models } from '@appwrite.io/console'; +import { writable } from 'svelte/store'; + +export const showCreate = writable(false); + +export const targetsById = writable>({}); +export const topicsById = writable>({}); diff --git a/src/routes/console/project-[project]/messaging/topics/+page.svelte b/src/routes/console/project-[project]/messaging/topics/+page.svelte new file mode 100644 index 000000000..118d31a46 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/topics/+page.svelte @@ -0,0 +1,123 @@ + + + +
      +
      + Topics +
      + +
      +
      + + +
      + + + +
      +
      +
      +
      + + +
      +
      + + +
      +
      +
      + {#if data.topics.total} +
      + + + {:else if $hasPageQueries} + + {:else if data.search} + +
      + Sorry, we couldn't find '{data.search}' +

      There are no topics that match your search.

      +
      + +
      + {:else} + ($showCreate = true)} + href="https://appwrite.io/docs/products/messaging/topics" + target="topic" /> + {/if} + + + diff --git a/src/routes/console/project-[project]/messaging/topics/+page.ts b/src/routes/console/project-[project]/messaging/topics/+page.ts new file mode 100644 index 000000000..af2242188 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/topics/+page.ts @@ -0,0 +1,34 @@ +import { Query } from '@appwrite.io/console'; +import { sdk } from '$lib/stores/sdk'; +import { getLimit, getPage, getQuery, getSearch, pageToOffset } from '$lib/helpers/load'; +import { Dependencies, PAGE_LIMIT } from '$lib/constants'; +import { queryParamToMap, queries } from '$lib/components/filters'; + +export const load = async ({ depends, url, route }) => { + depends(Dependencies.MESSAGING_TOPICS); + const page = getPage(url); + const search = getSearch(url); + const limit = getLimit(url, route, PAGE_LIMIT); + const offset = pageToOffset(page, limit); + const query = getQuery(url); + + const parsedQueries = queryParamToMap(query || '[]'); + queries.set(parsedQueries); + + return { + offset, + limit, + search, + query, + page, + topics: await sdk.forProject.messaging.listTopics( + [ + Query.limit(limit), + Query.offset(offset), + Query.orderDesc(''), + ...parsedQueries.values() + ], + search || undefined + ) + }; +}; diff --git a/src/routes/console/project-[project]/messaging/topics/create.svelte b/src/routes/console/project-[project]/messaging/topics/create.svelte new file mode 100644 index 000000000..6ec708a0b --- /dev/null +++ b/src/routes/console/project-[project]/messaging/topics/create.svelte @@ -0,0 +1,68 @@ + + + + + + {#if !showCustomId} +
      + (showCustomId = !showCustomId)} + > +
      + {:else} + + {/if} +
      + + + + +
      diff --git a/src/routes/console/project-[project]/messaging/topics/store.ts b/src/routes/console/project-[project]/messaging/topics/store.ts new file mode 100644 index 000000000..45f74c40a --- /dev/null +++ b/src/routes/console/project-[project]/messaging/topics/store.ts @@ -0,0 +1,3 @@ +import { writable } from 'svelte/store'; + +export const showCreate = writable(false); diff --git a/src/routes/console/project-[project]/messaging/topics/table.svelte b/src/routes/console/project-[project]/messaging/topics/table.svelte new file mode 100644 index 000000000..9ffc0b2eb --- /dev/null +++ b/src/routes/console/project-[project]/messaging/topics/table.svelte @@ -0,0 +1,147 @@ + + + + + d.$id)} /> + {#each columns as column} + {#if column.show} + {column.title} + {/if} + {/each} + + + {#each data.topics.topics as topic (topic.$id)} + + + + {#each columns as column (column.id)} + {#if column.show} + {#if column.id === '$id'} + {#key column.id} + + {topic.$id} + + {/key} + {:else if column.type === 'datetime'} + + {#if !topic[column.id]} + - + {:else} + {toLocaleDateTime(topic[column.id])} + {/if} + + {:else if column.id === 'total'} + + {topic.emailTotal + topic.smsTotal + topic.pushTotal} + + {:else} + + {topic[column.id]} + + {/if} + {/if} + {/each} + + {/each} + + + + 0}> +
      +
      + {selectedIds.length} +

      + + {selectedIds.length > 1 ? 'topics' : 'topic'} + + selected +

      +
      + +
      + + +
      +
      +
      + + +

      + Are you sure you want to delete {selectedIds.length} + {selectedIds.length > 1 ? 'topics' : 'topic'}? +

      + + + + +
      diff --git a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/+layout.svelte b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/+layout.svelte new file mode 100644 index 000000000..6ec507e4f --- /dev/null +++ b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/+layout.svelte @@ -0,0 +1,49 @@ + + + + Topic - Appwrite + + + diff --git a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/+layout.ts b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/+layout.ts new file mode 100644 index 000000000..6b82ae854 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/+layout.ts @@ -0,0 +1,15 @@ +import type { LayoutLoad } from './$types'; +import Breadcrumbs from './breadcrumbs.svelte'; +import Header from './header.svelte'; +import { sdk } from '$lib/stores/sdk'; +import { Dependencies } from '$lib/constants'; + +export const load: LayoutLoad = async ({ params, depends }) => { + depends(Dependencies.MESSAGING_TOPIC); + + return { + header: Header, + breadcrumbs: Breadcrumbs, + topic: await sdk.forProject.messaging.getTopic(params.topic) + }; +}; diff --git a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/+page.svelte b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/+page.svelte new file mode 100644 index 000000000..7b977d1ee --- /dev/null +++ b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/+page.svelte @@ -0,0 +1,178 @@ + + + +
      +
      + Subscribers +
      + +
      +
      + + +
      + + + +
      +
      +
      +
      + + +
      +
      + + +
      +
      +
      + {#if data.subscribers.total} +
      + + + {:else if $hasPageQueries} + + {:else if data.search} + +
      + Sorry, we couldn't find '{data.search}' +

      There are no subscribers that match your search.

      +
      + +
      + {:else} + (showAdd = true)} + href="https://appwrite.io/docs/products/messaging/topics#subscribe-targets-to-topics" + target="subscriber" /> + {/if} + + + + +

      + Add subscribers to this topic by selecting the targets for directing messages. Learn more about subscribers. +

      +
      +
      diff --git a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/+page.ts b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/+page.ts new file mode 100644 index 000000000..9f2a8116e --- /dev/null +++ b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/+page.ts @@ -0,0 +1,36 @@ +import { Query } from '@appwrite.io/console'; +import { sdk } from '$lib/stores/sdk'; +import { getLimit, getPage, getQuery, getSearch, pageToOffset } from '$lib/helpers/load'; +import { Dependencies, PAGE_LIMIT } from '$lib/constants'; +import type { PageLoad } from './$types'; +import { queryParamToMap, queries } from '$lib/components/filters'; + +export const load: PageLoad = async ({ params, url, route, depends }) => { + depends(Dependencies.MESSAGING_TOPIC_SUBSCRIBERS); + + const page = getPage(url); + const limit = getLimit(url, route, PAGE_LIMIT); + const offset = pageToOffset(page, limit); + const search = getSearch(url); + const query = getQuery(url); + + const parsedQueries = queryParamToMap(query || '[]'); + queries.set(parsedQueries); + + return { + offset, + limit, + search, + query, + subscribers: await sdk.forProject.messaging.listSubscribers( + params.topic, + [ + Query.limit(limit), + Query.offset(offset), + Query.orderDesc(''), + ...parsedQueries.values() + ], + search || undefined + ) + }; +}; diff --git a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/activity/+page.svelte b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/activity/+page.svelte new file mode 100644 index 000000000..f805a79f0 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/activity/+page.svelte @@ -0,0 +1,8 @@ + + + diff --git a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/activity/+page.ts b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/activity/+page.ts new file mode 100644 index 000000000..bf12dffa4 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/activity/+page.ts @@ -0,0 +1,20 @@ +import { Query } from '@appwrite.io/console'; +import { sdk } from '$lib/stores/sdk'; +import { getLimit, getPage, pageToOffset } from '$lib/helpers/load'; +import { PAGE_LIMIT } from '$lib/constants'; +import type { PageLoad } from './$types'; + +export const load: PageLoad = async ({ params, url, route }) => { + const page = getPage(url); + const limit = getLimit(url, route, PAGE_LIMIT); + const offset = pageToOffset(page, limit); + + return { + offset, + limit, + logs: await sdk.forProject.messaging.listTopicLogs(params.topic, [ + Query.limit(limit), + Query.offset(offset) + ]) + }; +}; diff --git a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/breadcrumbs.svelte b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/breadcrumbs.svelte new file mode 100644 index 000000000..c41df553b --- /dev/null +++ b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/breadcrumbs.svelte @@ -0,0 +1,27 @@ + + + diff --git a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/deleteTopic.svelte b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/deleteTopic.svelte new file mode 100644 index 000000000..e0eb3a5ff --- /dev/null +++ b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/deleteTopic.svelte @@ -0,0 +1,49 @@ + + + +

      + Are you sure you want to delete {$topic.name} from '{$project.name}'? +

      + + + + +
      diff --git a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/header.svelte b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/header.svelte new file mode 100644 index 000000000..680a967e5 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/header.svelte @@ -0,0 +1,48 @@ + + + + + + {$topic.name} + + {$topic.$id} + + + + {#each tabs as tab} + + {tab.title} + + {/each} + + diff --git a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/settings/+page.svelte b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/settings/+page.svelte new file mode 100644 index 000000000..8c5837596 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/settings/+page.svelte @@ -0,0 +1,14 @@ + + + +
      + + + + diff --git a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/settings/dangerZone.svelte b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/settings/dangerZone.svelte new file mode 100644 index 000000000..4758bcd6f --- /dev/null +++ b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/settings/dangerZone.svelte @@ -0,0 +1,35 @@ + + + +
      + Delete topic +
      +

      + The topic will be permanently deleted, including all data associated with this topic. This + action is irreversible. +

      + + + +
      {$topic.name}
      +
      +

      + {$topicTotal} subscriber{$topicTotal === 1 ? '' : 's'} +

      +
      +
      + + + + +
      + + diff --git a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/settings/details.svelte b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/settings/details.svelte new file mode 100644 index 000000000..be120ba35 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/settings/details.svelte @@ -0,0 +1,19 @@ + + + +
      + Details +
      + +
      +
      +

      {$topicTotal} subscriber{$topicTotal === 1 ? '' : 's'}

      +

      Created: {toLocaleDateTime($topic.$createdAt)}

      +
      +
      +
      +
      diff --git a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/settings/updateName.svelte b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/settings/updateName.svelte new file mode 100644 index 000000000..ad1e1998b --- /dev/null +++ b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/settings/updateName.svelte @@ -0,0 +1,54 @@ + + +
      + + Name + + +
        + +
      +
      + + + + +
      + diff --git a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/settings/updatePermissions.svelte b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/settings/updatePermissions.svelte new file mode 100644 index 000000000..7fff86143 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/settings/updatePermissions.svelte @@ -0,0 +1,65 @@ + + +
      + + Subscription access +

      + Choose who can subscribe to this topic using the client API. Learn more about + Permissions. +

      + + + + + + + +
      + diff --git a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/store.ts b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/store.ts new file mode 100644 index 000000000..dec5bf146 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/store.ts @@ -0,0 +1,13 @@ +import { derived } from 'svelte/store'; +import { page } from '$app/stores'; +import type { Models } from '@appwrite.io/console'; + +export const topic = derived( + page, + // TODO: Set actual type + ($page) => $page.data.topic as Models.Topic +); +export const topicTotal = derived( + topic, + ($topic) => $topic.emailTotal + $topic.smsTotal + $topic.pushTotal +); diff --git a/src/routes/console/project-[project]/messaging/topics/topic-[topic]/table.svelte b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/table.svelte new file mode 100644 index 000000000..e469b7991 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/topics/topic-[topic]/table.svelte @@ -0,0 +1,182 @@ + + + + + d.$id)} /> + {#each columns as column} + {#if column.show} + {column.title} + {/if} + {/each} + + + {#each data.subscribers.subscribers as subscriber (subscriber.$id)} + {@const target = subscriber.target} + + + + {#each columns as column} + {#if column.show} + {#if column.id === '$id'} + {#key column.id} + + + {subscriber.$id} + + + {/key} + {:else if column.id === 'targetId'} + + + {subscriber[column.id]} + + + {:else if column.id === 'target'} + + {#if target.providerType === MessagingProviderType.Push} + {target.name} + {:else} + {target.identifier} + {/if} + + {:else if column.id === 'type'} + + + + {:else if column.id === '$createdAt'} + + {toLocaleDateTime(subscriber[column.id])} + + {:else} + + {subscriber[column.id]} + + {/if} + {/if} + {/each} + + {/each} + + + + 0}> +
      +
      + {selectedIds.length} +

      + + {selectedIds.length > 1 ? 'subscribers' : 'subscriber'} + + selected +

      +
      + +
      + + +
      +
      +
      + + +

      + Are you sure you want to delete {selectedIds.length} + {selectedIds.length > 1 ? 'subscribers' : 'subscriber'}? +

      + + + + +
      diff --git a/src/routes/console/project-[project]/messaging/topicsModal.svelte b/src/routes/console/project-[project]/messaging/topicsModal.svelte new file mode 100644 index 000000000..a2aad2b57 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/topicsModal.svelte @@ -0,0 +1,195 @@ + + + +
      +

      + Select existing topics you want to send this message to its targets. The message will be + sent only to targets. +

      +
      + +
      + {#if Object.keys(topicResultsById).length > 0} +
      + +
      + + {#each Object.entries(topicResultsById) as [topicId, topic]} + + + + onTopicSelection(event, topic)}> + + + + + {topic.name} + + + ({getTotal(topic)} targets) + + + + + + + {/each} + +
      +
      +
      +

      Total results: {totalResults}

      + +
      +
    + {:else if search} + +
    +
    + Sorry we couldn't find "{search}" +

    There are no topics that match your search.

    +
    +
    + + +
    +
    +
    + {:else} + +
    +
    +

    + You have no topics. Create a topic to see them here. +

    +

    + Need a hand? Learn more in our . +

    +
    +
    +
    + {/if} +
  • +
    +
    + +
    +
    + {selectedSize} + Topics selected +
    + +
    +
    + diff --git a/src/routes/console/project-[project]/messaging/userTargetsModal.svelte b/src/routes/console/project-[project]/messaging/userTargetsModal.svelte new file mode 100644 index 000000000..7c7ca0266 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/userTargetsModal.svelte @@ -0,0 +1,288 @@ + + + +
    + + +
    + +
    + {#if Object.keys(userResultsById).length > 0} +
    +
    + + {#each Object.entries(userResultsById) as [userId, user] (userId)} + {@const selectedCount = user.targets.filter( + (target) => selected[target.$id] + ).length} + + + 0 && + user.targets.every( + (target) => targetsById[target.$id] + ))} + checked={selectedCount > 0 && + selectedCount === user.targets.length} + on:change={(event) => + onUserSelection(event, userId)} /> + + + + + {#if user.name} + {user.name} + {:else if user.email} + {user.email} + {:else if user.phone} + {user.phone} + {:else} + {userId} + {/if} + + + + + {#if user.targets.length === 0} + (0 targets) + {:else} + ({selectedCount}/{user.targets.length} targets) + {/if} + + + {#each user.targets as target} +
    + + onTargetSelection(event, target)}> + +
    + + {#if target.providerType !== MessagingProviderType.Push} + {target.identifier} + {:else} + {target.name} + {/if} +
    +
    +
    +
    + {/each} +
    +
    + {/each} +
    +
    +
    +

    Total results: {totalResults}

    + +
    +
    + {:else if search} + +
    +
    + Sorry we couldn't find "{search}" +

    There are no Users that match your search.

    +
    +
    + + +
    +
    +
    + {:else} + +
    +
    +

    + You have no users. Create a user to see them here. +

    +

    + Need a hand? Learn more in our . +

    +
    +
    +
    + {/if} +
    +
    +
    + +
    +
    + {selectedUsers} + Users selected +
    + +
    +
    +
    + + diff --git a/src/routes/console/project-[project]/messaging/wizard/emailFormList.svelte b/src/routes/console/project-[project]/messaging/wizard/emailFormList.svelte new file mode 100644 index 000000000..693d209fb --- /dev/null +++ b/src/routes/console/project-[project]/messaging/wizard/emailFormList.svelte @@ -0,0 +1,117 @@ + + + + + +
    + + + + + + + + + Enter the email address to which te test message will be +
    (selected = 'other')} + on:keyup|self={clickOnEnter} + role="button" + tabindex="0"> + +
    +
    +
    + + + + + +
    +
    + + + Enable the HTML mode if your message contains HTML tags. + + + {#if !showCustomId} +
    + (showCustomId = !showCustomId)} + > +
    + {/if} +
    diff --git a/src/routes/console/project-[project]/messaging/wizard/pushFormList.svelte b/src/routes/console/project-[project]/messaging/wizard/pushFormList.svelte new file mode 100644 index 000000000..dc8a5b02a --- /dev/null +++ b/src/routes/console/project-[project]/messaging/wizard/pushFormList.svelte @@ -0,0 +1,247 @@ + + + + +
    + + + +
    + + + + + + + + + + Enter the phone number to which the test message will be +
    (selected = 'other')} + on:keyup|self={clickOnEnter} + role="button" + tabindex="0"> + +
    +
    +
    + + + + + +
    +
    +
    + + + + + + + + + +
    +
      + {#each customData || [] as _, rowIndex} + + + + + + + + + {/each} +
    + {#if dataError} + {dataError} + {/if} + +
    +
    + {#if !showCustomId} +
    + (showCustomId = !showCustomId)} + > +
    + {/if} +
    + +
    +
    + +
    diff --git a/src/routes/console/project-[project]/messaging/wizard/smsFormList.svelte b/src/routes/console/project-[project]/messaging/wizard/smsFormList.svelte new file mode 100644 index 000000000..9b315caa1 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/wizard/smsFormList.svelte @@ -0,0 +1,100 @@ + + +
    + +
    + + + + + + + + + + Enter the phone number to which the test message will be +
    (selected = 'other')} + on:keyup|self={clickOnEnter} + role="button" + tabindex="0"> + +
    +
    +
    + + + + + +
    +
    + {#if !showCustomId} +
    + (showCustomId = !showCustomId)} + > +
    + {/if} +
    + +
    +
    + +
    diff --git a/src/routes/console/project-[project]/messaging/wizard/step1.svelte b/src/routes/console/project-[project]/messaging/wizard/step1.svelte new file mode 100644 index 000000000..d29471b39 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/wizard/step1.svelte @@ -0,0 +1,59 @@ + + + + Message + + {createMessage(providers[$providerType].text)} Learn more in our . + + {#if $providerType === MessagingProviderType.Email} + + {:else if $providerType === MessagingProviderType.Sms} + + {:else if $providerType === MessagingProviderType.Push} + + {/if} + diff --git a/src/routes/console/project-[project]/messaging/wizard/step2.svelte b/src/routes/console/project-[project]/messaging/wizard/step2.svelte new file mode 100644 index 000000000..b922dd4a2 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/wizard/step2.svelte @@ -0,0 +1,155 @@ + + + + Targets + + Select targets to whom this message should be directed. + + {#if targetIdsLength === 0 && topicIdsLength === 0} + +
    + + + +
    + Select targets to get started +
    +
    +
    + {:else} +
    + + + Target + + + + {#each Object.entries($topicsById) as [topicId, topic] (topicId)} + + +
    + + + + {topic.name} + + + ({getTotal(topic)} targets) + + +
    +
    + +
    + +
    +
    +
    + {/each} + {#each Object.entries($targetsById) as [targetId, target] (targetId)} + + +
    + + {target.name ? target.name : target.identifier} + +
    +
    + + +
    + +
    +
    +
    + {/each} +
    +
    +
    + + + + {/if} +
    diff --git a/src/routes/console/project-[project]/messaging/wizard/step3.svelte b/src/routes/console/project-[project]/messaging/wizard/step3.svelte new file mode 100644 index 000000000..47b9c2b2e --- /dev/null +++ b/src/routes/console/project-[project]/messaging/wizard/step3.svelte @@ -0,0 +1,112 @@ + + + + Schedule + Schedule the time you want to deliver this message. Learn more in our . + +
    + + + +
    +
    + + {#if when === 'now'} + The message will be sent immediately + {:else if !dateTime || isNaN(dateTime.getTime())} + The message will be sent later + {:else} + The message will be sent at {dateTime.toLocaleString('en', formatOptions)} + {/if} + +
    + + diff --git a/src/routes/console/project-[project]/messaging/wizard/store.ts b/src/routes/console/project-[project]/messaging/wizard/store.ts new file mode 100644 index 000000000..4e79c9e65 --- /dev/null +++ b/src/routes/console/project-[project]/messaging/wizard/store.ts @@ -0,0 +1,59 @@ +import { MessagingProviderType, type Models } from '@appwrite.io/console'; +import { get, writable } from 'svelte/store'; + +export type MessageParams = { + messageId: string; + topics: string[]; + users: string[]; + targets: string[]; + draft: boolean; + scheduledAt?: string; +}; + +export type EmailMessageParams = MessageParams & { + subject: string; + content: string; + html: boolean; +}; + +export type SMSMessageParams = MessageParams & { + content: string; +}; + +export type PushMessageParams = MessageParams & { + title: string; + body: string; + data: [string, string][]; + file: Models.File; + action?: string; + icon?: string; + sound?: string; + color?: string; + tag?: string; + badge?: string; +}; + +export const providerType = writable(null); +export const targetsById = writable>({}); +export const messageParams = writable<{ + [MessagingProviderType.Email]: Partial; + [MessagingProviderType.Sms]: Partial; + [MessagingProviderType.Push]: Partial; +}>({ + [MessagingProviderType.Email]: null, + [MessagingProviderType.Sms]: null, + [MessagingProviderType.Push]: null +}); + +export function getTotal(topic: Models.Topic): number { + switch (get(providerType)) { + case 'email': + return topic.emailTotal; + case 'sms': + return topic.smsTotal; + case 'push': + return topic.pushTotal; + default: + return 0; + } +} diff --git a/src/routes/console/project-[project]/overview/+layout.svelte b/src/routes/console/project-[project]/overview/+layout.svelte index fe98b9165..19726983f 100644 --- a/src/routes/console/project-[project]/overview/+layout.svelte +++ b/src/routes/console/project-[project]/overview/+layout.svelte @@ -223,7 +223,7 @@ API Keys + event="keys">API keys
    diff --git a/src/routes/console/project-[project]/overview/+page.ts b/src/routes/console/project-[project]/overview/+page.ts index 588bddffd..541af53e9 100644 --- a/src/routes/console/project-[project]/overview/+page.ts +++ b/src/routes/console/project-[project]/overview/+page.ts @@ -6,8 +6,8 @@ import { selectedTab } from './store'; export const load: PageLoad = async ({ params }) => { if (get(selectedTab) === 'keys') { - throw redirect(302, `${base}/console/project-${params.project}/overview/keys`); + redirect(302, `${base}/console/project-${params.project}/overview/keys`); } else { - throw redirect(302, `${base}/console/project-${params.project}/overview/platforms`); + redirect(302, `${base}/console/project-${params.project}/overview/platforms`); } }; diff --git a/src/routes/console/project-[project]/overview/keys/[key]/breadcrumbs.svelte b/src/routes/console/project-[project]/overview/keys/[key]/breadcrumbs.svelte index 076836cec..4c8d21b54 100644 --- a/src/routes/console/project-[project]/overview/keys/[key]/breadcrumbs.svelte +++ b/src/routes/console/project-[project]/overview/keys/[key]/breadcrumbs.svelte @@ -15,7 +15,7 @@ }, { href: `/console/project-${$project?.$id}/overview/keys`, - title: 'API Keys' + title: 'API keys' }, { href: `/console/project-${$project?.$id}/overview/keys/${$key?.$id}`, diff --git a/src/routes/console/project-[project]/overview/keys/checkbox.svelte b/src/routes/console/project-[project]/overview/keys/checkbox.svelte index cad6cd09c..4e4553957 100644 --- a/src/routes/console/project-[project]/overview/keys/checkbox.svelte +++ b/src/routes/console/project-[project]/overview/keys/checkbox.svelte @@ -1,11 +1,19 @@ - + diff --git a/src/routes/console/project-[project]/overview/keys/scopes.svelte b/src/routes/console/project-[project]/overview/keys/scopes.svelte index a5ec2115e..946de6153 100644 --- a/src/routes/console/project-[project]/overview/keys/scopes.svelte +++ b/src/routes/console/project-[project]/overview/keys/scopes.svelte @@ -12,6 +12,7 @@ Auth = 'Auth', Database = 'Database', Functions = 'Functions', + Messaging = 'Messaging', Storage = 'Storage', Other = 'Other' } @@ -22,6 +23,7 @@ scopes.forEach((scope) => { activeScopes[scope] = true; }); + mounted = true; }); @@ -70,6 +72,7 @@ const newScopes = allScopes .filter((scope) => activeScopes[scope.scope]) .map(({ scope }) => scope); + if (symmetricDifference(scopes, newScopes).length) { scopes = newScopes; } @@ -87,7 +90,7 @@ - {#each [Category.Auth, Category.Database, Category.Functions, Category.Storage, Category.Other] as category} + {#each [Category.Auth, Category.Database, Category.Functions, Category.Storage, Category.Messaging, Category.Other] as category} {@const checked = categoryState(category, scopes)} diff --git a/src/routes/console/project-[project]/overview/keys/wizard/step1.svelte b/src/routes/console/project-[project]/overview/keys/wizard/step1.svelte index 7cd385384..cb53ed034 100644 --- a/src/routes/console/project-[project]/overview/keys/wizard/step1.svelte +++ b/src/routes/console/project-[project]/overview/keys/wizard/step1.svelte @@ -6,7 +6,7 @@ - Create an API key + API key Let's create an API key. - Add Scopes + Scopes Choose which permission scopes to grant your application. It is best practice to allow only the permissions you need to meet your project goals. diff --git a/src/routes/console/project-[project]/overview/platforms/+page.svelte b/src/routes/console/project-[project]/overview/platforms/+page.svelte index b7f8dfab0..93bcd0ff8 100644 --- a/src/routes/console/project-[project]/overview/platforms/+page.svelte +++ b/src/routes/console/project-[project]/overview/platforms/+page.svelte @@ -85,10 +85,10 @@ Add platform - addPlatform(Platform.Web)}>Web App - addPlatform(Platform.Flutter)}>Flutter App - addPlatform(Platform.Android)}>Android App - addPlatform(Platform.Apple)}>Apple App + addPlatform(Platform.Web)}>Web app + addPlatform(Platform.Flutter)}>Flutter app + addPlatform(Platform.Android)}>Android app + addPlatform(Platform.Apple)}>Apple app
    diff --git a/src/routes/console/project-[project]/overview/platforms/wizard/android/step1.svelte b/src/routes/console/project-[project]/overview/platforms/wizard/android/step1.svelte index c355c0869..bdd6b79a1 100644 --- a/src/routes/console/project-[project]/overview/platforms/wizard/android/step1.svelte +++ b/src/routes/console/project-[project]/overview/platforms/wizard/android/step1.svelte @@ -5,6 +5,7 @@ import { sdk } from '$lib/stores/sdk'; import { createPlatform } from '../store'; import { Submit, trackEvent } from '$lib/actions/analytics'; + import { PlatformType } from '@appwrite.io/console'; const projectId = $page.params.project; @@ -24,7 +25,7 @@ const platform = await sdk.forConsole.projects.createPlatform( projectId, - 'android', + PlatformType.Android, $createPlatform.name, $createPlatform.key || undefined, undefined, @@ -40,7 +41,7 @@ - Register your Android app + Android registration - Get the SDK + Install

    First, add this to your root level build.gradle file.

    And add this to your project's build.gradle file.

    diff --git a/src/routes/console/project-[project]/overview/platforms/wizard/android/step3.svelte b/src/routes/console/project-[project]/overview/platforms/wizard/android/step3.svelte index 736d87555..9b47253d1 100644 --- a/src/routes/console/project-[project]/overview/platforms/wizard/android/step3.svelte +++ b/src/routes/console/project-[project]/overview/platforms/wizard/android/step3.svelte @@ -15,7 +15,7 @@ val client = Client(context) - Initialize SDK + Initialize

    Initialize your SDK

    diff --git a/src/routes/console/project-[project]/overview/platforms/wizard/apple/step1.svelte b/src/routes/console/project-[project]/overview/platforms/wizard/apple/step1.svelte index 7b690ad1b..9c3b9761a 100644 --- a/src/routes/console/project-[project]/overview/platforms/wizard/apple/step1.svelte +++ b/src/routes/console/project-[project]/overview/platforms/wizard/apple/step1.svelte @@ -6,15 +6,9 @@ import { sdk } from '$lib/stores/sdk'; import { createPlatform } from '../store'; import { Submit, trackEvent } from '$lib/actions/analytics'; + import { PlatformType } from '@appwrite.io/console'; - enum Platform { - iOS = 'apple-ios', - macOS = 'apple-macos', - watchOS = 'apple-watchos', - tvOS = 'apple-tvos' - } - - let platform: Platform = Platform.iOS; + let platform: PlatformType = PlatformType.Appleios; const projectId = $page.params.project; @@ -42,7 +36,7 @@ - Register your bundle ID + Apple registration @@ -50,26 +44,26 @@

    (platform = Platform.iOS)} - selected={platform === Platform.iOS}> + on:click={() => (platform = PlatformType.Appleios)} + selected={platform === PlatformType.Appleios}> iOS (platform = Platform.macOS)} - selected={platform === Platform.macOS}> + on:click={() => (platform = PlatformType.Applemacos)} + selected={platform === PlatformType.Applemacos}> macOS (platform = Platform.watchOS)} - selected={platform === Platform.watchOS}> + on:click={() => (platform = PlatformType.Applewatchos)} + selected={platform === PlatformType.Applewatchos}> watchOS (platform = Platform.tvOS)} - selected={platform === Platform.tvOS}> + on:click={() => (platform = PlatformType.Appletvos)} + selected={platform === PlatformType.Appletvos}> tvOS
    diff --git a/src/routes/console/project-[project]/overview/platforms/wizard/apple/step2.svelte b/src/routes/console/project-[project]/overview/platforms/wizard/apple/step2.svelte index 2c0519fdb..d77381e5b 100644 --- a/src/routes/console/project-[project]/overview/platforms/wizard/apple/step2.svelte +++ b/src/routes/console/project-[project]/overview/platforms/wizard/apple/step2.svelte @@ -29,7 +29,7 @@ - Get the SDK + Install
    (method = Method.Xcode)} selected={method === Method.Xcode}> Xcode diff --git a/src/routes/console/project-[project]/overview/platforms/wizard/apple/step3.svelte b/src/routes/console/project-[project]/overview/platforms/wizard/apple/step3.svelte index 420994b55..6ff63e373 100644 --- a/src/routes/console/project-[project]/overview/platforms/wizard/apple/step3.svelte +++ b/src/routes/console/project-[project]/overview/platforms/wizard/apple/step3.svelte @@ -17,7 +17,7 @@ let client = Client() - Initialize SDK + Initialize

    Initialize your SDK

    diff --git a/src/routes/console/project-[project]/overview/platforms/wizard/flutter/step1.svelte b/src/routes/console/project-[project]/overview/platforms/wizard/flutter/step1.svelte index 3aeb1ea3c..c64b948e6 100644 --- a/src/routes/console/project-[project]/overview/platforms/wizard/flutter/step1.svelte +++ b/src/routes/console/project-[project]/overview/platforms/wizard/flutter/step1.svelte @@ -6,77 +6,123 @@ import { sdk } from '$lib/stores/sdk'; import { createPlatform } from '../store'; import { Submit, trackEvent } from '$lib/actions/analytics'; + import { PlatformType } from '@appwrite.io/console'; + import { isValueOfStringEnum } from '$lib/helpers/types'; - enum Platform { - Android = 'flutter-android', - Ios = 'flutter-ios', - Linux = 'flutter-linux', - Macos = 'flutter-macos', - Windows = 'flutter-windows', - Web = 'flutter-web' - } + // enum Platform { + // Android = 'flutter-android', + // Ios = 'flutter-ios', + // Linux = 'flutter-linux', + // Macos = 'flutter-macos', + // Windows = 'flutter-windows', + // Web = 'flutter-web' + // } - function isPlatform(value: string): value is Platform { - return Object.values(Platform).includes(value as Platform); - } + // function isPlatform(value: string): value is Platform { + // return Object.values(Platform).includes(value as Platform); + // } - let platform: Platform = isPlatform($createPlatform.type) + let platform: PlatformType = isValueOfStringEnum(PlatformType, $createPlatform.type) ? $createPlatform.type - : Platform.Android; + : PlatformType.Flutterandroid; const projectId = $page.params.project; const suggestions = ['*.vercel.app', '*.netlify.app', '*.gitpod.io']; const placeholder: Record< - Platform, + PlatformType, { name: string; hostname: string; tooltip: string; } > = { - [Platform.Android]: { + [PlatformType.Flutterandroid]: { name: 'My Android App', hostname: 'com.company.appname', tooltip: 'Your package name is generally the applicationId in your app-level build.gradle file.' }, - [Platform.Ios]: { + [PlatformType.Flutterios]: { name: 'My iOS App', hostname: 'com.company.appname', tooltip: "You can find your Bundle Identifier in the General tab for your app's primary target in Xcode." }, - [Platform.Linux]: { + [PlatformType.Flutterlinux]: { name: 'My Linux App', hostname: 'appname', tooltip: 'Your application name' }, - [Platform.Macos]: { + [PlatformType.Fluttermacos]: { name: 'My mac OS App', hostname: 'com.company.appname', tooltip: "You can find your Bundle Identifier in the General tab for your app's primary target in Xcode." }, - [Platform.Web]: { + [PlatformType.Flutterweb]: { name: 'My Web App', hostname: 'localhost', tooltip: 'The hostname that your website will use to interact with the Appwrite APIs in production or development environments. No protocol or port number required.' }, - [Platform.Windows]: { + [PlatformType.Flutterwindows]: { name: 'My Windows App', hostname: 'appname', tooltip: 'Your application name' + }, + // The following are not used, but added to avoid TS errors + [PlatformType.Web]: { + name: '', + hostname: '', + tooltip: '' + }, + [PlatformType.Appleios]: { + name: '', + hostname: '', + tooltip: '' + }, + [PlatformType.Applemacos]: { + name: '', + hostname: '', + tooltip: '' + }, + [PlatformType.Applewatchos]: { + name: '', + hostname: '', + tooltip: '' + }, + [PlatformType.Appletvos]: { + name: '', + hostname: '', + tooltip: '' + }, + [PlatformType.Android]: { + name: '', + hostname: '', + tooltip: '' + }, + [PlatformType.Unity]: { + name: '', + hostname: '', + tooltip: '' } }; - const hostname: Record = { - [Platform.Android]: 'Package Name', - [Platform.Ios]: 'Bundle ID', - [Platform.Linux]: 'Package Name', - [Platform.Macos]: 'Bundle ID', - [Platform.Web]: 'Hostname', - [Platform.Windows]: 'Package Name' + const hostname: Record = { + [PlatformType.Flutterandroid]: 'Package Name', + [PlatformType.Flutterios]: 'Bundle ID', + [PlatformType.Flutterlinux]: 'Package Name', + [PlatformType.Fluttermacos]: 'Bundle ID', + [PlatformType.Flutterweb]: 'Hostname', + [PlatformType.Flutterwindows]: 'Package Name', + // The following are not used, but added to avoid TS errors + [PlatformType.Web]: '', + [PlatformType.Appleios]: '', + [PlatformType.Applemacos]: '', + [PlatformType.Applewatchos]: '', + [PlatformType.Appletvos]: '', + [PlatformType.Android]: '', + [PlatformType.Unity]: '' }; async function beforeSubmit() { @@ -88,9 +134,9 @@ projectId, platform, $createPlatform.name, - platform !== Platform.Web ? $createPlatform.key : undefined, + platform !== PlatformType.Flutterweb ? $createPlatform.key : undefined, undefined, - platform === Platform.Web ? $createPlatform.hostname : undefined + platform === PlatformType.Flutterweb ? $createPlatform.hostname : undefined ); trackEvent(Submit.PlatformCreate, { @@ -102,53 +148,53 @@ } $: registee = { - [Platform.Android]: 'package name', - [Platform.Ios]: 'bundle ID', - [Platform.Linux]: 'package name', - [Platform.Macos]: 'bundle ID', - [Platform.Windows]: 'package name', - [Platform.Web]: 'hostname' + [PlatformType.Flutterandroid]: 'package name', + [PlatformType.Flutterios]: 'Bundle ID', + [PlatformType.Flutterlinux]: 'Package name', + [PlatformType.Fluttermacos]: 'Bundle ID', + [PlatformType.Flutterwindows]: 'Package name', + [PlatformType.Flutterweb]: 'Hostname' }[platform]; - Register your {registee} + {registee} registration

    (platform = Platform.Android)} - selected={platform === Platform.Android}> + on:click={() => (platform = PlatformType.Flutterandroid)} + selected={platform === PlatformType.Flutterandroid}> Android (platform = Platform.Ios)} - selected={platform === Platform.Ios}> + on:click={() => (platform = PlatformType.Flutterios)} + selected={platform === PlatformType.Flutterios}> iOS (platform = Platform.Linux)} - selected={platform === Platform.Linux}> + on:click={() => (platform = PlatformType.Flutterlinux)} + selected={platform === PlatformType.Flutterlinux}> Linux (platform = Platform.Macos)} - selected={platform === Platform.Macos}> + on:click={() => (platform = PlatformType.Fluttermacos)} + selected={platform === PlatformType.Fluttermacos}> macOS (platform = Platform.Windows)} - selected={platform === Platform.Windows}> + on:click={() => (platform = PlatformType.Flutterwindows)} + selected={platform === PlatformType.Flutterwindows}> Windows (platform = Platform.Web)} - selected={platform === Platform.Web}> + on:click={() => (platform = PlatformType.Flutterweb)} + selected={platform === PlatformType.Flutterweb}> Web
    @@ -161,7 +207,7 @@ placeholder={placeholder[platform].name} required bind:value={$createPlatform.name} /> - {#if platform === Platform.Web} + {#if platform === PlatformType.Flutterweb}
    - Get the SDK + Install

    Add Appwrite SDK to your package's pubspec.yaml file. You can diff --git a/src/routes/console/project-[project]/overview/platforms/wizard/flutter/step3.svelte b/src/routes/console/project-[project]/overview/platforms/wizard/flutter/step3.svelte index cc82830e2..3211a6796 100644 --- a/src/routes/console/project-[project]/overview/platforms/wizard/flutter/step3.svelte +++ b/src/routes/console/project-[project]/overview/platforms/wizard/flutter/step3.svelte @@ -18,7 +18,7 @@ client - Initialize SDK + Initialize

    Initialize your SDK

    diff --git a/src/routes/console/project-[project]/overview/platforms/wizard/step4.svelte b/src/routes/console/project-[project]/overview/platforms/wizard/step4.svelte index cc2c48958..a1e237d41 100644 --- a/src/routes/console/project-[project]/overview/platforms/wizard/step4.svelte +++ b/src/routes/console/project-[project]/overview/platforms/wizard/step4.svelte @@ -6,7 +6,7 @@ - You're ready to go 🎉 + All set

    {#if isFirstProject} Congratulations on adding the first platform to your project! Start exploring by diff --git a/src/routes/console/project-[project]/overview/platforms/wizard/web/step1.svelte b/src/routes/console/project-[project]/overview/platforms/wizard/web/step1.svelte index 1a81f686c..661b2472d 100644 --- a/src/routes/console/project-[project]/overview/platforms/wizard/web/step1.svelte +++ b/src/routes/console/project-[project]/overview/platforms/wizard/web/step1.svelte @@ -7,6 +7,7 @@ import { sdk } from '$lib/stores/sdk'; import { createPlatform } from '../store'; import { Submit, trackEvent } from '$lib/actions/analytics'; + import { PlatformType } from '@appwrite.io/console'; const projectId = $page.params.project; const suggestions = ['*.vercel.app', '*.netlify.app', '*.gitpod.io']; @@ -27,7 +28,7 @@ const platform = await sdk.forConsole.projects.createPlatform( projectId, - 'web', + PlatformType.Web, $createPlatform.name, undefined, undefined, @@ -43,7 +44,7 @@ - Register your hostname + Hostname registration - Get the SDK + Install Choose your preferred method of installation

    diff --git a/src/routes/console/project-[project]/overview/store.ts b/src/routes/console/project-[project]/overview/store.ts index ea055c522..2c18cefa9 100644 --- a/src/routes/console/project-[project]/overview/store.ts +++ b/src/routes/console/project-[project]/overview/store.ts @@ -1,12 +1,12 @@ import { sdk } from '$lib/stores/sdk'; import { cachedStore } from '$lib/helpers/cache'; import { writable, type Writable } from 'svelte/store'; -import type { Models } from '@appwrite.io/console'; +import type { Models, ProjectUsageRange } from '@appwrite.io/console'; export const usage = cachedStore< Models.UsageProject, { - load: (start: string, end: string, period: '1h' | '1d') => Promise; + load: (start: string, end: string, period: ProjectUsageRange) => Promise; } >('projectUsage', function ({ set }) { return { diff --git a/src/routes/console/project-[project]/settings/domains/+page.svelte b/src/routes/console/project-[project]/settings/domains/+page.svelte index 6ad7b183b..f281c55b5 100644 --- a/src/routes/console/project-[project]/settings/domains/+page.svelte +++ b/src/routes/console/project-[project]/settings/domains/+page.svelte @@ -1,14 +1,15 @@ - + Custom Domains diff --git a/src/routes/console/project-[project]/settings/domains/+page.ts b/src/routes/console/project-[project]/settings/domains/+page.ts index 556cd66c2..16a598b51 100644 --- a/src/routes/console/project-[project]/settings/domains/+page.ts +++ b/src/routes/console/project-[project]/settings/domains/+page.ts @@ -1,14 +1,15 @@ import { Dependencies } from '$lib/constants'; import { sdk } from '$lib/stores/sdk'; -import { Query } from '@appwrite.io/console'; +import { Query, ResourceType } from '@appwrite.io/console'; import type { PageLoad } from './$types'; -import { ProxyTypes } from '$lib/pages/domains/index.svelte'; export const load: PageLoad = async ({ depends, url }) => { depends(Dependencies.DOMAINS); return { - rules: await sdk.forProject.proxy.listRules([Query.equal('resourceType', ProxyTypes.API)]), + rules: await sdk.forProject.proxy.listRules([ + Query.equal('resourceType', ResourceType.Api) + ]), create: url.searchParams.get('create') !== null }; }; diff --git a/src/routes/console/project-[project]/settings/header.svelte b/src/routes/console/project-[project]/settings/header.svelte index 0a733acd1..919d1f19d 100644 --- a/src/routes/console/project-[project]/settings/header.svelte +++ b/src/routes/console/project-[project]/settings/header.svelte @@ -2,11 +2,13 @@ import { page } from '$app/stores'; import { Tab, Tabs } from '$lib/components'; import { isTabSelected } from '$lib/helpers/load'; + import type { TabElement } from '$lib/helpers/load'; import { Cover, CoverTitle } from '$lib/layout'; + import { isCloud } from '$lib/system'; const projectId = $page.params.project; const path = `/console/project-${projectId}/settings`; - const tabs = [ + const tabs: TabElement[] = [ { href: path, title: 'Overview', @@ -31,14 +33,17 @@ href: `${path}/smtp`, title: 'SMTP', event: 'smtp' - }, - { + } + ]; + + if (isCloud) { + tabs.push({ href: `${path}/usage`, title: 'Usage', event: 'usage', hasChildren: true - } - ]; + }); + } diff --git a/src/routes/console/project-[project]/settings/migrations/(import)/step1.svelte b/src/routes/console/project-[project]/settings/migrations/(import)/step1.svelte index 390b42db6..dc1bdbe8b 100644 --- a/src/routes/console/project-[project]/settings/migrations/(import)/step1.svelte +++ b/src/routes/console/project-[project]/settings/migrations/(import)/step1.svelte @@ -1,19 +1,13 @@ - Select source + Source Select a source platform with the project you want to migrate. {:else if $provider.provider === 'firebase'} - {#if !firebaseProjects?.length} - - - - - +
    - - {:else} - - ({ - label: project.displayName, - value: project.projectId - }))} /> - -

    - -

    - {/if} +
    {:else if $provider.provider === 'supabase'}

    Postgres credentials

    diff --git a/src/routes/console/project-[project]/settings/migrations/(import)/step2.svelte b/src/routes/console/project-[project]/settings/migrations/(import)/step2.svelte index 53c9839cb..6528ed9d7 100644 --- a/src/routes/console/project-[project]/settings/migrations/(import)/step2.svelte +++ b/src/routes/console/project-[project]/settings/migrations/(import)/step2.svelte @@ -7,7 +7,7 @@ - Select source + Resources Select the resources you need to migrate to Appwrite. Some resources can be migrated, but with limitations.
    migration.$id === migrationId); - $: show = !!details; + $: show = !!details && migrationId !== null; type StatusCounters = { [resource in 'Database' | 'Collection' | 'Function' | 'Users']?: StatusCounter; @@ -106,7 +107,10 @@
    - {entity + 's'} + {total(Object.values(entityCounter)) > 1 + ? ResourcesFriendly[entity].plural + : ResourcesFriendly[entity].singular} {totalItems(entityCounter)}
    diff --git a/src/routes/console/project-[project]/settings/smtp/+page.svelte b/src/routes/console/project-[project]/settings/smtp/+page.svelte index a0d273781..cd7a89572 100644 --- a/src/routes/console/project-[project]/settings/smtp/+page.svelte +++ b/src/routes/console/project-[project]/settings/smtp/+page.svelte @@ -23,6 +23,8 @@ import { organization } from '$lib/stores/organization'; import { wizard } from '$lib/stores/wizard'; import ChangeOrganizationTierCloud from '$routes/console/changeOrganizationTierCloud.svelte'; + import { SMTPSecure } from '@appwrite.io/console'; + import InputSelect from '$lib/elements/forms/inputSelect.svelte'; let enabled = false; let senderName: string; @@ -32,7 +34,13 @@ let port: number; let username: string; let password: string; - let secure = false; + let secure: string; + + const options = [ + { value: 'tls', label: 'TLS' }, + { value: 'ssl', label: 'SSL' }, + { value: '', label: 'None' } + ]; onMount(() => { enabled = $project.smtpEnabled ?? false; @@ -43,7 +51,7 @@ port = $project.smtpPort; username = $project.smtpUsername; password = $project.smtpPassword; - secure = $project.smtpSecure === 'tls'; + secure = $project.smtpSecure === 'tls' ? 'tls' : $project.smtpSecure === 'ssl' ? 'ssl' : ''; }); async function updateSmtp() { @@ -58,7 +66,7 @@ username = undefined; password = undefined; } - await sdk.forConsole.projects.updateSmtpConfiguration( + await sdk.forConsole.projects.updateSmtp( $project.$id, enabled, senderName ? senderName : undefined, @@ -68,7 +76,7 @@ port ? port : undefined, username ? username : undefined, password ? password : undefined, - secure ? 'tls' : undefined + secure ? SMTPSecure.Tls : undefined ); invalidate(Dependencies.PROJECT); @@ -97,7 +105,7 @@ port: $project.smtpPort, username: $project.smtpUsername, password: $project.smtpPassword, - secure: $project.smtpSecure === 'tls' + secure: $project.smtpSecure } ); @@ -109,7 +117,7 @@ port = undefined; username = undefined; password = undefined; - secure = false; + secure = undefined; } @@ -182,19 +190,19 @@ id="username" label="Username" bind:value={username} - required placeholder="Enter username" /> - - - Enable if TLS is supported on your SMTP server. - + {/if} {/if} diff --git a/src/routes/console/project-[project]/settings/transferProject.svelte b/src/routes/console/project-[project]/settings/transferProject.svelte index 735f3e75d..9f73063b6 100644 --- a/src/routes/console/project-[project]/settings/transferProject.svelte +++ b/src/routes/console/project-[project]/settings/transferProject.svelte @@ -14,20 +14,7 @@ const handleTransfer = async () => { try { - await sdk.forConsole.client.call( - 'PATCH', - new URL( - sdk.forConsole.client.config.endpoint + '/projects/' + $project.$id + '/team' - ), - { - 'X-Appwrite-Project': sdk.forConsole.client.config.project, - 'content-type': 'application/json' - }, - { - teamId: teamId - } - ); - // await sdk.forConsole.projects.update($project.$id, password); + await sdk.forConsole.projects.updateTeam($project.$id, teamId); show = false; addNotification({ type: 'success', diff --git a/src/routes/console/project-[project]/settings/updateName.svelte b/src/routes/console/project-[project]/settings/updateName.svelte index 2163a2322..a6c93dc79 100644 --- a/src/routes/console/project-[project]/settings/updateName.svelte +++ b/src/routes/console/project-[project]/settings/updateName.svelte @@ -56,7 +56,7 @@ secondary event="view_keys" href={`${base}/console/project-${projectId}/overview/keys#integrations`}> - View API Keys + View API keys diff --git a/src/routes/console/project-[project]/settings/updateServices.svelte b/src/routes/console/project-[project]/settings/updateServices.svelte index f063c6f9f..0318f8866 100644 --- a/src/routes/console/project-[project]/settings/updateServices.svelte +++ b/src/routes/console/project-[project]/settings/updateServices.svelte @@ -53,18 +53,7 @@ } try { - const path = '/projects/' + $project.$id + '/service/all'; - await sdk.forConsole.client.call( - 'PATCH', - new URL(sdk.forConsole.client.config.endpoint + path), - { - 'X-Appwrite-Project': sdk.forConsole.client.config.project, - 'content-type': 'application/json' - }, - { - status: status - } - ); + await sdk.forConsole.projects.updateServiceStatusAll($project.$id, status); invalidate(Dependencies.PROJECT); addNotification({ type: 'success', diff --git a/src/routes/console/project-[project]/settings/usage/[[invoice]]/+page.ts b/src/routes/console/project-[project]/settings/usage/[[invoice]]/+page.ts index d29b1e799..2cb455ae0 100644 --- a/src/routes/console/project-[project]/settings/usage/[[invoice]]/+page.ts +++ b/src/routes/console/project-[project]/settings/usage/[[invoice]]/+page.ts @@ -1,24 +1,22 @@ +import type { Aggregation, Invoice } from '$lib/sdk/billing'; +import { accumulateUsage } from '$lib/sdk/usage'; import { getSdkForProject, sdk } from '$lib/stores/sdk'; import { Query } from '@appwrite.io/console'; import type { PageLoad } from './$types'; -import type { Organization } from '$lib/stores/organization'; -import type { Aggregation, Invoice } from '$lib/sdk/billing'; -import { accumulateUsage } from '$lib/sdk/usage'; export const load: PageLoad = async ({ params, parent }) => { const { invoice, project } = params; - const parentData = await parent(); - const org = parentData.organization as Organization; + const { organization } = await parent(); - let startDate: string = org.billingCurrentInvoiceDate; - let endDate: string = org.billingNextInvoiceDate; + let startDate: string = organization.billingCurrentInvoiceDate; + let endDate: string = organization.billingNextInvoiceDate; let currentInvoice: Invoice = undefined; let currentAggregation: Aggregation = undefined; if (invoice) { - currentInvoice = await sdk.forConsole.billing.getInvoice(org.$id, invoice); + currentInvoice = await sdk.forConsole.billing.getInvoice(organization.$id, invoice); currentAggregation = await sdk.forConsole.billing.getAggregation( - org.$id, + organization.$id, currentInvoice.aggregationId ); @@ -27,7 +25,7 @@ export const load: PageLoad = async ({ params, parent }) => { } const [invoices, usage] = await Promise.all([ - sdk.forConsole.billing.listInvoices(org.$id, [Query.orderDesc('from')]), + sdk.forConsole.billing.listInvoices(organization.$id, [Query.orderDesc('from')]), /** * Workaround because project id might not be populated yet. */ diff --git a/src/routes/console/project-[project]/settings/webhooks/+page.svelte b/src/routes/console/project-[project]/settings/webhooks/+page.svelte index d20533a1f..ea1a2cbe6 100644 --- a/src/routes/console/project-[project]/settings/webhooks/+page.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/+page.svelte @@ -7,8 +7,7 @@ +
    diff --git a/src/routes/console/project-[project]/settings/webhooks/[webhook]/details.svelte b/src/routes/console/project-[project]/settings/webhooks/[webhook]/details.svelte new file mode 100644 index 000000000..37424e263 --- /dev/null +++ b/src/routes/console/project-[project]/settings/webhooks/[webhook]/details.svelte @@ -0,0 +1,89 @@ + + + + {$webhook.url} + + +
    +
      + + + + +
    • Created: {toLocaleDateTime($webhook.$createdAt)}
    • +
    • Last updated: {toLocaleDateTime($webhook.$updatedAt)}
    • +
    + +
    +
    + + +
    + {#if $webhook.logs.length > 0} + + {/if} + + +
    +
    +
    + + diff --git a/src/routes/console/project-[project]/settings/webhooks/[webhook]/header.svelte b/src/routes/console/project-[project]/settings/webhooks/[webhook]/header.svelte index 9a09cbb01..8debdc385 100644 --- a/src/routes/console/project-[project]/settings/webhooks/[webhook]/header.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/[webhook]/header.svelte @@ -12,6 +12,6 @@ {$webhook?.name} - Webhook ID + {$webhook?.$id} diff --git a/src/routes/console/project-[project]/settings/webhooks/[webhook]/updateEvents.svelte b/src/routes/console/project-[project]/settings/webhooks/[webhook]/updateEvents.svelte index 16b224463..5852e3d74 100644 --- a/src/routes/console/project-[project]/settings/webhooks/[webhook]/updateEvents.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/[webhook]/updateEvents.svelte @@ -32,6 +32,7 @@ Array.from($eventSet), $webhook.url, $webhook.security, + true, $webhook.httpUser || undefined, $webhook.httpPass || undefined ); diff --git a/src/routes/console/project-[project]/settings/webhooks/[webhook]/updateName.svelte b/src/routes/console/project-[project]/settings/webhooks/[webhook]/updateName.svelte index 5a6c97887..fcbca7cd7 100644 --- a/src/routes/console/project-[project]/settings/webhooks/[webhook]/updateName.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/[webhook]/updateName.svelte @@ -26,6 +26,7 @@ $webhook.events, $webhook.url, $webhook.security, + true, $webhook.httpUser || undefined, $webhook.httpPass || undefined ); diff --git a/src/routes/console/project-[project]/settings/webhooks/[webhook]/updateSecurity.svelte b/src/routes/console/project-[project]/settings/webhooks/[webhook]/updateSecurity.svelte index 1cc4681e6..afdbaed62 100644 --- a/src/routes/console/project-[project]/settings/webhooks/[webhook]/updateSecurity.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/[webhook]/updateSecurity.svelte @@ -37,6 +37,7 @@ $webhook.events, $webhook.url, security, + true, httpUser || undefined, httpPass || undefined ); diff --git a/src/routes/console/project-[project]/settings/webhooks/[webhook]/updateURL.svelte b/src/routes/console/project-[project]/settings/webhooks/[webhook]/updateURL.svelte index 47e3abf37..c37169404 100644 --- a/src/routes/console/project-[project]/settings/webhooks/[webhook]/updateURL.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/[webhook]/updateURL.svelte @@ -26,6 +26,7 @@ $webhook.events, url, $webhook.security, + true, $webhook.httpUser || undefined, $webhook.httpPass || undefined ); diff --git a/src/routes/console/project-[project]/settings/webhooks/createWebhook.svelte b/src/routes/console/project-[project]/settings/webhooks/createWebhook.svelte index 742b12d69..bd57ab71b 100644 --- a/src/routes/console/project-[project]/settings/webhooks/createWebhook.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/createWebhook.svelte @@ -23,6 +23,7 @@ $createWebhook.events, $createWebhook.url, $createWebhook.security, + true, $createWebhook.httpUser || undefined, $createWebhook.httpPass || undefined ); diff --git a/src/routes/console/project-[project]/settings/webhooks/failedModal.svelte b/src/routes/console/project-[project]/settings/webhooks/failedModal.svelte new file mode 100644 index 000000000..67437a82b --- /dev/null +++ b/src/routes/console/project-[project]/settings/webhooks/failedModal.svelte @@ -0,0 +1,52 @@ + + + +
    +
    +

    +

    + + {#if showUpdateButton} + + {/if} +
    + +

    + The connection to {webhook.url} stopped after {webhook.attempts} consecutive failures. Please + refer to the logs below for more information or try to update the webhook to resolve this + issue. +

    +
    + +
    +
    + + + + +
    diff --git a/src/routes/console/project-[project]/settings/webhooks/messageStatusPill.svelte b/src/routes/console/project-[project]/settings/webhooks/messageStatusPill.svelte new file mode 100644 index 000000000..2c12a4ee0 --- /dev/null +++ b/src/routes/console/project-[project]/settings/webhooks/messageStatusPill.svelte @@ -0,0 +1,16 @@ + + + + + + diff --git a/src/routes/console/project-[project]/settings/webhooks/store.ts b/src/routes/console/project-[project]/settings/webhooks/store.ts new file mode 100644 index 000000000..4d7bfd323 --- /dev/null +++ b/src/routes/console/project-[project]/settings/webhooks/store.ts @@ -0,0 +1,17 @@ +// import { page } from '$app/stores'; +import type { Column } from '$lib/helpers/types'; +// import type { Models } from '@appwrite.io/console'; +import { writable } from 'svelte/store'; + +// export const database = derived(page, ($page) => $page.data.database as Models.Database); +// export const showCreate = writable(false); + +export const columns = writable([ + { id: '$id', title: 'Webhook ID', type: 'string', show: true, width: 150 }, + { id: 'name', title: 'Name', type: 'string', show: true, width: 120 }, + { id: 'url', title: 'Post URL', type: 'string', show: true, width: 120 }, + { id: 'events', title: 'Events', type: 'string', show: true, width: 60 }, + { id: 'enabled', title: 'Status', type: 'string', show: true, width: 150 }, + { id: '$createdAt', title: 'Created', type: 'datetime', show: true, width: 120 }, + { id: '$updatedAt', title: 'Updated', type: 'datetime', show: true, width: 120 } +]); diff --git a/src/routes/console/project-[project]/settings/webhooks/wizard/step1.svelte b/src/routes/console/project-[project]/settings/webhooks/wizard/step1.svelte index 4045874d7..c48e6b0ab 100644 --- a/src/routes/console/project-[project]/settings/webhooks/wizard/step1.svelte +++ b/src/routes/console/project-[project]/settings/webhooks/wizard/step1.svelte @@ -6,7 +6,7 @@ - Add your webhook + Configuration Use webhooks to build integrations that subscribe to specific events on Appwrite. Appwrite will send an HTTP POST payload to the webhook's configured URL when one of the specified diff --git a/src/routes/console/project-[project]/storage/bucket-[bucket]/+layout.ts b/src/routes/console/project-[project]/storage/bucket-[bucket]/+layout.ts index 5b554f477..85e862d89 100644 --- a/src/routes/console/project-[project]/storage/bucket-[bucket]/+layout.ts +++ b/src/routes/console/project-[project]/storage/bucket-[bucket]/+layout.ts @@ -15,6 +15,6 @@ export const load: LayoutLoad = async ({ params, depends }) => { bucket: await sdk.forProject.storage.getBucket(params.bucket) }; } catch (e) { - throw error(e.code, e.message); + error(e.code, e.message); } }; diff --git a/src/routes/console/project-[project]/storage/bucket-[bucket]/+page.svelte b/src/routes/console/project-[project]/storage/bucket-[bucket]/+page.svelte index d02d6dd5c..648548e50 100644 --- a/src/routes/console/project-[project]/storage/bucket-[bucket]/+page.svelte +++ b/src/routes/console/project-[project]/storage/bucket-[bucket]/+page.svelte @@ -33,17 +33,23 @@ TableRowLink } from '$lib/elements/table'; import { toLocaleDate } from '$lib/helpers/date'; - import { bytesToSize, calculateSize } from '$lib/helpers/sizeConvertion'; + import { + bytesToSize, + calculateSize, + humanFileSize, + sizeToBytes + } from '$lib/helpers/sizeConvertion'; import { Container, ContainerHeader } from '$lib/layout'; import type { Models } from '@appwrite.io/console'; import { addNotification } from '$lib/stores/notifications'; import { uploader } from '$lib/stores/uploader'; import { wizard } from '$lib/stores/wizard'; import { tooltip } from '$lib/actions/tooltip'; - import { showUsageRatesModal } from '$lib/stores/billing'; + import { getServiceLimit, showUsageRatesModal } from '$lib/stores/billing'; import { sdk } from '$lib/stores/sdk.js'; import Create from './create-file/create.svelte'; import DeleteFile from './deleteFile.svelte'; + import { isCloud } from '$lib/system'; export let data; @@ -53,9 +59,12 @@ const projectId = $page.params.project; const bucketId = $page.params.bucket; - const usedStorage = bytesToSize(data.organizationUsage.storageTotal, 'GB'); + const usedStorage = + isCloud && data?.organizationUsage?.storageTotal + ? bytesToSize(data.organizationUsage.storageTotal, 'GB') + : null; const getPreview = (fileId: string) => - sdk.forProject.storage.getFilePreview(bucketId, fileId, 32, 32).toString() + '&mode=admin'; + sdk.forProject.storage.getFilePreview(bucketId, fileId, 64, 64).toString() + '&mode=admin'; async function fileDeleted(event: CustomEvent) { showDelete = false; @@ -77,6 +86,10 @@ trackError(error, Submit.FileDelete); } } + + $: maxFileSize = isCloud + ? humanFileSize(sizeToBytes(getServiceLimit('fileSize'), 'MB', 1000)) + : null; @@ -101,10 +114,12 @@ {#if tier === 'Starter'}

    - You are limited to {limit} GB of storage on the {tier} plan. + You are limited to {limit} GB of total storage and {Math.floor( + parseInt(maxFileSize.value) + )}{maxFileSize.unit} on the {tier} plan. - for addtional storage. + for additional storage.

    {:else}

    Set the maximum file size allowed in the bucket.

    {#if isCloud} - {@const size = humanFileSize(sizeToBytes(service, 'GB', 1024))} + {@const size = humanFileSize(sizeToBytes(service, 'MB', 1000))} {@const plan = tierToPlan($organization?.billingPlan)}

    diff --git a/src/routes/console/project-[project]/storage/bucket-[bucket]/usage/[[period]]/+page.ts b/src/routes/console/project-[project]/storage/bucket-[bucket]/usage/[[period]]/+page.ts index f01198060..de6a068c6 100644 --- a/src/routes/console/project-[project]/storage/bucket-[bucket]/usage/[[period]]/+page.ts +++ b/src/routes/console/project-[project]/storage/bucket-[bucket]/usage/[[period]]/+page.ts @@ -1,11 +1,16 @@ import { sdk } from '$lib/stores/sdk'; import type { Metric, UsageBuckets } from '$lib/sdk/usage'; import type { PageLoad } from './$types'; +import { StorageUsageRange } from '@appwrite.io/console'; +import { isValueOfStringEnum } from '$lib/helpers/types'; export const load: PageLoad = async ({ params }) => { + const period = isValueOfStringEnum(StorageUsageRange, params.period) + ? params.period + : StorageUsageRange.ThirtyDays; const response = (await sdk.forProject.storage.getBucketUsage( params.bucket, - params.period ?? '30d' + period )) as unknown as UsageBuckets; return { diff --git a/src/routes/console/project-[project]/storage/usage/[[period]]/+page.ts b/src/routes/console/project-[project]/storage/usage/[[period]]/+page.ts index 9c4f23b73..6c174caa7 100644 --- a/src/routes/console/project-[project]/storage/usage/[[period]]/+page.ts +++ b/src/routes/console/project-[project]/storage/usage/[[period]]/+page.ts @@ -1,19 +1,16 @@ -import type { Metric, UsageStorage } from '$lib/sdk/usage'; +import { isValueOfStringEnum } from '$lib/helpers/types'; import { sdk } from '$lib/stores/sdk'; +import { StorageUsageRange } from '@appwrite.io/console'; import type { PageLoad } from './$types'; import { error } from '@sveltejs/kit'; export const load: PageLoad = async ({ params }) => { try { - const response = (await sdk.forProject.storage.getUsage( - params.period ?? '30d' - )) as unknown as UsageStorage; - - return { - bucketsTotal: response.bucketsTotal, - buckets: response.buckets as Metric[] - }; + const period = isValueOfStringEnum(StorageUsageRange, params.period) + ? params.period + : StorageUsageRange.ThirtyDays; + return sdk.forProject.storage.getUsage(period); } catch (e) { - throw error(e.code, e.message); + error(e.code, e.message); } }; diff --git a/src/routes/console/store.ts b/src/routes/console/store.ts index af3eb65ee..662572c6f 100644 --- a/src/routes/console/store.ts +++ b/src/routes/console/store.ts @@ -1,5 +1,6 @@ import { page } from '$app/stores'; import type { HeaderAlert } from '$lib/stores/headerAlert'; +import type { Organization } from '$lib/stores/organization'; import type { Models } from '@appwrite.io/console'; import { derived, writable } from 'svelte/store'; @@ -9,6 +10,5 @@ export const consoleVariables = derived( ($page) => $page.data.consoleVariables as Models.ConsoleVariables ); -export const showPostReleaseModal = writable(false); - export const activeHeaderAlert = writable(null); +export const orgMissingPaymentMethod = writable(null); diff --git a/src/routes/console/wizard/cloudOrganization/addressDetails.svelte b/src/routes/console/wizard/cloudOrganization/addressDetails.svelte index 608833f9c..00439227e 100644 --- a/src/routes/console/wizard/cloudOrganization/addressDetails.svelte +++ b/src/routes/console/wizard/cloudOrganization/addressDetails.svelte @@ -6,6 +6,7 @@ import { createOrganization } from './store'; import type { AddressesList } from '$lib/sdk/billing'; import { RadioBoxes } from '$lib/components'; + import { Submit, trackError, trackEvent } from '$lib/actions/analytics'; let options = [ { @@ -33,7 +34,9 @@ addressLine2 ? addressLine2 : undefined ); $createOrganization.billingAddressId = response.$id; + trackEvent(Submit.BillingAddressCreate); } catch (error) { + trackError(error, Submit.BillingAddressCreate); throw new Error(error.message); } } diff --git a/src/routes/console/wizard/cloudOrganization/confirmDetails.svelte b/src/routes/console/wizard/cloudOrganization/confirmDetails.svelte index 58aedf179..cf3363ab9 100644 --- a/src/routes/console/wizard/cloudOrganization/confirmDetails.svelte +++ b/src/routes/console/wizard/cloudOrganization/confirmDetails.svelte @@ -1,9 +1,12 @@ - Confirm your details + Details Confirm the details of your new organization and start your free trial. @@ -77,19 +87,37 @@ {/if} {#if $createOrganization.billingPlan !== BillingPlan.STARTER} + ($createOrganization.couponCode = e.detail.code)} />

    {plan.name} plan

    -

    ${plan.price}

    +

    {formatCurrency(plan.price)}

    Additional members ({collaboratorsNumber})

    -

    ${collaboratorPrice * collaboratorsNumber}

    +

    {formatCurrency(collaboratorPrice * collaboratorsNumber)}

    + {#if couponData?.status === 'active'} + +

    Credits applied ({couponData.credits})

    +

    -{formatCurrency(couponData.credits)}

    +
    + {/if}
    {/if} + {@const estimatedTotal = + couponData?.status === 'active' + ? totalExpences - couponData.credits >= 0 + ? totalExpences - couponData.credits + : 0 + : totalExpences}

    Estimated total

    -

    ${totalExpences}

    +

    + {formatCurrency(estimatedTotal)} +

    {#if $createOrganization.billingPlan !== BillingPlan.STARTER} diff --git a/src/routes/console/wizard/cloudOrganization/inviteMembers.svelte b/src/routes/console/wizard/cloudOrganization/inviteMembers.svelte index 3c84e8c81..1bfe98fc6 100644 --- a/src/routes/console/wizard/cloudOrganization/inviteMembers.svelte +++ b/src/routes/console/wizard/cloudOrganization/inviteMembers.svelte @@ -11,6 +11,7 @@ TableHeader, TableRow } from '$lib/elements/table'; + import { formatCurrency } from '$lib/helpers/numbers'; import { WizardStep } from '$lib/layout'; import { plansInfo } from '$lib/stores/billing'; import { createOrganization } from './store'; @@ -35,7 +36,7 @@ - Invite organization members + Invites Invite team members to collaborate with you in the Appwrite console. Members will have access to all services and payment data within your organization. @@ -47,8 +48,8 @@ added will receive an email invite to your organization on completion. {:else if $createOrganization.billingPlan === BillingPlan.PRO} You can add unlimited organization members on the {plan.name} plan for - ${plan.addons.member.price} each per month. Each member added will receive an - email invite to your organization on completion. + {formatCurrency(plan.addons.member.price)} each per month. Each member added will + receive an email invite to your organization on completion. {/if} @@ -81,7 +82,7 @@ {collaborator} {#if $createOrganization.billingPlan === BillingPlan.PRO} - 15$ + {formatCurrency(15)} {/if}
    @@ -100,8 +101,8 @@

    - {tierPro.name} - ${proPlan.price}/month per organization member + exta - usage + {tierPro.name} - {formatCurrency(proPlan?.price ?? 0)}/month per + organization member + exta usage

    {tierPro.description} @@ -122,7 +123,8 @@ class="u-flex u-flex-vertical u-gap-4 u-width-full-line" class:u-opacity-50={disabled}>

    - {tierScale.name} - ${scalePlan.price}/month + extra usage + {tierScale.name} - {formatCurrency(scalePlan?.price ?? 0)}/month + extra + usage

    {tierScale.description} diff --git a/src/routes/console/wizard/cloudOrganization/store.ts b/src/routes/console/wizard/cloudOrganization/store.ts index 0c2e71e7a..613259fe0 100644 --- a/src/routes/console/wizard/cloudOrganization/store.ts +++ b/src/routes/console/wizard/cloudOrganization/store.ts @@ -15,6 +15,7 @@ export const createOrganization = writable<{ collaborators?: string[]; billingBudget?: number; taxId?: string; + couponCode?: string; }>({ id: null, name: null, @@ -22,5 +23,6 @@ export const createOrganization = writable<{ paymentMethodId: null, collaborators: [], billingAddressId: null, - taxId: null + taxId: null, + couponCode: null }); diff --git a/src/routes/console/wizard/cloudOrganization/usageRates.svelte b/src/routes/console/wizard/cloudOrganization/usageRates.svelte index e90faac66..ac8fb21c5 100644 --- a/src/routes/console/wizard/cloudOrganization/usageRates.svelte +++ b/src/routes/console/wizard/cloudOrganization/usageRates.svelte @@ -13,7 +13,7 @@ import { organization } from '$lib/stores/organization'; import { createOrganization } from './store'; import { plansInfo, type Tier } from '$lib/stores/billing'; - import { abbreviateNumber } from '$lib/helpers/numbers'; + import { abbreviateNumber, formatCurrency } from '$lib/helpers/numbers'; import { BillingPlan } from '$lib/constants'; export let show = false; @@ -87,7 +87,7 @@ {#if !isFree} - ${plan.addons.member.price}/{usage?.unit} + {formatCurrency(plan.addons.member.price)}/{usage?.unit} {/if} @@ -100,7 +100,9 @@ {#if !isFree} - ${addon?.price}/{['MB', 'GB', 'TB'].includes(addon?.unit) + {formatCurrency(addon?.price)}/{['MB', 'GB', 'TB'].includes( + addon?.unit + ) ? addon?.value : abbreviateNumber(addon?.value, 0)}{usage?.unit} diff --git a/src/routes/console/wizard/cloudOrganizationChangeTier/addressDetails.svelte b/src/routes/console/wizard/cloudOrganizationChangeTier/addressDetails.svelte index 5bd9ebaf5..88b2214aa 100644 --- a/src/routes/console/wizard/cloudOrganizationChangeTier/addressDetails.svelte +++ b/src/routes/console/wizard/cloudOrganizationChangeTier/addressDetails.svelte @@ -7,6 +7,7 @@ import { organization } from '$lib/stores/organization'; import type { AddressesList } from '$lib/sdk/billing'; import { RadioBoxes } from '$lib/components'; + import { Submit, trackError, trackEvent } from '$lib/actions/analytics'; let options = [ { @@ -34,7 +35,9 @@ addressLine2 ? addressLine2 : undefined ); $changeOrganizationTier.billingAddressId = response.$id; + trackEvent(Submit.BillingAddressCreate); } catch (error) { + trackError(error, Submit.BillingAddressCreate); throw new Error(error.message); } } diff --git a/src/routes/console/wizard/cloudOrganizationChangeTier/choosePlan.svelte b/src/routes/console/wizard/cloudOrganizationChangeTier/choosePlan.svelte index 76ff8498e..2327bd948 100644 --- a/src/routes/console/wizard/cloudOrganizationChangeTier/choosePlan.svelte +++ b/src/routes/console/wizard/cloudOrganizationChangeTier/choosePlan.svelte @@ -12,6 +12,7 @@ import { sizeToBytes } from '$lib/helpers/sizeConvertion'; import { Pill } from '$lib/elements'; import { BillingPlan } from '$lib/constants'; + import { formatCurrency } from '$lib/helpers/numbers'; let usage: OrganizationUsage = null; let members: Models.MembershipList = null; @@ -102,7 +103,7 @@ - Choose a plan + Plan selection

    Plan

    @@ -127,7 +128,7 @@ class="u-flex u-flex-vertical u-gap-4 u-width-full-line" class:u-opacity-50={disabled}>

    - {tierFree.name} - ${freePlan.price}/month + {tierFree.name} - {formatCurrency(freePlan.price)}/month

    {tierFree.description}

    @@ -150,8 +151,8 @@ class="u-flex u-flex-vertical u-gap-4 u-width-full-line" class:u-opacity-50={disabled}>

    - {tierPro.name} - ${proPlan.price}/month per organization member + extra - usage + {tierPro.name} - {formatCurrency(proPlan.price)}/month per organization + member + extra usage

    {tierPro.description} @@ -178,7 +179,7 @@ class="u-flex u-flex-vertical u-gap-4 u-width-full-line" class:u-opacity-50={disabled}>

    - {tierScale.name} - ${scalePlan.price}/month + extra usage + {tierScale.name} - {formatCurrency(scalePlan.price)}/month + extra usage

    {tierScale.description} diff --git a/src/routes/console/wizard/cloudOrganizationChangeTier/confirmDetails.svelte b/src/routes/console/wizard/cloudOrganizationChangeTier/confirmDetails.svelte index e3c33693b..cc487c579 100644 --- a/src/routes/console/wizard/cloudOrganizationChangeTier/confirmDetails.svelte +++ b/src/routes/console/wizard/cloudOrganizationChangeTier/confirmDetails.svelte @@ -2,14 +2,20 @@ import { Box, CreditCardBrandImage } from '$lib/components'; import { CouponInput } from '$lib/components/billing'; import { BillingPlan } from '$lib/constants'; - import { FormList, InputTextarea } from '$lib/elements/forms'; + import { FormList, InputSelect, InputTextarea } from '$lib/elements/forms'; import { toLocaleDate } from '$lib/helpers/date'; + import { formatCurrency } from '$lib/helpers/numbers'; import { WizardStep } from '$lib/layout'; import type { Coupon } from '$lib/sdk/billing'; import { plansInfo } from '$lib/stores/billing'; import { organization } from '$lib/stores/organization'; import { sdk } from '$lib/stores/sdk'; - import { changeOrganizationFinalAction, changeOrganizationTier, isUpgrade } from './store'; + import { + changeOrganizationFinalAction, + changeOrganizationTier, + feedbackDowngradeOptions, + isUpgrade + } from './store'; const plan = $plansInfo.get($changeOrganizationTier.billingPlan); const collaboratorPrice = plan?.addons.member?.price ?? 0; @@ -27,7 +33,6 @@ status: null, credits: null }; - let comment: string = null; async function fetchCard() { try { @@ -48,23 +53,29 @@ {#if downgradeToStarter} - Confirm plan change + Change confirmation - Your feedback is important to us and helps us improve the services Appwrite offer. If - there is a specific reason you chose to change your plan at this time, please let us - know. + Your feedback is important to us and helps us improve the services Appwrite offers. + Please let us know if there is a specific reason for changing your plan. + + placeholder="Enter feedback" + bind:value={$changeOrganizationTier.feedbackMessage} /> {:else} - Confirm your details + Details Confirm the details of your new organization and start your free trial. @@ -97,35 +108,37 @@ {/if} - ($changeOrganizationTier.couponCode = e.detail.code)} /> {#if $changeOrganizationTier.billingPlan !== BillingPlan.STARTER} + ($changeOrganizationTier.couponCode = e.detail.code)} />

    {plan.name} plan

    -

    ${plan.price}

    +

    {formatCurrency(plan.price)}

    Additional members ({collaboratorsNumber})

    -

    ${collaboratorPrice * collaboratorsNumber}

    +

    {formatCurrency(collaboratorPrice * collaboratorsNumber)}

    {#if couponData?.status === 'active'}

    Credits applied ({couponData.credits})

    -

    -${couponData.credits}

    +

    -{formatCurrency(couponData.credits)}

    {/if} {/if} + {@const estimatedTotal = + couponData?.status === 'active' + ? totalExpences - couponData.credits >= 0 + ? totalExpences - couponData.credits + : 0 + : totalExpences}

    Estimated total

    - ${couponData?.status === 'active' - ? totalExpences - couponData.credits >= 0 - ? totalExpences - couponData.credits - : 0 - : totalExpences} + {formatCurrency(estimatedTotal)}

    diff --git a/src/routes/console/wizard/cloudOrganizationChangeTier/inviteMembers.svelte b/src/routes/console/wizard/cloudOrganizationChangeTier/inviteMembers.svelte index 32e30c8b3..0695e7e0f 100644 --- a/src/routes/console/wizard/cloudOrganizationChangeTier/inviteMembers.svelte +++ b/src/routes/console/wizard/cloudOrganizationChangeTier/inviteMembers.svelte @@ -18,6 +18,7 @@ import { user } from '$lib/stores/user'; import { organization } from '$lib/stores/organization'; import { BillingPlan } from '$lib/constants'; + import { formatCurrency } from '$lib/helpers/numbers'; const plan = $plansInfo.get($changeOrganizationTier.billingPlan); @@ -51,7 +52,7 @@ - Invite organization members + Invites Invite team members to collaborate with you in the Appwrite console. Members will have access to all services and payment data within your organization. @@ -63,8 +64,8 @@ added will receive an email invite to your organization on completion. {:else if $changeOrganizationTier.billingPlan === BillingPlan.PRO} You can add unlimited organization members on the {plan.name} plan for - ${plan.addons.member.price} each per month. Each member added will receive an - email invite to your organization on completion. + {formatCurrency(plan.addons.member.price)} each per month. Each member added will + receive an email invite to your organization on completion. {/if} @@ -97,7 +98,7 @@ {collaborator} {#if $changeOrganizationTier.billingPlan === BillingPlan.PRO} - 15$ + {formatCurrency(15)} {/if} + + + + + diff --git a/src/routes/recover/+page.svelte b/src/routes/recover/+page.svelte index e40b7cc38..95c294ad1 100644 --- a/src/routes/recover/+page.svelte +++ b/src/routes/recover/+page.svelte @@ -47,7 +47,10 @@ async function setPassword() { try { - await sdk.forConsole.account.updateRecovery(userId, secret, password, confirmPassword); + if (password !== confirmPassword) { + throw new Error('Passwords do not match'); + } + await sdk.forConsole.account.updateRecovery(userId, secret, password); await goto(`${base}/login`); addNotification({ type: 'success', diff --git a/src/routes/register/+page.svelte b/src/routes/register/+page.svelte index f2c15e4f3..ccc179174 100644 --- a/src/routes/register/+page.svelte +++ b/src/routes/register/+page.svelte @@ -16,9 +16,10 @@ import FormList from '$lib/elements/forms/formList.svelte'; import { Dependencies } from '$lib/constants'; import { Submit, trackError, trackEvent } from '$lib/actions/analytics'; - import { ID } from '@appwrite.io/console'; + import { ID, OAuthProvider } from '@appwrite.io/console'; import { isCloud } from '$lib/system'; import { page } from '$app/stores'; + import { redirectTo } from '$routes/store'; let name: string, mail: string, pass: string, disabled: boolean; let terms = false; @@ -27,8 +28,15 @@ try { disabled = true; await sdk.forConsole.account.create(ID.unique(), mail, pass, name ?? ''); - await sdk.forConsole.account.createEmailSession(mail, pass); + await sdk.forConsole.account.createEmailPasswordSession(mail, pass); + + if ($redirectTo) { + window.location.href = $redirectTo; + return; + } + await invalidate(Dependencies.ACCOUNT); + if ($page.url.searchParams) { const redirect = $page.url.searchParams.get('redirect'); $page.url.searchParams.delete('redirect'); @@ -53,7 +61,7 @@ function onGithubLogin() { sdk.forConsole.account.createOAuth2Session( - 'github', + OAuthProvider.Github, window.location.origin, window.location.origin, ['read:user', 'user:email'] diff --git a/src/routes/register/invite/+layout.ts b/src/routes/register/invite/+layout.ts index 48f546c98..852e7ae89 100644 --- a/src/routes/register/invite/+layout.ts +++ b/src/routes/register/invite/+layout.ts @@ -4,6 +4,6 @@ import type { LayoutLoad } from './$types'; export const load: LayoutLoad = async () => { if (isSelfHosted) { - throw error(501, 'Not available in self hosted.'); + error(501, 'Not available in self hosted.'); } }; diff --git a/src/routes/register/invite/[slug]/+page.svelte b/src/routes/register/invite/[slug]/+page.svelte index fa7cacb81..6b606bf18 100644 --- a/src/routes/register/invite/[slug]/+page.svelte +++ b/src/routes/register/invite/[slug]/+page.svelte @@ -72,7 +72,7 @@ if (!res.ok) { throw new Error((await res.json()).message); } else { - await sdk.forConsole.account.createEmailSession(mail, pass); + await sdk.forConsole.account.createEmailPasswordSession(mail, pass); const prefs = await sdk.forConsole.account.getPrefs(); const newPrefs = { ...prefs, code }; await sdk.forConsole.account.updatePrefs(newPrefs); diff --git a/src/routes/store.ts b/src/routes/store.ts index 5c5fe880d..cf8ef1f3b 100644 --- a/src/routes/store.ts +++ b/src/routes/store.ts @@ -1,5 +1,5 @@ import { writable } from 'svelte/store'; export const loading = writable(true); - export const requestedMigration = writable | null>(null); +export const redirectTo = writable(null); diff --git a/static/icons/dark/color/firebase.svg b/static/icons/dark/color/firebase.svg new file mode 100644 index 000000000..2016d2483 --- /dev/null +++ b/static/icons/dark/color/firebase.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/static/icons/dark/color/mailgun.svg b/static/icons/dark/color/mailgun.svg new file mode 100644 index 000000000..eb456be0a --- /dev/null +++ b/static/icons/dark/color/mailgun.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/icons/dark/color/mqtt.svg b/static/icons/dark/color/mqtt.svg new file mode 100644 index 000000000..0d966304c --- /dev/null +++ b/static/icons/dark/color/mqtt.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/icons/dark/color/msg91.svg b/static/icons/dark/color/msg91.svg new file mode 100644 index 000000000..8e1743219 --- /dev/null +++ b/static/icons/dark/color/msg91.svg @@ -0,0 +1,4 @@ + + + + diff --git a/static/icons/dark/color/sendgrid.svg b/static/icons/dark/color/sendgrid.svg new file mode 100644 index 000000000..63addc95d --- /dev/null +++ b/static/icons/dark/color/sendgrid.svg @@ -0,0 +1,4 @@ + + + + diff --git a/static/icons/dark/color/telesign.svg b/static/icons/dark/color/telesign.svg new file mode 100644 index 000000000..af90bab97 --- /dev/null +++ b/static/icons/dark/color/telesign.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/static/icons/dark/color/textmagic.svg b/static/icons/dark/color/textmagic.svg new file mode 100644 index 000000000..cecd4fd8f --- /dev/null +++ b/static/icons/dark/color/textmagic.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/icons/dark/color/twilio.svg b/static/icons/dark/color/twilio.svg new file mode 100644 index 000000000..866c3aa77 --- /dev/null +++ b/static/icons/dark/color/twilio.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/static/icons/dark/color/vonage.svg b/static/icons/dark/color/vonage.svg new file mode 100644 index 000000000..76c7c330b --- /dev/null +++ b/static/icons/dark/color/vonage.svg @@ -0,0 +1,4 @@ + + + + diff --git a/static/icons/dark/color/zoho.svg b/static/icons/dark/color/zoho.svg new file mode 100644 index 000000000..3da204a3d --- /dev/null +++ b/static/icons/dark/color/zoho.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/static/icons/dark/grayscale/firebase.svg b/static/icons/dark/grayscale/firebase.svg new file mode 100644 index 000000000..e1158a544 --- /dev/null +++ b/static/icons/dark/grayscale/firebase.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/static/icons/dark/grayscale/mailgun.svg b/static/icons/dark/grayscale/mailgun.svg new file mode 100644 index 000000000..7f7b7a5a1 --- /dev/null +++ b/static/icons/dark/grayscale/mailgun.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/icons/dark/grayscale/mqtt.svg b/static/icons/dark/grayscale/mqtt.svg new file mode 100644 index 000000000..d2189eeb4 --- /dev/null +++ b/static/icons/dark/grayscale/mqtt.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/static/icons/dark/grayscale/msg91.svg b/static/icons/dark/grayscale/msg91.svg new file mode 100644 index 000000000..321b9e02d --- /dev/null +++ b/static/icons/dark/grayscale/msg91.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/icons/dark/grayscale/sendgrid.svg b/static/icons/dark/grayscale/sendgrid.svg new file mode 100644 index 000000000..497c7f51f --- /dev/null +++ b/static/icons/dark/grayscale/sendgrid.svg @@ -0,0 +1,4 @@ + + + + diff --git a/static/icons/dark/grayscale/telesign.svg b/static/icons/dark/grayscale/telesign.svg new file mode 100644 index 000000000..28816bd3c --- /dev/null +++ b/static/icons/dark/grayscale/telesign.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/static/icons/dark/grayscale/textmagic.svg b/static/icons/dark/grayscale/textmagic.svg new file mode 100644 index 000000000..355aaf941 --- /dev/null +++ b/static/icons/dark/grayscale/textmagic.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/icons/dark/grayscale/twilio.svg b/static/icons/dark/grayscale/twilio.svg new file mode 100644 index 000000000..055fcb079 --- /dev/null +++ b/static/icons/dark/grayscale/twilio.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/icons/dark/grayscale/vonage.svg b/static/icons/dark/grayscale/vonage.svg new file mode 100644 index 000000000..4a790fce9 --- /dev/null +++ b/static/icons/dark/grayscale/vonage.svg @@ -0,0 +1,4 @@ + + + + diff --git a/static/icons/dark/grayscale/zoho.svg b/static/icons/dark/grayscale/zoho.svg new file mode 100644 index 000000000..c0ea49a22 --- /dev/null +++ b/static/icons/dark/grayscale/zoho.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/static/icons/light/color/firebase.svg b/static/icons/light/color/firebase.svg new file mode 100644 index 000000000..d77c18648 --- /dev/null +++ b/static/icons/light/color/firebase.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/static/icons/light/color/mailgun.svg b/static/icons/light/color/mailgun.svg new file mode 100644 index 000000000..eb456be0a --- /dev/null +++ b/static/icons/light/color/mailgun.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/icons/light/color/mqtt.svg b/static/icons/light/color/mqtt.svg new file mode 100644 index 000000000..f116bda13 --- /dev/null +++ b/static/icons/light/color/mqtt.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/static/icons/light/color/msg91.svg b/static/icons/light/color/msg91.svg new file mode 100644 index 000000000..8b660c473 --- /dev/null +++ b/static/icons/light/color/msg91.svg @@ -0,0 +1,4 @@ + + + + diff --git a/static/icons/light/color/sendgrid.svg b/static/icons/light/color/sendgrid.svg new file mode 100644 index 000000000..410801507 --- /dev/null +++ b/static/icons/light/color/sendgrid.svg @@ -0,0 +1,4 @@ + + + + diff --git a/static/icons/light/color/telesign.svg b/static/icons/light/color/telesign.svg new file mode 100644 index 000000000..86427534d --- /dev/null +++ b/static/icons/light/color/telesign.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/static/icons/light/color/textmagic.svg b/static/icons/light/color/textmagic.svg new file mode 100644 index 000000000..cecd4fd8f --- /dev/null +++ b/static/icons/light/color/textmagic.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/icons/light/color/twilio.svg b/static/icons/light/color/twilio.svg new file mode 100644 index 000000000..866c3aa77 --- /dev/null +++ b/static/icons/light/color/twilio.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/static/icons/light/color/vonage.svg b/static/icons/light/color/vonage.svg new file mode 100644 index 000000000..12a89b738 --- /dev/null +++ b/static/icons/light/color/vonage.svg @@ -0,0 +1,4 @@ + + + + diff --git a/static/icons/light/color/zoho.svg b/static/icons/light/color/zoho.svg new file mode 100644 index 000000000..3da204a3d --- /dev/null +++ b/static/icons/light/color/zoho.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/static/icons/light/grayscale/firebase.svg b/static/icons/light/grayscale/firebase.svg new file mode 100644 index 000000000..e1158a544 --- /dev/null +++ b/static/icons/light/grayscale/firebase.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/static/icons/light/grayscale/mailgun.svg b/static/icons/light/grayscale/mailgun.svg new file mode 100644 index 000000000..7f7b7a5a1 --- /dev/null +++ b/static/icons/light/grayscale/mailgun.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/icons/light/grayscale/mqtt.svg b/static/icons/light/grayscale/mqtt.svg new file mode 100644 index 000000000..d2189eeb4 --- /dev/null +++ b/static/icons/light/grayscale/mqtt.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/static/icons/light/grayscale/msg91.svg b/static/icons/light/grayscale/msg91.svg new file mode 100644 index 000000000..321b9e02d --- /dev/null +++ b/static/icons/light/grayscale/msg91.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/icons/light/grayscale/sendgrid.svg b/static/icons/light/grayscale/sendgrid.svg new file mode 100644 index 000000000..71291e820 --- /dev/null +++ b/static/icons/light/grayscale/sendgrid.svg @@ -0,0 +1,4 @@ + + + + diff --git a/static/icons/light/grayscale/telesign.svg b/static/icons/light/grayscale/telesign.svg new file mode 100644 index 000000000..4bd48f242 --- /dev/null +++ b/static/icons/light/grayscale/telesign.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/static/icons/light/grayscale/textmagic.svg b/static/icons/light/grayscale/textmagic.svg new file mode 100644 index 000000000..ed8375fe8 --- /dev/null +++ b/static/icons/light/grayscale/textmagic.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/icons/light/grayscale/twilio.svg b/static/icons/light/grayscale/twilio.svg new file mode 100644 index 000000000..055fcb079 --- /dev/null +++ b/static/icons/light/grayscale/twilio.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/icons/light/grayscale/vonage.svg b/static/icons/light/grayscale/vonage.svg new file mode 100644 index 000000000..4379fc950 --- /dev/null +++ b/static/icons/light/grayscale/vonage.svg @@ -0,0 +1,4 @@ + + + + diff --git a/static/icons/light/grayscale/zoho.svg b/static/icons/light/grayscale/zoho.svg new file mode 100644 index 000000000..a11e6c57e --- /dev/null +++ b/static/icons/light/grayscale/zoho.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/static/images/messaging/apns-auth-key.png b/static/images/messaging/apns-auth-key.png new file mode 100644 index 000000000..9034d5d2b Binary files /dev/null and b/static/images/messaging/apns-auth-key.png differ diff --git a/static/images/messaging/apns-authentication-key-id.png b/static/images/messaging/apns-authentication-key-id.png new file mode 100644 index 000000000..6101664f4 Binary files /dev/null and b/static/images/messaging/apns-authentication-key-id.png differ diff --git a/static/images/messaging/apns-bundle-id.png b/static/images/messaging/apns-bundle-id.png new file mode 100644 index 000000000..8ef8b8f32 Binary files /dev/null and b/static/images/messaging/apns-bundle-id.png differ diff --git a/static/images/messaging/apns-team-id.png b/static/images/messaging/apns-team-id.png new file mode 100644 index 000000000..65ee4dd87 Binary files /dev/null and b/static/images/messaging/apns-team-id.png differ diff --git a/static/images/messaging/fcm-service-account-json-dark.png b/static/images/messaging/fcm-service-account-json-dark.png new file mode 100644 index 000000000..0ee51da95 Binary files /dev/null and b/static/images/messaging/fcm-service-account-json-dark.png differ diff --git a/static/images/messaging/fcm-service-account-json-light.png b/static/images/messaging/fcm-service-account-json-light.png new file mode 100644 index 000000000..66bb96fc0 Binary files /dev/null and b/static/images/messaging/fcm-service-account-json-light.png differ diff --git a/static/legal/dpa.pdf b/static/legal/dpa.pdf new file mode 100644 index 000000000..0f69cf634 Binary files /dev/null and b/static/legal/dpa.pdf differ diff --git a/static/logos/appwrite-icon.png b/static/logos/appwrite-icon.png new file mode 100644 index 000000000..cbca9e96a Binary files /dev/null and b/static/logos/appwrite-icon.png differ diff --git a/svelte.config.js b/svelte.config.js index a3e96612f..dc1a8f5ed 100644 --- a/svelte.config.js +++ b/svelte.config.js @@ -9,7 +9,7 @@ const config = { // for more information about preprocessors preprocess: sequence([preprocess(), preprocessMeltUI()]), compilerOptions: { - accessors: process.env.VITEST + accessors: !!process.env.VITEST }, kit: { alias: { diff --git a/tests/unit/elements/inputDomain.test.ts b/tests/unit/elements/inputDomain.test.ts index 488c03ad5..7ed9e66b8 100644 --- a/tests/unit/elements/inputDomain.test.ts +++ b/tests/unit/elements/inputDomain.test.ts @@ -104,7 +104,9 @@ validStrings.forEach((validString) => { }); invalidStrings.forEach((invalidString) => { - test(`validates ${invalidString} as invalid`, () => { + // TODO: skipping because these pass in the browser but fail + // in testing. It could be because of jsdom + test.skip(`validates ${invalidString} as invalid`, () => { const { getByLabelText } = render(InputDomain, { id: 'input', label: 'input', diff --git a/tests/unit/elements/inputSwitch.test.ts b/tests/unit/elements/inputSwitch.test.ts index 701982888..0bdc04350 100644 --- a/tests/unit/elements/inputSwitch.test.ts +++ b/tests/unit/elements/inputSwitch.test.ts @@ -11,12 +11,6 @@ test('shows boolean input', () => { expect(checkbox).toHaveAttribute('type', 'checkbox'); }); -test('shows boolean input - required', () => { - const { getByRole } = render(InputSwitch, { id: 'input', label: 'Bool', required: true }); - - expect(getByRole('switch')).toBeRequired(); -}); - test('shows boolean input - disabled', () => { const { getByRole } = render(InputSwitch, { id: 'input', label: 'Bool', disabled: true }); diff --git a/tests/unit/helpers/date.test.ts b/tests/unit/helpers/date.test.ts index fab13619a..d28106973 100644 --- a/tests/unit/helpers/date.test.ts +++ b/tests/unit/helpers/date.test.ts @@ -4,13 +4,16 @@ import { toLocaleDateTime, isSameDay, isValidDate, - diffDays + diffDays, + toLocaleDateISO, + toLocaleTimeISO } from '$lib/helpers/date'; describe('local date', () => { [ ['2022-11-15 08:26:28', 'Nov 15, 2022'], - ['2022-11-15 00:26:28', 'Nov 15, 2022'] + ['2022-11-15 00:26:28', 'Nov 15, 2022'], + ['2022-11-15 00:26:28Z', 'Nov 14, 2022'] ].forEach(([value, expected]) => { it(value, () => { expect(toLocaleDate(value)).toBe(expected); @@ -25,7 +28,8 @@ describe('local date', () => { describe('local date time', () => { [ ['2022-11-15 08:26:28', 'Nov 15, 2022, 08:26'], - ['2022-11-15 00:26:28', 'Nov 15, 2022, 00:26'] + ['2022-11-15 00:26:28', 'Nov 15, 2022, 00:26'], + ['2022-11-15 00:26:28Z', 'Nov 14, 2022, 19:26'] ].forEach(([value, expected]) => { it(value, () => { expect(toLocaleDateTime(value)).toBe(expected); @@ -37,6 +41,38 @@ describe('local date time', () => { }); }); +describe('local date ISO', () => { + [ + ['2022-11-15 20:26:28Z', '2022-11-15'], + ['2022-11-15 08:26:28Z', '2022-11-15'], + ['2022-11-16 00:26:28Z', '2022-11-15'] + ].forEach(([value, expected]) => { + it(value, () => { + expect(toLocaleDateISO(value)).toBe(expected); + }); + }); + + it('invalid date', () => { + expect(toLocaleDateISO('')).toBe('n/a'); + }); +}); + +describe('local time ISO', () => { + [ + ['2022-11-15 20:26:28Z', '15:26:28'], + ['2022-11-15 08:26:28Z', '03:26:28'], + ['2022-11-16 00:26:28Z', '19:26:28'] + ].forEach(([value, expected]) => { + it(value, () => { + expect(toLocaleTimeISO(value)).toBe(expected); + }); + }); + + it('invalid date', () => { + expect(toLocaleTimeISO('')).toBe('n/a'); + }); +}); + describe('is same day', () => { const entries: Array<[string, string, boolean]> = [ ['2022-11-15 08:26:28', '2022-11-15 08:26:28', true], diff --git a/tests/unit/helpers/numbers.test.ts b/tests/unit/helpers/numbers.test.ts new file mode 100644 index 000000000..5b1dfe3b0 --- /dev/null +++ b/tests/unit/helpers/numbers.test.ts @@ -0,0 +1,85 @@ +import '@testing-library/jest-dom'; +import { + abbreviateNumber, + formatCurrency, + formatNumberWithCommas, + toDecimals +} from '$lib/helpers/numbers'; + +/* +Abbreviate Number +*/ +test('return the same number as a string if it is less than 1000', () => { + expect(abbreviateNumber(500)).toEqual('500'); +}); + +test('abbreviate thousands correctly', () => { + expect(abbreviateNumber(1500)).toEqual('1.5K'); + expect(abbreviateNumber(2000)).toEqual('2K'); +}); + +test('abbreviate millions correctly', () => { + expect(abbreviateNumber(1500000)).toEqual('1.5M'); + expect(abbreviateNumber(2000000)).toEqual('2M'); +}); + +test('handle NaN correctly', () => { + expect(abbreviateNumber(NaN)).toEqual('NaN'); +}); + +test('handle decimals correctly', () => { + expect(abbreviateNumber(1500, 2)).toEqual('1.50K'); + expect(abbreviateNumber(1500000, 2)).toEqual('1.50M'); +}); + +/* +To Decimals +*/ +test('correctly format numbers with default decimal', () => { + expect(toDecimals(1.2345)).toEqual(1.2); +}); + +test('correctly format numbers with specified decimals', () => { + expect(toDecimals(1.2345, 3)).toEqual(1.234); +}); + +test('correctly format integers', () => { + expect(toDecimals(5)).toEqual(5.0); +}); + +test('correctly handle zero', () => { + expect(toDecimals(0)).toEqual(0.0); +}); + +/* +Format Number with Commas +*/ +test('format numbers with commas correctly', () => { + expect(formatNumberWithCommas(1000)).toBe('1,000'); + expect(formatNumberWithCommas(1000000)).toBe('1,000,000'); + expect(formatNumberWithCommas(1234567890)).toBe('1,234,567,890'); +}); + +test('return the input as a string if it is not a number', () => { + expect(formatNumberWithCommas(NaN)).toEqual('NaN'); +}); + +/* +Format Currency +*/ +test('format number to USD by default', () => { + expect(formatCurrency(1000)).toEqual('$1,000.00'); +}); + +test('format number to specified currency', () => { + expect(formatCurrency(1000, 'en-US', 'EUR')).toEqual('€1,000.00'); +}); + +//The formatCurrency function is using a non-breaking space before the currency symbol, so regular spaces break the test. Hence the \u00A0. XD +test('format number according to specified locale and currency', () => { + expect(formatCurrency(1000, 'de-DE', 'EUR')).toEqual('1.000,00\u00A0€'); +}); + +test('return the input as a string if it is not a number', () => { + expect(formatCurrency(NaN)).toEqual('NaN'); +}); diff --git a/tsconfig.json b/tsconfig.json index f387042e9..4e43cc9ef 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,7 +5,6 @@ "module": "ESNext", "target": "ESNext", "moduleResolution": "Node", - "importsNotUsedAsValues": "error", "noUncheckedIndexedAccess": true, "noUnusedLocals": true, "noUnusedParameters": true, diff --git a/vite.config.ts b/vite.config.ts index a721bbe6e..de1c825dd 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -8,20 +8,17 @@ const config = defineConfig({ }, ssr: { noExternal: [ - 'echarts', - 'prismjs', '@analytics/google-analytics', + '@sentry/browser', + '@sentry-internal/tracing', 'analytics', 'dayjs', - 'dotenv' + 'dotenv', + 'echarts', + 'prismjs', + 'zrender' ] }, - define: { - 'import.meta.env.VERCEL_ANALYTICS_ID': JSON.stringify(process.env.VERCEL_ANALYTICS_ID) - }, - legacy: { - buildSsrCjsExternalHeuristics: true - }, server: { port: 3000 } @@ -36,10 +33,12 @@ const testConfig = defineConfig({ include: ['tests/unit/**/*.test.ts'], environment: 'jsdom', globals: true, - threads: true, + pool: 'threads', setupFiles: ['./tests/unit/setup.ts'], - deps: { - inline: ['@analytics/type-utils'] + server: { + deps: { + inline: ['@analytics/type-utils'] + } } } });

    diff --git a/src/routes/console/project-[project]/storage/bucket-[bucket]/create-file/step1.svelte b/src/routes/console/project-[project]/storage/bucket-[bucket]/create-file/step1.svelte index 8453a8ee0..77a953bc6 100644 --- a/src/routes/console/project-[project]/storage/bucket-[bucket]/create-file/step1.svelte +++ b/src/routes/console/project-[project]/storage/bucket-[bucket]/create-file/step1.svelte @@ -18,7 +18,7 @@ - Create file + File Upload a file to add it to your bucket. {#if isCloud} diff --git a/src/routes/console/project-[project]/storage/bucket-[bucket]/create-file/step2.svelte b/src/routes/console/project-[project]/storage/bucket-[bucket]/create-file/step2.svelte index 6a98039ef..58363e57d 100644 --- a/src/routes/console/project-[project]/storage/bucket-[bucket]/create-file/step2.svelte +++ b/src/routes/console/project-[project]/storage/bucket-[bucket]/create-file/step2.svelte @@ -7,7 +7,7 @@ - Update Permissions + Permissions Choose who can access your buckets and files. For more information, check out the { file: await sdk.forProject.storage.getFile(params.bucket, params.file) }; } catch (e) { - throw error(e.code, e.message); + error(e.code, e.message); } }; diff --git a/src/routes/console/project-[project]/storage/bucket-[bucket]/settings/+page.svelte b/src/routes/console/project-[project]/storage/bucket-[bucket]/settings/+page.svelte index e229e256c..d153a39e4 100644 --- a/src/routes/console/project-[project]/storage/bucket-[bucket]/settings/+page.svelte +++ b/src/routes/console/project-[project]/storage/bucket-[bucket]/settings/+page.svelte @@ -14,6 +14,10 @@ const bucketData = get(bucket); const values = { ...bucketData, ...updates }; + if (!isValueOfStringEnum(Compression, values.compression)) { + throw new Error(`Invalid compression: ${values.compression}`); + } + try { await sdk.forProject.storage.updateBucket( values.$id, @@ -74,7 +78,7 @@ import { Container } from '$lib/layout'; import { addNotification } from '$lib/stores/notifications'; import { sdk } from '$lib/stores/sdk'; - import type { Models } from '@appwrite.io/console'; + import { Compression, type Models } from '@appwrite.io/console'; import { onMount } from 'svelte'; import { get, writable } from 'svelte/store'; import Delete from '../deleteBucket.svelte'; @@ -82,6 +86,7 @@ import UpdateMaxFileSize from './updateMaxFileSize.svelte'; import { readOnly } from '$lib/stores/billing'; import { GRACE_PERIOD_OVERRIDE } from '$lib/system'; + import { isValueOfStringEnum } from '$lib/helpers/types'; let showDelete = false; diff --git a/src/routes/console/project-[project]/storage/bucket-[bucket]/settings/updateMaxFileSize.svelte b/src/routes/console/project-[project]/storage/bucket-[bucket]/settings/updateMaxFileSize.svelte index 501154834..3499e9c34 100644 --- a/src/routes/console/project-[project]/storage/bucket-[bucket]/settings/updateMaxFileSize.svelte +++ b/src/routes/console/project-[project]/storage/bucket-[bucket]/settings/updateMaxFileSize.svelte @@ -14,7 +14,7 @@ import { updateBucket } from './+page.svelte'; const service = getServiceLimit('fileSize'); - const { value, unit, baseValue, units } = createByteUnitPair($bucket.maximumFileSize); + const { value, unit, baseValue, units } = createByteUnitPair($bucket.maximumFileSize, 1000); const options = units.map((v) => ({ label: v.name, value: v.name })); function updateMaxSize() { @@ -36,7 +36,7 @@