diff --git a/.github/workflows/pkg-pr-new.yml b/.github/workflows/pkg-pr-new.yml index 3b824f87..8f07ec47 100644 --- a/.github/workflows/pkg-pr-new.yml +++ b/.github/workflows/pkg-pr-new.yml @@ -30,12 +30,12 @@ jobs: run: pnpm exec playwright install --with-deps chromium # Build the library first so `site/` (which imports `solid-three` - # via `link:..`) can resolve types in the Typecheck step. + # via `link:..`) can resolve types in the lint:types step. - name: Build run: pnpm build - - name: Typecheck - run: pnpm lint:types + - name: Lint + run: pnpm lint - name: Test run: pnpm test --run diff --git a/demo/src/App.tsx b/demo/src/App.tsx index 112cc97b..363e9995 100644 --- a/demo/src/App.tsx +++ b/demo/src/App.tsx @@ -11,10 +11,7 @@ export function App() { - setHovered(true)} - onPointerLeave={() => setHovered(false)} - > + setHovered(true)} onPointerLeave={() => setHovered(false)}> diff --git a/eslint.config.js b/eslint.config.js index 32e64acf..ba0b88d9 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1,9 +1,9 @@ -import { defineConfig, globalIgnores } from "eslint/config"; -import typescriptEslint from "@typescript-eslint/eslint-plugin"; -import noOnlyTests from "eslint-plugin-no-only-tests"; -import eslintComments from "eslint-plugin-eslint-comments"; -import importPlugin from "eslint-plugin-import"; -import tsParser from "@typescript-eslint/parser"; +import { defineConfig, globalIgnores } from "eslint/config" +import typescriptEslint from "@typescript-eslint/eslint-plugin" +import noOnlyTests from "eslint-plugin-no-only-tests" +import eslintComments from "eslint-plugin-eslint-comments" +import importPlugin from "eslint-plugin-import" +import tsParser from "@typescript-eslint/parser" export default defineConfig([ globalIgnores([ @@ -46,7 +46,7 @@ export default defineConfig([ ], "@typescript-eslint/no-useless-empty-export": "warn", "eslint-comments/no-unused-disable": "warn", - "import/extensions": ["error", "always"], + "import/extensions": ["error", "always", { ignorePackages: true }], "no-console": [ "error", { @@ -58,4 +58,4 @@ export default defineConfig([ "prefer-const": "warn", }, }, -]); +]) diff --git a/package.json b/package.json index fb6460f7..75ab4057 100644 --- a/package.json +++ b/package.json @@ -26,9 +26,11 @@ "build:site": "pnpm -C site build", "clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist", "dev:site": "pnpm -C site dev", - "lint": "pnpm lint:circular && pnpm lint:code && pnpm lint:types", + "format": "prettier --write 'src/**/*.{ts,tsx}' 'tests/**/*.{ts,tsx}' 'demo/**/*.{ts,tsx}' 'site/src/**/*.{ts,tsx,mdx}' '*.{ts,js,mjs,cjs}'", + "lint": "pnpm lint:circular && pnpm lint:code && pnpm lint:format && pnpm lint:types", "lint:circular": "dpdm -T src", - "lint:code": "eslint --max-warnings 0 src/**/*.{ts,tsx}", + "lint:code": "eslint --max-warnings 0 'src/**/*.{ts,tsx}' 'tests/**/*.{ts,tsx}' 'site/src/**/*.{ts,tsx}'", + "lint:format": "prettier --check 'src/**/*.{ts,tsx}' 'tests/**/*.{ts,tsx}' 'demo/**/*.{ts,tsx}' 'site/src/**/*.{ts,tsx,mdx}' '*.{ts,js,mjs,cjs}'", "lint:types": "tsc --noEmit", "prepublishOnly": "pnpm lint && pnpm build", "test": "vitest run", @@ -94,22 +96,18 @@ "dpdm": "^3.14.0", "esbuild": "^0.21.4", "esbuild-plugin-solid": "^0.6.0", - "esbuild-register": "^3.5.0", "eslint": "^9.32.0", "eslint-plugin-eslint-comments": "^3.2.0", "eslint-plugin-import": "^2.32.0", "eslint-plugin-no-only-tests": "^3.3.0", - "jest": "^29.7.0", - "jiti": "^2.5.1", "playwright": "^1.60.0", + "prettier": "3.8.3", "remark-gfm": "^3.0.1", "rollup": "^4.18.0", "rollup-plugin-dts": "^6.1.1", - "solid-app-router": "^0.1.14", "solid-js": "^1.8.17", "three": "^0.181.2", "three-stdlib": "^2.36.0", - "tsm": "^2.3.0", "tsup": "^8.0.2", "tsup-preset-solid": "^2.2.0", "typescript": "^5.4.5", @@ -122,8 +120,5 @@ "@types/three": "*", "solid-js": "*", "three": "*" - }, - "jest": { - "preset": "scripts/jest/node" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bd8bbd54..e16044a9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -30,7 +30,7 @@ importers: version: 2.2.0 vite-tsconfig-paths: specifier: ^5.1.4 - version: 5.1.4(typescript@5.9.3)(vite@6.4.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0)) + version: 5.1.4(typescript@5.9.3)(vite@6.4.2) devDependencies: '@bigmistqke/repl': specifier: link:../repl @@ -46,16 +46,16 @@ importers: version: 0.181.0 '@typescript-eslint/eslint-plugin': specifier: ^8.38.0 - version: 8.60.0(@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + version: 8.60.0(@typescript-eslint/parser@8.60.0(eslint@9.39.4)(typescript@5.9.3))(eslint@9.39.4)(typescript@5.9.3) '@typescript-eslint/parser': specifier: ^8.38.0 - version: 8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + version: 8.60.0(eslint@9.39.4)(typescript@5.9.3) '@vitest/browser': specifier: ^4.1.7 - version: 4.1.7(vite@6.4.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0))(vitest@4.1.7) + version: 4.1.7(vite@6.4.2)(vitest@4.1.7) '@vitest/browser-playwright': specifier: ^4.1.7 - version: 4.1.7(playwright@1.60.0)(vite@6.4.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0))(vitest@4.1.7) + version: 4.1.7(playwright@1.60.0)(vite@6.4.2)(vitest@4.1.7) dpdm: specifier: ^3.14.0 version: 3.15.1 @@ -65,30 +65,24 @@ importers: esbuild-plugin-solid: specifier: ^0.6.0 version: 0.6.0(esbuild@0.21.5)(solid-js@1.9.13) - esbuild-register: - specifier: ^3.5.0 - version: 3.6.0(esbuild@0.21.5) eslint: specifier: ^9.32.0 - version: 9.39.4(jiti@2.7.0) + version: 9.39.4 eslint-plugin-eslint-comments: specifier: ^3.2.0 - version: 3.2.0(eslint@9.39.4(jiti@2.7.0)) + version: 3.2.0(eslint@9.39.4) eslint-plugin-import: specifier: ^2.32.0 - version: 2.32.0(@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0)) + version: 2.32.0(@typescript-eslint/parser@8.60.0(eslint@9.39.4)(typescript@5.9.3))(eslint@9.39.4) eslint-plugin-no-only-tests: specifier: ^3.3.0 version: 3.4.0 - jest: - specifier: ^29.7.0 - version: 29.7.0(@types/node@25.9.1) - jiti: - specifier: ^2.5.1 - version: 2.7.0 playwright: specifier: ^1.60.0 version: 1.60.0 + prettier: + specifier: 3.8.3 + version: 3.8.3 remark-gfm: specifier: ^3.0.1 version: 3.0.1 @@ -98,9 +92,6 @@ importers: rollup-plugin-dts: specifier: ^6.1.1 version: 6.4.1(rollup@4.60.4)(typescript@5.9.3) - solid-app-router: - specifier: ^0.1.14 - version: 0.1.14(solid-js@1.9.13) solid-js: specifier: ^1.8.17 version: 1.9.13 @@ -110,30 +101,27 @@ importers: three-stdlib: specifier: ^2.36.0 version: 2.36.1(three@0.181.2) - tsm: - specifier: ^2.3.0 - version: 2.3.0 tsup: specifier: ^8.0.2 - version: 8.5.1(jiti@2.7.0)(postcss@8.5.15)(typescript@5.9.3)(yaml@2.9.0) + version: 8.5.1(postcss@8.5.15)(typescript@5.9.3) tsup-preset-solid: specifier: ^2.2.0 - version: 2.2.0(esbuild@0.21.5)(solid-js@1.9.13)(tsup@8.5.1(jiti@2.7.0)(postcss@8.5.15)(typescript@5.9.3)(yaml@2.9.0)) + version: 2.2.0(esbuild@0.21.5)(solid-js@1.9.13)(tsup@8.5.1(postcss@8.5.15)(typescript@5.9.3)) typescript: specifier: ^5.4.5 version: 5.9.3 vite: specifier: 6.4.2 - version: 6.4.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0) + version: 6.4.2 vite-plugin-inspect: specifier: 0.8.4 - version: 0.8.4(rollup@4.60.4)(vite@6.4.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0)) + version: 0.8.4(rollup@4.60.4)(vite@6.4.2) vite-plugin-solid: specifier: 2.11.12 - version: 2.11.12(solid-js@1.9.13)(vite@6.4.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0)) + version: 2.11.12(solid-js@1.9.13)(vite@6.4.2) vitest: specifier: ^4.1.7 - version: 4.1.7(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(vite@6.4.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0)) + version: 4.1.7(@vitest/browser-playwright@4.1.7)(vite@6.4.2) site: dependencies: @@ -299,91 +287,12 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-syntax-async-generators@7.8.4': - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-bigint@7.8.3': - resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-class-properties@7.12.13': - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-class-static-block@7.14.5': - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-attributes@7.29.7': - resolution: {integrity: sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-meta@7.10.4': - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-json-strings@7.8.3': - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-jsx@7.29.7': resolution: {integrity: sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4': - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-numeric-separator@7.10.4': - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-object-rest-spread@7.8.3': - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-optional-catch-binding@7.8.3': - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-optional-chaining@7.8.3': - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-private-property-in-object@7.14.5': - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-top-level-await@7.14.5': - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-typescript@7.29.7': resolution: {integrity: sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA==} engines: {node: '>=6.9.0'} @@ -428,9 +337,6 @@ packages: resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} engines: {node: '>=6.9.0'} - '@bcoe/v8-coverage@0.2.3': - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - '@bigmistqke/repl@0.2.8': resolution: {integrity: sha512-5WSEhzj6hlh+Fdt6pmStL8WoLhQRRvt7LcINdrbh42WZ0gVqmumlyYR7JTt4EWTs2VeuR5gEj+udGJDCg2QgIQ==} engines: {node: '>=18', pnpm: '>=8.6.0'} @@ -531,12 +437,6 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm@0.15.18': - resolution: {integrity: sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - '@esbuild/android-arm@0.21.5': resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} engines: {node: '>=12'} @@ -753,12 +653,6 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.15.18': - resolution: {integrity: sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-loong64@0.21.5': resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} engines: {node: '>=12'} @@ -1221,80 +1115,6 @@ packages: resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} engines: {node: '>=18.0.0'} - '@istanbuljs/load-nyc-config@1.1.0': - resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} - engines: {node: '>=8'} - - '@istanbuljs/schema@0.1.6': - resolution: {integrity: sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==} - engines: {node: '>=8'} - - '@jest/console@29.7.0': - resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/core@29.7.0': - resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - '@jest/environment@29.7.0': - resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/expect-utils@29.7.0': - resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/expect@29.7.0': - resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/fake-timers@29.7.0': - resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/globals@29.7.0': - resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/reporters@29.7.0': - resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - '@jest/schemas@29.6.3': - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/source-map@29.6.3': - resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/test-result@29.7.0': - resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/test-sequencer@29.7.0': - resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/transform@29.7.0': - resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/types@29.6.3': - resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -1832,9 +1652,6 @@ packages: '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} - '@sinclair/typebox@0.27.10': - resolution: {integrity: sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==} - '@sindresorhus/is@7.2.0': resolution: {integrity: sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==} engines: {node: '>=18'} @@ -1843,12 +1660,6 @@ packages: resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} engines: {node: '>=18'} - '@sinonjs/commons@3.0.1': - resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} - - '@sinonjs/fake-timers@10.3.0': - resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} - '@solid-primitives/clipboard@1.6.4': resolution: {integrity: sha512-96SbTfLRKLtKZNTcurIqbjoJIxo/DieP9qaqJDBQEFG/U8WbTHGUAQksBKB8VYmHz4X3GWU4mf4UbQ9VH8Biow==} peerDependencies: @@ -2052,21 +1863,9 @@ packages: '@types/estree@1.0.9': resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} - '@types/graceful-fs@4.1.9': - resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} - '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} - '@types/istanbul-lib-coverage@2.0.6': - resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} - - '@types/istanbul-lib-report@3.0.3': - resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} - - '@types/istanbul-reports@3.0.4': - resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} - '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -2100,9 +1899,6 @@ packages: '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} - '@types/stack-utils@2.0.3': - resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} - '@types/stats.js@0.17.4': resolution: {integrity: sha512-jIBvWWShCvlBqBNIZt0KAshWpvSjhkwkEu4ZUcASoAvhmrgAUI2t1dXrjSL4xXVLB4FznPrIsX3nKXFl/Dt4vA==} @@ -2121,12 +1917,6 @@ packages: '@types/webxr@0.5.24': resolution: {integrity: sha512-h8fgEd/DpoS9CBrjEQXR+dIDraopAEfu4wYVNY2tEPwk60stPWhvZMf4Foo5FakuQ7HFZoa8WceaWFervK2Ovg==} - '@types/yargs-parser@21.0.3': - resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - - '@types/yargs@17.0.35': - resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==} - '@typescript-eslint/eslint-plugin@8.60.0': resolution: {integrity: sha512-QYb/sa74/s7OKMbACMjrYnGspj9Hs5YI5aaffSL65UfeBUzVzBJfVo3oWSpbzPurvm7yaCCo2Lk7lVj610HqKw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2272,10 +2062,6 @@ packages: ajv@6.15.0: resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} - ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} - ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -2374,36 +2160,11 @@ packages: react-native-b4a: optional: true - babel-jest@29.7.0: - resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.8.0 - - babel-plugin-istanbul@6.1.1: - resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} - engines: {node: '>=8'} - - babel-plugin-jest-hoist@29.6.3: - resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - babel-plugin-jsx-dom-expressions@0.40.7: resolution: {integrity: sha512-/O6JWUmjv03OI9lL2ry9bUjpD5S3PclM55RRJEyCdcFZ5W2SEA/59d+l2hNsk3gI6kiWRdRPdOtqZmsQzFN1pQ==} peerDependencies: '@babel/core': ^7.20.12 - babel-preset-current-node-syntax@1.2.0: - resolution: {integrity: sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==} - peerDependencies: - '@babel/core': ^7.0.0 || ^8.0.0-0 - - babel-preset-jest@29.6.3: - resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.0.0 - babel-preset-solid@1.9.12: resolution: {integrity: sha512-LLqnuKVDlKpyBlMPcH6qEvs/wmS9a+NczppxJ3ryS/c0O5IiSFOIBQi9GzyiGDSbcJpx4Gr87jyFTos1MyEuWg==} peerDependencies: @@ -2503,9 +2264,6 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - bser@2.1.1: - resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} - buffer-crc32@1.0.0: resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==} engines: {node: '>=8.0.0'} @@ -2557,14 +2315,6 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - - camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - caniuse-lite@1.0.30001793: resolution: {integrity: sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==} @@ -2582,10 +2332,6 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - char-regex@1.0.2: - resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} - engines: {node: '>=10'} - character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} @@ -2610,19 +2356,12 @@ packages: resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} engines: {node: '>=18'} - ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} - engines: {node: '>=8'} - citty@0.1.6: resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} citty@0.2.2: resolution: {integrity: sha512-+6vJA3L98yv+IdfKGZHBNiGW5KHn22e/JwID0Strsz8h4S/csAu/OuICwxrg44k5MRiZHWIo8XXuJgQTriRP4w==} - cjs-module-lexer@1.4.3: - resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} - classy-solid@0.4.4: resolution: {integrity: sha512-AVLh3MDtAo9ijVgTF9tx2AjPIP/YREcthsaN8btHjisi2GA92Ku4AIrabmtxIgGCEndOh+wIzWaBHqALso6NVA==} @@ -2654,16 +2393,9 @@ packages: resolution: {integrity: sha512-rwHwUfXL40Chm1r08yrhU3qpUvdVlgkKNeyeGPOxnW8/SyVDvgRaed/Uz54AqWNaTCAThlj6QAs3TZcKI0xDEw==} engines: {node: '>=0.10.0'} - co@4.6.0: - resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} - engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - collapse-white-space@2.1.0: resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} - collect-v8-coverage@1.0.3: - resolution: {integrity: sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==} - color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -2728,11 +2460,6 @@ packages: resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==} engines: {node: '>= 14'} - create-jest@29.7.0: - resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - croner@10.0.1: resolution: {integrity: sha512-ixNtAJndqh173VQ4KodSdJEI6nuioBWI0V1ITNKhZZsO0pEMoDxz539T4FTTbSZ/xIOSuDnzxLVRqBVSvPNE2g==} engines: {node: '>=18.0'} @@ -2814,14 +2541,6 @@ packages: decode-named-character-reference@1.3.0: resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==} - dedent@1.7.2: - resolution: {integrity: sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==} - peerDependencies: - babel-plugin-macros: ^3.1.0 - peerDependenciesMeta: - babel-plugin-macros: - optional: true - deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -2874,17 +2593,9 @@ packages: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} - detect-newline@3.1.0: - resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} - engines: {node: '>=8'} - devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - diff-sequences@29.6.3: - resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - diff@5.2.2: resolution: {integrity: sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==} engines: {node: '>=0.3.1'} @@ -2948,10 +2659,6 @@ packages: electron-to-chromium@1.5.361: resolution: {integrity: sha512-Q6Hts7N9FnJc5LeGRINFvLhCI9xZmNtTDe5ZbcVezQz7cU4a8Aua3GH1b8J2XY8Al9PF+OCwYqhgsOOheMdvkA==} - emittery@0.13.1: - resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} - engines: {node: '>=12'} - emoji-regex-xs@1.0.0: resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} @@ -2980,9 +2687,6 @@ packages: resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} engines: {node: '>=0.12'} - error-ex@1.3.4: - resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} - error-stack-parser-es@0.1.5: resolution: {integrity: sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg==} @@ -3029,102 +2733,6 @@ packages: esast-util-from-js@2.0.1: resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==} - esbuild-android-64@0.15.18: - resolution: {integrity: sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - - esbuild-android-arm64@0.15.18: - resolution: {integrity: sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - - esbuild-darwin-64@0.15.18: - resolution: {integrity: sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - - esbuild-darwin-arm64@0.15.18: - resolution: {integrity: sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - - esbuild-freebsd-64@0.15.18: - resolution: {integrity: sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - - esbuild-freebsd-arm64@0.15.18: - resolution: {integrity: sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - - esbuild-linux-32@0.15.18: - resolution: {integrity: sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - - esbuild-linux-64@0.15.18: - resolution: {integrity: sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - - esbuild-linux-arm64@0.15.18: - resolution: {integrity: sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - - esbuild-linux-arm@0.15.18: - resolution: {integrity: sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - - esbuild-linux-mips64le@0.15.18: - resolution: {integrity: sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - - esbuild-linux-ppc64le@0.15.18: - resolution: {integrity: sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - - esbuild-linux-riscv64@0.15.18: - resolution: {integrity: sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - - esbuild-linux-s390x@0.15.18: - resolution: {integrity: sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - - esbuild-netbsd-64@0.15.18: - resolution: {integrity: sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - - esbuild-openbsd-64@0.15.18: - resolution: {integrity: sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - esbuild-plugin-solid@0.5.0: resolution: {integrity: sha512-ITK6n+0ayGFeDVUZWNMxX+vLsasEN1ILrg4pISsNOQ+mq4ljlJJiuXotInd+HE0MzwTcA9wExT1yzDE2hsqPsg==} peerDependencies: @@ -3137,40 +2745,6 @@ packages: esbuild: '>=0.20' solid-js: '>= 1.0' - esbuild-register@3.6.0: - resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==} - peerDependencies: - esbuild: '>=0.12 <1' - - esbuild-sunos-64@0.15.18: - resolution: {integrity: sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - - esbuild-windows-32@0.15.18: - resolution: {integrity: sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - - esbuild-windows-64@0.15.18: - resolution: {integrity: sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - - esbuild-windows-arm64@0.15.18: - resolution: {integrity: sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - - esbuild@0.15.18: - resolution: {integrity: sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==} - engines: {node: '>=12'} - hasBin: true - esbuild@0.21.5: resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} engines: {node: '>=12'} @@ -3202,10 +2776,6 @@ packages: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} - escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} - escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -3351,22 +2921,10 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} - execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - - exit@0.1.2: - resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} - engines: {node: '>= 0.8.0'} - expect-type@1.3.0: resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} - expect@29.7.0: - resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - expressive-code-twoslash@0.4.0: resolution: {integrity: sha512-7HffO04pYLNHX0P8/8xX+pdgWYpFWdP9/gYi7dAH1nSAxO1W7pQHW4Ly6OXD3fs4SChkGP/PWkE4oLo6CeXTfg==} peerDependencies: @@ -3409,9 +2967,6 @@ packages: fault@2.0.1: resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} - fb-watchman@2.0.2: - resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} - fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} @@ -3438,10 +2993,6 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} - find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} - find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} @@ -3476,9 +3027,6 @@ packages: resolution: {integrity: sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg==} engines: {node: '>=14.14'} - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - fsevents@2.3.2: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -3519,10 +3067,6 @@ packages: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} - get-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} - get-port-please@3.2.0: resolution: {integrity: sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A==} @@ -3530,10 +3074,6 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} - get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - get-symbol-description@1.1.0: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} @@ -3562,10 +3102,6 @@ packages: resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} engines: {node: 18 || 20 || >=22} - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - globals@14.0.0: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} @@ -3687,9 +3223,6 @@ packages: html-entities@2.3.3: resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} - html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - html-to-image@1.11.13: resolution: {integrity: sha512-cuOPoI7WApyhBElTTb9oqsawRvZ0rHhaHwghRLlTuffoD1B2aDemlCruLeZrUIIdvG7gs9xeELEPm6PhuASqrg==} @@ -3714,10 +3247,6 @@ packages: httpxy@0.5.3: resolution: {integrity: sha512-SMS9V6Sn7VWaS11lYhoAr0ceoaiolTWf4jYdJn0NJhCdKMu9R2H9Fh0LBDWBHQF6HRLI1PmaePYsjanSpE5PEw==} - human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -3733,11 +3262,6 @@ packages: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} - import-local@3.2.0: - resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} - engines: {node: '>=8'} - hasBin: true - import-meta-resolve@4.2.0: resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} @@ -3745,10 +3269,6 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -3776,9 +3296,6 @@ packages: resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} engines: {node: '>= 0.4'} - is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - is-async-function@2.1.1: resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} engines: {node: '>= 0.4'} @@ -3835,10 +3352,6 @@ packages: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - is-generator-fn@2.1.0: - resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} - engines: {node: '>=6'} - is-generator-function@1.1.2: resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} engines: {node: '>= 0.4'} @@ -3954,175 +3467,22 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - istanbul-lib-coverage@3.2.2: - resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} - engines: {node: '>=8'} + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - istanbul-lib-instrument@5.2.1: - resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} - engines: {node: '>=8'} + jiti@2.7.0: + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} + hasBin: true - istanbul-lib-instrument@6.0.3: - resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} + joycon@3.1.1: + resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} - istanbul-lib-report@3.0.1: - resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} - engines: {node: '>=10'} + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - istanbul-lib-source-maps@4.0.1: - resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} - engines: {node: '>=10'} - - istanbul-reports@3.2.0: - resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} - engines: {node: '>=8'} - - jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - - jest-changed-files@29.7.0: - resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-circus@29.7.0: - resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-cli@29.7.0: - resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - jest-config@29.7.0: - resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@types/node': '*' - ts-node: '>=9.0.0' - peerDependenciesMeta: - '@types/node': - optional: true - ts-node: - optional: true - - jest-diff@29.7.0: - resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-docblock@29.7.0: - resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-each@29.7.0: - resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-environment-node@29.7.0: - resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-get-type@29.6.3: - resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-haste-map@29.7.0: - resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-leak-detector@29.7.0: - resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-matcher-utils@29.7.0: - resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-message-util@29.7.0: - resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-mock@29.7.0: - resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-pnp-resolver@1.2.3: - resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} - engines: {node: '>=6'} - peerDependencies: - jest-resolve: '*' - peerDependenciesMeta: - jest-resolve: - optional: true - - jest-regex-util@29.6.3: - resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-resolve-dependencies@29.7.0: - resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-resolve@29.7.0: - resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-runner@29.7.0: - resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-runtime@29.7.0: - resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-snapshot@29.7.0: - resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-util@29.7.0: - resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-validate@29.7.0: - resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-watcher@29.7.0: - resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-worker@29.7.0: - resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest@29.7.0: - resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - jiti@2.7.0: - resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} - hasBin: true - - joycon@3.1.1: - resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} - engines: {node: '>=10'} - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - js-tokens@9.0.1: - resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} js-yaml@3.14.2: resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==} @@ -4140,9 +3500,6 @@ packages: json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} @@ -4168,10 +3525,6 @@ packages: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} - kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - kleur@4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} @@ -4187,10 +3540,6 @@ packages: resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} engines: {node: '>= 0.6.3'} - leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -4288,10 +3637,6 @@ packages: resolution: {integrity: sha512-++gUqRDEvcnN6Zhqrr+y/CkVEHhlrR96vZn3nZZPYzMcBUyBtTKzB9NadClFIsIVSsu+3i9tfk/erqy9kAmt7Q==} engines: {node: '>=14'} - locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} - locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} @@ -4332,13 +3677,6 @@ packages: magicast@0.5.3: resolution: {integrity: sha512-pVKE4UdSQ7DvHzivsCIFx2BJn1mHG6KsyrFcaxFx6tONdneEuThrDx0Cj3AMg58KyN4pzYT+LHOotxDQDjNvkw==} - make-dir@4.0.0: - resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} - engines: {node: '>=10'} - - makeerror@1.0.12: - resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} - markdown-extensions@2.0.0: resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} engines: {node: '>=16'} @@ -4444,9 +3782,6 @@ packages: resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==} engines: {node: '>=12.13'} - merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} @@ -4761,9 +4096,6 @@ packages: resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} hasBin: true - node-int64@0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - node-mock-http@1.0.4: resolution: {integrity: sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==} @@ -4780,10 +4112,6 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} @@ -4832,9 +4160,6 @@ packages: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} @@ -4868,26 +4193,14 @@ packages: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} - p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} - p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} - p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} - p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} - p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} @@ -4901,10 +4214,6 @@ packages: parse-entities@4.0.2: resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} - parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - parse-numeric-range@1.3.0: resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==} @@ -4919,10 +4228,6 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -4968,10 +4273,6 @@ packages: resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} - pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} - pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} @@ -5039,6 +4340,11 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} + prettier@3.8.3: + resolution: {integrity: sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==} + engines: {node: '>=14'} + hasBin: true + prettier@4.0.0-alpha.13: resolution: {integrity: sha512-177K/2S5iYDKtvZkDC2ZMqpyXtoiiVQBVQZpcQsRs+ZIIUQxsXomWIjquAlwt2pXpio9riz5IgtaUEnoZH44tg==} engines: {node: '>=18'} @@ -5052,10 +4358,6 @@ packages: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} @@ -5063,10 +4365,6 @@ packages: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} - prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} - property-information@7.1.0: resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} @@ -5074,9 +4372,6 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - pure-rand@6.1.0: - resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} - quansync@0.2.11: resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} @@ -5096,9 +4391,6 @@ packages: react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} - react-is@18.3.1: - resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} @@ -5212,10 +4504,6 @@ packages: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} - resolve-cwd@3.0.0: - resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} - engines: {node: '>=8'} - resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -5224,10 +4512,6 @@ packages: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} - resolve.exports@2.0.3: - resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} - engines: {node: '>=10'} - resolve@1.22.12: resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==} engines: {node: '>= 0.4'} @@ -5412,13 +4696,6 @@ packages: resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} engines: {node: '>=18'} - sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - slash@5.1.0: resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} engines: {node: '>=14.16'} @@ -5427,11 +4704,6 @@ packages: resolution: {integrity: sha512-RQsvleCbF8cVHEv+xuDGaA4pOizFqJ0GgjtMSRo6oP8pnN7WsigHgVGey6aILRBKv4W2YOMHLqbKdnB6hpB9fw==} engines: {node: '>=20.0.0'} - solid-app-router@0.1.14: - resolution: {integrity: sha512-fnX+jCB5sDMbjq3od9qGtQNdlvHP2c6DG5STvMHVXyNuSEN+MdO7WJtZ58OpVpq6zWS4FYeYAh7NMEa7C2CcOA==} - peerDependencies: - solid-js: ^1.0.0 - solid-js@1.9.13: resolution: {integrity: sha512-6hJeJMOcEX8ktqjpDoJZEmld3ijvcvWBDtiXBm7f4332SiFN66QeAQI1REQshvyUoISsSeJ4PHDauKYbwao9JQ==} @@ -5460,9 +4732,6 @@ packages: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} - source-map-support@0.5.13: - resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} - source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} @@ -5485,10 +4754,6 @@ packages: engines: {node: '>=20.16.0'} hasBin: true - stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} - stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -5512,10 +4777,6 @@ packages: streamx@2.26.0: resolution: {integrity: sha512-VvNG1K72Po/xwJzxZFnZ++Tbrv4lwSptsbkFuzXCJAYZvCK5nnxsvXU6ajqkv7chyiI1Y0YXq2Jh8Iy8Y7NF/A==} - string-length@4.0.2: - resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} - engines: {node: '>=10'} - string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -5565,14 +4826,6 @@ packages: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} - strip-bom@4.0.0: - resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} - engines: {node: '>=8'} - - strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -5599,10 +4852,6 @@ packages: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} - supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} - supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} @@ -5632,10 +4881,6 @@ packages: engines: {node: '>=10'} hasBin: true - test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} - text-decoder@1.2.7: resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==} @@ -5689,9 +4934,6 @@ packages: tm@0.0.1: resolution: {integrity: sha512-61DriEKy3/Am1o/OY7MxfQVe5kL8Y4R60b3C4KZKFiSLtSr3JlFJ+3x9pxyL/bhmcj3xwMGyt00Gt3ffdkk1EA==} - tmpl@1.0.5: - resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -5745,11 +4987,6 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsm@2.3.0: - resolution: {integrity: sha512-++0HFnmmR+gMpDtKTnW3XJ4yv9kVGi20n+NfyQWB9qwJvTaIWY9kBmzek2YUQK5APTQ/1DTrXmm4QtFPmW9Rzw==} - engines: {node: '>=12'} - hasBin: true - tsup-preset-solid@2.2.0: resolution: {integrity: sha512-sPAzeArmYkVAZNRN+m4tkiojdd0GzW/lCwd4+TQDKMENe8wr2uAuro1s0Z59ASmdBbkXoxLgCiNcuQMyiidMZg==} peerDependencies: @@ -5786,14 +5023,6 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - - type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - type-fest@5.6.0: resolution: {integrity: sha512-8ZiHFm91orbSAe2PSAiSVBVko18pbhbiB3U9GglSzF/zCGkR+rxpHx6sEMCUm4kxY4LjDIUGgCfUMtwfZfjfUA==} engines: {node: '>=20'} @@ -6054,10 +5283,6 @@ packages: engines: {node: '>=8'} hasBin: true - v8-to-istanbul@9.3.0: - resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} - engines: {node: '>=10.12.0'} - vfile-location@5.0.3: resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} @@ -6239,9 +5464,6 @@ packages: vscode-textmate@9.3.2: resolution: {integrity: sha512-n2uGbUcrjhUEBH16uGA0TvUfhWwliFZ1e3+pTjrkim1Mt7ydB41lV08aUvsi70OlzDWp6X7Bx3w/x3fAXIsN0Q==} - walker@1.0.8: - resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} - wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} @@ -6299,13 +5521,6 @@ packages: resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} engines: {node: '>=18'} - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - write-file-atomic@4.0.2: - resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - ws@8.21.0: resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} engines: {node: '>=10.0.0'} @@ -6513,86 +5728,11 @@ snapshots: dependencies: '@babel/types': 7.29.7 - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - - '@babel/plugin-syntax-import-attributes@7.29.7(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 @@ -6655,8 +5795,6 @@ snapshots: '@babel/helper-string-parser': 7.29.7 '@babel/helper-validator-identifier': 7.29.7 - '@bcoe/v8-coverage@0.2.3': {} - '@bigmistqke/repl@0.2.8(@babel/standalone@7.29.7)(dom-serializer@2.0.0)(domutils@3.2.2)(htmlparser2@10.1.0)(monaco-editor@0.52.2)(solid-js@1.9.13)(typescript@5.9.3)': dependencies: '@babel/standalone': 7.29.7 @@ -6730,9 +5868,6 @@ snapshots: '@esbuild/android-arm64@0.28.0': optional: true - '@esbuild/android-arm@0.15.18': - optional: true - '@esbuild/android-arm@0.21.5': optional: true @@ -6841,9 +5976,6 @@ snapshots: '@esbuild/linux-ia32@0.28.0': optional: true - '@esbuild/linux-loong64@0.15.18': - optional: true - '@esbuild/linux-loong64@0.21.5': optional: true @@ -7015,9 +6147,9 @@ snapshots: '@esbuild/win32-x64@0.28.0': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@9.39.4(jiti@2.7.0))': + '@eslint-community/eslint-utils@4.9.1(eslint@9.39.4)': dependencies: - eslint: 9.39.4(jiti@2.7.0) + eslint: 9.39.4 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} @@ -7162,178 +6294,6 @@ snapshots: dependencies: minipass: 7.1.3 - '@istanbuljs/load-nyc-config@1.1.0': - dependencies: - camelcase: 5.3.1 - find-up: 4.1.0 - get-package-type: 0.1.0 - js-yaml: 3.14.2 - resolve-from: 5.0.0 - - '@istanbuljs/schema@0.1.6': {} - - '@jest/console@29.7.0': - dependencies: - '@jest/types': 29.6.3 - '@types/node': 25.9.1 - chalk: 4.1.2 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - slash: 3.0.0 - - '@jest/core@29.7.0': - dependencies: - '@jest/console': 29.7.0 - '@jest/reporters': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 25.9.1 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - ci-info: 3.9.0 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@25.9.1) - jest-haste-map: 29.7.0 - jest-message-util: 29.7.0 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-resolve-dependencies: 29.7.0 - jest-runner: 29.7.0 - jest-runtime: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - jest-watcher: 29.7.0 - micromatch: 4.0.8 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-ansi: 6.0.1 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - ts-node - - '@jest/environment@29.7.0': - dependencies: - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 25.9.1 - jest-mock: 29.7.0 - - '@jest/expect-utils@29.7.0': - dependencies: - jest-get-type: 29.6.3 - - '@jest/expect@29.7.0': - dependencies: - expect: 29.7.0 - jest-snapshot: 29.7.0 - transitivePeerDependencies: - - supports-color - - '@jest/fake-timers@29.7.0': - dependencies: - '@jest/types': 29.6.3 - '@sinonjs/fake-timers': 10.3.0 - '@types/node': 25.9.1 - jest-message-util: 29.7.0 - jest-mock: 29.7.0 - jest-util: 29.7.0 - - '@jest/globals@29.7.0': - dependencies: - '@jest/environment': 29.7.0 - '@jest/expect': 29.7.0 - '@jest/types': 29.6.3 - jest-mock: 29.7.0 - transitivePeerDependencies: - - supports-color - - '@jest/reporters@29.7.0': - dependencies: - '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.31 - '@types/node': 25.9.1 - chalk: 4.1.2 - collect-v8-coverage: 1.0.3 - exit: 0.1.2 - glob: 7.2.3 - graceful-fs: 4.2.11 - istanbul-lib-coverage: 3.2.2 - istanbul-lib-instrument: 6.0.3 - istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.2.0 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - jest-worker: 29.7.0 - slash: 3.0.0 - string-length: 4.0.2 - strip-ansi: 6.0.1 - v8-to-istanbul: 9.3.0 - transitivePeerDependencies: - - supports-color - - '@jest/schemas@29.6.3': - dependencies: - '@sinclair/typebox': 0.27.10 - - '@jest/source-map@29.6.3': - dependencies: - '@jridgewell/trace-mapping': 0.3.31 - callsites: 3.1.0 - graceful-fs: 4.2.11 - - '@jest/test-result@29.7.0': - dependencies: - '@jest/console': 29.7.0 - '@jest/types': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.6 - collect-v8-coverage: 1.0.3 - - '@jest/test-sequencer@29.7.0': - dependencies: - '@jest/test-result': 29.7.0 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - slash: 3.0.0 - - '@jest/transform@29.7.0': - dependencies: - '@babel/core': 7.29.7 - '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.31 - babel-plugin-istanbul: 6.1.1 - chalk: 4.1.2 - convert-source-map: 2.0.0 - fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - micromatch: 4.0.8 - pirates: 4.0.7 - slash: 3.0.0 - write-file-atomic: 4.0.2 - transitivePeerDependencies: - - supports-color - - '@jest/types@29.6.3': - dependencies: - '@jest/schemas': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 25.9.1 - '@types/yargs': 17.0.35 - chalk: 4.1.2 - '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -7874,20 +6834,10 @@ snapshots: '@shikijs/vscode-textmate@10.0.2': {} - '@sinclair/typebox@0.27.10': {} - '@sindresorhus/is@7.2.0': {} '@sindresorhus/merge-streams@4.0.0': {} - '@sinonjs/commons@3.0.1': - dependencies: - type-detect: 4.0.8 - - '@sinonjs/fake-timers@10.3.0': - dependencies: - '@sinonjs/commons': 3.0.1 - '@solid-primitives/clipboard@1.6.4(solid-js@1.9.13)': dependencies: '@solid-primitives/utils': 6.4.0(solid-js@1.9.13) @@ -8157,24 +7107,10 @@ snapshots: '@types/estree@1.0.9': {} - '@types/graceful-fs@4.1.9': - dependencies: - '@types/node': 25.9.1 - '@types/hast@3.0.4': dependencies: '@types/unist': 3.0.3 - '@types/istanbul-lib-coverage@2.0.6': {} - - '@types/istanbul-lib-report@3.0.3': - dependencies: - '@types/istanbul-lib-coverage': 2.0.6 - - '@types/istanbul-reports@3.0.4': - dependencies: - '@types/istanbul-lib-report': 3.0.3 - '@types/json-schema@7.0.15': {} '@types/json5@0.0.29': {} @@ -8198,6 +7134,7 @@ snapshots: '@types/node@25.9.1': dependencies: undici-types: 7.24.6 + optional: true '@types/offscreencanvas@2019.7.3': {} @@ -8207,8 +7144,6 @@ snapshots: '@types/resolve@1.20.2': {} - '@types/stack-utils@2.0.3': {} - '@types/stats.js@0.17.4': {} '@types/three@0.181.0': @@ -8229,21 +7164,15 @@ snapshots: '@types/webxr@0.5.24': {} - '@types/yargs-parser@21.0.3': {} - - '@types/yargs@17.0.35': - dependencies: - '@types/yargs-parser': 21.0.3 - - '@typescript-eslint/eslint-plugin@8.60.0(@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.60.0(@typescript-eslint/parser@8.60.0(eslint@9.39.4)(typescript@5.9.3))(eslint@9.39.4)(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/parser': 8.60.0(eslint@9.39.4)(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.60.0 - '@typescript-eslint/type-utils': 8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) - '@typescript-eslint/utils': 8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/type-utils': 8.60.0(eslint@9.39.4)(typescript@5.9.3) + '@typescript-eslint/utils': 8.60.0(eslint@9.39.4)(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.60.0 - eslint: 9.39.4(jiti@2.7.0) + eslint: 9.39.4 ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@5.9.3) @@ -8251,14 +7180,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': + '@typescript-eslint/parser@8.60.0(eslint@9.39.4)(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.60.0 '@typescript-eslint/types': 8.60.0 '@typescript-eslint/typescript-estree': 8.60.0(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.60.0 debug: 4.4.3 - eslint: 9.39.4(jiti@2.7.0) + eslint: 9.39.4 typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -8281,13 +7210,13 @@ snapshots: dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.60.0(eslint@9.39.4)(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.60.0 '@typescript-eslint/typescript-estree': 8.60.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/utils': 8.60.0(eslint@9.39.4)(typescript@5.9.3) debug: 4.4.3 - eslint: 9.39.4(jiti@2.7.0) + eslint: 9.39.4 ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: @@ -8310,13 +7239,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3)': + '@typescript-eslint/utils@8.60.0(eslint@9.39.4)(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4) '@typescript-eslint/scope-manager': 8.60.0 '@typescript-eslint/types': 8.60.0 '@typescript-eslint/typescript-estree': 8.60.0(typescript@5.9.3) - eslint: 9.39.4(jiti@2.7.0) + eslint: 9.39.4 typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -8354,29 +7283,29 @@ snapshots: - rollup - supports-color - '@vitest/browser-playwright@4.1.7(playwright@1.60.0)(vite@6.4.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0))(vitest@4.1.7)': + '@vitest/browser-playwright@4.1.7(playwright@1.60.0)(vite@6.4.2)(vitest@4.1.7)': dependencies: - '@vitest/browser': 4.1.7(vite@6.4.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0))(vitest@4.1.7) - '@vitest/mocker': 4.1.7(vite@6.4.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0)) + '@vitest/browser': 4.1.7(vite@6.4.2)(vitest@4.1.7) + '@vitest/mocker': 4.1.7(vite@6.4.2) playwright: 1.60.0 tinyrainbow: 3.1.0 - vitest: 4.1.7(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(vite@6.4.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0)) + vitest: 4.1.7(@vitest/browser-playwright@4.1.7)(vite@6.4.2) transitivePeerDependencies: - bufferutil - msw - utf-8-validate - vite - '@vitest/browser@4.1.7(vite@6.4.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0))(vitest@4.1.7)': + '@vitest/browser@4.1.7(vite@6.4.2)(vitest@4.1.7)': dependencies: '@blazediff/core': 1.9.1 - '@vitest/mocker': 4.1.7(vite@6.4.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0)) + '@vitest/mocker': 4.1.7(vite@6.4.2) '@vitest/utils': 4.1.7 magic-string: 0.30.21 pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.1.0 - vitest: 4.1.7(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(vite@6.4.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0)) + vitest: 4.1.7(@vitest/browser-playwright@4.1.7)(vite@6.4.2) ws: 8.21.0 transitivePeerDependencies: - bufferutil @@ -8393,13 +7322,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.7(vite@6.4.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0))': + '@vitest/mocker@4.1.7(vite@6.4.2)': dependencies: '@vitest/spy': 4.1.7 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 6.4.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0) + vite: 6.4.2 '@vitest/pretty-format@4.1.7': dependencies: @@ -8452,10 +7381,6 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ansi-escapes@4.3.2: - dependencies: - type-fest: 0.21.3 - ansi-regex@5.0.1: {} ansi-regex@6.2.2: {} @@ -8575,36 +7500,6 @@ snapshots: b4a@1.8.1: {} - babel-jest@29.7.0(@babel/core@7.29.7): - dependencies: - '@babel/core': 7.29.7 - '@jest/transform': 29.7.0 - '@types/babel__core': 7.20.5 - babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.29.7) - chalk: 4.1.2 - graceful-fs: 4.2.11 - slash: 3.0.0 - transitivePeerDependencies: - - supports-color - - babel-plugin-istanbul@6.1.1: - dependencies: - '@babel/helper-plugin-utils': 7.29.7 - '@istanbuljs/load-nyc-config': 1.1.0 - '@istanbuljs/schema': 0.1.6 - istanbul-lib-instrument: 5.2.1 - test-exclude: 6.0.0 - transitivePeerDependencies: - - supports-color - - babel-plugin-jest-hoist@29.6.3: - dependencies: - '@babel/template': 7.29.7 - '@babel/types': 7.29.7 - '@types/babel__core': 7.20.5 - '@types/babel__traverse': 7.28.0 - babel-plugin-jsx-dom-expressions@0.40.7(@babel/core@7.29.7): dependencies: '@babel/core': 7.29.7 @@ -8614,31 +7509,6 @@ snapshots: html-entities: 2.3.3 parse5: 7.3.0 - babel-preset-current-node-syntax@1.2.0(@babel/core@7.29.7): - dependencies: - '@babel/core': 7.29.7 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.29.7) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.29.7) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.29.7) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.29.7) - '@babel/plugin-syntax-import-attributes': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.29.7) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.29.7) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.29.7) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.29.7) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.29.7) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.29.7) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.29.7) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.29.7) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.29.7) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.29.7) - - babel-preset-jest@29.6.3(@babel/core@7.29.7): - dependencies: - '@babel/core': 7.29.7 - babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.7) - babel-preset-solid@1.9.12(@babel/core@7.29.7)(solid-js@1.9.13): dependencies: '@babel/core': 7.29.7 @@ -8727,10 +7597,6 @@ snapshots: node-releases: 2.0.46 update-browserslist-db: 1.2.3(browserslist@4.28.2) - bser@2.1.1: - dependencies: - node-int64: 0.4.0 - buffer-crc32@1.0.0: {} buffer-from@1.1.2: {} @@ -8792,10 +7658,6 @@ snapshots: callsites@3.1.0: {} - camelcase@5.3.1: {} - - camelcase@6.3.0: {} - caniuse-lite@1.0.30001793: {} cannon-es@0.20.0: {} @@ -8809,8 +7671,6 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 - char-regex@1.0.2: {} - character-entities-html4@2.1.0: {} character-entities-legacy@3.0.0: {} @@ -8829,16 +7689,12 @@ snapshots: chownr@3.0.0: {} - ci-info@3.9.0: {} - citty@0.1.6: dependencies: consola: 3.4.2 citty@0.2.2: {} - cjs-module-lexer@1.4.3: {} - classy-solid@0.4.4: dependencies: '@solid-primitives/memo': 1.4.5(solid-js@1.9.13) @@ -8869,12 +7725,8 @@ snapshots: cluster-key-slot@1.1.1: {} - co@4.6.0: {} - collapse-white-space@2.1.0: {} - collect-v8-coverage@1.0.3: {} - color-convert@2.0.1: dependencies: color-name: 1.1.4 @@ -8924,21 +7776,6 @@ snapshots: crc-32: 1.2.2 readable-stream: 4.7.0 - create-jest@29.7.0(@types/node@25.9.1): - dependencies: - '@jest/types': 29.6.3 - chalk: 4.1.2 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@25.9.1) - jest-util: 29.7.0 - prompts: 2.4.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - croner@10.0.1: {} cross-spawn@7.0.6: @@ -8991,8 +7828,6 @@ snapshots: dependencies: character-entities: 2.0.2 - dedent@1.7.2: {} - deep-is@0.1.4: {} deepmerge@4.3.1: {} @@ -9034,14 +7869,10 @@ snapshots: detect-libc@2.1.2: {} - detect-newline@3.1.0: {} - devlop@1.1.0: dependencies: dequal: 2.0.3 - diff-sequences@29.6.3: {} - diff@5.2.2: {} diff@8.0.4: {} @@ -9104,8 +7935,6 @@ snapshots: electron-to-chromium@1.5.361: {} - emittery@0.13.1: {} - emoji-regex-xs@1.0.0: {} emoji-regex@10.6.0: {} @@ -9122,10 +7951,6 @@ snapshots: entities@7.0.1: {} - error-ex@1.3.4: - dependencies: - is-arrayish: 0.2.1 - error-stack-parser-es@0.1.5: {} error-stack-parser-es@1.0.5: {} @@ -9232,54 +8057,6 @@ snapshots: esast-util-from-estree: 2.0.0 vfile-message: 4.0.3 - esbuild-android-64@0.15.18: - optional: true - - esbuild-android-arm64@0.15.18: - optional: true - - esbuild-darwin-64@0.15.18: - optional: true - - esbuild-darwin-arm64@0.15.18: - optional: true - - esbuild-freebsd-64@0.15.18: - optional: true - - esbuild-freebsd-arm64@0.15.18: - optional: true - - esbuild-linux-32@0.15.18: - optional: true - - esbuild-linux-64@0.15.18: - optional: true - - esbuild-linux-arm64@0.15.18: - optional: true - - esbuild-linux-arm@0.15.18: - optional: true - - esbuild-linux-mips64le@0.15.18: - optional: true - - esbuild-linux-ppc64le@0.15.18: - optional: true - - esbuild-linux-riscv64@0.15.18: - optional: true - - esbuild-linux-s390x@0.15.18: - optional: true - - esbuild-netbsd-64@0.15.18: - optional: true - - esbuild-openbsd-64@0.15.18: - optional: true - esbuild-plugin-solid@0.5.0(esbuild@0.21.5)(solid-js@1.9.13): dependencies: '@babel/core': 7.29.7 @@ -9310,50 +8087,6 @@ snapshots: transitivePeerDependencies: - supports-color - esbuild-register@3.6.0(esbuild@0.21.5): - dependencies: - debug: 4.4.3 - esbuild: 0.21.5 - transitivePeerDependencies: - - supports-color - - esbuild-sunos-64@0.15.18: - optional: true - - esbuild-windows-32@0.15.18: - optional: true - - esbuild-windows-64@0.15.18: - optional: true - - esbuild-windows-arm64@0.15.18: - optional: true - - esbuild@0.15.18: - optionalDependencies: - '@esbuild/android-arm': 0.15.18 - '@esbuild/linux-loong64': 0.15.18 - esbuild-android-64: 0.15.18 - esbuild-android-arm64: 0.15.18 - esbuild-darwin-64: 0.15.18 - esbuild-darwin-arm64: 0.15.18 - esbuild-freebsd-64: 0.15.18 - esbuild-freebsd-arm64: 0.15.18 - esbuild-linux-32: 0.15.18 - esbuild-linux-64: 0.15.18 - esbuild-linux-arm: 0.15.18 - esbuild-linux-arm64: 0.15.18 - esbuild-linux-mips64le: 0.15.18 - esbuild-linux-ppc64le: 0.15.18 - esbuild-linux-riscv64: 0.15.18 - esbuild-linux-s390x: 0.15.18 - esbuild-netbsd-64: 0.15.18 - esbuild-openbsd-64: 0.15.18 - esbuild-sunos-64: 0.15.18 - esbuild-windows-32: 0.15.18 - esbuild-windows-64: 0.15.18 - esbuild-windows-arm64: 0.15.18 - esbuild@0.21.5: optionalDependencies: '@esbuild/aix-ppc64': 0.21.5 @@ -9473,8 +8206,6 @@ snapshots: escape-string-regexp@1.0.5: {} - escape-string-regexp@2.0.0: {} - escape-string-regexp@4.0.0: {} escape-string-regexp@5.0.0: {} @@ -9487,23 +8218,23 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint@9.39.4(jiti@2.7.0)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.60.0(eslint@9.39.4)(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint@9.39.4): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) - eslint: 9.39.4(jiti@2.7.0) + '@typescript-eslint/parser': 8.60.0(eslint@9.39.4)(typescript@5.9.3) + eslint: 9.39.4 eslint-import-resolver-node: 0.3.10 transitivePeerDependencies: - supports-color - eslint-plugin-eslint-comments@3.2.0(eslint@9.39.4(jiti@2.7.0)): + eslint-plugin-eslint-comments@3.2.0(eslint@9.39.4): dependencies: escape-string-regexp: 1.0.5 - eslint: 9.39.4(jiti@2.7.0) + eslint: 9.39.4 ignore: 5.3.2 - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint@9.39.4(jiti@2.7.0)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.60.0(eslint@9.39.4)(typescript@5.9.3))(eslint@9.39.4): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -9512,9 +8243,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.39.4(jiti@2.7.0) + eslint: 9.39.4 eslint-import-resolver-node: 0.3.10 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint@9.39.4(jiti@2.7.0)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.60.0(eslint@9.39.4)(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint@9.39.4) hasown: 2.0.3 is-core-module: 2.16.2 is-glob: 4.0.3 @@ -9526,7 +8257,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.60.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/parser': 8.60.0(eslint@9.39.4)(typescript@5.9.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -9545,9 +8276,9 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@9.39.4(jiti@2.7.0): + eslint@9.39.4: dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0)) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.21.2 '@eslint/config-helpers': 0.4.2 @@ -9581,8 +8312,6 @@ snapshots: minimatch: 3.1.5 natural-compare: 1.4.0 optionator: 0.9.4 - optionalDependencies: - jiti: 2.7.0 transitivePeerDependencies: - supports-color @@ -9657,30 +8386,8 @@ snapshots: events@3.3.0: {} - execa@5.1.1: - dependencies: - cross-spawn: 7.0.6 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - - exit@0.1.2: {} - expect-type@1.3.0: {} - expect@29.7.0: - dependencies: - '@jest/expect-utils': 29.7.0 - jest-get-type: 29.6.3 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - expressive-code-twoslash@0.4.0(@expressive-code/core@0.41.7)(expressive-code@0.41.7)(typescript@5.9.3): dependencies: '@expressive-code/core': 0.41.7 @@ -9732,10 +8439,6 @@ snapshots: dependencies: format: 0.2.2 - fb-watchman@2.0.2: - dependencies: - bser: 2.1.1 - fdir@6.5.0(picomatch@4.0.4): optionalDependencies: picomatch: 4.0.4 @@ -9754,11 +8457,6 @@ snapshots: dependencies: to-regex-range: 5.0.1 - find-up@4.1.0: - dependencies: - locate-path: 5.0.0 - path-exists: 4.0.0 - find-up@5.0.0: dependencies: locate-path: 6.0.0 @@ -9796,8 +8494,6 @@ snapshots: jsonfile: 6.2.1 universalify: 2.0.1 - fs.realpath@1.0.0: {} - fsevents@2.3.2: optional: true @@ -9838,8 +8534,6 @@ snapshots: hasown: 2.0.3 math-intrinsics: 1.1.0 - get-package-type@0.1.0: {} - get-port-please@3.2.0: {} get-proto@1.0.1: @@ -9847,8 +8541,6 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.2 - get-stream@6.0.1: {} - get-symbol-description@1.1.0: dependencies: call-bound: 1.0.4 @@ -9882,15 +8574,6 @@ snapshots: minipass: 7.1.3 path-scurry: 2.0.2 - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.5 - once: 1.4.0 - path-is-absolute: 1.0.1 - globals@14.0.0: {} globalthis@1.0.4: @@ -10116,8 +8799,6 @@ snapshots: html-entities@2.3.3: {} - html-escaper@2.0.2: {} - html-to-image@1.11.13: {} html-void-elements@3.0.0: {} @@ -10148,8 +8829,6 @@ snapshots: httpxy@0.5.3: {} - human-signals@2.1.0: {} - ieee754@1.2.1: {} ignore@5.3.2: {} @@ -10161,20 +8840,10 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 - import-local@3.2.0: - dependencies: - pkg-dir: 4.2.0 - resolve-cwd: 3.0.0 - import-meta-resolve@4.2.0: {} imurmurhash@0.1.4: {} - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - inherits@2.0.4: {} inline-style-parser@0.2.7: {} @@ -10212,8 +8881,6 @@ snapshots: call-bound: 1.0.4 get-intrinsic: 1.3.0 - is-arrayish@0.2.1: {} - is-async-function@2.1.1: dependencies: async-function: 1.0.0 @@ -10264,8 +8931,6 @@ snapshots: is-fullwidth-code-point@3.0.0: {} - is-generator-fn@2.1.0: {} - is-generator-function@1.1.2: dependencies: call-bound: 1.0.4 @@ -10364,361 +9029,12 @@ snapshots: isexe@2.0.0: {} - istanbul-lib-coverage@3.2.2: {} - - istanbul-lib-instrument@5.2.1: - dependencies: - '@babel/core': 7.29.7 - '@babel/parser': 7.29.7 - '@istanbuljs/schema': 0.1.6 - istanbul-lib-coverage: 3.2.2 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - istanbul-lib-instrument@6.0.3: - dependencies: - '@babel/core': 7.29.7 - '@babel/parser': 7.29.7 - '@istanbuljs/schema': 0.1.6 - istanbul-lib-coverage: 3.2.2 - semver: 7.8.1 - transitivePeerDependencies: - - supports-color - - istanbul-lib-report@3.0.1: - dependencies: - istanbul-lib-coverage: 3.2.2 - make-dir: 4.0.0 - supports-color: 7.2.0 - - istanbul-lib-source-maps@4.0.1: - dependencies: - debug: 4.4.3 - istanbul-lib-coverage: 3.2.2 - source-map: 0.6.1 - transitivePeerDependencies: - - supports-color - - istanbul-reports@3.2.0: - dependencies: - html-escaper: 2.0.2 - istanbul-lib-report: 3.0.1 - jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jest-changed-files@29.7.0: - dependencies: - execa: 5.1.1 - jest-util: 29.7.0 - p-limit: 3.1.0 - - jest-circus@29.7.0: - dependencies: - '@jest/environment': 29.7.0 - '@jest/expect': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 25.9.1 - chalk: 4.1.2 - co: 4.6.0 - dedent: 1.7.2 - is-generator-fn: 2.1.0 - jest-each: 29.7.0 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-runtime: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - p-limit: 3.1.0 - pretty-format: 29.7.0 - pure-rand: 6.1.0 - slash: 3.0.0 - stack-utils: 2.0.6 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - jest-cli@29.7.0(@types/node@25.9.1): - dependencies: - '@jest/core': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - chalk: 4.1.2 - create-jest: 29.7.0(@types/node@25.9.1) - exit: 0.1.2 - import-local: 3.2.0 - jest-config: 29.7.0(@types/node@25.9.1) - jest-util: 29.7.0 - jest-validate: 29.7.0 - yargs: 17.7.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - - jest-config@29.7.0(@types/node@25.9.1): - dependencies: - '@babel/core': 7.29.7 - '@jest/test-sequencer': 29.7.0 - '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.29.7) - chalk: 4.1.2 - ci-info: 3.9.0 - deepmerge: 4.3.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-circus: 29.7.0 - jest-environment-node: 29.7.0 - jest-get-type: 29.6.3 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-runner: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - micromatch: 4.0.8 - parse-json: 5.2.0 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-json-comments: 3.1.1 - optionalDependencies: - '@types/node': 25.9.1 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - jest-diff@29.7.0: - dependencies: - chalk: 4.1.2 - diff-sequences: 29.6.3 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - - jest-docblock@29.7.0: - dependencies: - detect-newline: 3.1.0 - - jest-each@29.7.0: - dependencies: - '@jest/types': 29.6.3 - chalk: 4.1.2 - jest-get-type: 29.6.3 - jest-util: 29.7.0 - pretty-format: 29.7.0 - - jest-environment-node@29.7.0: - dependencies: - '@jest/environment': 29.7.0 - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 25.9.1 - jest-mock: 29.7.0 - jest-util: 29.7.0 - - jest-get-type@29.6.3: {} - - jest-haste-map@29.7.0: - dependencies: - '@jest/types': 29.6.3 - '@types/graceful-fs': 4.1.9 - '@types/node': 25.9.1 - anymatch: 3.1.3 - fb-watchman: 2.0.2 - graceful-fs: 4.2.11 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - jest-worker: 29.7.0 - micromatch: 4.0.8 - walker: 1.0.8 - optionalDependencies: - fsevents: 2.3.3 - - jest-leak-detector@29.7.0: - dependencies: - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - - jest-matcher-utils@29.7.0: - dependencies: - chalk: 4.1.2 - jest-diff: 29.7.0 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - - jest-message-util@29.7.0: - dependencies: - '@babel/code-frame': 7.29.7 - '@jest/types': 29.6.3 - '@types/stack-utils': 2.0.3 - chalk: 4.1.2 - graceful-fs: 4.2.11 - micromatch: 4.0.8 - pretty-format: 29.7.0 - slash: 3.0.0 - stack-utils: 2.0.6 - - jest-mock@29.7.0: - dependencies: - '@jest/types': 29.6.3 - '@types/node': 25.9.1 - jest-util: 29.7.0 - - jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): - optionalDependencies: - jest-resolve: 29.7.0 - - jest-regex-util@29.6.3: {} - - jest-resolve-dependencies@29.7.0: - dependencies: - jest-regex-util: 29.6.3 - jest-snapshot: 29.7.0 - transitivePeerDependencies: - - supports-color - - jest-resolve@29.7.0: - dependencies: - chalk: 4.1.2 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) - jest-util: 29.7.0 - jest-validate: 29.7.0 - resolve: 1.22.12 - resolve.exports: 2.0.3 - slash: 3.0.0 - - jest-runner@29.7.0: - dependencies: - '@jest/console': 29.7.0 - '@jest/environment': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 25.9.1 - chalk: 4.1.2 - emittery: 0.13.1 - graceful-fs: 4.2.11 - jest-docblock: 29.7.0 - jest-environment-node: 29.7.0 - jest-haste-map: 29.7.0 - jest-leak-detector: 29.7.0 - jest-message-util: 29.7.0 - jest-resolve: 29.7.0 - jest-runtime: 29.7.0 - jest-util: 29.7.0 - jest-watcher: 29.7.0 - jest-worker: 29.7.0 - p-limit: 3.1.0 - source-map-support: 0.5.13 - transitivePeerDependencies: - - supports-color - - jest-runtime@29.7.0: - dependencies: - '@jest/environment': 29.7.0 - '@jest/fake-timers': 29.7.0 - '@jest/globals': 29.7.0 - '@jest/source-map': 29.6.3 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 25.9.1 - chalk: 4.1.2 - cjs-module-lexer: 1.4.3 - collect-v8-coverage: 1.0.3 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-message-util: 29.7.0 - jest-mock: 29.7.0 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - slash: 3.0.0 - strip-bom: 4.0.0 - transitivePeerDependencies: - - supports-color - - jest-snapshot@29.7.0: - dependencies: - '@babel/core': 7.29.7 - '@babel/generator': 7.29.7 - '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7) - '@babel/types': 7.29.7 - '@jest/expect-utils': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.7) - chalk: 4.1.2 - expect: 29.7.0 - graceful-fs: 4.2.11 - jest-diff: 29.7.0 - jest-get-type: 29.6.3 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - natural-compare: 1.4.0 - pretty-format: 29.7.0 - semver: 7.8.1 - transitivePeerDependencies: - - supports-color - - jest-util@29.7.0: - dependencies: - '@jest/types': 29.6.3 - '@types/node': 25.9.1 - chalk: 4.1.2 - ci-info: 3.9.0 - graceful-fs: 4.2.11 - picomatch: 2.3.2 - - jest-validate@29.7.0: - dependencies: - '@jest/types': 29.6.3 - camelcase: 6.3.0 - chalk: 4.1.2 - jest-get-type: 29.6.3 - leven: 3.1.0 - pretty-format: 29.7.0 - - jest-watcher@29.7.0: - dependencies: - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 25.9.1 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - emittery: 0.13.1 - jest-util: 29.7.0 - string-length: 4.0.2 - - jest-worker@29.7.0: - dependencies: - '@types/node': 25.9.1 - jest-util: 29.7.0 - merge-stream: 2.0.0 - supports-color: 8.1.1 - - jest@29.7.0(@types/node@25.9.1): - dependencies: - '@jest/core': 29.7.0 - '@jest/types': 29.6.3 - import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@25.9.1) - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - jiti@2.7.0: {} joycon@3.1.1: {} @@ -10740,8 +9056,6 @@ snapshots: json-buffer@3.0.1: {} - json-parse-even-better-errors@2.3.1: {} - json-schema-traverse@0.4.1: {} json-stable-stringify-without-jsonify@1.0.1: {} @@ -10764,8 +9078,6 @@ snapshots: kind-of@6.0.3: {} - kleur@3.0.3: {} - kleur@4.1.5: {} klona@2.0.6: {} @@ -10776,8 +9088,6 @@ snapshots: dependencies: readable-stream: 2.3.8 - leven@3.1.0: {} - levn@0.4.1: dependencies: prelude-ls: 1.2.1 @@ -10865,10 +9175,6 @@ snapshots: pkg-types: 2.3.1 quansync: 0.2.11 - locate-path@5.0.0: - dependencies: - p-locate: 4.1.0 - locate-path@6.0.0: dependencies: p-locate: 5.0.0 @@ -10906,14 +9212,6 @@ snapshots: '@babel/types': 7.29.7 source-map-js: 1.2.1 - make-dir@4.0.0: - dependencies: - semver: 7.8.1 - - makeerror@1.0.12: - dependencies: - tmpl: 1.0.5 - markdown-extensions@2.0.0: {} markdown-table@3.0.4: {} @@ -11210,8 +9508,6 @@ snapshots: dependencies: is-what: 4.1.16 - merge-stream@2.0.0: {} - merge2@1.4.1: {} meshoptimizer@0.22.0: {} @@ -11875,8 +10171,6 @@ snapshots: node-gyp-build@4.8.4: {} - node-int64@0.4.0: {} - node-mock-http@1.0.4: {} node-releases@2.0.46: {} @@ -11887,10 +10181,6 @@ snapshots: normalize-path@3.0.0: {} - npm-run-path@4.0.1: - dependencies: - path-key: 3.1.1 - nth-check@2.1.1: dependencies: boolbase: 1.0.0 @@ -11951,10 +10241,6 @@ snapshots: dependencies: ee-first: 1.1.1 - once@1.4.0: - dependencies: - wrappy: 1.0.2 - onetime@5.1.2: dependencies: mimic-fn: 2.1.0 @@ -12016,24 +10302,14 @@ snapshots: object-keys: 1.1.1 safe-push-apply: 1.0.0 - p-limit@2.3.0: - dependencies: - p-try: 2.2.0 - p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 - p-locate@4.1.0: - dependencies: - p-limit: 2.3.0 - p-locate@5.0.0: dependencies: p-limit: 3.1.0 - p-try@2.2.0: {} - package-json-from-dist@1.0.1: {} package-manager-detector@1.6.0: {} @@ -12052,13 +10328,6 @@ snapshots: is-decimal: 2.0.1 is-hexadecimal: 2.0.1 - parse-json@5.2.0: - dependencies: - '@babel/code-frame': 7.29.7 - error-ex: 1.3.4 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - parse-numeric-range@1.3.0: {} parse5@7.3.0: @@ -12069,8 +10338,6 @@ snapshots: path-exists@4.0.0: {} - path-is-absolute@1.0.1: {} - path-key@3.1.1: {} path-parse@1.0.7: {} @@ -12103,10 +10370,6 @@ snapshots: pirates@4.0.7: {} - pkg-dir@4.2.0: - dependencies: - find-up: 4.1.0 - pkg-types@1.3.1: dependencies: confbox: 0.1.8 @@ -12131,13 +10394,11 @@ snapshots: possible-typed-array-names@1.1.0: {} - postcss-load-config@6.0.1(jiti@2.7.0)(postcss@8.5.15)(yaml@2.9.0): + postcss-load-config@6.0.1(postcss@8.5.15): dependencies: lilconfig: 3.1.3 optionalDependencies: - jiti: 2.7.0 postcss: 8.5.15 - yaml: 2.9.0 postcss-nested@6.2.0(postcss@8.5.15): dependencies: @@ -12161,6 +10422,8 @@ snapshots: prelude-ls@1.2.1: {} + prettier@3.8.3: {} + prettier@4.0.0-alpha.13: {} pretty-bytes@7.1.0: {} @@ -12171,27 +10434,14 @@ snapshots: ansi-styles: 5.2.0 react-is: 17.0.2 - pretty-format@29.7.0: - dependencies: - '@jest/schemas': 29.6.3 - ansi-styles: 5.2.0 - react-is: 18.3.1 - process-nextick-args@2.0.1: {} process@0.11.10: {} - prompts@2.4.2: - dependencies: - kleur: 3.0.3 - sisteransi: 1.0.5 - property-information@7.1.0: {} punycode@2.3.1: {} - pure-rand@6.1.0: {} - quansync@0.2.11: {} queue-microtask@1.2.3: {} @@ -12207,8 +10457,6 @@ snapshots: react-is@17.0.2: {} - react-is@18.3.1: {} - readable-stream@2.3.8: dependencies: core-util-is: 1.0.3 @@ -12429,16 +10677,10 @@ snapshots: require-directory@2.1.1: {} - resolve-cwd@3.0.0: - dependencies: - resolve-from: 5.0.0 - resolve-from@4.0.0: {} resolve-from@5.0.0: {} - resolve.exports@2.0.3: {} - resolve@1.22.12: dependencies: es-errors: 1.3.0 @@ -12715,18 +10957,10 @@ snapshots: mrmime: 2.0.1 totalist: 3.0.1 - sisteransi@1.0.5: {} - - slash@3.0.0: {} - slash@5.1.0: {} smob@1.6.2: {} - solid-app-router@0.1.14(solid-js@1.9.13): - dependencies: - solid-js: 1.9.13 - solid-js@1.9.13: dependencies: csstype: 3.2.3 @@ -12758,11 +10992,6 @@ snapshots: source-map-js@1.2.1: {} - source-map-support@0.5.13: - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - source-map-support@0.5.21: dependencies: buffer-from: 1.1.2 @@ -12778,10 +11007,6 @@ snapshots: srvx@0.11.16: {} - stack-utils@2.0.6: - dependencies: - escape-string-regexp: 2.0.0 - stackback@0.0.2: {} stackframe@1.3.4: {} @@ -12806,11 +11031,6 @@ snapshots: - bare-abort-controller - react-native-b4a - string-length@4.0.2: - dependencies: - char-regex: 1.0.2 - strip-ansi: 6.0.1 - string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -12877,10 +11097,6 @@ snapshots: strip-bom@3.0.0: {} - strip-bom@4.0.0: {} - - strip-final-newline@2.0.0: {} - strip-json-comments@3.1.1: {} strip-literal@3.1.0: @@ -12911,10 +11127,6 @@ snapshots: dependencies: has-flag: 4.0.0 - supports-color@8.1.1: - dependencies: - has-flag: 4.0.0 - supports-preserve-symlinks-flag@1.0.0: {} tagged-tag@1.0.0: {} @@ -12957,12 +11169,6 @@ snapshots: commander: 2.20.3 source-map-support: 0.5.21 - test-exclude@6.0.0: - dependencies: - '@istanbuljs/schema': 0.1.6 - glob: 7.2.3 - minimatch: 3.1.5 - text-decoder@1.2.7: dependencies: b4a: 1.8.1 @@ -13021,8 +11227,6 @@ snapshots: tm@0.0.1: {} - tmpl@1.0.5: {} - to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -13060,20 +11264,16 @@ snapshots: tslib@2.8.1: {} - tsm@2.3.0: - dependencies: - esbuild: 0.15.18 - - tsup-preset-solid@2.2.0(esbuild@0.21.5)(solid-js@1.9.13)(tsup@8.5.1(jiti@2.7.0)(postcss@8.5.15)(typescript@5.9.3)(yaml@2.9.0)): + tsup-preset-solid@2.2.0(esbuild@0.21.5)(solid-js@1.9.13)(tsup@8.5.1(postcss@8.5.15)(typescript@5.9.3)): dependencies: esbuild-plugin-solid: 0.5.0(esbuild@0.21.5)(solid-js@1.9.13) - tsup: 8.5.1(jiti@2.7.0)(postcss@8.5.15)(typescript@5.9.3)(yaml@2.9.0) + tsup: 8.5.1(postcss@8.5.15)(typescript@5.9.3) transitivePeerDependencies: - esbuild - solid-js - supports-color - tsup@8.5.1(jiti@2.7.0)(postcss@8.5.15)(typescript@5.9.3)(yaml@2.9.0): + tsup@8.5.1(postcss@8.5.15)(typescript@5.9.3): dependencies: bundle-require: 5.1.0(esbuild@0.27.7) cac: 6.7.14 @@ -13084,7 +11284,7 @@ snapshots: fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@2.7.0)(postcss@8.5.15)(yaml@2.9.0) + postcss-load-config: 6.0.1(postcss@8.5.15) resolve-from: 5.0.0 rollup: 4.60.4 source-map: 0.7.6 @@ -13115,10 +11315,6 @@ snapshots: dependencies: prelude-ls: 1.2.1 - type-detect@4.0.8: {} - - type-fest@0.21.3: {} - type-fest@5.6.0: dependencies: tagged-tag: 1.0.0 @@ -13178,7 +11374,8 @@ snapshots: magic-string: 0.30.21 unplugin: 2.3.11 - undici-types@7.24.6: {} + undici-types@7.24.6: + optional: true unenv@2.0.0-rc.24: dependencies: @@ -13407,12 +11604,6 @@ snapshots: kleur: 4.1.5 sade: 1.8.1 - v8-to-istanbul@9.3.0: - dependencies: - '@jridgewell/trace-mapping': 0.3.31 - '@types/istanbul-lib-coverage': 2.0.6 - convert-source-map: 2.0.0 - vfile-location@5.0.3: dependencies: '@types/unist': 3.0.3 @@ -13440,7 +11631,7 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite-plugin-inspect@0.8.4(rollup@4.60.4)(vite@6.4.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0)): + vite-plugin-inspect@0.8.4(rollup@4.60.4)(vite@6.4.2): dependencies: '@antfu/utils': 0.7.10 '@rollup/pluginutils': 5.3.0(rollup@4.60.4) @@ -13451,12 +11642,12 @@ snapshots: perfect-debounce: 1.0.0 picocolors: 1.1.1 sirv: 2.0.4 - vite: 6.4.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0) + vite: 6.4.2 transitivePeerDependencies: - rollup - supports-color - vite-plugin-solid@2.11.12(solid-js@1.9.13)(vite@6.4.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0)): + vite-plugin-solid@2.11.12(solid-js@1.9.13)(vite@6.4.2): dependencies: '@babel/core': 7.29.7 '@types/babel__core': 7.20.5 @@ -13464,8 +11655,8 @@ snapshots: merge-anything: 5.1.7 solid-js: 1.9.13 solid-refresh: 0.6.3(solid-js@1.9.13) - vite: 6.4.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0) - vitefu: 1.1.3(vite@6.4.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0)) + vite: 6.4.2 + vitefu: 1.1.3(vite@6.4.2) transitivePeerDependencies: - supports-color @@ -13482,18 +11673,18 @@ snapshots: transitivePeerDependencies: - supports-color - vite-tsconfig-paths@5.1.4(typescript@5.9.3)(vite@6.4.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0)): + vite-tsconfig-paths@5.1.4(typescript@5.9.3)(vite@6.4.2): dependencies: debug: 4.4.3 globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.9.3) optionalDependencies: - vite: 6.4.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0) + vite: 6.4.2 transitivePeerDependencies: - supports-color - typescript - vite@6.4.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0): + vite@6.4.2: dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.4) @@ -13502,12 +11693,7 @@ snapshots: rollup: 4.60.4 tinyglobby: 0.2.16 optionalDependencies: - '@types/node': 25.9.1 fsevents: 2.3.3 - jiti: 2.7.0 - lightningcss: 1.32.0 - terser: 5.48.0 - yaml: 2.9.0 vite@8.0.10(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0): dependencies: @@ -13524,18 +11710,18 @@ snapshots: terser: 5.48.0 yaml: 2.9.0 - vitefu@1.1.3(vite@6.4.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0)): + vitefu@1.1.3(vite@6.4.2): optionalDependencies: - vite: 6.4.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0) + vite: 6.4.2 vitefu@1.1.3(vite@8.0.10(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0)): optionalDependencies: vite: 8.0.10(@types/node@25.9.1)(esbuild@0.25.12)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0) - vitest@4.1.7(@types/node@25.9.1)(@vitest/browser-playwright@4.1.7)(vite@6.4.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0)): + vitest@4.1.7(@vitest/browser-playwright@4.1.7)(vite@6.4.2): dependencies: '@vitest/expect': 4.1.7 - '@vitest/mocker': 4.1.7(vite@6.4.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0)) + '@vitest/mocker': 4.1.7(vite@6.4.2) '@vitest/pretty-format': 4.1.7 '@vitest/runner': 4.1.7 '@vitest/snapshot': 4.1.7 @@ -13552,11 +11738,10 @@ snapshots: tinyexec: 1.2.2 tinyglobby: 0.2.16 tinyrainbow: 3.1.0 - vite: 6.4.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0) + vite: 6.4.2 why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 25.9.1 - '@vitest/browser-playwright': 4.1.7(playwright@1.60.0)(vite@6.4.2(@types/node@25.9.1)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0))(vitest@4.1.7) + '@vitest/browser-playwright': 4.1.7(playwright@1.60.0)(vite@6.4.2)(vitest@4.1.7) transitivePeerDependencies: - msw @@ -13564,10 +11749,6 @@ snapshots: vscode-textmate@9.3.2: {} - walker@1.0.8: - dependencies: - makeerror: 1.0.12 - wcwidth@1.0.1: dependencies: defaults: 1.0.4 @@ -13653,13 +11834,6 @@ snapshots: string-width: 7.2.0 strip-ansi: 7.2.0 - wrappy@1.0.2: {} - - write-file-atomic@4.0.2: - dependencies: - imurmurhash: 0.1.4 - signal-exit: 3.0.7 - ws@8.21.0: {} wsl-utils@0.1.0: diff --git a/site/src/components/demo.tsx b/site/src/components/demo.tsx index 2446ed7c..00b7c4e1 100644 --- a/site/src/components/demo.tsx +++ b/site/src/components/demo.tsx @@ -310,12 +310,12 @@ function DemoClient(props: DemoProps) { // Mode-B compiler: only fires once `hasEdited` flips true. const [compiler] = createResource( () => (hasEdited() ? true : undefined), - async () => { + async (): Promise => { const [babelTransformFn, tsModule] = await Promise.all([ loadBabelTransform(), loadTypeScript(), ]) - return { babelTransform: babelTransformFn, tsModule } as Compiler + return { babelTransform: babelTransformFn, tsModule } }, ) @@ -369,7 +369,6 @@ function DemoClient(props: DemoProps) { return hasEdited() ? (replBootstrapUrl() ?? "about:blank") : initialBootstrapUrl() }) - let iframeRef: HTMLIFrameElement | undefined function postTheme(): void { iframeRef?.contentWindow?.postMessage({ type: "theme", value: editorTheme() }, "*") diff --git a/site/src/components/hero.tsx b/site/src/components/hero.tsx index 8ff1a7d4..acc6e46d 100644 --- a/site/src/components/hero.tsx +++ b/site/src/components/hero.tsx @@ -1,8 +1,8 @@ import { clientOnly } from "@solidjs/start" import { createResource, createSignal, onCleanup, onMount, Show, startTransition } from "solid-js" -import { pickRandomDemo, type Demo } from "../snippets/gallery" +import { pickRandomDemo, type Demo } from "../snippets/gallery/index.ts" -const LazyDemo = clientOnly(() => import("./demo")) +const LazyDemo = clientOnly(() => import("./demo.tsx")) function PickDemo(props: { onPick: (demo: Demo) => void }) { props.onPick(pickRandomDemo()) diff --git a/site/src/routes/api/components/canvas.mdx b/site/src/routes/api/components/canvas.mdx index e4ebab7f..0ab6d46d 100644 --- a/site/src/routes/api/components/canvas.mdx +++ b/site/src/routes/api/components/canvas.mdx @@ -8,22 +8,22 @@ title: Canvas ## Props -| Prop | Type | Default | Description | -| --- | --- | --- | --- | -| `camera` | `Partial> \| Camera` | `new PerspectiveCamera()` | The scene camera — partial props for the default camera, or an instance you built. | -| `gl` | `object \| ((canvas: HTMLCanvasElement) => Renderer) \| Renderer` | `new WebGLRenderer({ alpha: true })` | How the renderer is built. See [The `gl` prop](#the-gl-prop). | -| `scene` | `Partial> \| Scene` | `new Scene()` | Settings for the scene, or an existing `Scene`. | -| `raycaster` | `Partial> \| EventRaycaster \| Raycaster` | `new CursorRaycaster()` | The [raycaster](/api/utilities/raycasters) used for pointer events. | -| `shadows` | `boolean \| "basic" \| "percentage" \| "soft" \| "variance" \| WebGLRenderer["shadowMap"]` | off | Enables shadows. See [Rendering defaults](#rendering-defaults) for the string mapping. | -| `orthographic` | `boolean` | `false` | Use an `OrthographicCamera` for the default camera. | -| `linear` | `boolean` | `false` | Use a linear output color space instead of sRGB. | -| `flat` | `boolean` | `false` | Disable tone mapping (`NoToneMapping`). | -| `frameloop` | `"always" \| "demand" \| "never"` | `"always"` | When to render: every frame, only on request, or never. | -| `fallback` | `JSX.Element` | — | Shown while content loads asynchronously. | -| `style` | `JSX.CSSProperties` | — | CSS for the canvas container. | -| `class` | `string` | — | CSS class for the canvas container. | -| `ref` | `RefWithCleanup` | — | Receives the [`Context`](/api/hooks/use-three) once the renderer is created, so code outside `` can reach it. A callback ref may return a cleanup that runs when the Canvas unmounts; [`createXR`](/api/hooks/create-xr) uses this. | -| event handlers | `Partial` | — | Any [event handler](/api/events/overview), firing after the event bubbles through the whole scene (e.g. `onClick`, `onClickMissed`). | +| Prop | Type | Default | Description | +| -------------- | ------------------------------------------------------------------------------------------ | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `camera` | `Partial> \| Camera` | `new PerspectiveCamera()` | The scene camera — partial props for the default camera, or an instance you built. | +| `gl` | `object \| ((canvas: HTMLCanvasElement) => Renderer) \| Renderer` | `new WebGLRenderer({ alpha: true })` | How the renderer is built. See [The `gl` prop](#the-gl-prop). | +| `scene` | `Partial> \| Scene` | `new Scene()` | Settings for the scene, or an existing `Scene`. | +| `raycaster` | `Partial> \| EventRaycaster \| Raycaster` | `new CursorRaycaster()` | The [raycaster](/api/utilities/raycasters) used for pointer events. | +| `shadows` | `boolean \| "basic" \| "percentage" \| "soft" \| "variance" \| WebGLRenderer["shadowMap"]` | off | Enables shadows. See [Rendering defaults](#rendering-defaults) for the string mapping. | +| `orthographic` | `boolean` | `false` | Use an `OrthographicCamera` for the default camera. | +| `linear` | `boolean` | `false` | Use a linear output color space instead of sRGB. | +| `flat` | `boolean` | `false` | Disable tone mapping (`NoToneMapping`). | +| `frameloop` | `"always" \| "demand" \| "never"` | `"always"` | When to render: every frame, only on request, or never. | +| `fallback` | `JSX.Element` | — | Shown while content loads asynchronously. | +| `style` | `JSX.CSSProperties` | — | CSS for the canvas container. | +| `class` | `string` | — | CSS class for the canvas container. | +| `ref` | `RefWithCleanup` | — | Receives the [`Context`](/api/hooks/use-three) once the renderer is created, so code outside `` can reach it. A callback ref may return a cleanup that runs when the Canvas unmounts; [`createXR`](/api/hooks/create-xr) uses this. | +| event handlers | `Partial` | — | Any [event handler](/api/events/overview), firing after the event bubbles through the whole scene (e.g. `onClick`, `onClickMissed`). |
Exact type @@ -33,8 +33,7 @@ interface CanvasProps extends ParentProps> { ref?: RefWithCleanup // Context | ((context: Context) => void | (() => void)) camera?: Partial | Props> | Camera fallback?: JSX.Element - gl?: - // The flat-object branch collapses to `never` when Register narrows + gl?: // The flat-object branch collapses to `never` when Register narrows // ResolvedRenderer away from WebGLRenderer — see "Narrowing the // renderer type project-wide" below. | (WebGLRenderer extends ResolvedRenderer @@ -80,12 +79,12 @@ A few defaults are derived rather than passed directly: - **Output color space** — `SRGBColorSpace`, or `LinearSRGBColorSpace` when `linear` is set. - **Shadow type** — `shadows={true}` uses `PCFSoftShadowMap`. The string values map to three's constants: - | `shadows` | Shadow map | - | --- | --- | - | `"basic"` | `BasicShadowMap` | - | `"percentage"` | `PCFShadowMap` | - | `"soft"` | `PCFSoftShadowMap` | - | `"variance"` | `VSMShadowMap` | + | `shadows` | Shadow map | + | -------------- | ------------------ | + | `"basic"` | `BasicShadowMap` | + | `"percentage"` | `PCFShadowMap` | + | `"soft"` | `PCFSoftShadowMap` | + | `"variance"` | `VSMShadowMap` | Tone-mapping and color-space defaults are applied only to renderers that expose those fields — they're skipped silently for renderers like `SVGRenderer`. @@ -93,11 +92,11 @@ Tone-mapping and color-space defaults are applied only to renderers that expose `gl` controls how the renderer is built. It accepts three shapes: -| Shape | Example | Use it for | -| --- | --- | --- | +| Shape | Example | Use it for | +| --------------------- | -------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | | **Properties object** | `gl={{ antialias: true, toneMapping: ACESFilmicToneMapping }}` | Tweaking the default `WebGLRenderer`. Mixes constructor flags (`antialias`, `alpha`, `powerPreference`) with instance props (`toneMapping`). | -| **Factory** | `gl={canvas => new WebGPURenderer({ canvas })}` | Choosing a different renderer — `WebGPURenderer`, `SVGRenderer`, `CSS2DRenderer`, a custom one. | -| **Instance** | `gl={myRenderer}` | A renderer you already built. | +| **Factory** | `gl={canvas => new WebGPURenderer({ canvas })}` | Choosing a different renderer — `WebGPURenderer`, `SVGRenderer`, `CSS2DRenderer`, a custom one. | +| **Instance** | `gl={myRenderer}` | A renderer you already built. | With the properties object, instance props stay reactive — set them after construction and update them anytime. Constructor flags are the exception, below. @@ -113,17 +112,14 @@ If you genuinely need to change one at runtime, unmount and remount the ` new WebGPURenderer({ canvas })}> - {/* scene */} - +; new WebGPURenderer({ canvas })}>{/* scene */} ``` `solid-three` awaits `renderer.init()` before the first frame, so you don't need to await WebGPU setup yourself. ### Narrowing the renderer type project-wide -By default [`useThree().gl`](/api/hooks/use-three) is typed as the open `Renderer` union. Declare your concrete renderer once and the type narrows everywhere — both `useThree().gl` reads and `` assignments: +By default [`useThree().gl`](/api/hooks/use-three) is typed as the open `SupportedRenderer` union. Declare your concrete renderer once and the type narrows everywhere — both `useThree().gl` reads and `` assignments: ```ts // src/solid-three.d.ts @@ -162,7 +158,7 @@ function Scene() { * (gets full three typing for `xr` / `shadowMap` etc.) or a custom * structural `RendererLike`. */ -type Renderer = WebGLRenderer | WebGPURenderer | RendererLike +type SupportedRenderer = WebGLRenderer | WebGPURenderer | RendererLike /** Effective renderer type — narrowed by user `Register` augmentation if provided. */ type ResolvedRenderer = Register extends { renderer: infer R } ? R : WebGLRenderer @@ -178,7 +174,7 @@ interface Register {} * Minimal structural interface for renderers — three's DOM-based renderers * (SVGRenderer, CSS2DRenderer, CSS3DRenderer) and user-built renderers fit * this. Concrete three renderers (WebGLRenderer, WebGPURenderer) - * structurally satisfy it too, but the `Renderer` union prefers their + * structurally satisfy it too, but the `SupportedRenderer` union prefers their * exact types so WebGL-specific surface remains reachable. */ interface RendererLike { diff --git a/site/src/routes/api/components/entity.mdx b/site/src/routes/api/components/entity.mdx index d0410d14..790719ba 100644 --- a/site/src/routes/api/components/entity.mdx +++ b/site/src/routes/api/components/entity.mdx @@ -6,7 +6,7 @@ title: Entity `Entity` is a JSX wrapper around any `three.js` class. Where [``](/api/components/t) is shorthand for "make me a `Mesh`", `` says the same thing without pre-building a [`T`](/api/components/t) namespace — useful in libraries, or when the class is only known at runtime. -Conceptually it mirrors Solid's [``](https://docs.solidjs.com/reference/components/dynamic): a component that takes *what to render* as a prop rather than baking it into the tag. +Conceptually it mirrors Solid's [``](https://docs.solidjs.com/reference/components/dynamic): a component that takes _what to render_ as a prop rather than baking it into the tag. Pass a constructor: @@ -26,11 +26,11 @@ const mesh = new Mesh(new BoxGeometry(1, 1, 1), new MeshBasicMaterial({ color: " ## Props -| Prop | Type | Description | -| --- | --- | --- | -| `from` | `Constructor \| Instance` | A three.js constructor (class), or an existing instance. | -| `args` | `ConstructorParameters` | Arguments for the constructor, when `from` is a class. | -| other props | — | Any prop the three.js object supports. | +| Prop | Type | Description | +| ----------- | ------------------------- | -------------------------------------------------------- | +| `from` | `Constructor \| Instance` | A three.js constructor (class), or an existing instance. | +| `args` | `ConstructorParameters` | Arguments for the constructor, when `from` is a class. | +| other props | — | Any prop the three.js object supports. | Every prop other than `from` and `args` is applied via [`useProps`](/api/hooks/use-props) — array conversion, dashed-path nesting (`shadow-mapSize-width={1024}`), `Color` string parsing, `attach` slotting, event-listener registration, and `needsUpdate` flagging. See [`useProps`](/api/hooks/use-props) for the full conversion table and `attach` / `args` / `ref` semantics. @@ -65,7 +65,7 @@ const MeshComponent = createEntity(Mesh) ## Manual disposal of instance-entities -When you pass an *instance* to ``, you own its disposal — three.js keeps the resource in memory until you release it. Wrap the instance in [`autodispose`](/api/utilities/autodispose) to free it when the component unmounts. +When you pass an _instance_ to ``, you own its disposal — three.js keeps the resource in memory until you release it. Wrap the instance in [`autodispose`](/api/utilities/autodispose) to free it when the component unmounts. **Wrong** — `box` and `sphere` are never disposed, so they leak: diff --git a/site/src/routes/api/components/portal.mdx b/site/src/routes/api/components/portal.mdx index 8465c138..60149896 100644 --- a/site/src/routes/api/components/portal.mdx +++ b/site/src/routes/api/components/portal.mdx @@ -8,11 +8,11 @@ title: Portal ## Props -| Prop | Type | Default | Description | -| --- | --- | --- | --- | -| `element` | `Object3D \| Meta` | the root scene | The object to render the children into. | -| `children` | `JSX.Element` | — | What to render in the portal. | -| `onUpdate` | `(element) => void` | — | Runs when the portal mounts or re-attaches, with the resolved `element`. | +| Prop | Type | Default | Description | +| ---------- | ---------------------------- | -------------- | ------------------------------------------------------------------------ | +| `element` | `Object3D \| Meta` | the root scene | The object to render the children into. | +| `children` | `JSX.Element` | — | What to render in the portal. | +| `onUpdate` | `(element) => void` | — | Runs when the portal mounts or re-attaches, with the resolved `element`. |
Exact type @@ -37,7 +37,7 @@ type PortalProps = ParentProps<{ ## Default destination: the scene root -With no `element`, `Portal` attaches its children to `context.scene` — the root of the canvas's main scene. This is the escape hatch for "render *as if* this child were top-level", ignoring any transform on the JSX parent. +With no `element`, `Portal` attaches its children to `context.scene` — the root of the canvas's main scene. This is the escape hatch for "render _as if_ this child were top-level", ignoring any transform on the JSX parent. ```tsx @@ -101,7 +101,7 @@ The off-screen scene can have its own lights, animations, even pointer events ## Ownership and lifecycle -- `Portal` doesn't break ownership. Children stay in the JSX tree for reactivity, refs, and lifecycle — only the *render destination* changes. +- `Portal` doesn't break ownership. Children stay in the JSX tree for reactivity, refs, and lifecycle — only the _render destination_ changes. - The `element` you pass keeps its identity for as long as the portal is mounted, and `Portal` never disposes it. If you constructed the scene or group yourself, you manage its lifetime. ## See also diff --git a/site/src/routes/api/components/resource.mdx b/site/src/routes/api/components/resource.mdx index 13416982..45a18abe 100644 --- a/site/src/routes/api/components/resource.mdx +++ b/site/src/routes/api/components/resource.mdx @@ -8,16 +8,16 @@ title: Resource ## Props -| Prop | Type | Description | -| --- | --- | --- | -| `loader` | `Constructor` | The three.js loader class — `TextureLoader`, `GLTFLoader`, … | -| `url` | `string \| string[] \| Record` | What to load, matching what the loader expects. | -| `children` | `(resource) => JSX.Element` | Optional render function, receiving the loaded resource. | -| `base` | `string` | Base URL for resolving relative paths (forwarded to [`useLoader`](/api/hooks/use-loader)). | -| `cache` | `boolean \| LoaderRegistry` | `true` (default global cache), `false` (disable), or a custom registry. See [Caching](/api/hooks/use-loader#caching). | -| `onBeforeLoad` | `(loader) => void` | Runs with the loader before loading — e.g. to configure decoders. | -| `onLoad` | `(resource) => void` | Runs with the resolved resource after loading. | -| other props | — | Forwarded to the loaded resource — including `attach`. | +| Prop | Type | Description | +| -------------- | ---------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | +| `loader` | `Constructor` | The three.js loader class — `TextureLoader`, `GLTFLoader`, … | +| `url` | `string \| string[] \| Record` | What to load, matching what the loader expects. | +| `children` | `(resource) => JSX.Element` | Optional render function, receiving the loaded resource. | +| `base` | `string` | Base URL for resolving relative paths (forwarded to [`useLoader`](/api/hooks/use-loader)). | +| `cache` | `boolean \| LoaderRegistry` | `true` (default global cache), `false` (disable), or a custom registry. See [Caching](/api/hooks/use-loader#caching). | +| `onBeforeLoad` | `(loader) => void` | Runs with the loader before loading — e.g. to configure decoders. | +| `onLoad` | `(resource) => void` | Runs with the resolved resource after loading. | +| other props | — | Forwarded to the loaded resource — including `attach`. | ## Examples diff --git a/site/src/routes/api/events/overview.mdx b/site/src/routes/api/events/overview.mdx index 48418871..4f217e2d 100644 --- a/site/src/routes/api/events/overview.mdx +++ b/site/src/routes/api/events/overview.mdx @@ -33,24 +33,24 @@ Run in three phases per pointer move — enter, then move, then leave. See [Hove Every handler receives one event argument that combines the original DOM event with the raycast result. -| Property | Type | When present | Description | -| --- | --- | --- | --- | -| `nativeEvent` | `MouseEvent \| PointerEvent \| WheelEvent` | always | The original DOM event that triggered the handler. | -| `intersections` | `Intersection[]` | events that raycast | All hit intersections, sorted nearest-first. | -| `intersection` | `Intersection` | events that raycast | Shorthand for `intersections[0]` — the closest hit overall. | -| `object` | `Object3D` | events that raycast | The closest hit object (`intersections[0].object`) — stable after dispatch, the 3D analogue of a DOM event's `target`. | -| `currentIntersection` | `Intersection` | inside an object handler | The intersection for the current handler's object. Absent on canvas-level dispatch. | -| `currentObject` | `Object3D` | inside an object handler | The object this handler is firing on; as the event bubbles it walks up the ancestor chain (while `currentIntersection` stays on the hit) and is cleared after dispatch — the 3D analogue of a DOM event's `currentTarget`. | -| `stopped` | `boolean` | stoppable events only | Whether `stopPropagation()` has been called. | -| `stopPropagation` | `() => void` | stoppable events only | Stops both raycast and tree propagation. See [Stoppable vs non-stoppable](#stoppable-vs-non-stoppable-events). | +| Property | Type | When present | Description | +| --------------------- | ------------------------------------------ | ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `nativeEvent` | `MouseEvent \| PointerEvent \| WheelEvent` | always | The original DOM event that triggered the handler. | +| `intersections` | `Intersection[]` | events that raycast | All hit intersections, sorted nearest-first. | +| `intersection` | `Intersection` | events that raycast | Shorthand for `intersections[0]` — the closest hit overall. | +| `object` | `Object3D` | events that raycast | The closest hit object (`intersections[0].object`) — stable after dispatch, the 3D analogue of a DOM event's `target`. | +| `currentIntersection` | `Intersection` | inside an object handler | The intersection for the current handler's object. Absent on canvas-level dispatch. | +| `currentObject` | `Object3D` | inside an object handler | The object this handler is firing on; as the event bubbles it walks up the ancestor chain (while `currentIntersection` stays on the hit) and is cleared after dispatch — the 3D analogue of a DOM event's `currentTarget`. | +| `stopped` | `boolean` | stoppable events only | Whether `stopPropagation()` has been called. | +| `stopPropagation` | `() => void` | stoppable events only | Stops both raycast and tree propagation. See [Stoppable vs non-stoppable](#stoppable-vs-non-stoppable-events). | Not every handler receives every field — what you get depends on the event: -| Handler | Receives | -| --- | --- | -| `onClick`, `onContextMenu`, `onDoubleClick`, the `*Move` / `*Down` / `*Up` handlers, `onWheel` | `nativeEvent`, the intersections, and `stopPropagation` | -| `onPointerEnter`, `onPointerLeave` | `nativeEvent` and the intersections, but no `stopPropagation` — these can't be stopped | -| `onClickMissed`, `onContextMenuMissed`, `onDoubleClickMissed` | only `nativeEvent` — missed events don't raycast | +| Handler | Receives | +| ---------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| `onClick`, `onContextMenu`, `onDoubleClick`, the `*Move` / `*Down` / `*Up` handlers, `onWheel` | `nativeEvent`, the intersections, and `stopPropagation` | +| `onPointerEnter`, `onPointerLeave` | `nativeEvent` and the intersections, but no `stopPropagation` — these can't be stopped | +| `onClickMissed`, `onContextMenuMissed`, `onDoubleClickMissed` | only `nativeEvent` — missed events don't raycast |
Exact type @@ -227,11 +227,11 @@ By default a pointer event goes to whatever the ray currently hits. That breaks Pointer capture fixes this. Inside an `onPointerDown`, `onPointerMove`, or `onPointerUp` handler, three methods ride on the event: -| Method | Description | -| --- | --- | +| Method | Description | +| ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | | `setPointerCapture(options?)` | Capture the pointer to `options.object` (default: the firing `currentObject`; sync-only). Pass `options.normal` to orient the drag plane. | -| `releasePointerCapture()` | Release a capture started with `setPointerCapture()`. | -| `hasPointerCapture()` | Whether this event's node currently holds the capture. | +| `releasePointerCapture()` | Release a capture started with `setPointerCapture()`. | +| `hasPointerCapture()` | Whether this event's node currently holds the capture. | Once captured, every subsequent `onPointerMove` and `onPointerUp` for that pointer is delivered **exclusively** to the captured node's chain — still bubbling up to the canvas-level handler, but no longer raycasting against the rest of the scene. Delivery continues even when the pointer is off the object, and (for the DOM pointer source) off the canvas. Hover is frozen for the duration: no enter/leave fires while a capture is held. @@ -272,7 +272,7 @@ For visuals that should follow a drag — scaling or recoloring the grabbed obje import { hasPointerCapture } from "solid-three" let mesh: THREE.Mesh | undefined - event.setPointerCapture()} diff --git a/site/src/routes/api/events/raycastable.mdx b/site/src/routes/api/events/raycastable.mdx index 30250e1f..08c2545a 100644 --- a/site/src/routes/api/events/raycastable.mdx +++ b/site/src/routes/api/events/raycastable.mdx @@ -6,9 +6,9 @@ title: raycastable The `raycastable` prop controls whether an `Object3D` can be hit by raycasting. -| Prop | Type | Default | Description | -| --- | --- | --- | --- | -| `raycastable` | `boolean` | `true` | When `false`, the object isn't hit by rays directly, but still receives events that bubble up from its descendants. | +| Prop | Type | Default | Description | +| ------------- | --------- | ------- | ------------------------------------------------------------------------------------------------------------------- | +| `raycastable` | `boolean` | `true` | When `false`, the object isn't hit by rays directly, but still receives events that bubble up from its descendants. | ```tsx console.log("Child clicked!")}> diff --git a/site/src/routes/api/hooks/create-xr.mdx b/site/src/routes/api/hooks/create-xr.mdx index 0a1d31c6..a7ebfd60 100644 --- a/site/src/routes/api/hooks/create-xr.mdx +++ b/site/src/routes/api/hooks/create-xr.mdx @@ -16,14 +16,14 @@ const xr = createXR() ## Returns -| Property | Type | Description | -| --- | --- | --- | -| `connect` | `(context: XRContext) => () => void` | Hands `createXR` the renderer `gl` and the per-frame `render` (an `XRContext` — `Pick`), and returns a cleanup that detaches them. `` is the usual wiring — it passes the scene's `Context` for you — but `connect` isn't tied to ``; any `{ gl, render }` works. | -| `enter` | `(mode, sessionInit?) => Promise` | Requests a session and enters it. `mode` is `"immersive-vr"`, `"immersive-ar"`, or `"inline"`; `sessionInit` passes straight to `navigator.xr.requestSession`. Call it directly from a click handler, without `await`ing first (see the example). You may instead pass an `XRSession` you already created, to skip the request and just wire it. | -| `exit` | `() => Promise` | Ends the active session. | -| `isPresenting` | `() => boolean` | Reactive — `true` while a session is presenting. | -| `session` | `() => XRSession \| undefined` | Reactive — the active session, or `undefined`. | -| `isSupported` | `(mode: XRSessionMode) => Promise` | Whether the device supports a session mode. Use it to decide whether to show the button. | +| Property | Type | Description | +| -------------- | -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `connect` | `(context: XRContext) => () => void` | Hands `createXR` the renderer `gl` and the per-frame `render` (an `XRContext` — `Pick`), and returns a cleanup that detaches them. `` is the usual wiring — it passes the scene's `Context` for you — but `connect` isn't tied to ``; any `{ gl, render }` works. | +| `enter` | `(mode, sessionInit?) => Promise` | Requests a session and enters it. `mode` is `"immersive-vr"`, `"immersive-ar"`, or `"inline"`; `sessionInit` passes straight to `navigator.xr.requestSession`. Call it directly from a click handler, without `await`ing first (see the example). You may instead pass an `XRSession` you already created, to skip the request and just wire it. | +| `exit` | `() => Promise` | Ends the active session. | +| `isPresenting` | `() => boolean` | Reactive — `true` while a session is presenting. | +| `session` | `() => XRSession \| undefined` | Reactive — the active session, or `undefined`. | +| `isSupported` | `(mode: XRSessionMode) => Promise` | Whether the device supports a session mode. Use it to decide whether to show the button. | ## Examples diff --git a/site/src/routes/api/hooks/use-frame.mdx b/site/src/routes/api/hooks/use-frame.mdx index c64c8a5e..4652f130 100644 --- a/site/src/routes/api/hooks/use-frame.mdx +++ b/site/src/routes/api/hooks/use-frame.mdx @@ -19,10 +19,10 @@ Register a callback and get back a cleanup that unregisters it. ## Parameters -| Parameter | Type | Description | -| --- | --- | --- | -| `callback` | `(context: Context, delta: number, frame?: XRFrame) => void` | Runs each frame. `context` is the [three.js context](/api/hooks/use-three), `delta` is seconds since the last frame, and `frame` is the `XRFrame` during WebXR sessions. | -| `options` *(optional)* | `{ priority?: number; stage?: "before" \| "after" }` | `priority` orders callbacks — lower runs first (default `0`). `stage` runs the callback `"before"` (default) or `"after"` the render. | +| Parameter | Type | Description | +| ---------------------- | ------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `callback` | `(context: Context, delta: number, frame?: XRFrame) => void` | Runs each frame. `context` is the [three.js context](/api/hooks/use-three), `delta` is seconds since the last frame, and `frame` is the `XRFrame` during WebXR sessions. | +| `options` _(optional)_ | `{ priority?: number; stage?: "before" \| "after" }` | `priority` orders callbacks — lower runs first (default `0`). `stage` runs the callback `"before"` (default) or `"after"` the render. | ## Returns diff --git a/site/src/routes/api/hooks/use-loader.mdx b/site/src/routes/api/hooks/use-loader.mdx index be161cad..5f4f49fa 100644 --- a/site/src/routes/api/hooks/use-loader.mdx +++ b/site/src/routes/api/hooks/use-loader.mdx @@ -20,29 +20,26 @@ Pass a loader class and what to load; you get back a Solid `Resource`. Call it t ## Parameters -| Parameter | Type | Description | -| --- | --- | --- | -| `constructor` | `Constructor` (or an accessor) | The loader class — `TextureLoader`, `GLTFLoader`, … | -| `url` | `string \| string[] \| Record` (or an accessor) | What to load. A record or array loads several at once and preserves its keys. An accessor reloads when its value changes. | -| `options` *(optional)* | `UseLoaderOptions` | See [Options](#options). | +| Parameter | Type | Description | +| ---------------------- | --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | +| `constructor` | `Constructor` (or an accessor) | The loader class — `TextureLoader`, `GLTFLoader`, … | +| `url` | `string \| string[] \| Record` (or an accessor) | What to load. A record or array loads several at once and preserves its keys. An accessor reloads when its value changes. | +| `options` _(optional)_ | `UseLoaderOptions` | See [Options](#options). | ## Options -| Option | Type | Description | -| --- | --- | --- | -| `base` | `string` | Base URL for resolving relative paths. | -| `cache` | `boolean \| LoaderRegistry` | How this call caches. See [Caching](#caching). | +| Option | Type | Description | +| -------------- | --------------------------- | ----------------------------------------------------------- | +| `base` | `string` | Base URL for resolving relative paths. | +| `cache` | `boolean \| LoaderRegistry` | How this call caches. See [Caching](#caching). | | `onBeforeLoad` | `(loader: TLoader) => void` | Runs before loading starts — e.g. to set loader properties. | -| `onLoad` | `(resource) => void` | Runs after the resource loads successfully. | +| `onLoad` | `(resource) => void` | Runs after the resource loads successfully. |
Exact type ```tsx -interface UseLoaderOptions< - TLoader extends Loader, - TInput extends LoadInput, -> { +interface UseLoaderOptions, TInput extends LoadInput> { base?: string cache?: boolean | LoaderRegistry onBeforeLoad?(loader: TLoader): void @@ -56,11 +53,11 @@ interface UseLoaderOptions< By default every resource is stored in a shared global cache, so loading the same URL twice returns the same resource. Control it per call with the `cache` option, or swap the global cache out entirely: -| You want | Do this | -| --- | --- | -| The default global cache | omit `cache`, or pass `cache: true` | -| A custom cache for this call | `cache: myRegistry` — a [`LoaderRegistry`](#custom-cache) | -| No caching for this call | `cache: false` | +| You want | Do this | +| -------------------------------------- | ------------------------------------------------------------------------------ | +| The default global cache | omit `cache`, or pass `cache: true` | +| A custom cache for this call | `cache: myRegistry` — a [`LoaderRegistry`](#custom-cache) | +| No caching for this call | `cache: false` | | To replace the global cache everywhere | set `useLoader.cache = myRegistry`, or `undefined` to disable caching globally | ## Examples diff --git a/site/src/routes/api/hooks/use-props.mdx b/site/src/routes/api/hooks/use-props.mdx index 5bb9d3f3..48402570 100644 --- a/site/src/routes/api/hooks/use-props.mdx +++ b/site/src/routes/api/hooks/use-props.mdx @@ -22,11 +22,11 @@ Hand it a target object (or an accessor that returns one) and the props to apply ## Parameters -| Parameter | Type | Description | -| --- | --- | --- | -| `accessor` | `T \| undefined \| Accessor` | The target `three.js` object, an accessor that returns it, or `undefined`. Application waits until the value is non-`undefined`. | -| `props` | `object` | The props to apply — including `ref`, `args`, `attach`, `children`, and any `three.js` properties. | -| `context` *(optional)* | `Pick` | The context slice `useProps` reads from. Defaults to [`useThree()`](/api/hooks/use-three). Pass it explicitly when calling outside a [``](/api/components/canvas) — in tests, or a custom renderer host. | +| Parameter | Type | Description | +| ---------------------- | --------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `accessor` | `T \| undefined \| Accessor` | The target `three.js` object, an accessor that returns it, or `undefined`. Application waits until the value is non-`undefined`. | +| `props` | `object` | The props to apply — including `ref`, `args`, `attach`, `children`, and any `three.js` properties. | +| `context` _(optional)_ | `Pick` | The context slice `useProps` reads from. Defaults to [`useThree()`](/api/hooks/use-three). Pass it explicitly when calling outside a [``](/api/components/canvas) — in tests, or a custom renderer host. | ## Usage @@ -71,28 +71,28 @@ The one exception is [`args`](#args), which rebuilds the object instead of mutat Each prop is matched against the cases below, in order; the first that fits wins. The point is that you pass the most natural value and `solid-three` translates it into the call three expects. -| You pass | Example | What happens | -| --- | --- | --- | -| `undefined` | `color={undefined}` | Skipped — `undefined` never overwrites the current value. | -| A CSS color string or hex number | `color="red"`, `color={0xff8800}` | `target.color.set(value)`. | -| An array | `position={[1, 0, 0]}` | `target.position.fromArray(value)` (or `.set(...value)` when the field has no `fromArray`). | -| A single number, on a field with `setScalar` | `scale={2}` | `target.scale.setScalar(2)` — the same value on every axis. | -| An instance matching the field's type | `quaternion={new Quaternion()}` | Copied in place with `.copy(value)`. | -| An event handler | `onClick={…}` | Registered on the [event system](/api/events/overview) (`Object3D` instances only). | -| Anything else | `visible={false}`, `castShadow` | Assigned directly: `target[key] = value`. | +| You pass | Example | What happens | +| -------------------------------------------- | --------------------------------- | ------------------------------------------------------------------------------------------- | +| `undefined` | `color={undefined}` | Skipped — `undefined` never overwrites the current value. | +| A CSS color string or hex number | `color="red"`, `color={0xff8800}` | `target.color.set(value)`. | +| An array | `position={[1, 0, 0]}` | `target.position.fromArray(value)` (or `.set(...value)` when the field has no `fromArray`). | +| A single number, on a field with `setScalar` | `scale={2}` | `target.scale.setScalar(2)` — the same value on every axis. | +| An instance matching the field's type | `quaternion={new Quaternion()}` | Copied in place with `.copy(value)`. | +| An event handler | `onClick={…}` | Registered on the [event system](/api/events/overview) (`Object3D` instances only). | +| Anything else | `visible={false}`, `castShadow` | Assigned directly: `target[key] = value`. | In practice, one element mixes several of these: ```tsx ``` @@ -116,7 +116,7 @@ When both a parent and a child of the same path are present — `position={[0, 0 ## `args` -`args` is spread into the object's constructor: `new BoxGeometry(...args)`. It is not a runtime property — it decides how the object is *built*. Changing it therefore **rebuilds the object**: the old one is disposed and a new one mounts in its place. This is what you want for constructor-only parameters like geometry dimensions. +`args` is spread into the object's constructor: `new BoxGeometry(...args)`. It is not a runtime property — it decides how the object is _built_. Changing it therefore **rebuilds the object**: the old one is disposed and a new one mounts in its place. This is what you want for constructor-only parameters like geometry dimensions. ```tsx const [size, setSize] = createSignal(1) @@ -134,12 +134,12 @@ For anything with a runtime setter, use a normal prop — it mutates in place in By default `solid-three` decides where a child belongs: -| Child type | Attaches to | -| --- | --- | -| `Material` | `parent.material` | -| `BufferGeometry` | `parent.geometry` | -| `Fog` | `parent.scene.fog` | -| `Object3D` | `parent.children` | +| Child type | Attaches to | +| ---------------- | ------------------ | +| `Material` | `parent.material` | +| `BufferGeometry` | `parent.geometry` | +| `Fog` | `parent.scene.fog` | +| `Object3D` | `parent.children` | Set `attach` explicitly when the default isn't what you want — for example, routing textures into a material's map slots: diff --git a/site/src/routes/api/hooks/use-three.mdx b/site/src/routes/api/hooks/use-three.mdx index 4e3f5ea8..1d70a2a4 100644 --- a/site/src/routes/api/hooks/use-three.mdx +++ b/site/src/routes/api/hooks/use-three.mdx @@ -25,22 +25,22 @@ const camera = useThree(context => context.camera) ## Returns -| Property | Type | Description | -| --- | --- | --- | -| `bounds` | `Measure` | Reactive canvas bounds measurement. | -| `viewport` | `Viewport` | Viewport measurements — `width`, `height`, `top`, `left`, plus `factor`, `distance`, and `aspect`. | -| `camera` | `CameraKind` | The current camera (`PerspectiveCamera \| OrthographicCamera`). | -| `setCamera` | `(camera: CameraKind) => () => void` | Push a camera onto the stack, making it active. Returns a cleanup that pops it. Accepts only a `PerspectiveCamera` or `OrthographicCamera`. | -| `canvas` | `HTMLCanvasElement` | The canvas DOM element. | -| `clock` | `Clock` | The three.js clock, for timing. | -| `dpr` | `number` | Device pixel ratio of the active renderer. Falls back to `1` for renderers without `getPixelRatio` (e.g. `CSS3DRenderer`, `SVGRenderer`). | -| `gl` | `Meta` | The active renderer, wrapped with [`meta`](/api/utilities/metadata) so you can read solid-three metadata via `getMeta(three.gl)`. Narrow it project-wide with [Register augmentation](/api/components/canvas#narrowing-the-renderer-type-project-wide). | -| `raycaster` | `Raycaster \| EventRaycaster` | The current raycaster used for pointer events. | -| `setRaycaster` | `(raycaster: Raycaster) => () => void` | Push a raycaster onto the stack. Returns a cleanup that pops it. | -| `render` | `(timestamp: number, frame?: XRFrame) => void` | Render one frame now. Pass a timestamp (e.g. `performance.now()`); the optional `XRFrame` is forwarded to [`useFrame`](/api/hooks/use-frame) callbacks. This is the per-frame primitive you hand to `gl.setAnimationLoop` when driving a WebXR session. | -| `requestRender` | `() => void` | Request a render on the next frame. Skipped while an XR session is presenting (the session owns the loop). | -| `scene` | `Meta` | The root scene, wrapped with [`meta`](/api/utilities/metadata). | -| `props` | `CanvasProps` | The props the host [``](/api/components/canvas) was rendered with. | +| Property | Type | Description | +| --------------- | ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `bounds` | `Measure` | Reactive canvas bounds measurement. | +| `viewport` | `Viewport` | Viewport measurements — `width`, `height`, `top`, `left`, plus `factor`, `distance`, and `aspect`. | +| `camera` | `CameraKind` | The current camera (`PerspectiveCamera \| OrthographicCamera`). | +| `setCamera` | `(camera: CameraKind) => () => void` | Push a camera onto the stack, making it active. Returns a cleanup that pops it. Accepts only a `PerspectiveCamera` or `OrthographicCamera`. | +| `canvas` | `HTMLCanvasElement` | The canvas DOM element. | +| `clock` | `Clock` | The three.js clock, for timing. | +| `dpr` | `number` | Device pixel ratio of the active renderer. Falls back to `1` for renderers without `getPixelRatio` (e.g. `CSS3DRenderer`, `SVGRenderer`). | +| `gl` | `Meta` | The active renderer, wrapped with [`meta`](/api/utilities/metadata) so you can read solid-three metadata via `getMeta(three.gl)`. Narrow it project-wide with [Register augmentation](/api/components/canvas#narrowing-the-renderer-type-project-wide). | +| `raycaster` | `Raycaster \| EventRaycaster` | The current raycaster used for pointer events. | +| `setRaycaster` | `(raycaster: Raycaster) => () => void` | Push a raycaster onto the stack. Returns a cleanup that pops it. | +| `render` | `(timestamp: number, frame?: XRFrame) => void` | Render one frame now. Pass a timestamp (e.g. `performance.now()`); the optional `XRFrame` is forwarded to [`useFrame`](/api/hooks/use-frame) callbacks. This is the per-frame primitive you hand to `gl.setAnimationLoop` when driving a WebXR session. | +| `requestRender` | `() => void` | Request a render on the next frame. Skipped while an XR session is presenting (the session owns the loop). | +| `scene` | `Meta` | The root scene, wrapped with [`meta`](/api/utilities/metadata). | +| `props` | `CanvasProps` | The props the host [``](/api/components/canvas) was rendered with. | ## Behavior diff --git a/site/src/routes/api/types.mdx b/site/src/routes/api/types.mdx index 82cc3fe6..9c28dbb8 100644 --- a/site/src/routes/api/types.mdx +++ b/site/src/routes/api/types.mdx @@ -26,7 +26,7 @@ The namespace is the re-export of [`src/types.ts`](https://github.com/bigmistqke - **Loaders** — `LoaderData`, `LoaderUrl` - **Utility helpers** — `AccessorMaybe`, `PromiseMaybe`, `Constructor`, `InstanceOf`, `Overwrite`, `Prettify`, `ConstructorOverloadParameters` -The same names are also reachable as named imports, e.g. `import type { Context, Props } from "solid-three"` — but the namespace form is what the examples in these docs use. A few of the most commonly needed ones — `Register` (augmentable via `declare module "solid-three"`), `Renderer`, and `ResolvedRenderer` — are re-exported at the top level too. +The same names are also reachable as named imports, e.g. `import type { Context, Props } from "solid-three"` — but the namespace form is what the examples in these docs use. A few of the most commonly needed ones — `Register` (augmentable via `declare module "solid-three"`), `SupportedRenderer`, and `ResolvedRenderer` — are re-exported at the top level too. ## All top-level exports @@ -34,34 +34,34 @@ Everything importable from `solid-three`, and where each is documented. **Components** -| Export | What it is | -| --- | --- | -| [`Canvas`, `CanvasProps`](/api/components/canvas) | Root component that mounts the renderer | -| [`Entity`, `createEntity`](/api/components/entity) | Wrap any `three.js` class as a component | -| [`createT`](/api/components/t) | Build a pre-typed `T.*` component namespace | -| [`Portal`](/api/components/portal) | Render a subtree under a different object | -| [`Resource`](/api/components/resource) | Suspense-aware async object loading | +| Export | What it is | +| -------------------------------------------------- | ------------------------------------------- | +| [`Canvas`, `CanvasProps`](/api/components/canvas) | Root component that mounts the renderer | +| [`Entity`, `createEntity`](/api/components/entity) | Wrap any `three.js` class as a component | +| [`createT`](/api/components/t) | Build a pre-typed `T.*` component namespace | +| [`Portal`](/api/components/portal) | Render a subtree under a different object | +| [`Resource`](/api/components/resource) | Suspense-aware async object loading | **Hooks** -| Export | What it is | -| --- | --- | -| [`useThree`](/api/hooks/use-three) | Read the renderer context | -| [`useFrame`](/api/hooks/use-frame) | Run a callback on every frame | -| [`useLoader`, `load`](/api/hooks/use-loader) | Load assets through cached loaders | -| [`useProps`](/api/hooks/use-props) | Apply `solid-three` props to an object | +| Export | What it is | +| -------------------------------------------- | -------------------------------------- | +| [`useThree`](/api/hooks/use-three) | Read the renderer context | +| [`useFrame`](/api/hooks/use-frame) | Run a callback on every frame | +| [`useLoader`, `load`](/api/hooks/use-loader) | Load assets through cached loaders | +| [`useProps`](/api/hooks/use-props) | Apply `solid-three` props to an object | **Utilities** -| Export | What it is | -| --- | --- | -| [`EventRaycaster`, `CursorRaycaster`, `CenterRaycaster`](/api/utilities/raycasters) | Pointer-event raycasting strategies | -| [`autodispose`](/api/utilities/autodispose) | Tie an object's lifetime to its component | -| [`meta`, `getMeta`, `hasMeta`, `$S3C`](/api/utilities/metadata) | Read and write per-object metadata | +| Export | What it is | +| ----------------------------------------------------------------------------------- | ----------------------------------------- | +| [`EventRaycaster`, `CursorRaycaster`, `CenterRaycaster`](/api/utilities/raycasters) | Pointer-event raycasting strategies | +| [`autodispose`](/api/utilities/autodispose) | Tie an object's lifetime to its component | +| [`meta`, `getMeta`, `hasMeta`, `$S3C`](/api/utilities/metadata) | Read and write per-object metadata | **Types** -| Export | What it is | -| --- | --- | -| `S3` | Namespace of every public type (above) | +| Export | What it is | +| ------------------------------------------ | --------------------------------------------- | +| `S3` | Namespace of every public type (above) | | `Register`, `Renderer`, `ResolvedRenderer` | Renderer typings, re-exported for convenience | diff --git a/site/src/routes/api/utilities/loader-cache.mdx b/site/src/routes/api/utilities/loader-cache.mdx index 0f914799..e8b972e4 100644 --- a/site/src/routes/api/utilities/loader-cache.mdx +++ b/site/src/routes/api/utilities/loader-cache.mdx @@ -13,11 +13,11 @@ title: LoaderCache ## Disposal methods -| Method | Description | -| --- | --- | -| `dispose(loader, path)` | Dispose one resource, by loader and path. | -| `disposeResource(resource)` | Dispose one resource, passed directly. | -| `disposeFreeList()` | Dispose every resource that currently has no references. | +| Method | Description | +| --------------------------- | -------------------------------------------------------- | +| `dispose(loader, path)` | Dispose one resource, by loader and path. | +| `disposeResource(resource)` | Dispose one resource, passed directly. | +| `disposeFreeList()` | Dispose every resource that currently has no references. | ## Example diff --git a/site/src/routes/api/utilities/plugin.mdx b/site/src/routes/api/utilities/plugin.mdx index 85142b44..a319466d 100644 --- a/site/src/routes/api/utilities/plugin.mdx +++ b/site/src/routes/api/utilities/plugin.mdx @@ -21,7 +21,10 @@ plugin(element => ({ ping: () => {} })) plugin([Mesh], mesh => ({ shake: (intensity: number) => {} })) // 3. Type-guard — elements that pass the guard. -plugin((element): element is Mesh => element instanceof Mesh, mesh => ({ setColor: (hex: string) => {} })) +plugin( + (element): element is Mesh => element instanceof Mesh, + mesh => ({ setColor: (hex: string) => {} }), +) ``` The factory receives the matched element and returns an object of methods. A non-matching element contributes nothing. A method's **first parameter type becomes the prop's type** — `shake: (intensity: number) => …` makes `shake` a `number` prop. @@ -63,7 +66,11 @@ import { Mesh } from "three" import { Entity, plugin } from "solid-three" const App = () => ( - ({ shake: (i: number) => {} }))]} shake={0.2} /> + ({ shake: (i: number) => {} }))]} + shake={0.2} + /> ) ``` diff --git a/site/src/routes/api/utilities/raycasters.mdx b/site/src/routes/api/utilities/raycasters.mdx index af4ec36a..34f03176 100644 --- a/site/src/routes/api/utilities/raycasters.mdx +++ b/site/src/routes/api/utilities/raycasters.mdx @@ -6,8 +6,8 @@ title: Raycasters `solid-three` ships custom raycasters that decide how a pointer becomes a ray. They all extend `THREE.Raycaster` and implement `EventRaycaster`, which adds one method: -| Method | Description | -| --- | --- | +| Method | Description | +| ------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | | `cast(registry, context)` | Aim the ray for the current pointer, then return its hits against `registry` and its descendants (honoring `raycastable !== false`), nearest-first. | The pointer system calls `cast()` on every event. How the ray is aimed is the raycaster's own business — from the camera and a cursor position for screen pointers, or from an object's world transform for an XR controller. diff --git a/site/src/routes/tour/02-props-and-children.mdx b/site/src/routes/tour/02-props-and-children.mdx index 7b64a28f..bfceba3b 100644 --- a/site/src/routes/tour/02-props-and-children.mdx +++ b/site/src/routes/tour/02-props-and-children.mdx @@ -28,13 +28,13 @@ reads `hot()` re-runs, and all it does is hand a new value to `material.color.set(...)`. The mesh stays mounted, the canvas keeps the same renderer, nothing else moves. -That's the through-line. The rest of this chapter is just *what props -you can pass*. +That's the through-line. The rest of this chapter is just _what props +you can pass_. ## Transforms A `three.js` scene is a tree. Every object has a parent and a (possibly -empty) list of children — in `solid-three`, that tree *is* your JSX. +empty) list of children — in `solid-three`, that tree _is_ your JSX. Nest one element inside another and you've made a parent-child relationship in the scene. @@ -63,7 +63,7 @@ The rotation applies to the group's frame, so both cubes tilt together from the camera. Rotate the group instead of the cubes any time you want the -*arrangement* to move, not just the individual shapes. Almost every +_arrangement_ to move, not just the individual shapes. Almost every scene you'll build is some tree of groups holding meshes. ## Constructor arguments: `args` diff --git a/site/src/routes/tour/03-control-flow.mdx b/site/src/routes/tour/03-control-flow.mdx index b92f27e3..f77692c6 100644 --- a/site/src/routes/tour/03-control-flow.mdx +++ b/site/src/routes/tour/03-control-flow.mdx @@ -26,7 +26,7 @@ The conditional. Mount and unmount children based on a signal. -When the signal flips, `` *mounts* and *unmounts* its children — +When the signal flips, `` _mounts_ and _unmounts_ its children — not just hides them. The cube's `BoxGeometry` and `MeshNormalMaterial` are constructed when it appears and disposed when it disappears (more on disposal later). @@ -59,7 +59,7 @@ no remount. ## `` ``'s positional cousin. Where `` tracks items by identity, -`` tracks *positions* — the item at slot 0 is always the same +`` tracks _positions_ — the item at slot 0 is always the same component, even if the value changes. Good for fixed-shape lists like a row of slots. @@ -85,5 +85,5 @@ colour. ## What about clicking the cube itself? So far the triggers have been DOM buttons. But what if you wanted to -click the cube — the actual `` — and have *that* be the +click the cube — the actual `` — and have _that_ be the trigger? Same `onClick`, different target. That's the next chapter. diff --git a/site/src/routes/tour/04-pointer-events.mdx b/site/src/routes/tour/04-pointer-events.mdx index f0f05418..0e5b8737 100644 --- a/site/src/routes/tour/04-pointer-events.mdx +++ b/site/src/routes/tour/04-pointer-events.mdx @@ -43,7 +43,7 @@ flips; `scale` reads it; one property assignment runs. ## Clicking nothing -Sometimes the interesting event is when the user clicks but *doesn't* hit any +Sometimes the interesting event is when the user clicks but _doesn't_ hit any mesh — to deselect the current selection, dismiss a tooltip, that sort of thing. [``](/api/components/canvas) exposes `onClickMissed` for exactly that case: @@ -101,14 +101,14 @@ event-object shape and the complete handler list. ## Dragging -A click fires once. Hover fires as the ray crosses a mesh. A *drag* is +A click fires once. Hover fires as the ray crosses a mesh. A _drag_ is different: it needs every move to keep reaching the same object — even after the pointer slides off it. Left to the default, the moves would jump to whatever is under the pointer now, and the gesture would fall apart the moment your aim drifts. `setPointerCapture()` solves it. Call it from `onPointerDown` and that -pointer is *captured*: every following `onPointerMove` and `onPointerUp` +pointer is _captured_: every following `onPointerMove` and `onPointerUp` goes to this mesh — on the ray or off it — until you let go. diff --git a/site/src/routes/tour/05-use-frame.mdx b/site/src/routes/tour/05-use-frame.mdx index 2f30de33..5d4759d8 100644 --- a/site/src/routes/tour/05-use-frame.mdx +++ b/site/src/routes/tour/05-use-frame.mdx @@ -56,7 +56,7 @@ first within the same stage. The cube updates its position first (priority 0); the camera then reads -that *new* position and follows it (priority 1). Swap the priorities and +that _new_ position and follows it (priority 1). Swap the priorities and the camera will lag the cube by one frame. `useFrame` also accepts a `stage` option for running callbacks before @@ -64,5 +64,5 @@ or after the render pass, plus a couple of other knobs you'll rarely touch — see [`useFrame` in the API reference](/api/hooks/use-frame). The scenes so far have been hand-built — cubes, lights, geometry from -constructors. The next chapter brings in *outside* data: textures, +constructors. The next chapter brings in _outside_ data: textures, models, anything you load from a URL. diff --git a/site/src/routes/tour/06-loaders-and-resource.mdx b/site/src/routes/tour/06-loaders-and-resource.mdx index 432a51aa..29ce7b23 100644 --- a/site/src/routes/tour/06-loaders-and-resource.mdx +++ b/site/src/routes/tour/06-loaders-and-resource.mdx @@ -57,5 +57,5 @@ array/record URL shapes, error handling — see That's the everyday tree: components, props, signals, events, frames, loaders. The next chapter is a deliberate break from the mapping — a -way to send children somewhere *other* than where their JSX would +way to send children somewhere _other_ than where their JSX would suggest. diff --git a/site/src/routes/tour/07-portal.mdx b/site/src/routes/tour/07-portal.mdx index 6c36ab44..cc3193e8 100644 --- a/site/src/routes/tour/07-portal.mdx +++ b/site/src/routes/tour/07-portal.mdx @@ -11,14 +11,14 @@ import portalRenderTargetUrl from "../../snippets/07-portal-render-target.tsx?im So far the scene graph has been a faithful mirror of your JSX: nest `` inside `` and A becomes a child of B. `Portal` is the escape -hatch — it sends a component's children into *somewhere else* in the +hatch — it sends a component's children into _somewhere else_ in the scene graph, while keeping the JSX parent-child relationship for reactivity, ownership, and lifecycle. ## Escaping a parent's transform The simplest use: no `element` prop. `Portal` defaults to the canvas's -scene root, so the children render *as if* they were top-level — they +scene root, so the children render _as if_ they were top-level — they don't inherit any transform their JSX parent imposes. @@ -27,7 +27,7 @@ Click the button. The blue cube — a normal child of the group — slides with it. The red cube doesn't: it's portaled to the scene root, so the group's translation never touches it. Both cubes are still children of the group in JSX, sharing lifecycle, signals, refs, all of it — only -one of them *lives* there in the scene tree. +one of them _lives_ there in the scene tree. ## Rendering into a separate scene @@ -41,7 +41,7 @@ target's texture as a `map` on a material back in the main scene. -A cube whose faces are *each frame's render* of a spinning torus knot +A cube whose faces are _each frame's render_ of a spinning torus knot in a separate scene. The two pieces that make it work: - `` sends the knot into a diff --git a/site/src/routes/tour/09-plugins.mdx b/site/src/routes/tour/09-plugins.mdx index 9dbf9f6d..94a8fcdc 100644 --- a/site/src/routes/tour/09-plugins.mdx +++ b/site/src/routes/tour/09-plugins.mdx @@ -7,14 +7,14 @@ import lookAtUrl from "../../snippets/09-look-at.tsx?importChunkUrl" # Plugins -Every prop you've set so far has been just that — a *property*. `position`, +Every prop you've set so far has been just that — a _property_. `position`, `color`, `intensity`: solid-three takes the value and assigns it to the three.js object. That covers most of what a scene needs, but not all of it. -Some of the things you'd reach for aren't properties — they're *methods*. +Some of the things you'd reach for aren't properties — they're _methods_. three's `Object3D` has a `lookAt(target)` method that turns an object to face a point in space. You'd love to write `` -and have it just work. But it won't: props get *assigned*, so solid-three +and have it just work. But it won't: props get _assigned_, so solid-three would overwrite `mesh.lookAt` with your point and the method would be gone. Props set properties; they don't call methods. diff --git a/site/src/snippets/02-button-toggle.tsx b/site/src/snippets/02-button-toggle.tsx index 44ad91f2..bbeec918 100644 --- a/site/src/snippets/02-button-toggle.tsx +++ b/site/src/snippets/02-button-toggle.tsx @@ -29,7 +29,9 @@ export default () => { "border-radius": "6px", }} > -
App body has run: {setupRuns} time{setupRuns === 1 ? "" : "s"}
+
+ App body has run: {setupRuns} time{setupRuns === 1 ? "" : "s"} +