diff --git a/.eslintrc.cjs b/.eslintrc.cjs index ce61ab837..222f3029c 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -1,77 +1,3 @@ module.exports = { - root: true, - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/recommended', - 'plugin:svelte/recommended', - 'prettier' - ], - parser: '@typescript-eslint/parser', - plugins: ['@typescript-eslint', 'eslint-plugin-local-rules', 'import'], - parserOptions: { - sourceType: 'module', - ecmaVersion: 2020, - extraFileExtensions: ['.svelte'], - project: ['./tsconfig.eslint.json'] - }, - env: { - browser: true, - es2017: true, - node: true - }, - overrides: [ - { - files: ['*.svelte'], - parser: 'svelte-eslint-parser', - parserOptions: { - parser: '@typescript-eslint/parser' - } - }, - { - files: ['scripts/**/*.mjs', 'scripts/**/*.ts'], - rules: { - 'no-console': 'off' - } - }, - { - files: ['*.svelte'], - rules: { - 'import/order': [ - 'error', - { - alphabetize: { order: 'asc' } - } - ] - } - } - ], - rules: { - '@typescript-eslint/no-inferrable-types': 'error', - '@typescript-eslint/no-unnecessary-type-assertion': 'error', - '@typescript-eslint/no-unused-vars': [ - 'warn', - { - argsIgnorePattern: '^_', - varsIgnorePattern: '^_', - caughtErrorsIgnorePattern: '^_' - } - ], - '@typescript-eslint/prefer-nullish-coalescing': 'error', - '@typescript-eslint/prefer-reduce-type-parameter': 'error', - 'arrow-body-style': ['warn', 'as-needed'], - curly: 'error', - 'local-rules/prefer-object-params': 'warn', - 'local-rules/no-svelte-store-in-api': 'error', - 'local-rules/use-option-type-wrapper': 'warn', - 'import/no-duplicates': ['error', { 'prefer-inline': true }], - 'no-console': ['error', { allow: ['error', 'warn'] }], - 'no-continue': 'warn', - 'no-delete-var': 'error', - 'no-else-return': ['warn', { allowElseIf: false }], - 'no-unused-vars': 'off', - 'prefer-template': 'error' - }, - globals: { - NodeJS: true - } -}; + extends: ["@dfinity/eslint-config-oisy-wallet/svelte"], +}; \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 9ae88900c..9f75749c2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2501,9 +2501,9 @@ dependencies = [ [[package]] name = "k256" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" +checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" dependencies = [ "cfg-if", "ecdsa", diff --git a/HACKING.md b/HACKING.md index d4dd6228e..904667785 100644 --- a/HACKING.md +++ b/HACKING.md @@ -9,6 +9,7 @@ This document lists a couple of useful information for development and deploymen - [Faucets](#faucets) - [Testing](#testing) - [Integrate ckERC20 Tokens](#integrate-ckerc20-tokens) +- [Routes Styles](#routes-styles) ## Deployment @@ -218,3 +219,41 @@ Before they become available, there must be a new block mined. You can mine one: ```bash ./scripts/add.tokens.bitcoin.sh ``` + +# Routes Styles + +The designer, or the foundation, might want to use different background colors for specific routes, such as using white generally speaking in the wallet and light blue on the signer (`/sign`) route. + +On the other hand, we want to prerender the background color because, if we don’t, the user will experience a "glitchy" loading effect where the dapp initially loads with a white background before applying the correct color. + +That's why, when there is such a specific requests, some CSS can be defined at the route level. CSS which is then prerendered within the generated HTML page at build time. + +For example, if I wanted to add a route `/hello` with a red background, we would add the following files in `src`: + +``` +src/routes/(group)/hello/+page.svelte +src/routes/(group)/hello/+oisy.page.css +``` + +And in the CSS: + +```css +:root { + background: red; +} +``` + +Furthermore, given that parsing happens at build time, the developer might want to load the style at runtime for local development purposes. This can be achieved by importing the style in the related `+layout.svelte`: + +```javascript + +``` diff --git a/e2e/utils/pages/homepage.page.ts b/e2e/utils/pages/homepage.page.ts index 7c739d768..8997d7d47 100644 --- a/e2e/utils/pages/homepage.page.ts +++ b/e2e/utils/pages/homepage.page.ts @@ -15,39 +15,39 @@ import { HOMEPAGE_URL, LOCAL_REPLICA_URL } from '../constants/e2e.constants'; import { getQRCodeValueFromDataURL } from '../qr-code.utils'; import { getReceiveTokensModalQrCodeButtonSelector } from '../selectors.utils'; -type HomepageParams = { +interface HomepageParams { page: Page; viewportSize?: ViewportSize; -}; +} type HomepageLoggedInParams = { iiPage: InternetIdentityPage; } & HomepageParams; -type SelectorOperationParams = { +interface SelectorOperationParams { selector: string; -}; +} -type TestIdOperationParams = { +interface TestIdOperationParams { testId: string; -}; +} -type WaitForModalParams = { +interface WaitForModalParams { modalOpenButtonTestId: string; modalTestId: string; -}; +} type TestModalSnapshotParams = { selectorsToMock?: string[]; } & WaitForModalParams; -type ClickMenuItemParams = { +interface ClickMenuItemParams { menuItemTestId: string; -}; +} -type WaitForLocatorOptions = { +interface WaitForLocatorOptions { state: 'attached' | 'detached' | 'visible' | 'hidden'; -}; +} abstract class Homepage { readonly #page: Page; diff --git a/env.utils.ts b/env.utils.ts index 3673a1261..eeda52838 100644 --- a/env.utils.ts +++ b/env.utils.ts @@ -11,11 +11,11 @@ export const readCanisterIds = ({ prefix?: string; }): Record => { try { - type Details = { + interface Details { ic?: string; staging?: string; local?: string; - }; + } const config: Record = JSON.parse(readFileSync(filePath, 'utf8')); diff --git a/eslint-local-rules.cjs b/eslint-local-rules.cjs old mode 100644 new mode 100755 index b437e2671..ceb09b9eb --- a/eslint-local-rules.cjs +++ b/eslint-local-rules.cjs @@ -1,176 +1 @@ -const { isNullish, nonNullish } = require('@dfinity/utils'); -module.exports = { - 'no-svelte-store-in-api': { - meta: { - docs: { - description: - 'Svelte stores should not be used in APIs since they are also utilized by workers.', - category: 'Possible Errors', - recommended: false - }, - schema: [] - }, - create(context) { - return { - ImportDeclaration(node) { - const filePath = context.getFilename(); - - const { - source: { value } - } = node; - - if (filePath.includes('/api/') && value === 'svelte/store') { - context.report({ - node, - message: "Importing 'svelte/store' is not allowed in API modules." - }); - } - } - }; - } - }, - 'use-option-type-wrapper': { - meta: { - type: 'suggestion', - docs: { - description: 'Enforce use of Option instead of T | null | undefined', - category: 'Best Practices', - recommended: true - }, - fixable: 'code', - schema: [] - }, - create: function (context) { - const checkForOptionType = (node) => { - if ( - node.typeAnnotation.type === 'TSUnionType' && - node.typeAnnotation.types.length === 3 && - node.typeAnnotation.types.some((t) => t.type === 'TSNullKeyword') && - node.typeAnnotation.types.some((t) => t.type === 'TSUndefinedKeyword') - ) { - const type = node.typeAnnotation.types.find( - (t) => t.type !== 'TSNullKeyword' && t.type !== 'TSUndefinedKeyword' - ); - - const typeText = - type.type === 'TSTypeReference' && type.typeName && type.typeName.name - ? type.typeName.name - : context.getSourceCode().getText(type); - - if (type) { - try { - context.report({ - node, - message: `Use Option<${typeText}> instead of ${typeText} | null | undefined.`, - fix(fixer) { - return fixer.replaceText(node.typeAnnotation, `Option<${typeText}>`); - } - }); - } catch (e) { - console.error(e); - console.log(type); - } - } - } - }; - - return { - TSTypeAnnotation(node) { - checkForOptionType(node); - }, - TSTypeAliasDeclaration(node) { - checkForOptionType(node); - } - }; - } - }, - 'prefer-object-params': { - meta: { - type: 'suggestion', - docs: { - description: - 'Enforce passing parameters as an object when a function has more than one parameter', - category: 'Best Practices', - recommended: true - }, - schema: [] - }, - create(context) { - const checkForMoreThanOneParameter = (node) => { - const parent = node.parent; - - // Check if it is a callback for looping methods - if ( - nonNullish(parent) && - parent.type === 'CallExpression' && - parent.callee.type === 'MemberExpression' && - ['map', 'reduce', 'forEach', 'filter', 'sort', 'replace'].includes( - parent.callee.property.name - ) - ) { - return; - } - - // Check if it is a callback for Array.from - if ( - nonNullish(parent) && - parent.type === 'CallExpression' && - parent.callee.type === 'MemberExpression' && - parent.callee.object.name === 'Array' && - parent.callee.property.name === 'from' - ) { - return; - } - - // Check if it is a callback in a Promise constructor - if ( - nonNullish(parent) && - parent.type === 'NewExpression' && - parent.callee.name === 'Promise' - ) { - return; - } - - // Check if it is a callback in JSON.stringify - if ( - nonNullish(parent) && - parent.type === 'CallExpression' && - parent.callee.type === 'MemberExpression' && - parent.callee.object.name === 'JSON' && - parent.callee.property.name === 'stringify' - ) { - return; - } - - // Check if it is inside a class constructor - if ( - nonNullish(parent) && - parent.type === 'MethodDefinition' && - parent.kind === 'constructor' - ) { - return; - } - - if (node.params.length > 1) { - context.report({ - node, - message: - 'Functions with more than one parameter should accept an object and use destructuring.' - }); - } - }; - - return { - FunctionDeclaration(node) { - checkForMoreThanOneParameter(node); - }, - FunctionExpression(node) { - checkForMoreThanOneParameter(node); - }, - ArrowFunctionExpression(node) { - checkForMoreThanOneParameter(node); - } - }; - } - } -}; +module.exports = require("@dfinity/eslint-config-oisy-wallet/eslint-local-rules"); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 80645e8c2..7bf2a0140 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@dfinity/agent": "^2.1.1", "@dfinity/auth-client": "^2.1.1", "@dfinity/candid": "^2.1.1", - "@dfinity/ckbtc": "^3.0.0-next-2024-09-17", + "@dfinity/ckbtc": "^3.0.0-next-2024-09-26", "@dfinity/cketh": "^3.3.0-next-2024-09-17", "@dfinity/gix-components": "^4.7.0-next-2024-09-17", "@dfinity/ic-management": "^5.2.0-next-2024-09-17", @@ -31,9 +31,10 @@ "zod": "^3.23.8" }, "devDependencies": { + "@dfinity/eslint-config-oisy-wallet": "^0.0.3", "@dfinity/identity-secp256k1": "^2.1.1", "@dfinity/internet-identity-playwright": "^0.0.3", - "@playwright/test": "^1.47.1", + "@playwright/test": "^1.47.2", "@rollup/plugin-inject": "^5.0.5", "@sveltejs/adapter-static": "^3.0.5", "@sveltejs/kit": "^2.5.28", @@ -41,16 +42,8 @@ "@testing-library/jest-dom": "^6.5.0", "@testing-library/svelte": "^5.2.1", "@types/node": "^20.14.9", - "@types/three": "^0.167.0", - "@typescript-eslint/eslint-plugin": "^7.2.0", - "@typescript-eslint/parser": "^7.2.0", "autoprefixer": "^10.4.20", "dotenv": "^16.4.5", - "eslint": "^8.57.0", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-import": "^2.29.1", - "eslint-plugin-local-rules": "^2.0.1", - "eslint-plugin-svelte": "^2.35.1", "jimp": "^1.6.0", "jsdom": "^25.0.1", "jsqr": "^1.4.0", @@ -75,15 +68,6 @@ "node": "^20" } }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@adobe/css-tools": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.0.tgz", @@ -262,27 +246,25 @@ } }, "node_modules/@dfinity/ckbtc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@dfinity/ckbtc/-/ckbtc-3.0.0.tgz", - "integrity": "sha512-OHmgqIlBbCfsGRDEBveCst39WY16YIxioWrY8aH5VNA05yDpoJXdsfowacaSMC39cHJPzKln7ocGAHweKS5nvg==", - "license": "Apache-2.0", + "version": "3.0.0-next-2024-09-26", + "resolved": "https://registry.npmjs.org/@dfinity/ckbtc/-/ckbtc-3.0.0-next-2024-09-26.tgz", + "integrity": "sha512-Km4+tLCHagilR4Qjh0y3u/8PVOWsL0HpGaWFeKhYGGpVAs4frVlBlwOfnjtwNQaPLJ7erJDec3KvlN46xm6KOg==", "dependencies": { "@noble/hashes": "^1.3.2", "base58-js": "^1.0.5", "bech32": "^2.0.0" }, "peerDependencies": { - "@dfinity/agent": "^2.0.0", - "@dfinity/candid": "^2.0.0", - "@dfinity/principal": "^2.0.0", - "@dfinity/utils": "^2.5.0" + "@dfinity/agent": "*", + "@dfinity/candid": "*", + "@dfinity/principal": "*", + "@dfinity/utils": "*" } }, "node_modules/@dfinity/ckbtc/node_modules/bech32": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/bech32/-/bech32-2.0.0.tgz", - "integrity": "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==", - "license": "MIT" + "integrity": "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==" }, "node_modules/@dfinity/cketh": { "version": "3.3.0", @@ -296,6 +278,28 @@ "@dfinity/utils": "^2.5.0" } }, + "node_modules/@dfinity/eslint-config-oisy-wallet": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@dfinity/eslint-config-oisy-wallet/-/eslint-config-oisy-wallet-0.0.3.tgz", + "integrity": "sha512-lq6NS1DKn4zgJ3Y203FQrTNSK560xoCNQvWXLtZdwsAyHaNVuufF79x22y6bd9PvyV0apBZuP7EulHeR2+tdBg==", + "dev": true, + "license": "Apache-2.0", + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^6.20.0", + "eslint": "^8.57.0", + "eslint-config-prettier": "^9.1.0", + "eslint-config-standard-with-typescript": "^43.0.1", + "eslint-plugin-import": "^2.29.1", + "eslint-plugin-local-rules": "^3.0.2", + "eslint-plugin-n": "^16.6.2", + "eslint-plugin-prettier": "^5.2.1", + "eslint-plugin-promise": "^6.1.1", + "eslint-plugin-svelte": "^2.44.0", + "prettier": "^3.3.3", + "prettier-plugin-organize-imports": "^4.0.0", + "typescript": "^5.3.3" + } + }, "node_modules/@dfinity/gix-components": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/@dfinity/gix-components/-/gix-components-4.7.0.tgz", @@ -842,6 +846,8 @@ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { "eslint-visitor-keys": "^3.3.0" }, @@ -853,10 +859,12 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", - "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.1.tgz", + "integrity": "sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==", "dev": true, + "license": "MIT", + "peer": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } @@ -866,6 +874,8 @@ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -885,12 +895,14 @@ } }, "node_modules/@eslint/eslintrc/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -902,16 +914,20 @@ } }, "node_modules/@eslint/eslintrc/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT", + "peer": true }, "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true, + "license": "MIT", + "peer": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } @@ -1593,12 +1609,15 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", "dev": true, + "license": "Apache-2.0", + "peer": true, "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", + "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", "minimatch": "^3.0.5" }, @@ -1607,12 +1626,14 @@ } }, "node_modules/@humanwhocodes/config-array/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -1624,16 +1645,20 @@ } }, "node_modules/@humanwhocodes/config-array/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT", + "peer": true }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, + "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=12.22" }, @@ -1643,10 +1668,13 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", - "dev": true + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "license": "BSD-3-Clause", + "peer": true }, "node_modules/@jimp/core": { "version": "1.6.0", @@ -2583,14 +2611,27 @@ "node": ">=10.12.0" } }, + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, "node_modules/@playwright/test": { - "version": "1.47.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.47.1.tgz", - "integrity": "sha512-dbWpcNQZ5nj16m+A5UNScYx7HX5trIy7g4phrcitn+Nk83S32EBX/CLU4hiF4RGKX/yRc93AAqtfaXB7JWBd4Q==", + "version": "1.47.2", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.47.2.tgz", + "integrity": "sha512-jTXRsoSPONAs8Za9QEQdyjFn+0ZQFjCiIztAIF6bi1HqhBzG9Ma7g1WotyiGqFSBRZjIEqMdT8RUlbk1QVhzCQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "playwright": "1.47.1" + "playwright": "1.47.2" }, "bin": { "playwright": "cli.js" @@ -2662,229 +2703,221 @@ "dev": true }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.3.tgz", - "integrity": "sha512-MmKSfaB9GX+zXl6E8z4koOr/xU63AMVleLEa64v7R0QF/ZloMs5vcD1sHgM64GXXS1csaJutG+ddtzcueI/BLg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz", + "integrity": "sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==", "cpu": [ "arm" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.3.tgz", - "integrity": "sha512-zrt8ecH07PE3sB4jPOggweBjJMzI1JG5xI2DIsUbkA+7K+Gkjys6eV7i9pOenNSDJH3eOr/jLb/PzqtmdwDq5g==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.4.tgz", + "integrity": "sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.3.tgz", - "integrity": "sha512-P0UxIOrKNBFTQaXTxOH4RxuEBVCgEA5UTNV6Yz7z9QHnUJ7eLX9reOd/NYMO3+XZO2cco19mXTxDMXxit4R/eQ==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz", + "integrity": "sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.3.tgz", - "integrity": "sha512-L1M0vKGO5ASKntqtsFEjTq/fD91vAqnzeaF6sfNAy55aD+Hi2pBI5DKwCO+UNDQHWsDViJLqshxOahXyLSh3EA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.4.tgz", + "integrity": "sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.3.tgz", - "integrity": "sha512-btVgIsCjuYFKUjopPoWiDqmoUXQDiW2A4C3Mtmp5vACm7/GnyuprqIDPNczeyR5W8rTXEbkmrJux7cJmD99D2g==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.4.tgz", + "integrity": "sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==", "cpu": [ "arm" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.3.tgz", - "integrity": "sha512-zmjbSphplZlau6ZTkxd3+NMtE4UKVy7U4aVFMmHcgO5CUbw17ZP6QCgyxhzGaU/wFFdTfiojjbLG3/0p9HhAqA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.4.tgz", + "integrity": "sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==", "cpu": [ "arm" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.3.tgz", - "integrity": "sha512-nSZfcZtAnQPRZmUkUQwZq2OjQciR6tEoJaZVFvLHsj0MF6QhNMg0fQ6mUOsiCUpTqxTx0/O6gX0V/nYc7LrgPw==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.4.tgz", + "integrity": "sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.3.tgz", - "integrity": "sha512-MnvSPGO8KJXIMGlQDYfvYS3IosFN2rKsvxRpPO2l2cum+Z3exiExLwVU+GExL96pn8IP+GdH8Tz70EpBhO0sIQ==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.4.tgz", + "integrity": "sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.3.tgz", - "integrity": "sha512-+W+p/9QNDr2vE2AXU0qIy0qQE75E8RTwTwgqS2G5CRQ11vzq0tbnfBd6brWhS9bCRjAjepJe2fvvkvS3dno+iw==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.4.tgz", + "integrity": "sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==", "cpu": [ "ppc64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.3.tgz", - "integrity": "sha512-yXH6K6KfqGXaxHrtr+Uoy+JpNlUlI46BKVyonGiaD74ravdnF9BUNC+vV+SIuB96hUMGShhKV693rF9QDfO6nQ==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.4.tgz", + "integrity": "sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==", "cpu": [ "riscv64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.3.tgz", - "integrity": "sha512-R8cwY9wcnApN/KDYWTH4gV/ypvy9yZUHlbJvfaiXSB48JO3KpwSpjOGqO4jnGkLDSk1hgjYkTbTt6Q7uvPf8eg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.4.tgz", + "integrity": "sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==", "cpu": [ "s390x" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.3.tgz", - "integrity": "sha512-kZPbX/NOPh0vhS5sI+dR8L1bU2cSO9FgxwM8r7wHzGydzfSjLRCFAT87GR5U9scj2rhzN3JPYVC7NoBbl4FZ0g==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz", + "integrity": "sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.3.tgz", - "integrity": "sha512-S0Yq+xA1VEH66uiMNhijsWAafffydd2X5b77eLHfRmfLsRSpbiAWiRHV6DEpz6aOToPsgid7TI9rGd6zB1rhbg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.4.tgz", + "integrity": "sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.3.tgz", - "integrity": "sha512-9isNzeL34yquCPyerog+IMCNxKR8XYmGd0tHSV+OVx0TmE0aJOo9uw4fZfUuk2qxobP5sug6vNdZR6u7Mw7Q+Q==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.4.tgz", + "integrity": "sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.3.tgz", - "integrity": "sha512-nMIdKnfZfzn1Vsk+RuOvl43ONTZXoAPUUxgcU0tXooqg4YrAqzfKzVenqqk2g5efWh46/D28cKFrOzDSW28gTA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.4.tgz", + "integrity": "sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==", "cpu": [ "ia32" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.3.tgz", - "integrity": "sha512-fOvu7PCQjAj4eWDEuD8Xz5gpzFqXzGlxHZozHP4b9Jxv9APtdxL6STqztDzMLuRXEc4UpXGGhx029Xgm91QBeA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.4.tgz", + "integrity": "sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" ] }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/@scure/base": { "version": "1.1.9", "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", @@ -3361,13 +3394,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@tweenjs/tween.js": { - "version": "23.1.3", - "resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-23.1.3.tgz", - "integrity": "sha512-vJmvvwFxYuGnF2axRtPYocag6Clbb5YS7kLL+SO/TeVFzHqDIWrNKYtcsPMibjDx9O+bu+psAy9NKfWklassUA==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/aria-query": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", @@ -3390,14 +3416,17 @@ "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true + "dev": true, + "license": "MIT", + "peer": true }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@types/node": { "version": "20.14.9", @@ -3413,47 +3442,23 @@ "version": "7.5.8", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true - }, - "node_modules/@types/stats.js": { - "version": "0.17.3", - "resolved": "https://registry.npmjs.org/@types/stats.js/-/stats.js-0.17.3.tgz", - "integrity": "sha512-pXNfAD3KHOdif9EQXZ9deK82HVNaXP5ZIF5RP2QG6OQFNTaY2YIetfrE9t528vEreGQvEPRDDc8muaoYeK0SxQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/three": { - "version": "0.167.0", - "resolved": "https://registry.npmjs.org/@types/three/-/three-0.167.0.tgz", - "integrity": "sha512-BC+Vbm0d6yMzct7dhTBe9ZjEh6ygupyn1k/UcZncIIS/5aNIbfvF77gQw1IFP09Oyj1UxWj0EUBBqc1GkqzsOw==", "dev": true, "license": "MIT", - "dependencies": { - "@tweenjs/tween.js": "~23.1.2", - "@types/stats.js": "*", - "@types/webxr": "*", - "fflate": "~0.8.2", - "meshoptimizer": "~0.18.1" - } - }, - "node_modules/@types/webxr": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.19.tgz", - "integrity": "sha512-4hxA+NwohSgImdTSlPXEqDqqFktNgmTXQ05ff1uWam05tNGroCMp4G+4XVl6qWm1p7GQ/9oD41kAYsSssF6Mzw==", - "dev": true, - "license": "MIT" + "peer": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.2.0.tgz", - "integrity": "sha512-mdekAHOqS9UjlmyF/LSs6AIEvfceV749GFxoBAjwAv0nkevfKHWQFDMcBZWUiIC5ft6ePWivXoS36aKQ0Cy3sw==", + "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, + "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "7.2.0", - "@typescript-eslint/type-utils": "7.2.0", - "@typescript-eslint/utils": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0", + "@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", @@ -3469,8 +3474,8 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -3479,12 +3484,14 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -3496,21 +3503,25 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT", + "peer": true }, "node_modules/@typescript-eslint/parser": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.2.0.tgz", - "integrity": "sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", "dev": true, + "license": "BSD-2-Clause", + "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.2.0", - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/typescript-estree": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0", + "@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": { @@ -3521,7 +3532,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -3530,12 +3541,14 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -3547,19 +3560,23 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT", + "peer": true }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz", - "integrity": "sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==", + "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, + "license": "MIT", + "peer": true, "dependencies": { - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0" + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -3570,13 +3587,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.2.0.tgz", - "integrity": "sha512-xHi51adBHo9O9330J8GQYQwrKBqbIPJGZZVQTHHmy200hvkLZFWJIFtAG/7IYTWUyun6DE6w5InDReePJYJlJA==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", + "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "@typescript-eslint/typescript-estree": "7.2.0", - "@typescript-eslint/utils": "7.2.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/utils": "6.21.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -3588,7 +3607,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -3597,12 +3616,14 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -3614,16 +3635,20 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT", + "peer": true }, "node_modules/@typescript-eslint/types": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.2.0.tgz", - "integrity": "sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", "dev": true, + "license": "MIT", + "peer": true, "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -3633,13 +3658,15 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz", - "integrity": "sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==", + "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, + "license": "BSD-2-Clause", + "peer": true, "dependencies": { - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0", + "@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", @@ -3665,17 +3692,21 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -3691,6 +3722,8 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, + "license": "ISC", + "peer": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -3702,23 +3735,27 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT", + "peer": true }, "node_modules/@typescript-eslint/utils": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.2.0.tgz", - "integrity": "sha512-YfHpnMAGb1Eekpm3XRK8hcMwGLGsnT6L+7b2XyRv6ouDuJU1tZir1GS2i0+VXRatMwSI1/UfcyPe53ADkU+IuA==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "7.2.0", - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/typescript-estree": "7.2.0", + "@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": { @@ -3729,16 +3766,18 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" + "eslint": "^7.0.0 || ^8.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz", - "integrity": "sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==", + "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, + "license": "MIT", + "peer": true, "dependencies": { - "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/types": "6.21.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -3753,7 +3792,9 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true + "dev": true, + "license": "ISC", + "peer": true }, "node_modules/@vitest/expect": { "version": "2.1.1", @@ -4217,6 +4258,8 @@ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, + "license": "MIT", + "peer": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -4261,6 +4304,8 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -4353,7 +4398,9 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "dev": true, + "license": "Python-2.0", + "peer": true }, "node_modules/aria-query": { "version": "5.3.0", @@ -4369,6 +4416,7 @@ "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "call-bind": "^1.0.5", "is-array-buffer": "^3.0.4" @@ -4386,6 +4434,7 @@ "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -4406,6 +4455,8 @@ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, + "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -4416,6 +4467,7 @@ "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -4437,6 +4489,7 @@ "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -4456,6 +4509,7 @@ "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -4475,6 +4529,7 @@ "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.5", @@ -4574,6 +4629,7 @@ "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "possible-typed-array-names": "^1.0.0" }, @@ -4630,7 +4686,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/base58-js/-/base58-js-1.0.5.tgz", "integrity": "sha512-LkkAPP8Zu+c0SVNRTRVDyMfKVORThX+rCViget00xdgLRrKkClCTz1T7cIrpr69ShwV5XJuuoZvMvJ43yURwkA==", - "license": "MIT", "engines": { "node": ">= 8" } @@ -4853,10 +4908,35 @@ "node": ">=6.14.2" } }, - "node_modules/cac": { - "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/builtins": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz", + "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", "dev": true, "license": "MIT", "engines": { @@ -4869,6 +4949,7 @@ "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -4888,6 +4969,8 @@ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", + "peer": true, "engines": { "node": ">=6" } @@ -5249,6 +5332,7 @@ "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -5267,6 +5351,7 @@ "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -5285,6 +5370,7 @@ "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -5335,7 +5421,9 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "dev": true, + "license": "MIT", + "peer": true }, "node_modules/deepmerge": { "version": "4.3.1", @@ -5352,6 +5440,7 @@ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -5370,6 +5459,7 @@ "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -5452,6 +5542,8 @@ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { "path-type": "^4.0.0" }, @@ -5470,6 +5562,8 @@ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, + "license": "Apache-2.0", + "peer": true, "dependencies": { "esutils": "^2.0.2" }, @@ -5567,6 +5661,7 @@ "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "array-buffer-byte-length": "^1.0.1", "arraybuffer.prototype.slice": "^1.0.3", @@ -5628,6 +5723,7 @@ "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "get-intrinsic": "^1.2.4" }, @@ -5641,6 +5737,7 @@ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.4" } @@ -5651,6 +5748,7 @@ "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "es-errors": "^1.3.0" }, @@ -5664,6 +5762,7 @@ "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "get-intrinsic": "^1.2.4", "has-tostringtag": "^1.0.2", @@ -5679,6 +5778,7 @@ "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "hasown": "^2.0.0" } @@ -5689,6 +5789,7 @@ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -5795,6 +5896,8 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", + "peer": true, "engines": { "node": ">=10" }, @@ -5803,16 +5906,18 @@ } }, "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -5858,10 +5963,15 @@ } }, "node_modules/eslint-compat-utils": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.1.2.tgz", - "integrity": "sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", + "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "semver": "^7.5.4" + }, "engines": { "node": ">=12" }, @@ -5874,6 +5984,8 @@ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "dev": true, + "license": "MIT", + "peer": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -5881,12 +5993,65 @@ "eslint": ">=7.0.0" } }, + "node_modules/eslint-config-standard": { + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz", + "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "eslint": "^8.0.1", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-n": "^15.0.0 || ^16.0.0 ", + "eslint-plugin-promise": "^6.0.0" + } + }, + "node_modules/eslint-config-standard-with-typescript": { + "version": "43.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-43.0.1.tgz", + "integrity": "sha512-WfZ986+qzIzX6dcr4yGUyVb/l9N3Z8wPXCc5z/70fljs3UbWhhV+WxrfgsqMToRzuuyX9MqZ974pq2UPhDTOcA==", + "deprecated": "Please use eslint-config-love, instead.", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@typescript-eslint/parser": "^6.4.0", + "eslint-config-standard": "17.1.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^6.4.0", + "eslint": "^8.0.1", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-n": "^15.0.0 || ^16.0.0 ", + "eslint-plugin-promise": "^6.0.0", + "typescript": "*" + } + }, "node_modules/eslint-import-resolver-node": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", @@ -5899,6 +6064,7 @@ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ms": "^2.1.1" } @@ -5908,14 +6074,16 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/eslint-module-utils": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", - "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "debug": "^3.2.7" }, @@ -5934,6 +6102,7 @@ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ms": "^2.1.1" } @@ -5943,30 +6112,56 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true + }, + "node_modules/eslint-plugin-es-x": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz", + "integrity": "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==", + "dev": true, + "funding": [ + "https://github.com/sponsors/ota-meshi", + "https://opencollective.com/eslint" + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.1.2", + "@eslint-community/regexpp": "^4.11.0", + "eslint-compat-utils": "^0.5.1" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": ">=8" + } }, "node_modules/eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.30.0.tgz", + "integrity": "sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", "array.prototype.flat": "^1.3.2", "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", + "eslint-module-utils": "^2.9.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", "semver": "^6.3.1", "tsconfig-paths": "^3.15.0" }, @@ -5983,6 +6178,7 @@ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ms": "^2.1.1" } @@ -5993,6 +6189,7 @@ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "esutils": "^2.0.2" }, @@ -6005,7 +6202,8 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/eslint-plugin-import/node_modules/semver": { "version": "6.3.1", @@ -6013,108 +6211,141 @@ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", + "peer": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/eslint-plugin-local-rules": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-local-rules/-/eslint-plugin-local-rules-2.0.1.tgz", - "integrity": "sha512-AJhGd+GcI5r2dbjiGPixM8jnBl0XFxqoVbqzwKbYz+nTk+Cj5dNE3+OlhC176bl5r25KsGsIthLi1VqIW5Ga+A==", - "dev": true + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-local-rules/-/eslint-plugin-local-rules-3.0.2.tgz", + "integrity": "sha512-IWME7GIYHXogTkFsToLdBCQVJ0U4kbSuVyDT+nKoR4UgtnVrrVeNWuAZkdEu1nxkvi9nsPccGehEEF6dgA28IQ==", + "dev": true, + "license": "MIT", + "peer": true }, - "node_modules/eslint-plugin-svelte": { - "version": "2.35.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-2.35.1.tgz", - "integrity": "sha512-IF8TpLnROSGy98Z3NrsKXWDSCbNY2ReHDcrYTuXZMbfX7VmESISR78TWgO9zdg4Dht1X8coub5jKwHzP0ExRug==", + "node_modules/eslint-plugin-n": { + "version": "16.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz", + "integrity": "sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@jridgewell/sourcemap-codec": "^1.4.14", - "debug": "^4.3.1", - "eslint-compat-utils": "^0.1.2", - "esutils": "^2.0.3", - "known-css-properties": "^0.29.0", - "postcss": "^8.4.5", - "postcss-load-config": "^3.1.4", - "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.0.11", - "semver": "^7.5.3", - "svelte-eslint-parser": ">=0.33.0 <1.0.0" + "@eslint-community/eslint-utils": "^4.4.0", + "builtins": "^5.0.1", + "eslint-plugin-es-x": "^7.5.0", + "get-tsconfig": "^4.7.0", + "globals": "^13.24.0", + "ignore": "^5.2.4", + "is-builtin-module": "^3.2.1", + "is-core-module": "^2.12.1", + "minimatch": "^3.1.2", + "resolve": "^1.22.2", + "semver": "^7.5.3" }, "engines": { - "node": "^14.17.0 || >=16.0.0" + "node": ">=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ota-meshi" + "url": "https://github.com/sponsors/mysticatea" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0-0", - "svelte": "^3.37.0 || ^4.0.0" - }, - "peerDependenciesMeta": { - "svelte": { - "optional": true - } + "eslint": ">=7.0.0" } }, - "node_modules/eslint-plugin-svelte/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/eslint-plugin-prettier": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", + "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "ms": "2.1.2" + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.9.1" }, "engines": { - "node": ">=6.0" + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": "*", + "prettier": ">=3.0.0" }, "peerDependenciesMeta": { - "supports-color": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { "optional": true } } }, - "node_modules/eslint-plugin-svelte/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "node_modules/eslint-plugin-promise": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.6.0.tgz", + "integrity": "sha512-57Zzfw8G6+Gq7axm2Pdo3gW/Rx3h9Yywgn61uE/3elTCOePEHVrn2i5CdfBwA1BLK0Q0WqctICIUSqXZW/VprQ==", "dev": true, + "license": "ISC", + "peer": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" } }, - "node_modules/eslint/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/eslint-plugin-svelte": { + "version": "2.44.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-2.44.1.tgz", + "integrity": "sha512-w6wkoJPw1FJKFtM/2oln21rlu5+HTd2CSkkzhm32A+trNoW2EYQqTQAbDTU6k2GI/6Vh64rBHYQejqEgDld7fw==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "ms": "2.1.2" + "@eslint-community/eslint-utils": "^4.4.0", + "@jridgewell/sourcemap-codec": "^1.4.15", + "eslint-compat-utils": "^0.5.1", + "esutils": "^2.0.3", + "known-css-properties": "^0.34.0", + "postcss": "^8.4.38", + "postcss-load-config": "^3.1.4", + "postcss-safe-parser": "^6.0.0", + "postcss-selector-parser": "^6.1.0", + "semver": "^7.6.2", + "svelte-eslint-parser": "^0.41.1" }, "engines": { - "node": ">=6.0" + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0-0 || ^9.0.0-0", + "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0-next.191" }, "peerDependenciesMeta": { - "supports-color": { + "svelte": { "optional": true } } }, - "node_modules/eslint/node_modules/eslint-scope": { + "node_modules/eslint-scope": { "version": "7.2.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, + "license": "BSD-2-Clause", + "peer": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -6126,93 +6357,46 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, + "license": "Apache-2.0", + "peer": true, "engines": { - "node": ">=10" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "node_modules/eslint/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "p-locate": "^5.0.0" + "ms": "^2.1.3" }, "engines": { - "node": ">=10" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "node_modules/eslint/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/eslint/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "MIT", + "peer": true }, "node_modules/esm-env": { "version": "1.0.0", @@ -6240,6 +6424,8 @@ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, + "license": "BSD-2-Clause", + "peer": true, "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -6253,10 +6439,12 @@ } }, "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, + "license": "BSD-3-Clause", + "peer": true, "dependencies": { "estraverse": "^5.1.0" }, @@ -6264,20 +6452,13 @@ "node": ">=0.10" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, + "license": "BSD-2-Clause", + "peer": true, "dependencies": { "estraverse": "^5.2.0" }, @@ -6285,11 +6466,13 @@ "node": ">=4.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { + "node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", + "peer": true, "engines": { "node": ">=4.0" } @@ -6307,6 +6490,8 @@ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, + "license": "BSD-2-Clause", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -6419,7 +6604,17 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0", + "peer": true }, "node_modules/fast-glob": { "version": "3.3.1", @@ -6453,13 +6648,17 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT", + "peer": true }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "dev": true, + "license": "MIT", + "peer": true }, "node_modules/fast-redact": { "version": "3.5.0", @@ -6479,18 +6678,13 @@ "reusify": "^1.0.4" } }, - "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, - "license": "MIT" - }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { "flat-cache": "^3.0.4" }, @@ -6536,13 +6730,34 @@ "node": ">=0.10.0" } }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "flatted": "^3.1.0", + "flatted": "^3.2.9", + "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { @@ -6550,10 +6765,12 @@ } }, "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true, + "license": "ISC", + "peer": true }, "node_modules/follow-redirects": { "version": "1.15.6", @@ -6581,6 +6798,7 @@ "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "is-callable": "^1.1.3" } @@ -6645,6 +6863,7 @@ "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -6664,6 +6883,7 @@ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6684,6 +6904,7 @@ "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", @@ -6721,6 +6942,7 @@ "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "call-bind": "^1.0.5", "es-errors": "^1.3.0", @@ -6733,6 +6955,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-tsconfig": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz", + "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, "node_modules/gifwrap": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/gifwrap/-/gifwrap-0.10.1.tgz", @@ -6748,7 +6984,10 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", + "peer": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6777,10 +7016,12 @@ } }, "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, + "license": "MIT", + "peer": true, "dependencies": { "type-fest": "^0.20.2" }, @@ -6797,6 +7038,7 @@ "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" @@ -6819,6 +7061,8 @@ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -6846,6 +7090,7 @@ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -6857,7 +7102,9 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true + "dev": true, + "license": "MIT", + "peer": true }, "node_modules/h3": { "version": "1.12.0", @@ -6883,6 +7130,7 @@ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6902,6 +7150,7 @@ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "es-define-property": "^1.0.0" }, @@ -6915,6 +7164,7 @@ "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.4" }, @@ -6928,6 +7178,7 @@ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.4" }, @@ -6941,6 +7192,7 @@ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "has-symbols": "^1.0.3" }, @@ -7137,10 +7389,12 @@ ] }, "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, + "license": "MIT", + "peer": true, "engines": { "node": ">= 4" } @@ -7173,6 +7427,8 @@ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -7184,15 +7440,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/import-meta-resolve": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", @@ -7209,6 +7456,8 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, + "license": "MIT", + "peer": true, "engines": { "node": ">=0.8.19" } @@ -7243,6 +7492,7 @@ "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.0", @@ -7267,6 +7517,7 @@ "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1" @@ -7284,6 +7535,7 @@ "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "has-bigints": "^1.0.1" }, @@ -7308,6 +7560,7 @@ "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -7319,12 +7572,30 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.4" }, @@ -7333,12 +7604,16 @@ } }, "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dev": true, + "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7350,6 +7625,7 @@ "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "is-typed-array": "^1.1.13" }, @@ -7366,6 +7642,7 @@ "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7434,6 +7711,7 @@ "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.4" }, @@ -7455,6 +7733,7 @@ "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7470,6 +7749,8 @@ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, + "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -7494,6 +7775,7 @@ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -7511,6 +7793,7 @@ "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "call-bind": "^1.0.7" }, @@ -7538,6 +7821,7 @@ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7554,6 +7838,7 @@ "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -7570,6 +7855,7 @@ "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "which-typed-array": "^1.1.14" }, @@ -7592,6 +7878,7 @@ "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "call-bind": "^1.0.2" }, @@ -7634,7 +7921,8 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/isbot": { "version": "5.1.17", @@ -7733,6 +8021,8 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { "argparse": "^2.0.1" }, @@ -7814,17 +8104,29 @@ "node": ">=18" } }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT", + "peer": true }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "dev": true, + "license": "MIT", + "peer": true }, "node_modules/json-text-sequence": { "version": "0.1.1", @@ -7835,6 +8137,20 @@ "delimit-stream": "0.1.0" } }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, "node_modules/jsonc-parser": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", @@ -7847,6 +8163,17 @@ "dev": true, "license": "Apache-2.0" }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/keyvaluestorage-interface": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/keyvaluestorage-interface/-/keyvaluestorage-interface-1.0.0.tgz", @@ -7863,16 +8190,20 @@ } }, "node_modules/known-css-properties": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", - "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", - "dev": true + "version": "0.34.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.34.0.tgz", + "integrity": "sha512-tBECoUqNFbyAY4RrbqsBQqDFpGXAEbdD5QKr8kACx3+rnArmuuR22nKQWKazvp07N9yjTyDZaw/20UIH8tL9DQ==", + "dev": true, + "license": "MIT", + "peer": true }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -7931,6 +8262,23 @@ "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==" }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -7947,7 +8295,9 @@ "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "dev": true, + "license": "MIT", + "peer": true }, "node_modules/loupe": { "version": "3.1.1", @@ -7959,18 +8309,6 @@ "get-func-name": "^2.0.1" } }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/lz-string": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", @@ -8009,13 +8347,6 @@ "node": ">= 8" } }, - "node_modules/meshoptimizer": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/meshoptimizer/-/meshoptimizer-0.18.1.tgz", - "integrity": "sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw==", - "dev": true, - "license": "MIT" - }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", @@ -8106,6 +8437,8 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, + "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -8183,7 +8516,9 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "dev": true, + "license": "MIT", + "peer": true }, "node_modules/next-tick": { "version": "1.1.0", @@ -8322,6 +8657,7 @@ "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.4" }, @@ -8335,6 +8671,7 @@ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.4" } @@ -8345,6 +8682,7 @@ "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", @@ -8364,6 +8702,7 @@ "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -8383,6 +8722,7 @@ "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -8398,6 +8738,7 @@ "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -8463,22 +8804,58 @@ } }, "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" } }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", @@ -8491,6 +8868,8 @@ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { "callsites": "^3.0.0" }, @@ -8540,6 +8919,8 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -8572,6 +8953,8 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, + "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -8729,13 +9112,12 @@ } }, "node_modules/playwright": { - "version": "1.47.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.47.1.tgz", - "integrity": "sha512-SUEKi6947IqYbKxRiqnbUobVZY4bF1uu+ZnZNJX9DfU1tlf2UhWfvVjLf01pQx9URsOr18bFVUKXmanYWhbfkw==", + "version": "1.47.2", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.47.2.tgz", + "integrity": "sha512-nx1cLMmQWqmA3UsnjaaokyoUpdVaaDhJhMoxX2qj3McpjnsqFHs516QAKYhqHAgOP+oCFTEOCOAaD1RgD/RQfA==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.47.1" + "playwright-core": "1.47.2" }, "bin": { "playwright": "cli.js" @@ -8748,11 +9130,10 @@ } }, "node_modules/playwright-core": { - "version": "1.47.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.47.1.tgz", - "integrity": "sha512-i1iyJdLftqtt51mEk6AhYFaAJCDx0xQ/O5NU8EKaWFgMjItPVma542Nh/Aq8aLCjIJSzjaiEQGW/nyqLkGF1OQ==", + "version": "1.47.2", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.47.2.tgz", + "integrity": "sha512-3JvMfF+9LJfe16l7AbSmU555PaTl2tPyQsVInqm3id16pdDfvZ8TTZ/pyzmkbDrZTQefyzU7AIHlZqQnxpqHVQ==", "dev": true, - "license": "Apache-2.0", "bin": { "playwright-core": "cli.js" }, @@ -8766,7 +9147,6 @@ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "hasInstallScript": true, - "license": "MIT", "optional": true, "os": [ "darwin" @@ -8791,6 +9171,7 @@ "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.4" } @@ -8865,6 +9246,8 @@ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { "lilconfig": "^2.0.5", "yaml": "^1.10.2" @@ -8913,6 +9296,8 @@ "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", "dev": true, + "license": "MIT", + "peer": true, "engines": { "node": ">=12.0" }, @@ -8925,9 +9310,9 @@ } }, "node_modules/postcss-scss": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.8.tgz", - "integrity": "sha512-Cr0X8Eu7xMhE96PJck6ses/uVVXDtE5ghUTKNUYgm8ozgP2TkgV3LWs3WgLV1xaSSLq8ZFiXaUrj0LVgG1fGEA==", + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz", + "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==", "dev": true, "funding": [ { @@ -8943,6 +9328,8 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", + "peer": true, "engines": { "node": ">=12.0" }, @@ -8951,10 +9338,11 @@ } }, "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.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "dev": true, + "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -8974,6 +9362,8 @@ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, + "license": "MIT", + "peer": true, "engines": { "node": ">= 0.8.0" } @@ -8994,6 +9384,20 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/prettier-plugin-organize-imports": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-4.1.0.tgz", @@ -9279,6 +9683,7 @@ "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "call-bind": "^1.0.6", "define-properties": "^1.2.1", @@ -9309,6 +9714,28 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -9323,7 +9750,10 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, + "license": "ISC", + "peer": true, "dependencies": { "glob": "^7.1.3" }, @@ -9335,11 +9765,10 @@ } }, "node_modules/rollup": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.3.tgz", - "integrity": "sha512-7sqRtBNnEbcBtMeRVc6VRsJMmpI+JU1z9VTvW8D4gXIYQFz0aLcsE6rRkyghZkLfEgUZgVvOG7A5CVz/VW5GIA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.4.tgz", + "integrity": "sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==", "dev": true, - "license": "MIT", "dependencies": { "@types/estree": "1.0.5" }, @@ -9351,22 +9780,22 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.21.3", - "@rollup/rollup-android-arm64": "4.21.3", - "@rollup/rollup-darwin-arm64": "4.21.3", - "@rollup/rollup-darwin-x64": "4.21.3", - "@rollup/rollup-linux-arm-gnueabihf": "4.21.3", - "@rollup/rollup-linux-arm-musleabihf": "4.21.3", - "@rollup/rollup-linux-arm64-gnu": "4.21.3", - "@rollup/rollup-linux-arm64-musl": "4.21.3", - "@rollup/rollup-linux-powerpc64le-gnu": "4.21.3", - "@rollup/rollup-linux-riscv64-gnu": "4.21.3", - "@rollup/rollup-linux-s390x-gnu": "4.21.3", - "@rollup/rollup-linux-x64-gnu": "4.21.3", - "@rollup/rollup-linux-x64-musl": "4.21.3", - "@rollup/rollup-win32-arm64-msvc": "4.21.3", - "@rollup/rollup-win32-ia32-msvc": "4.21.3", - "@rollup/rollup-win32-x64-msvc": "4.21.3", + "@rollup/rollup-android-arm-eabi": "4.22.4", + "@rollup/rollup-android-arm64": "4.22.4", + "@rollup/rollup-darwin-arm64": "4.22.4", + "@rollup/rollup-darwin-x64": "4.22.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.22.4", + "@rollup/rollup-linux-arm-musleabihf": "4.22.4", + "@rollup/rollup-linux-arm64-gnu": "4.22.4", + "@rollup/rollup-linux-arm64-musl": "4.22.4", + "@rollup/rollup-linux-powerpc64le-gnu": "4.22.4", + "@rollup/rollup-linux-riscv64-gnu": "4.22.4", + "@rollup/rollup-linux-s390x-gnu": "4.22.4", + "@rollup/rollup-linux-x64-gnu": "4.22.4", + "@rollup/rollup-linux-x64-musl": "4.22.4", + "@rollup/rollup-win32-arm64-msvc": "4.22.4", + "@rollup/rollup-win32-ia32-msvc": "4.22.4", + "@rollup/rollup-win32-x64-msvc": "4.22.4", "fsevents": "~2.3.2" } }, @@ -9417,6 +9846,7 @@ "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4", @@ -9455,6 +9885,7 @@ "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -9554,13 +9985,12 @@ "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" }, "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.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", + "peer": true, "bin": { "semver": "bin/semver.js" }, @@ -9580,6 +10010,7 @@ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -9598,6 +10029,7 @@ "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -9633,6 +10065,7 @@ "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -9699,6 +10132,8 @@ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -9780,6 +10215,7 @@ "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -9799,6 +10235,7 @@ "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -9814,6 +10251,7 @@ "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -9831,6 +10269,8 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -9844,6 +10284,7 @@ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=4" } @@ -9876,6 +10317,8 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", + "peer": true, "engines": { "node": ">=8" }, @@ -10070,16 +10513,18 @@ } }, "node_modules/svelte-eslint-parser": { - "version": "0.33.0", - "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-0.33.0.tgz", - "integrity": "sha512-5awZ6Bs+Tb/zQwa41PSdcLynAVQTwW0HGyCBjtbAQ59taLZqDgQSMzRlDmapjZdDtzERm0oXDZNE0E+PKJ6ryg==", + "version": "0.41.1", + "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-0.41.1.tgz", + "integrity": "sha512-08ndI6zTghzI8SuJAFpvMbA/haPSGn3xz19pjre19yYMw8Nw/wQJ2PrZBI/L8ijGTgtkWCQQiLLy+Z1tfaCwNA==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "eslint-scope": "^7.0.0", - "eslint-visitor-keys": "^3.0.0", - "espree": "^9.0.0", - "postcss": "^8.4.28", - "postcss-scss": "^4.0.7" + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "postcss": "^8.4.39", + "postcss-scss": "^4.0.9" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -10088,7 +10533,7 @@ "url": "https://github.com/sponsors/ota-meshi" }, "peerDependencies": { - "svelte": "^3.37.0 || ^4.0.0" + "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0-next.191" }, "peerDependenciesMeta": { "svelte": { @@ -10096,31 +10541,6 @@ } } }, - "node_modules/svelte-eslint-parser/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/svelte-eslint-parser/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/svelte-hmr": { "version": "0.16.0", "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.16.0.tgz", @@ -10140,6 +10560,24 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, + "node_modules/synckit": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz", + "integrity": "sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, "node_modules/system-architecture": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/system-architecture/-/system-architecture-0.1.0.tgz", @@ -10247,7 +10685,9 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "dev": true, + "license": "MIT", + "peer": true }, "node_modules/thenify": { "version": "3.3.1", @@ -10415,10 +10855,12 @@ "license": "MIT" }, "node_modules/ts-api-utils": { - "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==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", "dev": true, + "license": "MIT", + "peer": true, "engines": { "node": ">=16" }, @@ -10453,6 +10895,7 @@ "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", @@ -10460,19 +10903,6 @@ "strip-bom": "^3.0.0" } }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, "node_modules/tslib": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", @@ -10490,6 +10920,8 @@ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { "prelude-ls": "^1.2.1" }, @@ -10502,6 +10934,8 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, + "license": "(MIT OR CC0-1.0)", + "peer": true, "engines": { "node": ">=10" }, @@ -10515,6 +10949,7 @@ "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -10530,6 +10965,7 @@ "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", @@ -10550,6 +10986,7 @@ "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", @@ -10571,6 +11008,7 @@ "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", @@ -10629,6 +11067,7 @@ "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -10806,6 +11245,8 @@ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, + "license": "BSD-2-Clause", + "peer": true, "dependencies": { "punycode": "^2.1.0" } @@ -11167,6 +11608,7 @@ "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -11184,6 +11626,7 @@ "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", @@ -11215,6 +11658,17 @@ "node": ">=8" } }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -11296,21 +11750,31 @@ "node": ">=0.10.32" } }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true, + "license": "ISC", + "peer": true, "engines": { "node": ">= 6" } }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/zod": { "version": "3.23.8", "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", diff --git a/package.json b/package.json index dde6e4e58..77b613bb6 100644 --- a/package.json +++ b/package.json @@ -14,10 +14,11 @@ "build:compress": "./scripts/build.compress.sh", "build:csp": "node scripts/build.csp.mjs", "build:metadata": "node scripts/build.metadata.mjs", + "build:style": "node scripts/build.style.mjs", "build:ic-domains": "node scripts/build.ic-domains.mjs", "build:ii-alternative-origins": "node scripts/build.ii-alternative-origins.mjs", "build:copy-workers": "node ./scripts/build.copy-workers.mjs", - "build:post-process": "npm run build:metadata && npm run build:ic-domains && npm run build:ii-alternative-origins && npm run build:csp && npm run build:copy-workers && npm run build:compress", + "build:post-process": "npm run build:style && npm run build:metadata && npm run build:ic-domains && npm run build:ii-alternative-origins && npm run build:csp && npm run build:copy-workers && npm run build:compress", "build:tokens-sns": "node scripts/build.tokens.sns.mjs && npm run format", "build:tokens-ckerc20": "node scripts/build.tokens.ckerc20.mjs && npm run format", "dev": "vite dev", @@ -47,7 +48,7 @@ "@dfinity/agent": "^2.1.1", "@dfinity/auth-client": "^2.1.1", "@dfinity/candid": "^2.1.1", - "@dfinity/ckbtc": "^3.0.0-next-2024-09-17", + "@dfinity/ckbtc": "^3.0.0-next-2024-09-26", "@dfinity/cketh": "^3.3.0-next-2024-09-17", "@dfinity/gix-components": "^4.7.0-next-2024-09-17", "@dfinity/ic-management": "^5.2.0-next-2024-09-17", @@ -66,9 +67,10 @@ "zod": "^3.23.8" }, "devDependencies": { + "@dfinity/eslint-config-oisy-wallet": "^0.0.3", "@dfinity/identity-secp256k1": "^2.1.1", "@dfinity/internet-identity-playwright": "^0.0.3", - "@playwright/test": "^1.47.1", + "@playwright/test": "^1.47.2", "@rollup/plugin-inject": "^5.0.5", "@sveltejs/adapter-static": "^3.0.5", "@sveltejs/kit": "^2.5.28", @@ -76,16 +78,8 @@ "@testing-library/jest-dom": "^6.5.0", "@testing-library/svelte": "^5.2.1", "@types/node": "^20.14.9", - "@types/three": "^0.167.0", - "@typescript-eslint/eslint-plugin": "^7.2.0", - "@typescript-eslint/parser": "^7.2.0", "autoprefixer": "^10.4.20", "dotenv": "^16.4.5", - "eslint": "^8.57.0", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-import": "^2.29.1", - "eslint-plugin-local-rules": "^2.0.1", - "eslint-plugin-svelte": "^2.35.1", "jimp": "^1.6.0", "jsdom": "^25.0.1", "jsqr": "^1.4.0", diff --git a/scripts/build.signer.sh b/scripts/build.signer.sh index 7d11f768a..c70de8f8a 100755 --- a/scripts/build.signer.sh +++ b/scripts/build.signer.sh @@ -20,9 +20,10 @@ print_help() { DFX_NETWORK="${DFX_NETWORK:-local}" -SIGNER_RELEASE="v0.1.2" -CANDID_URL="https://raw.githubusercontent.com/dfinity/chain-fusion-signer/${SIGNER_RELEASE}/src/signer/signer.did" -WASM_URL="https://github.com/dfinity/chain-fusion-signer/releases/download/${SIGNER_RELEASE}/signer.wasm.gz" +SIGNER_RELEASE="v0.2.1" +SIGNER_RELEASE_URL="https://github.com/dfinity/chain-fusion-signer/releases/download/${SIGNER_RELEASE}" +CANDID_URL="${SIGNER_RELEASE_URL}/signer.did" +WASM_URL="${SIGNER_RELEASE_URL}/signer.wasm.gz" CANDID_FILE="$(jq -r .canisters.signer.candid dfx.json)" WASM_FILE="$(jq -r .canisters.signer.wasm dfx.json)" diff --git a/scripts/build.style.mjs b/scripts/build.style.mjs new file mode 100644 index 000000000..cc518cac1 --- /dev/null +++ b/scripts/build.style.mjs @@ -0,0 +1,47 @@ +#!/usr/bin/env node + +import { config } from 'dotenv'; +import { readFileSync, writeFileSync } from 'node:fs'; +import { dirname, join } from 'node:path'; +import { ENV, findHtmlFiles } from './build.utils.mjs'; +import { findFiles } from './utils.mjs'; + +config({ path: `.env.${ENV}` }); + +const PLACEHOLDER = ''; + +const src = join(process.cwd(), 'src', 'frontend', 'src', 'routes'); +const build = join(process.cwd(), 'build'); + +const parseStyle = (srcFile) => { + const parsedSrcFile = srcFile.replace(/\/\([^)]+\)\//, '/'); // Remove e.g. /(sign)/ from path + const srcDir = dirname(parsedSrcFile); + + const destDir = srcDir.replace(src, build); + const destFile = join(destDir, 'index.html'); + + const style = readFileSync(srcFile, 'utf8'); + + // Just in case there is an empty CSS source file. Placeholder is cleaned with another hook. + if (style.trim().length === 0) { + return; + } + + const content = readFileSync(destFile, 'utf8'); + const updatedContent = content.replace(PLACEHOLDER, ``); + + writeFileSync(destFile, updatedContent); +}; + +const cleanPlaceholder = (targetFile) => { + const content = readFileSync(targetFile, 'utf8'); + const updatedContent = content.replace(PLACEHOLDER, ''); + + writeFileSync(targetFile, updatedContent); +}; + +const styleFiles = findFiles({ dir: src, extensions: ['.page.css'] }); +styleFiles.forEach(parseStyle); + +const htmlFiles = findHtmlFiles(); +htmlFiles.forEach(cleanPlaceholder); diff --git a/src/declarations/signer/signer.did b/src/declarations/signer/signer.did index 0a2166f02..cce9be6b0 100644 --- a/src/declarations/signer/signer.did +++ b/src/declarations/signer/signer.did @@ -1,5 +1,9 @@ +type Account = record { owner : principal; subaccount : opt blob }; type Arg = variant { Upgrade; Init : InitArg }; +type BitcoinAddressType = variant { P2WPKH }; type BitcoinNetwork = variant { mainnet; regtest; testnet }; +type BtcTxOutput = record { destination_address : text; sent_satoshis : nat64 }; +type CallerPaysIcrc2Tokens = record { ledger : principal }; type CanisterStatusResultV2 = record { controller : principal; status : CanisterStatusType; @@ -12,7 +16,11 @@ type CanisterStatusResultV2 = record { module_hash : opt blob; }; type CanisterStatusType = variant { stopped; stopping; running }; -type Config = record { ecdsa_key_name : text; ic_root_key_raw : opt blob }; +type Config = record { + ecdsa_key_name : text; + ic_root_key_raw : opt blob; + cycles_ledger : principal; +}; type DefiniteCanisterSettingsArgs = record { controller : principal; freezing_threshold : nat; @@ -20,6 +28,28 @@ type DefiniteCanisterSettingsArgs = record { memory_allocation : nat; compute_allocation : nat; }; +type EcdsaCurve = variant { secp256k1 }; +type EcdsaKeyId = record { name : text; curve : EcdsaCurve }; +type EcdsaPublicKeyArgument = record { + key_id : EcdsaKeyId; + canister_id : opt principal; + derivation_path : vec blob; +}; +type EcdsaPublicKeyResponse = record { public_key : blob; chain_code : blob }; +type GenericSigningError = variant { + SigningError : record { RejectionCode_1; text }; + PaymentError : PaymentError; +}; +type GetAddressError = variant { + InternalError : record { msg : text }; + PaymentError : PaymentError; +}; +type GetAddressRequest = record { + network : BitcoinNetwork; + address_type : BitcoinAddressType; +}; +type GetAddressResponse = record { address : text }; +type GetBalanceResponse = record { balance : nat64 }; type HttpRequest = record { url : text; method : text; @@ -31,7 +61,68 @@ type HttpResponse = record { headers : vec record { text; text }; status_code : nat16; }; -type InitArg = record { ecdsa_key_name : text; ic_root_key_der : opt blob }; +type InitArg = record { + ecdsa_key_name : text; + ic_root_key_der : opt blob; + cycles_ledger : opt principal; +}; +type Outpoint = record { txid : blob; vout : nat32 }; +type PatronPaysIcrc2Tokens = record { ledger : principal; patron : Account }; +type PaymentError = variant { + LedgerUnreachable : CallerPaysIcrc2Tokens; + UnsupportedPaymentType; + LedgerError : record { error : WithdrawFromError; ledger : principal }; + InsufficientFunds : record { needed : nat64; available : nat64 }; +}; +type PaymentType = variant { + PatronPaysIcrc2Tokens : PatronPaysIcrc2Tokens; + AttachedCycles; + CallerPaysIcrc2Cycles; + CallerPaysIcrc2Tokens : CallerPaysIcrc2Tokens; + PatronPaysIcrc2Cycles : Account; +}; +type RejectionCode = variant { + NoError; + CanisterError; + SysTransient; + DestinationInvalid; + Unknown; + SysFatal; + CanisterReject; +}; +type RejectionCode_1 = variant { + NoError; + CanisterError; + SysTransient; + DestinationInvalid; + Unknown; + SysFatal; + CanisterReject; +}; +type Result = variant { Ok : GetAddressResponse; Err : GetAddressError }; +type Result_1 = variant { Ok : GetBalanceResponse; Err : GetAddressError }; +type Result_2 = variant { Ok : SendBtcResponse; Err : SendBtcError }; +type Result_3 = variant { Ok : text; Err : GenericSigningError }; +type Result_4 = variant { + Ok : record { EcdsaPublicKeyResponse }; + Err : GenericSigningError; +}; +type Result_5 = variant { + Ok : record { SignWithEcdsaResponse }; + Err : GenericSigningError; +}; +type SendBtcError = variant { + InternalError : record { msg : text }; + PaymentError : PaymentError; +}; +type SendBtcRequest = record { + fee_satoshis : opt nat64; + network : BitcoinNetwork; + utxos_to_spend : vec Utxo; + address_type : BitcoinAddressType; + outputs : vec BtcTxOutput; +}; +type SendBtcResponse = record { txid : text }; type SignRequest = record { to : text; gas : nat; @@ -42,12 +133,48 @@ type SignRequest = record { chain_id : nat; nonce : nat; }; +type SignWithEcdsaArgument = record { + key_id : EcdsaKeyId; + derivation_path : vec blob; + message_hash : blob; +}; +type SignWithEcdsaResponse = record { signature : blob }; +type Utxo = record { height : nat32; value : nat64; outpoint : Outpoint }; +type WithdrawFromError = variant { + GenericError : record { message : text; error_code : nat }; + TemporarilyUnavailable; + InsufficientAllowance : record { allowance : nat }; + Duplicate : record { duplicate_of : nat }; + InvalidReceiver : record { receiver : principal }; + CreatedInFuture : record { ledger_time : nat64 }; + TooOld; + FailedToWithdrawFrom : record { + withdraw_from_block : opt nat; + rejection_code : RejectionCode_1; + refund_block : opt nat; + approval_refund_block : opt nat; + rejection_reason : text; + }; + InsufficientFunds : record { balance : nat }; +}; service : (Arg) -> { - caller_btc_address : (BitcoinNetwork) -> (text); - caller_btc_balance : (BitcoinNetwork) -> (nat64); + btc_caller_address : (GetAddressRequest, opt PaymentType) -> (Result); + btc_caller_balance : (GetAddressRequest, opt PaymentType) -> (Result_1); + btc_caller_send : (SendBtcRequest, opt PaymentType) -> (Result_2); caller_eth_address : () -> (text); config : () -> (Config) query; eth_address_of : (principal) -> (text); + eth_address_of_caller : (opt PaymentType) -> (Result_3); + eth_address_of_principal : (principal, opt PaymentType) -> (Result_3); + eth_personal_sign : (text, opt PaymentType) -> (Result_3); + eth_sign_transaction : (SignRequest, opt PaymentType) -> (Result_3); + generic_caller_ecdsa_public_key : ( + EcdsaPublicKeyArgument, + opt PaymentType, + ) -> (Result_4); + generic_sign_with_ecdsa : (opt PaymentType, SignWithEcdsaArgument) -> ( + Result_5, + ); get_canister_status : () -> (CanisterStatusResultV2); http_request : (HttpRequest) -> (HttpResponse) query; personal_sign : (text) -> (text); diff --git a/src/declarations/signer/signer.did.d.ts b/src/declarations/signer/signer.did.d.ts index a4a5f87d6..da4329cbb 100644 --- a/src/declarations/signer/signer.did.d.ts +++ b/src/declarations/signer/signer.did.d.ts @@ -2,8 +2,20 @@ import type { ActorMethod } from '@dfinity/agent'; import type { IDL } from '@dfinity/candid'; import type { Principal } from '@dfinity/principal'; +export interface Account { + owner: Principal; + subaccount: [] | [Uint8Array | number[]]; +} export type Arg = { Upgrade: null } | { Init: InitArg }; +export type BitcoinAddressType = { P2WPKH: null }; export type BitcoinNetwork = { mainnet: null } | { regtest: null } | { testnet: null }; +export interface BtcTxOutput { + destination_address: string; + sent_satoshis: bigint; +} +export interface CallerPaysIcrc2Tokens { + ledger: Principal; +} export interface CanisterStatusResultV2 { controller: Principal; status: CanisterStatusType; @@ -19,6 +31,7 @@ export type CanisterStatusType = { stopped: null } | { stopping: null } | { runn export interface Config { ecdsa_key_name: string; ic_root_key_raw: [] | [Uint8Array | number[]]; + cycles_ledger: Principal; } export interface DefiniteCanisterSettingsArgs { controller: Principal; @@ -27,6 +40,36 @@ export interface DefiniteCanisterSettingsArgs { memory_allocation: bigint; compute_allocation: bigint; } +export type EcdsaCurve = { secp256k1: null }; +export interface EcdsaKeyId { + name: string; + curve: EcdsaCurve; +} +export interface EcdsaPublicKeyArgument { + key_id: EcdsaKeyId; + canister_id: [] | [Principal]; + derivation_path: Array; +} +export interface EcdsaPublicKeyResponse { + public_key: Uint8Array | number[]; + chain_code: Uint8Array | number[]; +} +export type GenericSigningError = + | { + SigningError: [RejectionCode_1, string]; + } + | { PaymentError: PaymentError }; +export type GetAddressError = { InternalError: { msg: string } } | { PaymentError: PaymentError }; +export interface GetAddressRequest { + network: BitcoinNetwork; + address_type: BitcoinAddressType; +} +export interface GetAddressResponse { + address: string; +} +export interface GetBalanceResponse { + balance: bigint; +} export interface HttpRequest { url: string; method: string; @@ -41,6 +84,59 @@ export interface HttpResponse { export interface InitArg { ecdsa_key_name: string; ic_root_key_der: [] | [Uint8Array | number[]]; + cycles_ledger: [] | [Principal]; +} +export interface Outpoint { + txid: Uint8Array | number[]; + vout: number; +} +export interface PatronPaysIcrc2Tokens { + ledger: Principal; + patron: Account; +} +export type PaymentError = + | { LedgerUnreachable: CallerPaysIcrc2Tokens } + | { UnsupportedPaymentType: null } + | { LedgerError: { error: WithdrawFromError; ledger: Principal } } + | { InsufficientFunds: { needed: bigint; available: bigint } }; +export type PaymentType = + | { PatronPaysIcrc2Tokens: PatronPaysIcrc2Tokens } + | { AttachedCycles: null } + | { CallerPaysIcrc2Cycles: null } + | { CallerPaysIcrc2Tokens: CallerPaysIcrc2Tokens } + | { PatronPaysIcrc2Cycles: Account }; +export type RejectionCode = + | { NoError: null } + | { CanisterError: null } + | { SysTransient: null } + | { DestinationInvalid: null } + | { Unknown: null } + | { SysFatal: null } + | { CanisterReject: null }; +export type RejectionCode_1 = + | { NoError: null } + | { CanisterError: null } + | { SysTransient: null } + | { DestinationInvalid: null } + | { Unknown: null } + | { SysFatal: null } + | { CanisterReject: null }; +export type Result = { Ok: GetAddressResponse } | { Err: GetAddressError }; +export type Result_1 = { Ok: GetBalanceResponse } | { Err: GetAddressError }; +export type Result_2 = { Ok: SendBtcResponse } | { Err: SendBtcError }; +export type Result_3 = { Ok: string } | { Err: GenericSigningError }; +export type Result_4 = { Ok: [EcdsaPublicKeyResponse] } | { Err: GenericSigningError }; +export type Result_5 = { Ok: [SignWithEcdsaResponse] } | { Err: GenericSigningError }; +export type SendBtcError = { InternalError: { msg: string } } | { PaymentError: PaymentError }; +export interface SendBtcRequest { + fee_satoshis: [] | [bigint]; + network: BitcoinNetwork; + utxos_to_spend: Array; + address_type: BitcoinAddressType; + outputs: Array; +} +export interface SendBtcResponse { + txid: string; } export interface SignRequest { to: string; @@ -52,12 +148,55 @@ export interface SignRequest { chain_id: bigint; nonce: bigint; } +export interface SignWithEcdsaArgument { + key_id: EcdsaKeyId; + derivation_path: Array; + message_hash: Uint8Array | number[]; +} +export interface SignWithEcdsaResponse { + signature: Uint8Array | number[]; +} +export interface Utxo { + height: number; + value: bigint; + outpoint: Outpoint; +} +export type WithdrawFromError = + | { + GenericError: { message: string; error_code: bigint }; + } + | { TemporarilyUnavailable: null } + | { InsufficientAllowance: { allowance: bigint } } + | { Duplicate: { duplicate_of: bigint } } + | { InvalidReceiver: { receiver: Principal } } + | { CreatedInFuture: { ledger_time: bigint } } + | { TooOld: null } + | { + FailedToWithdrawFrom: { + withdraw_from_block: [] | [bigint]; + rejection_code: RejectionCode_1; + refund_block: [] | [bigint]; + approval_refund_block: [] | [bigint]; + rejection_reason: string; + }; + } + | { InsufficientFunds: { balance: bigint } }; export interface _SERVICE { - caller_btc_address: ActorMethod<[BitcoinNetwork], string>; - caller_btc_balance: ActorMethod<[BitcoinNetwork], bigint>; + btc_caller_address: ActorMethod<[GetAddressRequest, [] | [PaymentType]], Result>; + btc_caller_balance: ActorMethod<[GetAddressRequest, [] | [PaymentType]], Result_1>; + btc_caller_send: ActorMethod<[SendBtcRequest, [] | [PaymentType]], Result_2>; caller_eth_address: ActorMethod<[], string>; config: ActorMethod<[], Config>; eth_address_of: ActorMethod<[Principal], string>; + eth_address_of_caller: ActorMethod<[[] | [PaymentType]], Result_3>; + eth_address_of_principal: ActorMethod<[Principal, [] | [PaymentType]], Result_3>; + eth_personal_sign: ActorMethod<[string, [] | [PaymentType]], Result_3>; + eth_sign_transaction: ActorMethod<[SignRequest, [] | [PaymentType]], Result_3>; + generic_caller_ecdsa_public_key: ActorMethod< + [EcdsaPublicKeyArgument, [] | [PaymentType]], + Result_4 + >; + generic_sign_with_ecdsa: ActorMethod<[[] | [PaymentType], SignWithEcdsaArgument], Result_5>; get_canister_status: ActorMethod<[], CanisterStatusResultV2>; http_request: ActorMethod<[HttpRequest], HttpResponse>; personal_sign: ActorMethod<[string], string>; diff --git a/src/declarations/signer/signer.factory.certified.did.js b/src/declarations/signer/signer.factory.certified.did.js index dc12f5717..83a070aa7 100644 --- a/src/declarations/signer/signer.factory.certified.did.js +++ b/src/declarations/signer/signer.factory.certified.did.js @@ -2,7 +2,8 @@ export const idlFactory = ({ IDL }) => { const InitArg = IDL.Record({ ecdsa_key_name: IDL.Text, - ic_root_key_der: IDL.Opt(IDL.Vec(IDL.Nat8)) + ic_root_key_der: IDL.Opt(IDL.Vec(IDL.Nat8)), + cycles_ledger: IDL.Opt(IDL.Principal) }); const Arg = IDL.Variant({ Upgrade: IDL.Null, Init: InitArg }); const BitcoinNetwork = IDL.Variant({ @@ -10,9 +11,158 @@ export const idlFactory = ({ IDL }) => { regtest: IDL.Null, testnet: IDL.Null }); + const BitcoinAddressType = IDL.Variant({ P2WPKH: IDL.Null }); + const GetAddressRequest = IDL.Record({ + network: BitcoinNetwork, + address_type: BitcoinAddressType + }); + const Account = IDL.Record({ + owner: IDL.Principal, + subaccount: IDL.Opt(IDL.Vec(IDL.Nat8)) + }); + const PatronPaysIcrc2Tokens = IDL.Record({ + ledger: IDL.Principal, + patron: Account + }); + const CallerPaysIcrc2Tokens = IDL.Record({ ledger: IDL.Principal }); + const PaymentType = IDL.Variant({ + PatronPaysIcrc2Tokens: PatronPaysIcrc2Tokens, + AttachedCycles: IDL.Null, + CallerPaysIcrc2Cycles: IDL.Null, + CallerPaysIcrc2Tokens: CallerPaysIcrc2Tokens, + PatronPaysIcrc2Cycles: Account + }); + const GetAddressResponse = IDL.Record({ address: IDL.Text }); + const RejectionCode_1 = IDL.Variant({ + NoError: IDL.Null, + CanisterError: IDL.Null, + SysTransient: IDL.Null, + DestinationInvalid: IDL.Null, + Unknown: IDL.Null, + SysFatal: IDL.Null, + CanisterReject: IDL.Null + }); + const WithdrawFromError = IDL.Variant({ + GenericError: IDL.Record({ + message: IDL.Text, + error_code: IDL.Nat + }), + TemporarilyUnavailable: IDL.Null, + InsufficientAllowance: IDL.Record({ allowance: IDL.Nat }), + Duplicate: IDL.Record({ duplicate_of: IDL.Nat }), + InvalidReceiver: IDL.Record({ receiver: IDL.Principal }), + CreatedInFuture: IDL.Record({ ledger_time: IDL.Nat64 }), + TooOld: IDL.Null, + FailedToWithdrawFrom: IDL.Record({ + withdraw_from_block: IDL.Opt(IDL.Nat), + rejection_code: RejectionCode_1, + refund_block: IDL.Opt(IDL.Nat), + approval_refund_block: IDL.Opt(IDL.Nat), + rejection_reason: IDL.Text + }), + InsufficientFunds: IDL.Record({ balance: IDL.Nat }) + }); + const PaymentError = IDL.Variant({ + LedgerUnreachable: CallerPaysIcrc2Tokens, + UnsupportedPaymentType: IDL.Null, + LedgerError: IDL.Record({ + error: WithdrawFromError, + ledger: IDL.Principal + }), + InsufficientFunds: IDL.Record({ + needed: IDL.Nat64, + available: IDL.Nat64 + }) + }); + const GetAddressError = IDL.Variant({ + InternalError: IDL.Record({ msg: IDL.Text }), + PaymentError: PaymentError + }); + const Result = IDL.Variant({ + Ok: GetAddressResponse, + Err: GetAddressError + }); + const GetBalanceResponse = IDL.Record({ balance: IDL.Nat64 }); + const Result_1 = IDL.Variant({ + Ok: GetBalanceResponse, + Err: GetAddressError + }); + const Outpoint = IDL.Record({ + txid: IDL.Vec(IDL.Nat8), + vout: IDL.Nat32 + }); + const Utxo = IDL.Record({ + height: IDL.Nat32, + value: IDL.Nat64, + outpoint: Outpoint + }); + const BtcTxOutput = IDL.Record({ + destination_address: IDL.Text, + sent_satoshis: IDL.Nat64 + }); + const SendBtcRequest = IDL.Record({ + fee_satoshis: IDL.Opt(IDL.Nat64), + network: BitcoinNetwork, + utxos_to_spend: IDL.Vec(Utxo), + address_type: BitcoinAddressType, + outputs: IDL.Vec(BtcTxOutput) + }); + const SendBtcResponse = IDL.Record({ txid: IDL.Text }); + const SendBtcError = IDL.Variant({ + InternalError: IDL.Record({ msg: IDL.Text }), + PaymentError: PaymentError + }); + const Result_2 = IDL.Variant({ + Ok: SendBtcResponse, + Err: SendBtcError + }); const Config = IDL.Record({ ecdsa_key_name: IDL.Text, - ic_root_key_raw: IDL.Opt(IDL.Vec(IDL.Nat8)) + ic_root_key_raw: IDL.Opt(IDL.Vec(IDL.Nat8)), + cycles_ledger: IDL.Principal + }); + const GenericSigningError = IDL.Variant({ + SigningError: IDL.Tuple(RejectionCode_1, IDL.Text), + PaymentError: PaymentError + }); + const Result_3 = IDL.Variant({ + Ok: IDL.Text, + Err: GenericSigningError + }); + const SignRequest = IDL.Record({ + to: IDL.Text, + gas: IDL.Nat, + value: IDL.Nat, + max_priority_fee_per_gas: IDL.Nat, + data: IDL.Opt(IDL.Text), + max_fee_per_gas: IDL.Nat, + chain_id: IDL.Nat, + nonce: IDL.Nat + }); + const EcdsaCurve = IDL.Variant({ secp256k1: IDL.Null }); + const EcdsaKeyId = IDL.Record({ name: IDL.Text, curve: EcdsaCurve }); + const EcdsaPublicKeyArgument = IDL.Record({ + key_id: EcdsaKeyId, + canister_id: IDL.Opt(IDL.Principal), + derivation_path: IDL.Vec(IDL.Vec(IDL.Nat8)) + }); + const EcdsaPublicKeyResponse = IDL.Record({ + public_key: IDL.Vec(IDL.Nat8), + chain_code: IDL.Vec(IDL.Nat8) + }); + const Result_4 = IDL.Variant({ + Ok: IDL.Tuple(EcdsaPublicKeyResponse), + Err: GenericSigningError + }); + const SignWithEcdsaArgument = IDL.Record({ + key_id: EcdsaKeyId, + derivation_path: IDL.Vec(IDL.Vec(IDL.Nat8)), + message_hash: IDL.Vec(IDL.Nat8) + }); + const SignWithEcdsaResponse = IDL.Record({ signature: IDL.Vec(IDL.Nat8) }); + const Result_5 = IDL.Variant({ + Ok: IDL.Tuple(SignWithEcdsaResponse), + Err: GenericSigningError }); const CanisterStatusType = IDL.Variant({ stopped: IDL.Null, @@ -48,22 +198,27 @@ export const idlFactory = ({ IDL }) => { headers: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), status_code: IDL.Nat16 }); - const SignRequest = IDL.Record({ - to: IDL.Text, - gas: IDL.Nat, - value: IDL.Nat, - max_priority_fee_per_gas: IDL.Nat, - data: IDL.Opt(IDL.Text), - max_fee_per_gas: IDL.Nat, - chain_id: IDL.Nat, - nonce: IDL.Nat - }); return IDL.Service({ - caller_btc_address: IDL.Func([BitcoinNetwork], [IDL.Text], []), - caller_btc_balance: IDL.Func([BitcoinNetwork], [IDL.Nat64], []), + btc_caller_address: IDL.Func([GetAddressRequest, IDL.Opt(PaymentType)], [Result], []), + btc_caller_balance: IDL.Func([GetAddressRequest, IDL.Opt(PaymentType)], [Result_1], []), + btc_caller_send: IDL.Func([SendBtcRequest, IDL.Opt(PaymentType)], [Result_2], []), caller_eth_address: IDL.Func([], [IDL.Text], []), config: IDL.Func([], [Config]), eth_address_of: IDL.Func([IDL.Principal], [IDL.Text], []), + eth_address_of_caller: IDL.Func([IDL.Opt(PaymentType)], [Result_3], []), + eth_address_of_principal: IDL.Func([IDL.Principal, IDL.Opt(PaymentType)], [Result_3], []), + eth_personal_sign: IDL.Func([IDL.Text, IDL.Opt(PaymentType)], [Result_3], []), + eth_sign_transaction: IDL.Func([SignRequest, IDL.Opt(PaymentType)], [Result_3], []), + generic_caller_ecdsa_public_key: IDL.Func( + [EcdsaPublicKeyArgument, IDL.Opt(PaymentType)], + [Result_4], + [] + ), + generic_sign_with_ecdsa: IDL.Func( + [IDL.Opt(PaymentType), SignWithEcdsaArgument], + [Result_5], + [] + ), get_canister_status: IDL.Func([], [CanisterStatusResultV2], []), http_request: IDL.Func([HttpRequest], [HttpResponse]), personal_sign: IDL.Func([IDL.Text], [IDL.Text], []), @@ -75,7 +230,8 @@ export const idlFactory = ({ IDL }) => { export const init = ({ IDL }) => { const InitArg = IDL.Record({ ecdsa_key_name: IDL.Text, - ic_root_key_der: IDL.Opt(IDL.Vec(IDL.Nat8)) + ic_root_key_der: IDL.Opt(IDL.Vec(IDL.Nat8)), + cycles_ledger: IDL.Opt(IDL.Principal) }); const Arg = IDL.Variant({ Upgrade: IDL.Null, Init: InitArg }); return [Arg]; diff --git a/src/declarations/signer/signer.factory.did.js b/src/declarations/signer/signer.factory.did.js index aadd388e4..5ab68af98 100644 --- a/src/declarations/signer/signer.factory.did.js +++ b/src/declarations/signer/signer.factory.did.js @@ -2,7 +2,8 @@ export const idlFactory = ({ IDL }) => { const InitArg = IDL.Record({ ecdsa_key_name: IDL.Text, - ic_root_key_der: IDL.Opt(IDL.Vec(IDL.Nat8)) + ic_root_key_der: IDL.Opt(IDL.Vec(IDL.Nat8)), + cycles_ledger: IDL.Opt(IDL.Principal) }); const Arg = IDL.Variant({ Upgrade: IDL.Null, Init: InitArg }); const BitcoinNetwork = IDL.Variant({ @@ -10,9 +11,158 @@ export const idlFactory = ({ IDL }) => { regtest: IDL.Null, testnet: IDL.Null }); + const BitcoinAddressType = IDL.Variant({ P2WPKH: IDL.Null }); + const GetAddressRequest = IDL.Record({ + network: BitcoinNetwork, + address_type: BitcoinAddressType + }); + const Account = IDL.Record({ + owner: IDL.Principal, + subaccount: IDL.Opt(IDL.Vec(IDL.Nat8)) + }); + const PatronPaysIcrc2Tokens = IDL.Record({ + ledger: IDL.Principal, + patron: Account + }); + const CallerPaysIcrc2Tokens = IDL.Record({ ledger: IDL.Principal }); + const PaymentType = IDL.Variant({ + PatronPaysIcrc2Tokens: PatronPaysIcrc2Tokens, + AttachedCycles: IDL.Null, + CallerPaysIcrc2Cycles: IDL.Null, + CallerPaysIcrc2Tokens: CallerPaysIcrc2Tokens, + PatronPaysIcrc2Cycles: Account + }); + const GetAddressResponse = IDL.Record({ address: IDL.Text }); + const RejectionCode_1 = IDL.Variant({ + NoError: IDL.Null, + CanisterError: IDL.Null, + SysTransient: IDL.Null, + DestinationInvalid: IDL.Null, + Unknown: IDL.Null, + SysFatal: IDL.Null, + CanisterReject: IDL.Null + }); + const WithdrawFromError = IDL.Variant({ + GenericError: IDL.Record({ + message: IDL.Text, + error_code: IDL.Nat + }), + TemporarilyUnavailable: IDL.Null, + InsufficientAllowance: IDL.Record({ allowance: IDL.Nat }), + Duplicate: IDL.Record({ duplicate_of: IDL.Nat }), + InvalidReceiver: IDL.Record({ receiver: IDL.Principal }), + CreatedInFuture: IDL.Record({ ledger_time: IDL.Nat64 }), + TooOld: IDL.Null, + FailedToWithdrawFrom: IDL.Record({ + withdraw_from_block: IDL.Opt(IDL.Nat), + rejection_code: RejectionCode_1, + refund_block: IDL.Opt(IDL.Nat), + approval_refund_block: IDL.Opt(IDL.Nat), + rejection_reason: IDL.Text + }), + InsufficientFunds: IDL.Record({ balance: IDL.Nat }) + }); + const PaymentError = IDL.Variant({ + LedgerUnreachable: CallerPaysIcrc2Tokens, + UnsupportedPaymentType: IDL.Null, + LedgerError: IDL.Record({ + error: WithdrawFromError, + ledger: IDL.Principal + }), + InsufficientFunds: IDL.Record({ + needed: IDL.Nat64, + available: IDL.Nat64 + }) + }); + const GetAddressError = IDL.Variant({ + InternalError: IDL.Record({ msg: IDL.Text }), + PaymentError: PaymentError + }); + const Result = IDL.Variant({ + Ok: GetAddressResponse, + Err: GetAddressError + }); + const GetBalanceResponse = IDL.Record({ balance: IDL.Nat64 }); + const Result_1 = IDL.Variant({ + Ok: GetBalanceResponse, + Err: GetAddressError + }); + const Outpoint = IDL.Record({ + txid: IDL.Vec(IDL.Nat8), + vout: IDL.Nat32 + }); + const Utxo = IDL.Record({ + height: IDL.Nat32, + value: IDL.Nat64, + outpoint: Outpoint + }); + const BtcTxOutput = IDL.Record({ + destination_address: IDL.Text, + sent_satoshis: IDL.Nat64 + }); + const SendBtcRequest = IDL.Record({ + fee_satoshis: IDL.Opt(IDL.Nat64), + network: BitcoinNetwork, + utxos_to_spend: IDL.Vec(Utxo), + address_type: BitcoinAddressType, + outputs: IDL.Vec(BtcTxOutput) + }); + const SendBtcResponse = IDL.Record({ txid: IDL.Text }); + const SendBtcError = IDL.Variant({ + InternalError: IDL.Record({ msg: IDL.Text }), + PaymentError: PaymentError + }); + const Result_2 = IDL.Variant({ + Ok: SendBtcResponse, + Err: SendBtcError + }); const Config = IDL.Record({ ecdsa_key_name: IDL.Text, - ic_root_key_raw: IDL.Opt(IDL.Vec(IDL.Nat8)) + ic_root_key_raw: IDL.Opt(IDL.Vec(IDL.Nat8)), + cycles_ledger: IDL.Principal + }); + const GenericSigningError = IDL.Variant({ + SigningError: IDL.Tuple(RejectionCode_1, IDL.Text), + PaymentError: PaymentError + }); + const Result_3 = IDL.Variant({ + Ok: IDL.Text, + Err: GenericSigningError + }); + const SignRequest = IDL.Record({ + to: IDL.Text, + gas: IDL.Nat, + value: IDL.Nat, + max_priority_fee_per_gas: IDL.Nat, + data: IDL.Opt(IDL.Text), + max_fee_per_gas: IDL.Nat, + chain_id: IDL.Nat, + nonce: IDL.Nat + }); + const EcdsaCurve = IDL.Variant({ secp256k1: IDL.Null }); + const EcdsaKeyId = IDL.Record({ name: IDL.Text, curve: EcdsaCurve }); + const EcdsaPublicKeyArgument = IDL.Record({ + key_id: EcdsaKeyId, + canister_id: IDL.Opt(IDL.Principal), + derivation_path: IDL.Vec(IDL.Vec(IDL.Nat8)) + }); + const EcdsaPublicKeyResponse = IDL.Record({ + public_key: IDL.Vec(IDL.Nat8), + chain_code: IDL.Vec(IDL.Nat8) + }); + const Result_4 = IDL.Variant({ + Ok: IDL.Tuple(EcdsaPublicKeyResponse), + Err: GenericSigningError + }); + const SignWithEcdsaArgument = IDL.Record({ + key_id: EcdsaKeyId, + derivation_path: IDL.Vec(IDL.Vec(IDL.Nat8)), + message_hash: IDL.Vec(IDL.Nat8) + }); + const SignWithEcdsaResponse = IDL.Record({ signature: IDL.Vec(IDL.Nat8) }); + const Result_5 = IDL.Variant({ + Ok: IDL.Tuple(SignWithEcdsaResponse), + Err: GenericSigningError }); const CanisterStatusType = IDL.Variant({ stopped: IDL.Null, @@ -48,22 +198,27 @@ export const idlFactory = ({ IDL }) => { headers: IDL.Vec(IDL.Tuple(IDL.Text, IDL.Text)), status_code: IDL.Nat16 }); - const SignRequest = IDL.Record({ - to: IDL.Text, - gas: IDL.Nat, - value: IDL.Nat, - max_priority_fee_per_gas: IDL.Nat, - data: IDL.Opt(IDL.Text), - max_fee_per_gas: IDL.Nat, - chain_id: IDL.Nat, - nonce: IDL.Nat - }); return IDL.Service({ - caller_btc_address: IDL.Func([BitcoinNetwork], [IDL.Text], []), - caller_btc_balance: IDL.Func([BitcoinNetwork], [IDL.Nat64], []), + btc_caller_address: IDL.Func([GetAddressRequest, IDL.Opt(PaymentType)], [Result], []), + btc_caller_balance: IDL.Func([GetAddressRequest, IDL.Opt(PaymentType)], [Result_1], []), + btc_caller_send: IDL.Func([SendBtcRequest, IDL.Opt(PaymentType)], [Result_2], []), caller_eth_address: IDL.Func([], [IDL.Text], []), config: IDL.Func([], [Config], ['query']), eth_address_of: IDL.Func([IDL.Principal], [IDL.Text], []), + eth_address_of_caller: IDL.Func([IDL.Opt(PaymentType)], [Result_3], []), + eth_address_of_principal: IDL.Func([IDL.Principal, IDL.Opt(PaymentType)], [Result_3], []), + eth_personal_sign: IDL.Func([IDL.Text, IDL.Opt(PaymentType)], [Result_3], []), + eth_sign_transaction: IDL.Func([SignRequest, IDL.Opt(PaymentType)], [Result_3], []), + generic_caller_ecdsa_public_key: IDL.Func( + [EcdsaPublicKeyArgument, IDL.Opt(PaymentType)], + [Result_4], + [] + ), + generic_sign_with_ecdsa: IDL.Func( + [IDL.Opt(PaymentType), SignWithEcdsaArgument], + [Result_5], + [] + ), get_canister_status: IDL.Func([], [CanisterStatusResultV2], []), http_request: IDL.Func([HttpRequest], [HttpResponse], ['query']), personal_sign: IDL.Func([IDL.Text], [IDL.Text], []), @@ -75,7 +230,8 @@ export const idlFactory = ({ IDL }) => { export const init = ({ IDL }) => { const InitArg = IDL.Record({ ecdsa_key_name: IDL.Text, - ic_root_key_der: IDL.Opt(IDL.Vec(IDL.Nat8)) + ic_root_key_der: IDL.Opt(IDL.Vec(IDL.Nat8)), + cycles_ledger: IDL.Opt(IDL.Principal) }); const Arg = IDL.Variant({ Upgrade: IDL.Null, Init: InitArg }); return [Arg]; diff --git a/src/frontend/src/app.html b/src/frontend/src/app.html index 582cd3175..5ee045d04 100644 --- a/src/frontend/src/app.html +++ b/src/frontend/src/app.html @@ -52,19 +52,16 @@ - + %sveltekit.head% - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
%sveltekit.body%
diff --git a/src/frontend/src/btc/components/core/BtcLoaderWallets.svelte b/src/frontend/src/btc/components/core/BtcLoaderWallets.svelte new file mode 100644 index 000000000..6fe23a2b6 --- /dev/null +++ b/src/frontend/src/btc/components/core/BtcLoaderWallets.svelte @@ -0,0 +1,24 @@ + + + + + diff --git a/src/frontend/src/btc/components/core/BtcWalletAddress.svelte b/src/frontend/src/btc/components/core/BtcWalletAddress.svelte new file mode 100644 index 000000000..ada2b1f28 --- /dev/null +++ b/src/frontend/src/btc/components/core/BtcWalletAddress.svelte @@ -0,0 +1,24 @@ + + +
+ + + {shortenWithMiddleEllipsis({ text: address ?? '' })} +
diff --git a/src/frontend/src/btc/schedulers/btc-wallet.scheduler.ts b/src/frontend/src/btc/schedulers/btc-wallet.scheduler.ts new file mode 100644 index 000000000..17a396c3d --- /dev/null +++ b/src/frontend/src/btc/schedulers/btc-wallet.scheduler.ts @@ -0,0 +1,63 @@ +import { getBtcBalance } from '$lib/api/signer.api'; +import { WALLET_TIMER_INTERVAL_MILLIS } from '$lib/constants/app.constants'; +import { SchedulerTimer, type Scheduler, type SchedulerJobData } from '$lib/schedulers/scheduler'; +import type { + PostMessageDataRequestBtc, + PostMessageDataResponseBtcWallet +} from '$lib/types/post-message'; +import { assertNonNullish } from '@dfinity/utils'; + +export class BtcWalletScheduler implements Scheduler { + private timer = new SchedulerTimer('syncBtcWalletStatus'); + + stop() { + this.timer.stop(); + } + + async start(data: PostMessageDataRequestBtc | undefined) { + await this.timer.start({ + interval: WALLET_TIMER_INTERVAL_MILLIS, + job: this.syncWallet, + data + }); + } + + async trigger(data: PostMessageDataRequestBtc | undefined) { + await this.timer.trigger({ + job: this.syncWallet, + data + }); + } + + /* TODO: The following steps need to be done: + * 1. Fetch uncertified transactions via BTC transaction API. + * 2. Query uncertified balance in oder to improve UX (signer.getBtcBalance takes ~5s to complete). + * 3. Fetch certified transactions via BE endpoint (to be discussed). + * */ + private syncWallet = async ({ identity, data }: SchedulerJobData) => { + const bitcoinNetwork = data?.bitcoinNetwork; + + assertNonNullish(bitcoinNetwork, 'No BTC network provided to get certified balance.'); + + const balance = await getBtcBalance({ + identity, + network: bitcoinNetwork + }); + + this.postMessageWallet({ + wallet: { + balance: { + data: balance, + certified: true + } + } + }); + }; + + private postMessageWallet(data: PostMessageDataResponseBtcWallet) { + this.timer.postMsg({ + msg: 'syncBtcWallet', + data + }); + } +} diff --git a/src/frontend/src/btc/services/btc-listener.services.ts b/src/frontend/src/btc/services/btc-listener.services.ts new file mode 100644 index 000000000..8ed48bcc6 --- /dev/null +++ b/src/frontend/src/btc/services/btc-listener.services.ts @@ -0,0 +1,28 @@ +import { balancesStore } from '$lib/stores/balances.store'; +import type { PostMessageDataResponseBtcWallet } from '$lib/types/post-message'; +import type { TokenId } from '$lib/types/token'; +import { BigNumber } from '@ethersproject/bignumber'; + +export const syncWallet = ({ + data, + tokenId +}: { + data: PostMessageDataResponseBtcWallet; + tokenId: TokenId; +}) => { + const { + wallet: { + balance: { certified, data: balance } + } + } = data; + + balancesStore.set({ + tokenId, + data: { + data: BigNumber.from(balance), + certified + } + }); + + // TODO: placeholder for initialisation of btcTransactionsStore +}; diff --git a/src/frontend/src/btc/services/worker.btc-wallet.services.ts b/src/frontend/src/btc/services/worker.btc-wallet.services.ts new file mode 100644 index 000000000..c69e9b42b --- /dev/null +++ b/src/frontend/src/btc/services/worker.btc-wallet.services.ts @@ -0,0 +1,56 @@ +import { syncWallet } from '$btc/services/btc-listener.services'; +import { isNetworkIdBTCRegtest, isNetworkIdBTCTestnet } from '$icp/utils/ic-send.utils'; +import type { WalletWorker } from '$lib/types/listener'; +import type { PostMessage, PostMessageDataResponseBtcWallet } from '$lib/types/post-message'; +import type { Token } from '$lib/types/token'; +import { mapToSignerBitcoinNetwork } from '$lib/utils/network.utils'; + +export const initBtcWalletWorker = async ({ + id: tokenId, + network: { id: networkId } +}: Token): Promise => { + const WalletWorker = await import('$btc/workers/btc-wallet.worker?worker'); + const worker: Worker = new WalletWorker.default(); + + worker.onmessage = async ({ + data + }: MessageEvent>) => { + const { msg } = data; + + switch (msg) { + case 'syncBtcWallet': + syncWallet({ + tokenId, + data: data.data as PostMessageDataResponseBtcWallet + }); + return; + } + }; + + return { + start: () => { + worker.postMessage({ + msg: 'startBtcWalletTimer', + data: { + bitcoinNetwork: mapToSignerBitcoinNetwork({ + network: isNetworkIdBTCTestnet(networkId) + ? 'testnet' + : isNetworkIdBTCRegtest(networkId) + ? 'regtest' + : 'mainnet' + }) + } + }); + }, + stop: () => { + worker.postMessage({ + msg: 'stopBtcWalletTimer' + }); + }, + trigger: () => { + worker.postMessage({ + msg: 'triggerBtcWalletTimer' + }); + } + }; +}; diff --git a/src/frontend/src/btc/workers/btc-wallet.worker.ts b/src/frontend/src/btc/workers/btc-wallet.worker.ts new file mode 100644 index 000000000..9fd5f362f --- /dev/null +++ b/src/frontend/src/btc/workers/btc-wallet.worker.ts @@ -0,0 +1,20 @@ +import { BtcWalletScheduler } from '$btc/schedulers/btc-wallet.scheduler'; +import type { PostMessage, PostMessageDataRequestBtc } from '$lib/types/post-message'; + +const scheduler: BtcWalletScheduler = new BtcWalletScheduler(); + +onmessage = async ({ data: dataMsg }: MessageEvent>) => { + const { msg, data } = dataMsg; + + switch (msg) { + case 'stopBtcWalletTimer': + scheduler.stop(); + return; + case 'startBtcWalletTimer': + await scheduler.start(data); + return; + case 'triggerBtcWalletTimer': + await scheduler.trigger(data); + return; + } +}; diff --git a/src/frontend/src/env/networks.env.ts b/src/frontend/src/env/networks.env.ts index 4b2b8b7d4..45557f2ce 100644 --- a/src/frontend/src/env/networks.env.ts +++ b/src/frontend/src/env/networks.env.ts @@ -22,7 +22,8 @@ export const ETHEREUM_NETWORK: EthereumNetwork = { name: 'Ethereum', chainId: 1n, icon: eth, - explorerUrl: ETHEREUM_EXPLORER_URL + explorerUrl: ETHEREUM_EXPLORER_URL, + buy: { onramperId: 'ethereum' } }; export const { chainId: ETHEREUM_NETWORK_CHAIN_ID } = ETHEREUM_NETWORK; @@ -70,7 +71,8 @@ export const ICP_NETWORK: Network = { id: ICP_NETWORK_ID, env: 'mainnet', name: 'Internet Computer', - icon: icpLight + icon: icpLight, + buy: { onramperId: 'icp' } }; /** @@ -84,7 +86,8 @@ export const BTC_MAINNET_NETWORK: Network = { id: BTC_MAINNET_NETWORK_ID, env: 'mainnet', name: 'Bitcoin', - icon: bitcoin + icon: bitcoin, + buy: { onramperId: 'bitcoin' } }; export const BTC_TESTNET_NETWORK_SYMBOL = 'BTC (Testnet)'; diff --git a/src/frontend/src/env/tokens.env.ts b/src/frontend/src/env/tokens.env.ts index 3dc0c9e52..e5fb72f3c 100644 --- a/src/frontend/src/env/tokens.env.ts +++ b/src/frontend/src/env/tokens.env.ts @@ -26,7 +26,10 @@ export const ETHEREUM_TOKEN: RequiredTokenWithLinkedData = { symbol: ETHEREUM_SYMBOL, decimals: ETHEREUM_DEFAULT_DECIMALS, icon: eth, - twinTokenSymbol: 'ckETH' + twinTokenSymbol: 'ckETH', + buy: { + onramperId: 'eth' + } }; export const SEPOLIA_SYMBOL = 'SepoliaETH'; @@ -77,5 +80,8 @@ export const ICP_TOKEN: RequiredToken = { fee: ICP_TRANSACTION_FEE_E8S, ledgerCanisterId: ICP_LEDGER_CANISTER_ID, indexCanisterId: ICP_INDEX_CANISTER_ID, - explorerUrl: ICP_EXPLORER_URL + explorerUrl: ICP_EXPLORER_URL, + buy: { + onramperId: 'icp_icp' + } }; diff --git a/src/frontend/src/eth/components/receive/EthReceiveMetamask.svelte b/src/frontend/src/eth/components/receive/EthReceiveMetamask.svelte index 962ac7c4b..59cc477a0 100644 --- a/src/frontend/src/eth/components/receive/EthReceiveMetamask.svelte +++ b/src/frontend/src/eth/components/receive/EthReceiveMetamask.svelte @@ -30,7 +30,7 @@ {#if $metamaskAvailable && $networkEthereum && tokenStandardEth} - diff --git a/src/frontend/src/eth/components/send/EthSend.svelte b/src/frontend/src/eth/components/send/EthSend.svelte deleted file mode 100644 index d83f4adee..000000000 --- a/src/frontend/src/eth/components/send/EthSend.svelte +++ /dev/null @@ -1,31 +0,0 @@ - - - await openSend(modalId)} isOpen={$modalEthSend}> - - diff --git a/src/frontend/src/eth/components/send/EthSendModal.svelte b/src/frontend/src/eth/components/send/EthSendModal.svelte deleted file mode 100644 index 20d5ebdc5..000000000 --- a/src/frontend/src/eth/components/send/EthSendModal.svelte +++ /dev/null @@ -1,9 +0,0 @@ - - - - - diff --git a/src/frontend/src/eth/components/send/EthSendTokenWizard.svelte b/src/frontend/src/eth/components/send/EthSendTokenWizard.svelte index 2daabd661..792ec3e1d 100644 --- a/src/frontend/src/eth/components/send/EthSendTokenWizard.svelte +++ b/src/frontend/src/eth/components/send/EthSendTokenWizard.svelte @@ -3,9 +3,9 @@ import { isNullish } from '@dfinity/utils'; import { createEventDispatcher, getContext, setContext } from 'svelte'; import { writable } from 'svelte/store'; - import SendForm from './SendForm.svelte'; - import SendReview from './SendReview.svelte'; import FeeContext from '$eth/components/fee/FeeContext.svelte'; + import SendForm from '$eth/components/send/SendForm.svelte'; + import SendReview from '$eth/components/send/SendReview.svelte'; import { sendSteps } from '$eth/constants/steps.constants'; import { enabledErc20Tokens } from '$eth/derived/erc20.derived'; import { enabledEthereumTokens } from '$eth/derived/tokens.derived'; @@ -26,6 +26,8 @@ import { toCkErc20HelperContractAddress } from '$icp-eth/utils/cketh.utils'; import { mapAddressStartsWith0x } from '$icp-eth/utils/eth.utils'; import SendQRCodeScan from '$lib/components/send/SendQRCodeScan.svelte'; + import ButtonBack from '$lib/components/ui/ButtonBack.svelte'; + import ButtonCancel from '$lib/components/ui/ButtonCancel.svelte'; import InProgressWizard from '$lib/components/ui/InProgressWizard.svelte'; import { TRACK_COUNT_ETH_SEND_ERROR, @@ -289,13 +291,9 @@ > {#if formCancelAction === 'back'} - + {:else} - + {/if} diff --git a/src/frontend/src/eth/components/send/SendForm.svelte b/src/frontend/src/eth/components/send/SendForm.svelte index 1d3dd312d..6d4b4ce81 100644 --- a/src/frontend/src/eth/components/send/SendForm.svelte +++ b/src/frontend/src/eth/components/send/SendForm.svelte @@ -1,14 +1,15 @@ - dispatch('icReject')} disabled={$isBusy} + >{$i18n.core.text.reject} {#if approve} - + {/if} diff --git a/src/frontend/src/eth/components/wallet-connect/WalletConnectForm.svelte b/src/frontend/src/eth/components/wallet-connect/WalletConnectForm.svelte index 04768ccfc..ec852567d 100644 --- a/src/frontend/src/eth/components/wallet-connect/WalletConnectForm.svelte +++ b/src/frontend/src/eth/components/wallet-connect/WalletConnectForm.svelte @@ -1,6 +1,7 @@ - - - - diff --git a/src/frontend/src/icp/components/send/IcSendBtcNetwork.svelte b/src/frontend/src/icp/components/send/IcSendBtcNetwork.svelte index 7a4910e31..03aaf4dea 100644 --- a/src/frontend/src/icp/components/send/IcSendBtcNetwork.svelte +++ b/src/frontend/src/icp/components/send/IcSendBtcNetwork.svelte @@ -1,6 +1,6 @@ @@ -8,17 +8,9 @@ href={OISY_ALPHA_WARNING_URL} rel="external noopener noreferrer" target="_blank" - class="mx-auto inline-flex w-full items-center justify-center gap-2 px-6 py-2 text-xs font-bold no-underline sm:w-fit md:text-base" + class="mx-auto no-underline" > - - {$i18n.hero.text.use_with_caution} + + {$i18n.hero.text.use_with_caution} + - - diff --git a/src/frontend/src/lib/components/core/Background.svelte b/src/frontend/src/lib/components/core/Background.svelte deleted file mode 100644 index 97a39443c..000000000 --- a/src/frontend/src/lib/components/core/Background.svelte +++ /dev/null @@ -1,16 +0,0 @@ - - -
- - - - -
diff --git a/src/frontend/src/lib/components/core/Loader.svelte b/src/frontend/src/lib/components/core/Loader.svelte index f11e52031..c261a9325 100644 --- a/src/frontend/src/lib/components/core/Loader.svelte +++ b/src/frontend/src/lib/components/core/Loader.svelte @@ -3,17 +3,20 @@ import { debounce, isNullish } from '@dfinity/utils'; import { onMount } from 'svelte'; import { fade } from 'svelte/transition'; + import { NETWORK_BITCOIN_ENABLED } from '$env/networks.btc.env'; import { loadErc20Tokens } from '$eth/services/erc20.services'; import { loadIcrcTokens } from '$icp/services/icrc.services'; import banner from '$lib/assets/banner.svg'; import Img from '$lib/components/ui/Img.svelte'; import InProgress from '$lib/components/ui/InProgress.svelte'; + import { LOCAL } from '$lib/constants/app.constants'; import { btcAddressTestnet } from '$lib/derived/address.derived'; import { authIdentity } from '$lib/derived/auth.derived'; import { testnets } from '$lib/derived/testnets.derived'; import { ProgressStepsLoader } from '$lib/enums/progress-steps'; import { loadAddresses, + loadBtcAddressRegtest, loadBtcAddressTestnet, loadIdbAddresses } from '$lib/services/address.services'; @@ -69,10 +72,14 @@ let progressModal = false; const debounceLoadBtcAddressTestnet = debounce(loadBtcAddressTestnet); + const debounceLoadBtcAddressRegtest = debounce(loadBtcAddressRegtest); $: { - if ($testnets && isNullish($btcAddressTestnet)) { + if (NETWORK_BITCOIN_ENABLED && $testnets && isNullish($btcAddressTestnet)) { debounceLoadBtcAddressTestnet(); + if (LOCAL) { + debounceLoadBtcAddressRegtest(); + } } } diff --git a/src/frontend/src/lib/components/core/Loaders.svelte b/src/frontend/src/lib/components/core/Loaders.svelte index 2a3c7dac0..d73bd87b4 100644 --- a/src/frontend/src/lib/components/core/Loaders.svelte +++ b/src/frontend/src/lib/components/core/Loaders.svelte @@ -1,4 +1,5 @@ + + + + diff --git a/src/frontend/src/lib/components/hero/Actions.svelte b/src/frontend/src/lib/components/hero/Actions.svelte index 3b45545ff..7f23b5dec 100644 --- a/src/frontend/src/lib/components/hero/Actions.svelte +++ b/src/frontend/src/lib/components/hero/Actions.svelte @@ -1,13 +1,12 @@