diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 1566107..8813480 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -18,13 +18,13 @@ jobs: cache: pnpm - run: pnpm install - - run: pnpm build - - run: cd build && zip -r svelte-devtools * + - run: cd workspace/extension && pnpm build + - run: cd workspace/extension/build && zip -r svelte-devtools * - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: name: extension-${{ github.sha }} - path: build/svelte-devtools.zip + path: workspace/extension/build/svelte-devtools.zip # publish: # runs-on: ubuntu-latest diff --git a/.gitignore b/.gitignore index 5a599fd..aaa9ce1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,5 @@ node_modules -/build .DS_Store .cache .env - -# generated files -static/courier.js diff --git a/README.md b/README.md index 932bb07..5edb425 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ After installing you will see a new tab in Developer Tools. This tab displays a The `svelte-devtools` extension requires your Svelte application to be compiled with the `dev` option set to `true`. If you're using [SvelteKit](https://kit.svelte.dev/), this is done automatically, outside of that you will need to set it manually. -This extension officially supports Svelte 4.0 and above. +This extension officially supports Svelte version `^4.0.0`. ## Development diff --git a/package.json b/package.json index d945580..c42e1ce 100644 --- a/package.json +++ b/package.json @@ -2,29 +2,20 @@ "private": true, "type": "module", "scripts": { - "dev": "pnpm run --parallel \"/dev:*/\"", - "dev:app": "vite build --watch", - "dev:scripts": "rollup -cw", - "build": "rollup -c && vite build", - "build:zip": "cd build && zip -r svelte-devtools.zip *", - "build:tar": "cd build && tar -czf svelte-devtools.tar.gz *", - "format": "prettier -w .", - "check": "pnpm run --parallel \"/check:*/\"", - "check:style": "prettier -c .", - "check:svelte": "svelte-check --tsconfig ./tsconfig.json" + "clean": "git add * && git clean -dfx -e node_modules", + "check": "pnpm --filter \"./workspace/*\" check", + "format": "pnpm --filter \"./workspace/*\" format" }, - "packageManager": "pnpm@8.14.3", + "packageManager": "pnpm@8.15.6", "devDependencies": { - "@sveltejs/vite-plugin-svelte": "^3.0.2", - "@types/chrome": "^0.0.260", - "@types/node": "^20.11.19", + "@sveltejs/vite-plugin-svelte": "^3.1.0", + "@types/node": "^20.12.7", "prettier": "^3.2.5", "prettier-plugin-sort-package-json": "^0.2.0", - "prettier-plugin-svelte": "^3.2.1", - "rollup": "^4.12.0", - "svelte": "^4.2.11", - "svelte-check": "^3.6.4", - "typescript": "^5.3.3", - "vite": "^5.1.4" + "prettier-plugin-svelte": "^3.2.3", + "svelte": "5.0.0-next.90", + "svelte-check": "^3.6.9", + "typescript": "^5.4.5", + "vite": "^5.2.9" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8f14987..0c13cae 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,53 +4,68 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -devDependencies: - '@sveltejs/vite-plugin-svelte': - specifier: ^3.0.2 - version: 3.0.2(svelte@4.2.11)(vite@5.1.4) - '@types/chrome': - specifier: ^0.0.260 - version: 0.0.260 - '@types/node': - specifier: ^20.11.19 - version: 20.11.19 - prettier: - specifier: ^3.2.5 - version: 3.2.5 - prettier-plugin-sort-package-json: - specifier: ^0.2.0 - version: 0.2.0(prettier@3.2.5) - prettier-plugin-svelte: - specifier: ^3.2.1 - version: 3.2.1(prettier@3.2.5)(svelte@4.2.11) - rollup: - specifier: ^4.12.0 - version: 4.12.0 - svelte: - specifier: ^4.2.11 - version: 4.2.11 - svelte-check: - specifier: ^3.6.4 - version: 3.6.4(svelte@4.2.11) - typescript: - specifier: ^5.3.3 - version: 5.3.3 - vite: - specifier: ^5.1.4 - version: 5.1.4(@types/node@20.11.19) +importers: + + .: + devDependencies: + '@sveltejs/vite-plugin-svelte': + specifier: ^3.1.0 + version: 3.1.0(svelte@5.0.0-next.90)(vite@5.2.9) + '@types/node': + specifier: ^20.12.7 + version: 20.12.7 + prettier: + specifier: ^3.2.5 + version: 3.2.5 + prettier-plugin-sort-package-json: + specifier: ^0.2.0 + version: 0.2.0(prettier@3.2.5) + prettier-plugin-svelte: + specifier: ^3.2.3 + version: 3.2.3(prettier@3.2.5)(svelte@5.0.0-next.90) + svelte: + specifier: 5.0.0-next.90 + version: 5.0.0-next.90 + svelte-check: + specifier: ^3.6.9 + version: 3.6.9(svelte@5.0.0-next.90) + typescript: + specifier: ^5.4.5 + version: 5.4.5 + vite: + specifier: ^5.2.9 + version: 5.2.9(@types/node@20.12.7) + + workspace/extension: + devDependencies: + '@types/chrome': + specifier: ^0.0.266 + version: 0.0.266 + rollup: + specifier: ^4.14.3 + version: 4.14.3 + + workspace/website: + devDependencies: + '@sveltejs/adapter-vercel': + specifier: ^5.3.0 + version: 5.3.0(@sveltejs/kit@2.5.6) + '@sveltejs/kit': + specifier: ^2.5.6 + version: 2.5.6(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@5.0.0-next.90)(vite@5.2.9) packages: - /@ampproject/remapping@2.2.1: - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + /@ampproject/remapping@2.3.0: + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.22 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 dev: true - /@esbuild/aix-ppc64@0.19.12: - resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} + /@esbuild/aix-ppc64@0.20.2: + resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} engines: {node: '>=12'} cpu: [ppc64] os: [aix] @@ -58,8 +73,8 @@ packages: dev: true optional: true - /@esbuild/android-arm64@0.19.12: - resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} + /@esbuild/android-arm64@0.20.2: + resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -67,8 +82,8 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.19.12: - resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} + /@esbuild/android-arm@0.20.2: + resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -76,8 +91,8 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.19.12: - resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} + /@esbuild/android-x64@0.20.2: + resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -85,8 +100,8 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.19.12: - resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} + /@esbuild/darwin-arm64@0.20.2: + resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -94,8 +109,8 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.19.12: - resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} + /@esbuild/darwin-x64@0.20.2: + resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -103,8 +118,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.19.12: - resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} + /@esbuild/freebsd-arm64@0.20.2: + resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -112,8 +127,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.19.12: - resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} + /@esbuild/freebsd-x64@0.20.2: + resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -121,8 +136,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.19.12: - resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} + /@esbuild/linux-arm64@0.20.2: + resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -130,8 +145,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.19.12: - resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} + /@esbuild/linux-arm@0.20.2: + resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -139,8 +154,8 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.19.12: - resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} + /@esbuild/linux-ia32@0.20.2: + resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -148,8 +163,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.19.12: - resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} + /@esbuild/linux-loong64@0.20.2: + resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -157,8 +172,8 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.19.12: - resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} + /@esbuild/linux-mips64el@0.20.2: + resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -166,8 +181,8 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.19.12: - resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} + /@esbuild/linux-ppc64@0.20.2: + resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -175,8 +190,8 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.19.12: - resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} + /@esbuild/linux-riscv64@0.20.2: + resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -184,8 +199,8 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.19.12: - resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} + /@esbuild/linux-s390x@0.20.2: + resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -193,8 +208,8 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.19.12: - resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} + /@esbuild/linux-x64@0.20.2: + resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -202,8 +217,8 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.19.12: - resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} + /@esbuild/netbsd-x64@0.20.2: + resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -211,8 +226,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.19.12: - resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} + /@esbuild/openbsd-x64@0.20.2: + resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -220,8 +235,8 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.19.12: - resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} + /@esbuild/sunos-x64@0.20.2: + resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -229,8 +244,8 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.19.12: - resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} + /@esbuild/win32-arm64@0.20.2: + resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -238,8 +253,8 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.19.12: - resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} + /@esbuild/win32-ia32@0.20.2: + resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -247,8 +262,8 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.19.12: - resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} + /@esbuild/win32-x64@0.20.2: + resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -256,13 +271,13 @@ packages: dev: true optional: true - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + /@jridgewell/gen-mapping@0.3.5: + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/set-array': 1.1.2 + '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.22 + '@jridgewell/trace-mapping': 0.3.25 dev: true /@jridgewell/resolve-uri@3.1.2: @@ -270,8 +285,8 @@ packages: engines: {node: '>=6.0.0'} dev: true - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + /@jridgewell/set-array@1.2.1: + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} dev: true @@ -279,13 +294,31 @@ packages: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} dev: true - /@jridgewell/trace-mapping@0.3.22: - resolution: {integrity: sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==} + /@jridgewell/trace-mapping@0.3.25: + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 dev: true + /@mapbox/node-pre-gyp@1.0.11: + resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} + hasBin: true + dependencies: + detect-libc: 2.0.3 + https-proxy-agent: 5.0.1 + make-dir: 3.1.0 + node-fetch: 2.7.0 + nopt: 5.0.0 + npmlog: 5.0.1 + rimraf: 3.0.2 + semver: 7.6.0 + tar: 6.2.1 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -307,159 +340,239 @@ packages: fastq: 1.17.1 dev: true - /@rollup/rollup-android-arm-eabi@4.12.0: - resolution: {integrity: sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w==} + /@polka/url@1.0.0-next.25: + resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==} + dev: true + + /@rollup/pluginutils@4.2.1: + resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} + engines: {node: '>= 8.0.0'} + dependencies: + estree-walker: 2.0.2 + picomatch: 2.3.1 + dev: true + + /@rollup/rollup-android-arm-eabi@4.14.3: + resolution: {integrity: sha512-X9alQ3XM6I9IlSlmC8ddAvMSyG1WuHk5oUnXGw+yUBs3BFoTizmG1La/Gr8fVJvDWAq+zlYTZ9DBgrlKRVY06g==} cpu: [arm] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-android-arm64@4.12.0: - resolution: {integrity: sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ==} + /@rollup/rollup-android-arm64@4.14.3: + resolution: {integrity: sha512-eQK5JIi+POhFpzk+LnjKIy4Ks+pwJ+NXmPxOCSvOKSNRPONzKuUvWE+P9JxGZVxrtzm6BAYMaL50FFuPe0oWMQ==} cpu: [arm64] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-arm64@4.12.0: - resolution: {integrity: sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ==} + /@rollup/rollup-darwin-arm64@4.14.3: + resolution: {integrity: sha512-Od4vE6f6CTT53yM1jgcLqNfItTsLt5zE46fdPaEmeFHvPs5SjZYlLpHrSiHEKR1+HdRfxuzXHjDOIxQyC3ptBA==} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-x64@4.12.0: - resolution: {integrity: sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg==} + /@rollup/rollup-darwin-x64@4.14.3: + resolution: {integrity: sha512-0IMAO21axJeNIrvS9lSe/PGthc8ZUS+zC53O0VhF5gMxfmcKAP4ESkKOCwEi6u2asUrt4mQv2rjY8QseIEb1aw==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm-gnueabihf@4.12.0: - resolution: {integrity: sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA==} + /@rollup/rollup-linux-arm-gnueabihf@4.14.3: + resolution: {integrity: sha512-ge2DC7tHRHa3caVEoSbPRJpq7azhG+xYsd6u2MEnJ6XzPSzQsTKyXvh6iWjXRf7Rt9ykIUWHtl0Uz3T6yXPpKw==} cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-gnu@4.12.0: - resolution: {integrity: sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA==} + /@rollup/rollup-linux-arm-musleabihf@4.14.3: + resolution: {integrity: sha512-ljcuiDI4V3ySuc7eSk4lQ9wU8J8r8KrOUvB2U+TtK0TiW6OFDmJ+DdIjjwZHIw9CNxzbmXY39wwpzYuFDwNXuw==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-gnu@4.14.3: + resolution: {integrity: sha512-Eci2us9VTHm1eSyn5/eEpaC7eP/mp5n46gTRB3Aar3BgSvDQGJZuicyq6TsH4HngNBgVqC5sDYxOzTExSU+NjA==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-musl@4.12.0: - resolution: {integrity: sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ==} + /@rollup/rollup-linux-arm64-musl@4.14.3: + resolution: {integrity: sha512-UrBoMLCq4E92/LCqlh+blpqMz5h1tJttPIniwUgOFJyjWI1qrtrDhhpHPuFxULlUmjFHfloWdixtDhSxJt5iKw==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-riscv64-gnu@4.12.0: - resolution: {integrity: sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw==} + /@rollup/rollup-linux-powerpc64le-gnu@4.14.3: + resolution: {integrity: sha512-5aRjvsS8q1nWN8AoRfrq5+9IflC3P1leMoy4r2WjXyFqf3qcqsxRCfxtZIV58tCxd+Yv7WELPcO9mY9aeQyAmw==} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-riscv64-gnu@4.14.3: + resolution: {integrity: sha512-sk/Qh1j2/RJSX7FhEpJn8n0ndxy/uf0kI/9Zc4b1ELhqULVdTfN6HL31CDaTChiBAOgLcsJ1sgVZjWv8XNEsAQ==} cpu: [riscv64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-gnu@4.12.0: - resolution: {integrity: sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA==} + /@rollup/rollup-linux-s390x-gnu@4.14.3: + resolution: {integrity: sha512-jOO/PEaDitOmY9TgkxF/TQIjXySQe5KVYB57H/8LRP/ux0ZoO8cSHCX17asMSv3ruwslXW/TLBcxyaUzGRHcqg==} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-gnu@4.14.3: + resolution: {integrity: sha512-8ybV4Xjy59xLMyWo3GCfEGqtKV5M5gCSrZlxkPGvEPCGDLNla7v48S662HSGwRd6/2cSneMQWiv+QzcttLrrOA==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-musl@4.12.0: - resolution: {integrity: sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw==} + /@rollup/rollup-linux-x64-musl@4.14.3: + resolution: {integrity: sha512-s+xf1I46trOY10OqAtZ5Rm6lzHre/UiLA1J2uOhCFXWkbZrJRkYBPO6FhvGfHmdtQ3Bx793MNa7LvoWFAm93bg==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-arm64-msvc@4.12.0: - resolution: {integrity: sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw==} + /@rollup/rollup-win32-arm64-msvc@4.14.3: + resolution: {integrity: sha512-+4h2WrGOYsOumDQ5S2sYNyhVfrue+9tc9XcLWLh+Kw3UOxAvrfOrSMFon60KspcDdytkNDh7K2Vs6eMaYImAZg==} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-ia32-msvc@4.12.0: - resolution: {integrity: sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA==} + /@rollup/rollup-win32-ia32-msvc@4.14.3: + resolution: {integrity: sha512-T1l7y/bCeL/kUwh9OD4PQT4aM7Bq43vX05htPJJ46RTI4r5KNt6qJRzAfNfM+OYMNEVBWQzR2Gyk+FXLZfogGw==} cpu: [ia32] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-x64-msvc@4.12.0: - resolution: {integrity: sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg==} + /@rollup/rollup-win32-x64-msvc@4.14.3: + resolution: {integrity: sha512-/BypzV0H1y1HzgYpxqRaXGBRqfodgoBBCcsrujT6QRcakDQdfU+Lq9PENPh5jB4I44YWq+0C2eHsHya+nZY1sA==} cpu: [x64] os: [win32] requiresBuild: true dev: true optional: true - /@sveltejs/vite-plugin-svelte-inspector@2.0.0(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.11)(vite@5.1.4): - resolution: {integrity: sha512-gjr9ZFg1BSlIpfZ4PRewigrvYmHWbDrq2uvvPB1AmTWKuM+dI1JXQSUu2pIrYLb/QncyiIGkFDFKTwJ0XqQZZg==} + /@sveltejs/adapter-vercel@5.3.0(@sveltejs/kit@2.5.6): + resolution: {integrity: sha512-JzTJVmAWmbyNe3pQU2l0M1ggt4FjIVnKHEQOrqW4XVxYtNGdq3znuMqFSdzsR+5LaIEFqZaLIpm82XZsZroBoQ==} + peerDependencies: + '@sveltejs/kit': ^2.4.0 + dependencies: + '@sveltejs/kit': 2.5.6(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@5.0.0-next.90)(vite@5.2.9) + '@vercel/nft': 0.26.4 + esbuild: 0.20.2 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@sveltejs/kit@2.5.6(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@5.0.0-next.90)(vite@5.2.9): + resolution: {integrity: sha512-AYb02Jm5MfNqJHc8zrj7ScQAFAKmTUCkpkfoi8EVaZZDdnjkvI7L2GtnTDhpiXSAZRVitZX4qm59sMS1FgL+lQ==} + engines: {node: '>=18.13'} + hasBin: true + requiresBuild: true + peerDependencies: + '@sveltejs/vite-plugin-svelte': ^3.0.0 + svelte: ^4.0.0 || ^5.0.0-next.0 + vite: ^5.0.3 + dependencies: + '@sveltejs/vite-plugin-svelte': 3.1.0(svelte@5.0.0-next.90)(vite@5.2.9) + '@types/cookie': 0.6.0 + cookie: 0.6.0 + devalue: 4.3.2 + esm-env: 1.0.0 + import-meta-resolve: 4.0.0 + kleur: 4.1.5 + magic-string: 0.30.9 + mrmime: 2.0.0 + sade: 1.8.1 + set-cookie-parser: 2.6.0 + sirv: 2.0.4 + svelte: 5.0.0-next.90 + tiny-glob: 0.2.9 + vite: 5.2.9(@types/node@20.12.7) + dev: true + + /@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@5.0.0-next.90)(vite@5.2.9): + resolution: {integrity: sha512-9QX28IymvBlSCqsCll5t0kQVxipsfhFFL+L2t3nTWfXnddYwxBuAEtTtlaVQpRz9c37BhJjltSeY4AJSC03SSg==} engines: {node: ^18.0.0 || >=20} peerDependencies: '@sveltejs/vite-plugin-svelte': ^3.0.0 svelte: ^4.0.0 || ^5.0.0-next.0 vite: ^5.0.0 dependencies: - '@sveltejs/vite-plugin-svelte': 3.0.2(svelte@4.2.11)(vite@5.1.4) + '@sveltejs/vite-plugin-svelte': 3.1.0(svelte@5.0.0-next.90)(vite@5.2.9) debug: 4.3.4 - svelte: 4.2.11 - vite: 5.1.4(@types/node@20.11.19) + svelte: 5.0.0-next.90 + vite: 5.2.9(@types/node@20.12.7) transitivePeerDependencies: - supports-color dev: true - /@sveltejs/vite-plugin-svelte@3.0.2(svelte@4.2.11)(vite@5.1.4): - resolution: {integrity: sha512-MpmF/cju2HqUls50WyTHQBZUV3ovV/Uk8k66AN2gwHogNAG8wnW8xtZDhzNBsFJJuvmq1qnzA5kE7YfMJNFv2Q==} + /@sveltejs/vite-plugin-svelte@3.1.0(svelte@5.0.0-next.90)(vite@5.2.9): + resolution: {integrity: sha512-sY6ncCvg+O3njnzbZexcVtUqOBE3iYmQPJ9y+yXSkOwG576QI/xJrBnQSRXFLGwJNBa0T78JEKg5cIR0WOAuUw==} engines: {node: ^18.0.0 || >=20} peerDependencies: svelte: ^4.0.0 || ^5.0.0-next.0 vite: ^5.0.0 dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 2.0.0(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.11)(vite@5.1.4) + '@sveltejs/vite-plugin-svelte-inspector': 2.1.0(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@5.0.0-next.90)(vite@5.2.9) debug: 4.3.4 deepmerge: 4.3.1 kleur: 4.1.5 - magic-string: 0.30.7 - svelte: 4.2.11 - svelte-hmr: 0.15.3(svelte@4.2.11) - vite: 5.1.4(@types/node@20.11.19) - vitefu: 0.2.5(vite@5.1.4) + magic-string: 0.30.9 + svelte: 5.0.0-next.90 + svelte-hmr: 0.16.0(svelte@5.0.0-next.90) + vite: 5.2.9(@types/node@20.12.7) + vitefu: 0.2.5(vite@5.2.9) transitivePeerDependencies: - supports-color dev: true - /@types/chrome@0.0.260: - resolution: {integrity: sha512-lX6QpgfsZRTDpNcCJ+3vzfFnFXq9bScFRTlfhbK5oecSAjamsno+ejFTCbNtc5O/TPnVK9Tja/PyecvWQe0F2w==} + /@types/chrome@0.0.266: + resolution: {integrity: sha512-QSQWJTL7NjZElvq/6/E5C1+pHgEP8UAJzwoz7M4vSJ7AECt6NNehJ+tU6snnvuTqZOBjFCivvitYo5+8tNPmhg==} dependencies: - '@types/filesystem': 0.0.35 + '@types/filesystem': 0.0.36 '@types/har-format': 1.2.15 dev: true + /@types/cookie@0.6.0: + resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} + dev: true + /@types/estree@1.0.5: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} dev: true - /@types/filesystem@0.0.35: - resolution: {integrity: sha512-1eKvCaIBdrD2mmMgy5dwh564rVvfEhZTWVQQGRNn0Nt4ZEnJ0C8oSUCzvMKRA4lGde5oEVo+q2MrTTbV/GHDCQ==} + /@types/filesystem@0.0.36: + resolution: {integrity: sha512-vPDXOZuannb9FZdxgHnqSwAG/jvdGM8Wq+6N4D/d80z+D4HWH+bItqsZaVRQykAn6WEVeEkLm2oQigyHtgb0RA==} dependencies: '@types/filewriter': 0.0.33 dev: true @@ -472,8 +585,8 @@ packages: resolution: {integrity: sha512-RpQH4rXLuvTXKR0zqHq3go0RVXYv/YVqv4TnPH95VbwUxZdQlK1EtcMvQvMpDngHbt13Csh9Z4qT9AbkiQH5BA==} dev: true - /@types/node@20.11.19: - resolution: {integrity: sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ==} + /@types/node@20.12.7: + resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==} dependencies: undici-types: 5.26.5 dev: true @@ -482,12 +595,68 @@ packages: resolution: {integrity: sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==} dev: true + /@vercel/nft@0.26.4: + resolution: {integrity: sha512-j4jCOOXke2t8cHZCIxu1dzKLHLcFmYzC3yqAK6MfZznOL1QIJKd0xcFsXK3zcqzU7ScsE2zWkiMMNHGMHgp+FA==} + engines: {node: '>=16'} + hasBin: true + dependencies: + '@mapbox/node-pre-gyp': 1.0.11 + '@rollup/pluginutils': 4.2.1 + acorn: 8.11.3 + acorn-import-attributes: 1.9.5(acorn@8.11.3) + async-sema: 3.1.1 + bindings: 1.5.0 + estree-walker: 2.0.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + micromatch: 4.0.5 + node-gyp-build: 4.8.0 + resolve-from: 5.0.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /abbrev@1.1.1: + resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + dev: true + + /acorn-import-attributes@1.9.5(acorn@8.11.3): + resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} + peerDependencies: + acorn: ^8 + dependencies: + acorn: 8.11.3 + dev: true + + /acorn-typescript@1.4.13(acorn@8.11.3): + resolution: {integrity: sha512-xsc9Xv0xlVfwp2o7sQ+GCQ1PgbkdcpWdTzrwXxO3xDMTAywVS3oXVOcOHuRjAPkS4P9b+yc/qNF15460v+jp4Q==} + peerDependencies: + acorn: '>=8.9.0' + dependencies: + acorn: 8.11.3 + dev: true + /acorn@8.11.3: resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} engines: {node: '>=0.4.0'} hasBin: true dev: true + /agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true + /anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} @@ -496,12 +665,28 @@ packages: picomatch: 2.3.1 dev: true + /aproba@2.0.0: + resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} + dev: true + + /are-we-there-yet@2.0.0: + resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} + engines: {node: '>=10'} + dependencies: + delegates: 1.0.0 + readable-stream: 3.6.2 + dev: true + /aria-query@5.3.0: resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} dependencies: dequal: 2.0.3 dev: true + /async-sema@3.1.1: + resolution: {integrity: sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==} + dev: true + /axobject-query@4.0.0: resolution: {integrity: sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==} dependencies: @@ -512,11 +697,17 @@ packages: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true - /binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + /binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} dev: true + /bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + dependencies: + file-uri-to-path: 1.0.0 + dev: true + /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: @@ -555,26 +746,27 @@ packages: fsevents: 2.3.3 dev: true - /code-red@1.0.4: - resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==} - dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - '@types/estree': 1.0.5 - acorn: 8.11.3 - estree-walker: 3.0.3 - periscopic: 3.1.0 + /chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + dev: true + + /color-support@1.1.3: + resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} + hasBin: true dev: true /concat-map@0.0.1: resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} dev: true - /css-tree@2.3.1: - resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} - dependencies: - mdn-data: 2.0.30 - source-map-js: 1.0.2 + /console-control-strings@1.1.0: + resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} + dev: true + + /cookie@0.6.0: + resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} + engines: {node: '>= 0.6'} dev: true /debug@4.3.4: @@ -594,6 +786,10 @@ packages: engines: {node: '>=0.10.0'} dev: true + /delegates@1.0.0: + resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + dev: true + /dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} @@ -604,47 +800,69 @@ packages: engines: {node: '>=8'} dev: true + /detect-libc@2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} + engines: {node: '>=8'} + dev: true + + /devalue@4.3.2: + resolution: {integrity: sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==} + dev: true + + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true + /es6-promise@3.3.1: resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} dev: true - /esbuild@0.19.12: - resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} + /esbuild@0.20.2: + resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/aix-ppc64': 0.19.12 - '@esbuild/android-arm': 0.19.12 - '@esbuild/android-arm64': 0.19.12 - '@esbuild/android-x64': 0.19.12 - '@esbuild/darwin-arm64': 0.19.12 - '@esbuild/darwin-x64': 0.19.12 - '@esbuild/freebsd-arm64': 0.19.12 - '@esbuild/freebsd-x64': 0.19.12 - '@esbuild/linux-arm': 0.19.12 - '@esbuild/linux-arm64': 0.19.12 - '@esbuild/linux-ia32': 0.19.12 - '@esbuild/linux-loong64': 0.19.12 - '@esbuild/linux-mips64el': 0.19.12 - '@esbuild/linux-ppc64': 0.19.12 - '@esbuild/linux-riscv64': 0.19.12 - '@esbuild/linux-s390x': 0.19.12 - '@esbuild/linux-x64': 0.19.12 - '@esbuild/netbsd-x64': 0.19.12 - '@esbuild/openbsd-x64': 0.19.12 - '@esbuild/sunos-x64': 0.19.12 - '@esbuild/win32-arm64': 0.19.12 - '@esbuild/win32-ia32': 0.19.12 - '@esbuild/win32-x64': 0.19.12 - dev: true - - /estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + '@esbuild/aix-ppc64': 0.20.2 + '@esbuild/android-arm': 0.20.2 + '@esbuild/android-arm64': 0.20.2 + '@esbuild/android-x64': 0.20.2 + '@esbuild/darwin-arm64': 0.20.2 + '@esbuild/darwin-x64': 0.20.2 + '@esbuild/freebsd-arm64': 0.20.2 + '@esbuild/freebsd-x64': 0.20.2 + '@esbuild/linux-arm': 0.20.2 + '@esbuild/linux-arm64': 0.20.2 + '@esbuild/linux-ia32': 0.20.2 + '@esbuild/linux-loong64': 0.20.2 + '@esbuild/linux-mips64el': 0.20.2 + '@esbuild/linux-ppc64': 0.20.2 + '@esbuild/linux-riscv64': 0.20.2 + '@esbuild/linux-s390x': 0.20.2 + '@esbuild/linux-x64': 0.20.2 + '@esbuild/netbsd-x64': 0.20.2 + '@esbuild/openbsd-x64': 0.20.2 + '@esbuild/sunos-x64': 0.20.2 + '@esbuild/win32-arm64': 0.20.2 + '@esbuild/win32-ia32': 0.20.2 + '@esbuild/win32-x64': 0.20.2 + dev: true + + /esm-env@1.0.0: + resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==} + dev: true + + /esrap@1.2.1: + resolution: {integrity: sha512-dhkcOLfN/aDdMFI1iwPEcy/XqAZzGNfgfEJjZozy2tia6u0dQoZyXzkRshHTckuNsM+c0CYQndY+uRFe3N+AIQ==} dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 '@types/estree': 1.0.5 dev: true + /estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + dev: true + /fast-glob@3.3.2: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} @@ -662,6 +880,10 @@ packages: reusify: 1.0.4 dev: true + /file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + dev: true + /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} @@ -669,6 +891,13 @@ packages: to-regex-range: 5.0.1 dev: true + /fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.3.6 + dev: true + /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true @@ -681,6 +910,21 @@ packages: dev: true optional: true + /gauge@3.0.2: + resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} + engines: {node: '>=10'} + dependencies: + aproba: 2.0.0 + color-support: 1.1.3 + console-control-strings: 1.1.0 + has-unicode: 2.0.1 + object-assign: 4.1.1 + signal-exit: 3.0.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wide-align: 1.1.5 + dev: true + /glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -699,10 +943,32 @@ packages: path-is-absolute: 1.0.1 dev: true + /globalyzer@0.1.0: + resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} + dev: true + + /globrex@0.1.2: + resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + dev: true + /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} dev: true + /has-unicode@2.0.1: + resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} + dev: true + + /https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + dependencies: + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + /import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} @@ -711,6 +977,10 @@ packages: resolve-from: 4.0.0 dev: true + /import-meta-resolve@4.0.0: + resolution: {integrity: sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==} + dev: true + /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} dependencies: @@ -726,7 +996,7 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} dependencies: - binary-extensions: 2.2.0 + binary-extensions: 2.3.0 dev: true /is-extglob@2.1.1: @@ -734,6 +1004,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: true + /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -761,15 +1036,25 @@ packages: resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} dev: true - /magic-string@0.30.7: - resolution: {integrity: sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==} + /lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + dev: true + + /magic-string@0.30.9: + resolution: {integrity: sha512-S1+hd+dIrC8EZqKyT9DstTH/0Z+f76kmmvZnkfQVmOpDEF9iVgdYif3Q/pIWHmCoo59bQVGW0kVL3e2nl+9+Sw==} engines: {node: '>=12'} dependencies: '@jridgewell/sourcemap-codec': 1.4.15 dev: true - /mdn-data@2.0.30: - resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + /make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + dependencies: + semver: 6.3.1 dev: true /merge2@1.4.1: @@ -800,6 +1085,26 @@ packages: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true + /minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + dependencies: + yallist: 4.0.0 + dev: true + + /minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + dev: true + + /minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.3.6 + yallist: 4.0.0 + dev: true + /mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true @@ -807,11 +1112,22 @@ packages: minimist: 1.2.8 dev: true + /mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + dev: true + /mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} dev: true + /mrmime@2.0.0: + resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} + engines: {node: '>=10'} + dev: true + /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: true @@ -822,11 +1138,50 @@ packages: hasBin: true dev: true + /node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + dev: true + + /node-gyp-build@4.8.0: + resolution: {integrity: sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==} + hasBin: true + dev: true + + /nopt@5.0.0: + resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} + engines: {node: '>=6'} + hasBin: true + dependencies: + abbrev: 1.1.1 + dev: true + /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} dev: true + /npmlog@5.0.1: + resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} + dependencies: + are-we-there-yet: 2.0.0 + console-control-strings: 1.1.0 + gauge: 3.0.2 + set-blocking: 2.0.0 + dev: true + + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: true + /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: @@ -845,14 +1200,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /periscopic@3.1.0: - resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} - dependencies: - '@types/estree': 1.0.5 - estree-walker: 3.0.3 - is-reference: 3.0.2 - dev: true - /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} dev: true @@ -862,13 +1209,13 @@ packages: engines: {node: '>=8.6'} dev: true - /postcss@8.4.35: - resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} + /postcss@8.4.38: + resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.7 picocolors: 1.0.0 - source-map-js: 1.0.2 + source-map-js: 1.2.0 dev: true /prettier-plugin-sort-package-json@0.2.0(prettier@3.2.5): @@ -879,14 +1226,14 @@ packages: prettier: 3.2.5 dev: true - /prettier-plugin-svelte@3.2.1(prettier@3.2.5)(svelte@4.2.11): - resolution: {integrity: sha512-ENAPbIxASf2R79IZwgkG5sBdeNA9kLRlXVvKKmTXh79zWTy0KKoT86XO2pHrTitUPINd+iXWy12MRmgzKGVckA==} + /prettier-plugin-svelte@3.2.3(prettier@3.2.5)(svelte@5.0.0-next.90): + resolution: {integrity: sha512-wJq8RunyFlWco6U0WJV5wNCM7zpBFakS76UBSbmzMGpncpK98NZABaE+s7n8/APDCEVNHXC5Mpq+MLebQtsRlg==} peerDependencies: prettier: ^3.0.0 svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0 dependencies: prettier: 3.2.5 - svelte: 4.2.11 + svelte: 5.0.0-next.90 dev: true /prettier@3.2.5: @@ -899,6 +1246,15 @@ packages: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: true + /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -911,6 +1267,11 @@ packages: engines: {node: '>=4'} dev: true + /resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + dev: true + /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -923,26 +1284,36 @@ packages: glob: 7.2.3 dev: true - /rollup@4.12.0: - resolution: {integrity: sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q==} + /rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.2.3 + dev: true + + /rollup@4.14.3: + resolution: {integrity: sha512-ag5tTQKYsj1bhrFC9+OEWqb5O6VYgtQDO9hPDBMmIbePwhfSr+ExlcU741t8Dhw5DkPCQf6noz0jb36D6W9/hw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true dependencies: '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.12.0 - '@rollup/rollup-android-arm64': 4.12.0 - '@rollup/rollup-darwin-arm64': 4.12.0 - '@rollup/rollup-darwin-x64': 4.12.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.12.0 - '@rollup/rollup-linux-arm64-gnu': 4.12.0 - '@rollup/rollup-linux-arm64-musl': 4.12.0 - '@rollup/rollup-linux-riscv64-gnu': 4.12.0 - '@rollup/rollup-linux-x64-gnu': 4.12.0 - '@rollup/rollup-linux-x64-musl': 4.12.0 - '@rollup/rollup-win32-arm64-msvc': 4.12.0 - '@rollup/rollup-win32-ia32-msvc': 4.12.0 - '@rollup/rollup-win32-x64-msvc': 4.12.0 + '@rollup/rollup-android-arm-eabi': 4.14.3 + '@rollup/rollup-android-arm64': 4.14.3 + '@rollup/rollup-darwin-arm64': 4.14.3 + '@rollup/rollup-darwin-x64': 4.14.3 + '@rollup/rollup-linux-arm-gnueabihf': 4.14.3 + '@rollup/rollup-linux-arm-musleabihf': 4.14.3 + '@rollup/rollup-linux-arm64-gnu': 4.14.3 + '@rollup/rollup-linux-arm64-musl': 4.14.3 + '@rollup/rollup-linux-powerpc64le-gnu': 4.14.3 + '@rollup/rollup-linux-riscv64-gnu': 4.14.3 + '@rollup/rollup-linux-s390x-gnu': 4.14.3 + '@rollup/rollup-linux-x64-gnu': 4.14.3 + '@rollup/rollup-linux-x64-musl': 4.14.3 + '@rollup/rollup-win32-arm64-msvc': 4.14.3 + '@rollup/rollup-win32-ia32-msvc': 4.14.3 + '@rollup/rollup-win32-x64-msvc': 4.14.3 fsevents: 2.3.3 dev: true @@ -959,6 +1330,10 @@ packages: mri: 1.2.0 dev: true + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: true + /sander@0.5.1: resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==} dependencies: @@ -968,6 +1343,40 @@ packages: rimraf: 2.7.1 dev: true + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + dev: true + + /semver@7.6.0: + resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + + /set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + dev: true + + /set-cookie-parser@2.6.0: + resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} + dev: true + + /signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: true + + /sirv@2.0.4: + resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} + engines: {node: '>= 10'} + dependencies: + '@polka/url': 1.0.0-next.25 + mrmime: 2.0.0 + totalist: 3.0.1 + dev: true + /sorcery@0.11.0: resolution: {integrity: sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==} hasBin: true @@ -978,11 +1387,33 @@ packages: sander: 0.5.1 dev: true - /source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + /source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} dev: true + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: true + + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + dev: true + /strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} @@ -990,21 +1421,21 @@ packages: min-indent: 1.0.1 dev: true - /svelte-check@3.6.4(svelte@4.2.11): - resolution: {integrity: sha512-mY/dqucqm46p72M8yZmn81WPZx9mN6uuw8UVfR3ZKQeLxQg5HDGO3HHm5AZuWZPYNMLJ+TRMn+TeN53HfQ/vsw==} + /svelte-check@3.6.9(svelte@5.0.0-next.90): + resolution: {integrity: sha512-hDQrk3L0osX07djQyMiXocKysTLfusqi8AriNcCiQxhQR49/LonYolcUGMtZ0fbUR8HTR198Prrgf52WWU9wEg==} hasBin: true peerDependencies: svelte: ^3.55.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0 dependencies: - '@jridgewell/trace-mapping': 0.3.22 + '@jridgewell/trace-mapping': 0.3.25 chokidar: 3.6.0 fast-glob: 3.3.2 import-fresh: 3.3.0 picocolors: 1.0.0 sade: 1.8.1 - svelte: 4.2.11 - svelte-preprocess: 5.1.3(svelte@4.2.11)(typescript@5.3.3) - typescript: 5.3.3 + svelte: 5.0.0-next.90 + svelte-preprocess: 5.1.4(svelte@5.0.0-next.90)(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - '@babel/core' - coffeescript @@ -1017,18 +1448,18 @@ packages: - sugarss dev: true - /svelte-hmr@0.15.3(svelte@4.2.11): - resolution: {integrity: sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==} + /svelte-hmr@0.16.0(svelte@5.0.0-next.90): + resolution: {integrity: sha512-Gyc7cOS3VJzLlfj7wKS0ZnzDVdv3Pn2IuVeJPk9m2skfhcu5bq3wtIZyQGggr7/Iim5rH5cncyQft/kRLupcnA==} engines: {node: ^12.20 || ^14.13.1 || >= 16} peerDependencies: svelte: ^3.19.0 || ^4.0.0 dependencies: - svelte: 4.2.11 + svelte: 5.0.0-next.90 dev: true - /svelte-preprocess@5.1.3(svelte@4.2.11)(typescript@5.3.3): - resolution: {integrity: sha512-xxAkmxGHT+J/GourS5mVJeOXZzne1FR5ljeOUAMXUkfEhkLEllRreXpbl3dIYJlcJRfL1LO1uIAPpBpBfiqGPw==} - engines: {node: '>= 16.0.0', pnpm: ^8.0.0} + /svelte-preprocess@5.1.4(svelte@5.0.0-next.90)(typescript@5.4.5): + resolution: {integrity: sha512-IvnbQ6D6Ao3Gg6ftiM5tdbR6aAETwjhHV+UKGf5bHGYR69RQvF1ho0JKPcbUON4vy4R7zom13jPjgdOWCQ5hDA==} + engines: {node: '>= 16.0.0'} requiresBuild: true peerDependencies: '@babel/core': ^7.10.2 @@ -1066,31 +1497,49 @@ packages: dependencies: '@types/pug': 2.0.10 detect-indent: 6.1.0 - magic-string: 0.30.7 + magic-string: 0.30.9 sorcery: 0.11.0 strip-indent: 3.0.0 - svelte: 4.2.11 - typescript: 5.3.3 + svelte: 5.0.0-next.90 + typescript: 5.4.5 dev: true - /svelte@4.2.11: - resolution: {integrity: sha512-YIQk3J4X89wOLhjsqIW8tqY3JHPuBdtdOIkASP2PZeAMcSW9RsIjQzMesCrxOF3gdWYC0mKknlKF7OqmLM+Zqg==} - engines: {node: '>=16'} + /svelte@5.0.0-next.90: + resolution: {integrity: sha512-qx5shVIRQ9b3VPgj/rim16dWi3md8B8HjHSO5p6RCSg/GP00f9CVUoUtnuCpT4f7ZnBJa/IG3v2rgW9Zn9zEqg==} + engines: {node: '>=18'} dependencies: - '@ampproject/remapping': 2.2.1 + '@ampproject/remapping': 2.3.0 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.22 '@types/estree': 1.0.5 acorn: 8.11.3 + acorn-typescript: 1.4.13(acorn@8.11.3) aria-query: 5.3.0 axobject-query: 4.0.0 - code-red: 1.0.4 - css-tree: 2.3.1 - estree-walker: 3.0.3 + esm-env: 1.0.0 + esrap: 1.2.1 is-reference: 3.0.2 locate-character: 3.0.0 - magic-string: 0.30.7 - periscopic: 3.1.0 + magic-string: 0.30.9 + zimmerframe: 1.1.2 + dev: true + + /tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + engines: {node: '>=10'} + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + dev: true + + /tiny-glob@0.2.9: + resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} + dependencies: + globalyzer: 0.1.0 + globrex: 0.1.2 dev: true /to-regex-range@5.0.1: @@ -1100,8 +1549,17 @@ packages: is-number: 7.0.0 dev: true - /typescript@5.3.3: - resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} + /totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + dev: true + + /tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + dev: true + + /typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} hasBin: true dev: true @@ -1110,8 +1568,12 @@ packages: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} dev: true - /vite@5.1.4(@types/node@20.11.19): - resolution: {integrity: sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg==} + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: true + + /vite@5.2.9(@types/node@20.12.7): + resolution: {integrity: sha512-uOQWfuZBlc6Y3W/DTuQ1Sr+oIXWvqljLvS881SVmAj00d5RdgShLcuXWxseWPd4HXwiYBFW/vXHfKFeqj9uQnw==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -1138,15 +1600,15 @@ packages: terser: optional: true dependencies: - '@types/node': 20.11.19 - esbuild: 0.19.12 - postcss: 8.4.35 - rollup: 4.12.0 + '@types/node': 20.12.7 + esbuild: 0.20.2 + postcss: 8.4.38 + rollup: 4.14.3 optionalDependencies: fsevents: 2.3.3 dev: true - /vitefu@0.2.5(vite@5.1.4): + /vitefu@0.2.5(vite@5.2.9): resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} peerDependencies: vite: ^3.0.0 || ^4.0.0 || ^5.0.0 @@ -1154,9 +1616,34 @@ packages: vite: optional: true dependencies: - vite: 5.1.4(@types/node@20.11.19) + vite: 5.2.9(@types/node@20.12.7) + dev: true + + /webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + dev: true + + /whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + dev: true + + /wide-align@1.1.5: + resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} + dependencies: + string-width: 4.2.3 dev: true /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true + + /yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: true + + /zimmerframe@1.1.2: + resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==} + dev: true diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..2c52ad5 --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +packages: + - 'workspace/*' diff --git a/src/client/index.js b/src/client/index.js deleted file mode 100644 index 9f7f069..0000000 --- a/src/client/index.js +++ /dev/null @@ -1,221 +0,0 @@ -import { highlight } from './highlight.js'; -import { addListener } from './listener.js'; -// import { profiler } from './profiler.js'; -import { getNode } from './svelte.js'; - -// @ts-ignore - possibly find an alternative -window.__svelte_devtools_inject_state = function (id, key, value) { - const { detail: component } = getNode(id) || {}; - component && component.$inject_state({ [key]: value }); -}; - -// @ts-ignore - possibly find an alternative -window.__svelte_devtools_select_element = function (element) { - const node = getNode(element); - if (node) send('inspect', { node: serialize(node) }); -}; - -const previous = { - /** @type {HTMLElement | null} */ - target: null, - style: { - cursor: '', - background: '', - outline: '', - }, - - clear() { - if (this.target) { - this.target.style.cursor = this.style.cursor; - this.target.style.background = this.style.background; - this.target.style.outline = this.style.outline; - } - this.target = null; - }, -}; - -const inspect = { - /** @param {MouseEvent} event */ - handle({ target }) { - const same = previous.target && previous.target === target; - const html = target instanceof HTMLElement; - if (same || !html) return; - - if (previous.target) previous.clear(); - previous.target = target; - previous.style = { - cursor: target.style.cursor, - background: target.style.background, - outline: target.style.outline, - }; - target.style.cursor = 'pointer'; - target.style.background = 'rgba(0, 136, 204, 0.2)'; - target.style.outline = '1px dashed rgb(0, 136, 204)'; - }, - /** @param {MouseEvent} event */ - click(event) { - event.preventDefault(); - document.removeEventListener('mousemove', inspect.handle, true); - const node = getNode(/** @type {Node} */ (event.target)); - if (node) send('bridge::ext/inspect', { node: serialize(node) }); - previous.clear(); - }, -}; - -window.addEventListener('message', ({ data, source }) => { - // only accept messages from our application or script - if (source !== window || data?.source !== 'svelte-devtools') return; - - if (data.type === 'bridge::ext/select') { - const node = getNode(data.payload); - // @ts-expect-error - saved for `devtools.inspect()` - if (node) window.$n = node.detail; - } else if (data.type === 'bridge::ext/highlight') { - const node = getNode(data.payload); - return highlight(node); - } else if (data.type === 'bridge::ext/inspect') { - switch (data.payload) { - case 'start': { - document.addEventListener('mousemove', inspect.handle, true); - document.addEventListener('click', inspect.click, { - capture: true, - once: true, - }); - break; - } - default: { - document.removeEventListener('mousemove', inspect.handle, true); - document.removeEventListener('click', inspect.click, true); - previous.clear(); - } - } - } -}); - -/** - * @param {unknown} value - * @returns {any} - */ -function clone(value, seen = new Map()) { - switch (typeof value) { - case 'function': - return { __is: 'function', source: value.toString(), name: value.name }; - case 'symbol': - return { __is: 'symbol', name: value.toString() }; - case 'object': { - if (value === window || value === null) return null; - if (Array.isArray(value)) return value.map((o) => clone(o, seen)); - if (seen.has(value)) return {}; - - /** @type {Record} */ - const o = {}; - seen.set(value, o); - for (const [key, v] of Object.entries(value)) { - o[key] = clone(v, seen); - } - return o; - } - default: - return value; - } -} - -/** @param {SvelteBlockDetail} node */ -function serialize(node) { - const res = /** @type {SvelteBlockDetail} */ ({ - id: node.id, - type: node.type, - tagName: node.tagName, - detail: {}, - }); - switch (node.type) { - case 'component': { - const { $$: internal = {} } = node.detail; - const ctx = clone(node.detail.$capture_state?.() || {}); - const bindings = Object.values(internal.bound || {}).map( - /** @param {Function} f */ (f) => f.name, - ); - const props = Object.keys(internal.props || {}).flatMap((key) => { - const value = ctx[key]; - delete ctx[key]; // deduplicate for ctx - if (value === undefined) return []; - - const bounded = bindings.some((f) => f.includes(key)); - return { key, value, bounded }; - }); - - res.detail = { - attributes: props, - listeners: Object.entries(internal.callbacks || {}).flatMap(([event, value]) => - value.map(/** @param {Function} f */ (f) => ({ event, handler: f.toString() })), - ), - ctx: Object.entries(ctx).map(([key, value]) => ({ key, value })), - }; - break; - } - - case 'element': { - /** @type {Attr[]} from {NamedNodeMap} */ - const attributes = Array.from(node.detail.attributes || []); - - /** @type {NonNullable} */ - const listeners = node.detail.__listeners || []; - - res.detail = { - attributes: attributes.map(({ name: key, value }) => ({ key, value })), - listeners: listeners.map((o) => ({ ...o, handler: o.handler.toString() })), - }; - break; - } - - case 'text': { - res.detail = { - nodeValue: node.detail.nodeValue, - }; - break; - } - - case 'iteration': - case 'block': { - const { ctx, source } = node.detail; - const cloned = Object.entries(clone(ctx)); - res.detail = { - ctx: cloned.map(([key, value]) => ({ key, value })), - source: source.slice(source.indexOf('{'), source.indexOf('}') + 1), - }; - break; - } - } - - return res; -} - -/** - * @param {string} type - * @param {Record} [payload] - */ -function send(type, payload) { - window.postMessage({ source: 'svelte-devtools', type, payload }); -} - -addListener({ - add(node, anchor) { - send('bridge::courier/node->add', { - node: serialize(node), - target: node.parent?.id ?? null, - anchor: anchor?.id ?? null, - }); - }, - - remove(node) { - send('bridge::courier/node->remove', { node: serialize(node) }); - }, - - update(node) { - send('bridge::courier/node->update', { node: serialize(node) }); - }, - - profile(/** frame */) { - // send('bridge::courier/profile->update', { frame }); - }, -}); diff --git a/src/client/listener.js b/src/client/listener.js deleted file mode 100644 index c8557ff..0000000 --- a/src/client/listener.js +++ /dev/null @@ -1,39 +0,0 @@ -export const listeners = { - /** - * @param {SvelteBlockDetail} node - * @param {SvelteBlockDetail} [anchor] - */ - add(node, anchor) { - nodes.forEach(({ add }) => add(node, anchor)); - }, - - /** @param {SvelteBlockDetail} node */ - update(node) { - node && nodes.forEach(({ update }) => update(node)); - }, - - /** @param {SvelteBlockDetail} node */ - remove(node) { - nodes.forEach(({ remove }) => remove(node)); - }, - - /** @param {any} frame */ - profile(frame) { - nodes.forEach(({ profile }) => profile(frame)); - }, -}; - -/** @type {typeof listeners[]} */ -const nodes = []; - -/** @param {typeof nodes[number]} listener */ -export function addListener(listener) { - nodes.push(listener); -} - -/** @param {typeof nodes[number]} listener */ -export function removeListener(listener) { - const index = nodes.indexOf(listener); - if (index === -1) return false; - return !!nodes.splice(index, 1); -} diff --git a/src/client/profiler.js b/src/client/profiler.js deleted file mode 100644 index 858311f..0000000 --- a/src/client/profiler.js +++ /dev/null @@ -1,57 +0,0 @@ -// import { listeners } from './listener.js'; - -let main = { - type: 'top', - start: -1, - end: -1, - children: /** @type {any[]} */ ([]), -}; -// let current = main; - -export const profiler = { - enabled: false, - - start() { - main = { - type: 'top', - start: performance.now(), - end: -1, - children: [], - }; - // current = main; - this.enabled = true; - }, - - stop() { - main.end = performance.now(); - this.enabled = false; - }, - - clear() { - main.children = []; - main.start = performance.now(); - }, - - // update(node, type, fn, ...args) { - // if (!this.enabled) return fn(...args); - - // const parentFrame = current; - // current = { - // type, - // node: node.id, - // start: performance.now(), - // children: [], - // }; - // parentFrame.children.push(current); - // fn(...args); - // current.end = performance.now(); - // current.duration = current.end - current.start; - // current = parentFrame; - - // if (current.type === 'top') { - // main.duration = main.children[main.children.length - 1].end - main.children[0].start; - // } - - // listeners.profile(main); - // }, -}; diff --git a/src/lib/components/Relative.svelte b/src/lib/components/Relative.svelte deleted file mode 100644 index 38bd0dc..0000000 --- a/src/lib/components/Relative.svelte +++ /dev/null @@ -1,12 +0,0 @@ -
- -
- - diff --git a/src/lib/nodes/Element.svelte b/src/lib/nodes/Element.svelte deleted file mode 100644 index 3c4c03e..0000000 --- a/src/lib/nodes/Element.svelte +++ /dev/null @@ -1,98 +0,0 @@ - - -{#if empty} -
- < - - - - -  /> -
-{:else} - - {#if expanded} - -
- </ - - - - > -
- {/if} -{/if} - - diff --git a/src/lib/nodes/Iteration.svelte b/src/lib/nodes/Iteration.svelte deleted file mode 100644 index d838ec8..0000000 --- a/src/lib/nodes/Iteration.svelte +++ /dev/null @@ -1,17 +0,0 @@ - - - - - -{#if expanded} - -{/if} diff --git a/src/lib/nodes/Slot.svelte b/src/lib/nodes/Slot.svelte deleted file mode 100644 index ff8073e..0000000 --- a/src/lib/nodes/Slot.svelte +++ /dev/null @@ -1,24 +0,0 @@ - - - - -{#if expanded} - - -
- `} color="#c586c0" /> -
-{/if} diff --git a/src/lib/panel/Editable.svelte b/src/lib/panel/Editable.svelte deleted file mode 100644 index 8ae7566..0000000 --- a/src/lib/panel/Editable.svelte +++ /dev/null @@ -1,69 +0,0 @@ - - -{#if editing} - { - editing = false; - // @ts-expect-error - target and value exists - const updated = target.value; - value = JSON.parse(updated); - dispatch('change', updated); - }} - on:keydown={({ key, target }) => { - if (key !== 'Enter') return; - editing = false; - // @ts-expect-error - target and value exists - const updated = target.value; - value = JSON.parse(updated); - dispatch('change', updated); - }} - /> -{:else} - - - (editing = !readonly)}> - {JSON.stringify(value)} - -{/if} - - diff --git a/src/lib/panel/Expandable.svelte b/src/lib/panel/Expandable.svelte deleted file mode 100644 index c3a3d71..0000000 --- a/src/lib/panel/Expandable.svelte +++ /dev/null @@ -1,141 +0,0 @@ - - - - -
  • (expanded = !expanded)} -> - {key}: -   - - {#if type === 'string'} - - {:else if value == null || value !== value} - - {:else if type === 'number' || type === 'boolean'} - - {:else if Array.isArray(value)} - Array [{value.length || ''}] - - {#if value.length && expanded} -
      - {#each value as v, key} - dispatch('change', stringify(value, key, e.detail))} - /> - {/each} -
    - {/if} - {:else if type === 'object'} - {#if value.__is === 'function'} - function {value.name || ''}() - {#if expanded}
    {value.source}
    {/if} - {:else if value.__is === 'symbol'} - {value.name || 'Symbol()'} - {:else if Object.keys(value).length} - Object {…} - {#if expanded} -
      - {#each Object.entries(value) as [key, v] (key)} - dispatch('change', stringify(value, key, e.detail))} - /> - {/each} -
    - {/if} - {:else} - Object { } - {/if} - {/if} -
  • - - diff --git a/src/lib/panel/PropertyList.svelte b/src/lib/panel/PropertyList.svelte deleted file mode 100644 index b4618d1..0000000 --- a/src/lib/panel/PropertyList.svelte +++ /dev/null @@ -1,45 +0,0 @@ - - -{#if entries.length} -
      - {#each entries as { key, value } (key)} - change(key, e.detail)} - /> - {/each} -
    -{:else} -
    None
    -{/if} - - diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte deleted file mode 100644 index 512259a..0000000 --- a/src/routes/+layout.svelte +++ /dev/null @@ -1,179 +0,0 @@ - - - { - if (target !== document.body || !$selected) return; - - if (key === 'Enter') { - $selected.expanded = !$selected.expanded; - $selected.invalidate(); - } else if (key === 'ArrowRight') { - if (!$selected) $selected = $root[0]; - $selected.expanded = true; - $selected.invalidate(); - } else if (key === 'ArrowLeft') { - if ($selected.expanded) { - $selected.expanded = false; - return $selected.invalidate(); - } - do $selected = $selected.parent ?? $selected; - while (!$visibility[$selected.type]); - } else if (key === 'ArrowUp') { - let nodes = ($selected.parent?.children || $root).filter((n) => $visibility[n.type]); - let sibling = nodes[nodes.findIndex((o) => o.id === $selected?.id) - 1]; - while (sibling?.expanded) { - nodes = sibling.children.filter((n) => $visibility[n.type]); - sibling = nodes[nodes.length - 1]; - } - $selected = sibling ?? $selected.parent ?? $selected; - } else if (key === 'ArrowDown') { - const children = $selected.children.filter((n) => $visibility[n.type]); - - if (!$selected.expanded || children.length === 0) { - let next = $selected; - let current = $selected; - do { - const nodes = current.parent ? current.parent.children : $root; - const siblings = nodes.filter((n) => $visibility[n.type]); - const index = siblings.findIndex((o) => o.id === current.id); - next = siblings[index + 1]; - current = current.parent; - } while (!next && current); - - $selected = next ?? $selected; - } else { - $selected = children[0]; - } - } - }} -/> - -{#if $root.length} -
    - - - - - - - - - - - - - - - - - -
      - {#each $root as node (node.id)} - - {/each} -
    - - -
    - - - - {@const events = $selected?.detail.listeners?.map((l) => { - const suffix = l.modifiers?.length ? `|${l.modifiers.join('|')}` : ''; - const value = { __is: 'function', source: l.handler }; - return { key: l.event + suffix, value }; - })} - - {#if $selected?.type === 'component'} -

    Props

    - - - - -

    Events

    - - - - -

    State

    - - {:else if $selected?.type === 'block' || $selected?.type === 'iteration'} -

    State

    - - {:else if $selected?.type === 'element'} -

    Attributes

    - - - - -

    Events

    - - {/if} -
    -{:else} - -{/if} - - diff --git a/static/.web-extension-id b/static/.web-extension-id deleted file mode 100644 index 8530d52..0000000 --- a/static/.web-extension-id +++ /dev/null @@ -1,3 +0,0 @@ -# This file was created by https://github.com/mozilla/web-ext -# Your auto-generated extension ID for addons.mozilla.org is: -{a0370179-acc3-452f-9530-246b6adb2768} \ No newline at end of file diff --git a/workspace/extension/.gitignore b/workspace/extension/.gitignore new file mode 100644 index 0000000..ef49293 --- /dev/null +++ b/workspace/extension/.gitignore @@ -0,0 +1,4 @@ +/build + +# generated files +static/courier.js diff --git a/index.html b/workspace/extension/index.html similarity index 100% rename from index.html rename to workspace/extension/index.html diff --git a/workspace/extension/package.json b/workspace/extension/package.json new file mode 100644 index 0000000..575e296 --- /dev/null +++ b/workspace/extension/package.json @@ -0,0 +1,20 @@ +{ + "private": true, + "type": "module", + "scripts": { + "dev": "pnpm run --parallel \"/^dev:.*/\"", + "dev:app": "vite build -wd --minify=false --sourcemap=inline", + "dev:scripts": "rollup -cw", + "build": "rollup -c && vite build", + "bundle:zip": "cd build && zip -r svelte-devtools.zip *", + "bundle:tar": "cd build && tar -czf svelte-devtools.tar.gz *", + "format": "prettier -w .", + "check": "pnpm run --parallel \"/^check:.*/\"", + "check:style": "prettier -c .", + "check:svelte": "svelte-check --tsconfig ./tsconfig.json" + }, + "devDependencies": { + "@types/chrome": "^0.0.266", + "rollup": "^4.14.3" + } +} diff --git a/rollup.config.js b/workspace/extension/rollup.config.js similarity index 89% rename from rollup.config.js rename to workspace/extension/rollup.config.js index 82f9b54..3368c80 100644 --- a/rollup.config.js +++ b/workspace/extension/rollup.config.js @@ -8,7 +8,7 @@ export default defineConfig([ }, }, { - input: 'src/client/index.js', + input: 'src/client/core.js', output: [ { file: 'static/courier.js', format: 'iife' }, { file: 'build/courier.js', format: 'iife' }, diff --git a/workspace/extension/src/App.svelte b/workspace/extension/src/App.svelte new file mode 100644 index 0000000..21a0af1 --- /dev/null +++ b/workspace/extension/src/App.svelte @@ -0,0 +1,191 @@ + + + { + const { target, key } = event; + if (target !== document.body || !app.selected) return; + + if (key === 'Enter') { + app.selected.expanded = !app.selected.expanded; + } else if (key === 'ArrowRight') { + event.preventDefault(); + if (!app.selected) app.selected = app.root[0]; + app.selected.expanded = true; + } else if (key === 'ArrowLeft') { + event.preventDefault(); + if (app.selected.expanded) { + app.selected.expanded = false; + return; + } + do app.selected = app.selected.parent ?? app.selected; + while (!visibility[app.selected.type]); + } else if (key === 'ArrowUp') { + event.preventDefault(); + let nodes = (app.selected.parent?.children || app.root).filter((n) => visibility[n.type]); + let sibling = nodes[nodes.findIndex((o) => o.id === app.selected?.id) - 1]; + while (sibling?.expanded) { + nodes = sibling.children.filter((n) => visibility[n.type]); + sibling = nodes[nodes.length - 1]; + } + app.selected = sibling ?? app.selected.parent ?? app.selected; + } else if (key === 'ArrowDown') { + event.preventDefault(); + const children = app.selected.children.filter((n) => visibility[n.type]); + + if (!app.selected.expanded || children.length === 0) { + let next = app.selected; + let current = app.selected; + do { + const nodes = current.parent ? current.parent.children : app.root; + const siblings = nodes.filter((n) => visibility[n.type]); + const index = siblings.findIndex((o) => o.id === current.id); + next = siblings[index + 1]; + current = current.parent; + } while (!next && current); + + app.selected = next ?? app.selected; + } else { + app.selected = children[0]; + } + } + }} +/> + +{#if app.root.length} +
    + + + + + + + + + + + + + + + + + +
      + {#each app.root as node (node.id)} + + {/each} +
    + + +
    + + + + {@const events = app.selected?.detail.listeners?.map((l) => { + const suffix = l.modifiers?.length ? `|${l.modifiers.join('|')}` : ''; + const value = { __is: 'function', source: l.handler }; + return { key: l.event + suffix, value }; + })} + + {#if app.selected?.type === 'component'} +

    Props

    + + + + +

    Events

    + + + + +

    State

    + + {:else if app.selected?.type === 'block' || app.selected?.type === 'iteration'} +

    State

    + + {:else if app.selected?.type === 'element'} +

    Attributes

    + + + + +

    Events

    + + {/if} +
    +{:else} + +{/if} + + diff --git a/src/app.css b/workspace/extension/src/app.css similarity index 100% rename from src/app.css rename to workspace/extension/src/app.css diff --git a/src/app.d.ts b/workspace/extension/src/app.d.ts similarity index 97% rename from src/app.d.ts rename to workspace/extension/src/app.d.ts index e7fd4d4..11f5926 100644 --- a/src/app.d.ts +++ b/workspace/extension/src/app.d.ts @@ -34,7 +34,7 @@ declare global { }; type SvelteBlockDetail = { - id: number; + id: string; // crypto.randomUUID(); source: string; type: | 'anchor' @@ -119,7 +119,7 @@ declare global { } >; - SvelteDevTools: CusomEvent<{ + SvelteDevTools: CustomEvent<{ type: string; payload: string; }>; diff --git a/workspace/extension/src/client/core.js b/workspace/extension/src/client/core.js new file mode 100644 index 0000000..3848557 --- /dev/null +++ b/workspace/extension/src/client/core.js @@ -0,0 +1,108 @@ +import { highlight } from './highlight.js'; +import { send } from './runtime.js'; +import { index as v4 } from './svelte-4.js'; +import { serialize } from './utils.js'; + +// @ts-ignore - for the app to call with `eval` +window['#SvelteDevTools'] = { + /** + * @param {string} id + * @param {string[]} keys + * @param {any} value + */ + inject(id, keys, value) { + const { detail: component } = v4.map.get(id) || {}; + if (component) { + const [prop, ...rest] = keys; + const original = component.$capture_state()[prop]; + if (typeof original === 'object') { + let ref = original; + for (let i = 0; i < rest.length - 1; i += 1) { + ref = ref[rest[i]]; + } + ref[rest[rest.length - 1]] = value; + component.$inject_state({ [prop]: original }); + } else { + component.$inject_state({ [prop]: value }); + } + } + }, +}; + +const previous = { + /** @type {HTMLElement | null} */ + target: null, + style: { + cursor: '', + background: '', + outline: '', + }, + + clear() { + if (this.target) { + for (const key in this.style) { + // @ts-expect-error - trust me TS + this.target.style[key] = this.style[key]; + } + } + this.target = null; + }, +}; + +const inspect = { + /** @param {MouseEvent} event */ + handle({ target }) { + const same = previous.target && previous.target === target; + const html = target instanceof HTMLElement; + if (same || !html) return; + + if (previous.target) previous.clear(); + previous.target = target; + previous.style = { + cursor: target.style.cursor, + background: target.style.background, + outline: target.style.outline, + }; + target.style.cursor = 'pointer'; + target.style.background = 'rgba(0, 136, 204, 0.2)'; + target.style.outline = '1px dashed rgb(0, 136, 204)'; + }, + /** @param {MouseEvent} event */ + click(event) { + event.preventDefault(); + document.removeEventListener('mousemove', inspect.handle, true); + const node = v4.map.get(/** @type {Node} */ (event.target)); + if (node) send('bridge::ext/inspect', { node: serialize(node) }); + previous.clear(); + }, +}; + +window.addEventListener('message', ({ data, source }) => { + // only accept messages from our application or script + if (source !== window || data?.source !== 'svelte-devtools') return; + + if (data.type === 'bridge::ext/select') { + const node = v4.map.get(data.payload); + // @ts-expect-error - saved for `devtools.inspect()` + if (node) window.$n = node.detail; + } else if (data.type === 'bridge::ext/highlight') { + const node = v4.map.get(data.payload); + return highlight(node); + } else if (data.type === 'bridge::ext/inspect') { + switch (data.payload) { + case 'start': { + document.addEventListener('mousemove', inspect.handle, true); + document.addEventListener('click', inspect.click, { + capture: true, + once: true, + }); + break; + } + default: { + document.removeEventListener('mousemove', inspect.handle, true); + document.removeEventListener('click', inspect.click, true); + previous.clear(); + } + } + } +}); diff --git a/src/client/highlight.js b/workspace/extension/src/client/highlight.js similarity index 100% rename from src/client/highlight.js rename to workspace/extension/src/client/highlight.js diff --git a/workspace/extension/src/client/runtime.js b/workspace/extension/src/client/runtime.js new file mode 100644 index 0000000..fd5a24e --- /dev/null +++ b/workspace/extension/src/client/runtime.js @@ -0,0 +1,7 @@ +/** + * @param {string} type + * @param {Record} [payload] + */ +export function send(type, payload) { + window.postMessage({ source: 'svelte-devtools', type, payload }); +} diff --git a/src/client/svelte.js b/workspace/extension/src/client/svelte-4.js similarity index 70% rename from src/client/svelte.js rename to workspace/extension/src/client/svelte-4.js index ee19f15..7f85143 100644 --- a/src/client/svelte.js +++ b/workspace/extension/src/client/svelte-4.js @@ -1,20 +1,11 @@ -import { listeners } from './listener.js'; -// import { profiler } from './profiler.js'; +import { send } from './runtime.js'; +import { serialize } from './utils.js'; /** @type {undefined | SvelteBlockDetail} */ let current_block; -let pointer = 0; -/** @param {number | Node} id */ -export function getNode(id) { - return nodes.map.get(id); -} - -const nodes = { - /** @type {SvelteBlockDetail[]} */ - root: [], - - /** @type {Map} */ +export const index = { + /** @type {Map} */ map: new Map(), /** @param {{ node: SvelteBlockDetail; target?: Node; anchor?: Node }} opts */ @@ -28,16 +19,25 @@ const nodes = { } node.parent = target; - const sibling = this.map.get(anchor); + const sibling = anchor && this.map.get(anchor); if (target) { - const index = target.children.findIndex((n) => n === sibling); - if (index === -1) target.children.push(node); - else target.children.splice(index, 0, node); - } else { - this.root.push(node); + const idx = target.children.findIndex((n) => n === sibling); + if (idx === -1) target.children.push(node); + else target.children.splice(idx, 0, node); } - listeners.add(node, sibling); + send('bridge::courier/node->add', { + node: serialize(node), + target: node.parent?.id, + anchor: sibling?.id, + }); + }, + + /** @param {{ node: SvelteBlockDetail; target?: Node; anchor?: Node }} opts */ + update({ node }) { + send('bridge::courier/node->update', { + node: serialize(node), + }); }, /** @param {SvelteBlockDetail} node */ @@ -52,24 +52,26 @@ const nodes = { node.parent = undefined; } - listeners.remove(node); + send('bridge::courier/node->remove', { + node: serialize(node), + }); }, }; document.addEventListener('SvelteRegisterComponent', ({ detail }) => { const { component, tagName } = detail; - const node = nodes.map.get(component.$$.fragment); + const node = index.map.get(component.$$.fragment); if (node) { - nodes.map.delete(component.$$.fragment); + index.map.delete(component.$$.fragment); node.detail = component; node.tagName = tagName; - listeners.update(node); + index.update({ node }); } else { // @ts-expect-error - component special case - nodes.map.set(component.$$.fragment, { + index.map.set(component.$$.fragment, { type: 'component', detail: component, tagName, @@ -81,7 +83,7 @@ document.addEventListener('SvelteRegisterComponent', ({ detail }) => { let last_promise; document.addEventListener('SvelteRegisterBlock', ({ detail }) => { const { type, id, block, ...rest } = detail; - const current_node_id = pointer++; + const current_node_id = crypto.randomUUID(); if (block.m) { const original = block.m; @@ -109,32 +111,32 @@ document.addEventListener('SvelteRegisterBlock', ({ detail }) => { break; case 'component': { - const component = nodes.map.get(block); + const component = index.map.get(block); if (component) { - nodes.map.delete(block); + index.map.delete(block); Object.assign(node, component); } else { node.type = 'component'; node.tagName = 'Unknown'; node.detail = {}; - nodes.map.set(block, node); + index.map.set(block, node); } Promise.resolve().then(() => { const invalidate = node.detail.$$?.bound || {}; - Object.keys(invalidate).length && listeners.update(node); + Object.keys(invalidate).length && index.update({ node }); }); break; } } if (type === 'each') { - let group = parent && nodes.map.get(parent.id + id); + let group = parent && index.map.get(parent.id + id); if (!group) { // @ts-expect-error - each block fallback group = /** @type {SvelteBlockDetail} */ ({ version: '', - id: pointer++, + id: crypto.randomUUID(), type: 'block', tagName: 'each', container: parent, @@ -144,22 +146,21 @@ document.addEventListener('SvelteRegisterBlock', ({ detail }) => { source: detail.source, }, }); - parent && nodes.map.set(parent.id + id, group); - nodes.add({ node: group, target, anchor }); + parent && index.map.set(parent.id + id, group); + index.add({ node: group, target, anchor }); } node.container = group; node.type = 'iteration'; // @ts-expect-error - overloaded nodes - nodes.add({ node, target: group, anchor }); + index.add({ node, target: group, anchor }); } else { - nodes.add({ node, target, anchor }); + index.add({ node, target, anchor }); } current_block = node; - // profiler.update(node, 'mount', original, target, anchor); original(target, anchor); current_block = parent; @@ -170,10 +171,9 @@ document.addEventListener('SvelteRegisterBlock', ({ detail }) => { const original = block.p; block.p = (changed, ctx) => { const parent = current_block; - current_block = nodes.map.get(current_node_id); - current_block && listeners.update(current_block); + current_block = index.map.get(current_node_id); + current_block && index.update({ node: current_block }); - // profiler.update(current_block, 'patch', original, changed, ctx); original(changed, ctx); current_block = parent; @@ -183,15 +183,14 @@ document.addEventListener('SvelteRegisterBlock', ({ detail }) => { if (block.d) { const original = block.d; block.d = (detaching) => { - const node = nodes.map.get(current_node_id); + const node = index.map.get(current_node_id); if (node) { if (node.tagName === 'await') { last_promise = node.container; } - nodes.remove(node); + index.remove(node); } - // profiler.update(node, 'detach', original, detaching); original(detaching); }; } @@ -209,12 +208,12 @@ document.addEventListener('SvelteDOMInsert', ({ detail }) => { ? 'text' : 'anchor'; - nodes.add({ + index.add({ anchor, target, // @ts-expect-error - missing properties are irrelevant node: { - id: pointer++, + id: crypto.randomUUID(), type, detail: element, tagName: element.nodeName.toLowerCase(), @@ -224,14 +223,14 @@ document.addEventListener('SvelteDOMInsert', ({ detail }) => { }); element.childNodes.forEach((child) => { - !nodes.map.has(child) && deep_insert({ node: child, target: element }); + !index.map.has(child) && deep_insert({ node: child, target: element }); }); } }); document.addEventListener('SvelteDOMRemove', ({ detail }) => { - const node = nodes.map.get(detail.node); - if (node) nodes.remove(node); + const node = index.map.get(detail.node); + if (node) index.remove(node); }); document.addEventListener('SvelteDOMAddEventListener', ({ detail }) => { @@ -249,29 +248,29 @@ document.addEventListener('SvelteDOMRemoveEventListener', ({ detail }) => { }); document.addEventListener('SvelteDOMSetData', ({ detail }) => { - const node = nodes.map.get(detail.node); + const node = index.map.get(detail.node); if (!node) return; if (node.type === 'anchor') node.type = 'text'; - listeners.update(node); + index.update({ node }); }); document.addEventListener('SvelteDOMSetProperty', ({ detail }) => { - const node = nodes.map.get(detail.node); + const node = index.map.get(detail.node); if (!node) return; if (node.type === 'anchor') node.type = 'text'; - listeners.update(node); + index.update({ node }); }); document.addEventListener('SvelteDOMSetAttribute', ({ detail }) => { - const node = nodes.map.get(detail.node); + const node = index.map.get(detail.node); if (!node) return; if (node.type === 'anchor') node.type = 'text'; - listeners.update(node); + index.update({ node }); }); document.addEventListener('SvelteDOMRemoveAttribute', ({ detail }) => { - const node = nodes.map.get(detail.node); + const node = index.map.get(detail.node); if (!node) return; if (node.type === 'anchor') node.type = 'text'; - listeners.update(node); + index.update({ node }); }); diff --git a/workspace/extension/src/client/utils.js b/workspace/extension/src/client/utils.js new file mode 100644 index 0000000..6137ab2 --- /dev/null +++ b/workspace/extension/src/client/utils.js @@ -0,0 +1,101 @@ +/** + * @param {unknown} value + * @returns {any} + */ +function clone(value, seen = new Map()) { + switch (typeof value) { + case 'function': + return { __is: 'function', source: value.toString(), name: value.name }; + case 'symbol': + return { __is: 'symbol', name: value.toString() }; + case 'object': { + if (value === window || value === null) return null; + if (Array.isArray(value)) return value.map((o) => clone(o, seen)); + if (seen.has(value)) return {}; + + /** @type {Record} */ + const o = {}; + seen.set(value, o); + + const descriptors = Object.getOwnPropertyDescriptors(value); + for (const [key, v] of Object.entries(value)) { + const { get, writable } = descriptors[key]; + const readonly = !writable || get !== undefined; + o[key] = { key, value: clone(v, seen), readonly }; + } + return o; + } + default: + return value; + } +} + +/** @param {SvelteBlockDetail} node */ +export function serialize(node) { + const res = /** @type {SvelteBlockDetail} */ ({ + id: node.id, + type: node.type, + tagName: node.tagName, + detail: {}, + }); + switch (node.type) { + case 'component': { + const { $$: internal = {} } = node.detail; + const captured = node.detail.$capture_state?.() || {}; + const bindings = Object.values(internal.bound || {}).map( + /** @param {Function} f */ (f) => f.name, + ); + const props = Object.keys(internal.props || {}).flatMap((key) => { + const value = clone(captured[key]); + delete captured[key]; // deduplicate for ctx + if (value === undefined) return []; + + const bounded = bindings.some((f) => f.includes(key)); + return { key, value, bounded }; + }); + + res.detail = { + attributes: props, + listeners: Object.entries(internal.callbacks || {}).flatMap(([event, value]) => + value.map(/** @param {Function} f */ (f) => ({ event, handler: f.toString() })), + ), + ctx: Object.entries(captured).map(([key, v]) => ({ key, value: clone(v) })), + }; + break; + } + + case 'element': { + /** @type {Attr[]} from {NamedNodeMap} */ + const attributes = Array.from(node.detail.attributes || []); + + /** @type {NonNullable} */ + const listeners = node.detail.__listeners || []; + + res.detail = { + attributes: attributes.map(({ name: key, value }) => ({ key, value, readonly: true })), + listeners: listeners.map((o) => ({ ...o, handler: o.handler.toString() })), + }; + break; + } + + case 'text': { + res.detail = { + nodeValue: node.detail.nodeValue, + }; + break; + } + + case 'iteration': + case 'block': { + const { ctx, source } = node.detail; + const cloned = Object.entries(clone(ctx)); + res.detail = { + ctx: cloned.map(([key, value]) => ({ key, value, readonly: true })), + source: source.slice(source.indexOf('{'), source.indexOf('}') + 1), + }; + break; + } + } + + return res; +} diff --git a/src/entry.ts b/workspace/extension/src/entry.ts similarity index 69% rename from src/entry.ts rename to workspace/extension/src/entry.ts index 6775fb8..54dd677 100644 --- a/src/entry.ts +++ b/workspace/extension/src/entry.ts @@ -1,5 +1,6 @@ import './app.css'; -import App from './routes/+layout.svelte'; +import App from './App.svelte'; +import { mount } from 'svelte'; if (chrome.devtools.panels.themeName === 'dark') { document.body.classList.add('dark'); @@ -7,6 +8,6 @@ if (chrome.devtools.panels.themeName === 'dark') { document.body.classList.remove('dark'); } -export default new App({ +export default mount(App, { target: document.querySelector('#app')!, }); diff --git a/src/lib/components/Button.svelte b/workspace/extension/src/lib/components/Button.svelte similarity index 75% rename from src/lib/components/Button.svelte rename to workspace/extension/src/lib/components/Button.svelte index f6038e0..2b12631 100644 --- a/src/lib/components/Button.svelte +++ b/workspace/extension/src/lib/components/Button.svelte @@ -1,11 +1,17 @@ - diff --git a/src/lib/components/Resizable.svelte b/workspace/extension/src/lib/components/Resizable.svelte similarity index 78% rename from src/lib/components/Resizable.svelte rename to workspace/extension/src/lib/components/Resizable.svelte index bb63298..64a2e14 100644 --- a/src/lib/components/Resizable.svelte +++ b/workspace/extension/src/lib/components/Resizable.svelte @@ -1,13 +1,18 @@ (resizing = false)} - on:mousemove={({ pageX: x, pageY: y }) => { + onmouseup={() => (resizing = false)} + onmousemove={({ pageX: x, pageY: y }) => { if (!resizing) return; size = axis === 'x' ? window.innerWidth - x : window.innerHeight - y; }} @@ -15,9 +20,9 @@ diff --git a/src/lib/nodes/ElementAttributes.svelte b/workspace/extension/src/lib/nodes/ElementAttributes.svelte similarity index 75% rename from src/lib/nodes/ElementAttributes.svelte rename to workspace/extension/src/lib/nodes/ElementAttributes.svelte index c76a41e..d989fbc 100644 --- a/src/lib/nodes/ElementAttributes.svelte +++ b/workspace/extension/src/lib/nodes/ElementAttributes.svelte @@ -1,24 +1,27 @@ -{#each attributes as { key, value, bounded, flash } (key)} +{#each attributes as { key, value, bounded } (key)} {@const prefix = bounded ? 'bind:' : ''}   - + diff --git a/src/lib/nodes/Ellipsis.svelte b/workspace/extension/src/lib/nodes/Ellipsis.svelte similarity index 62% rename from src/lib/nodes/Ellipsis.svelte rename to workspace/extension/src/lib/nodes/Ellipsis.svelte index 9edc0e8..7ee9cbd 100644 --- a/src/lib/nodes/Ellipsis.svelte +++ b/workspace/extension/src/lib/nodes/Ellipsis.svelte @@ -1,4 +1,12 @@ - + + + diff --git a/workspace/extension/src/lib/panel/PropertyList.svelte b/workspace/extension/src/lib/panel/PropertyList.svelte new file mode 100644 index 0000000..64ed8f1 --- /dev/null +++ b/workspace/extension/src/lib/panel/PropertyList.svelte @@ -0,0 +1,138 @@ + + +{#if entries.length} +
      + {#each entries as { key, value, readonly = false } (key)} + {@const keys = [...parents, key]} + {@const type = typeof value} + + + +
    • { + event.stopPropagation(); + expanded[key] = !expanded[key]; + }} + > + {key}: +   + + {#if type === 'string'} + inject(keys, updated)} + /> + {:else if value == null || value !== value} + inject(keys, updated)} + /> + {:else if type === 'number' || type === 'boolean'} + inject(keys, updated)} + /> + {:else if Array.isArray(value)} + Array [{value.length || ''}] + + {#if value.length && expanded[key]} + {@const entries = value.map((v, i) => ({ key: `${i}`, value: v, readonly }))} + + + {/if} + {:else if type === 'object'} + {#if value.__is === 'function'} + function {value.name || ''}() + {#if expanded[key]}
      {value.source}
      {/if} + {:else if value.__is === 'symbol'} + {value.name || 'Symbol()'} + {:else if Object.keys(value).length} + Object {…} + + {#if expanded[key]} + + {/if} + {:else} + Object { } + {/if} + {/if} +
    • + {/each} +
    +{:else} +
    None
    +{/if} + + diff --git a/workspace/extension/src/lib/panel/core.svelte.ts b/workspace/extension/src/lib/panel/core.svelte.ts new file mode 100644 index 0000000..3865e1a --- /dev/null +++ b/workspace/extension/src/lib/panel/core.svelte.ts @@ -0,0 +1,17 @@ +import { app } from '$lib/state.svelte'; + +export const errors = $state<{ [keys: string]: string | false }>({}); + +export function inject(keys: string[], value: any) { + const uuid = app.selected?.id; + if (!uuid) return; + + const accessors = `[${keys.map((k) => `'${k}'`).join(', ')}]`; + chrome.devtools.inspectedWindow.eval( + `window['#SvelteDevTools'].inject('${uuid}', ${accessors}, ${value})`, + (_, error) => { + const id = `${uuid}+${keys.join('.')}`; + errors[id] = error?.isException && error.value.slice(0, error.value.indexOf('\n')); + }, + ); +} diff --git a/src/lib/runtime.ts b/workspace/extension/src/lib/runtime.svelte.ts similarity index 59% rename from src/lib/runtime.ts rename to workspace/extension/src/lib/runtime.svelte.ts index bee6673..d8cd54c 100644 --- a/src/lib/runtime.ts +++ b/workspace/extension/src/lib/runtime.svelte.ts @@ -1,18 +1,23 @@ -import { type DebugNode, hovered, root, selected } from './store'; +import { type DebugNode, app } from './state.svelte'; const tabId = chrome.devtools.inspectedWindow.tabId; -const port = chrome.runtime.connect({ name: `${tabId}` }); +let port = chrome.runtime.connect({ name: `${tabId}` }); port.postMessage({ source: 'svelte-devtools', tabId, type: 'bypass::ext/init' }); export const background = { send(type: `bridge::${'ext' | 'page'}/${string}` | 'bypass::ext/page->refresh', payload?: any) { - port.postMessage({ source: 'svelte-devtools', tabId, type, payload }); + try { + port.postMessage({ source: 'svelte-devtools', tabId, type, payload }); + } catch { + // https://developer.chrome.com/docs/extensions/develop/concepts/messaging#port-lifetime + // chrome aggressively disconnects the port, not much we can do other than to reconnect + port = chrome.runtime.connect({ name: `${tabId}` }); + background.send(type, payload); // retry immediately + } }, }; -const nodes = new Map(); - function resolveEventBubble(node: any) { if (!node.detail || !node.detail.listeners) return; @@ -40,60 +45,60 @@ function resolveEventBubble(node: any) { port.onMessage.addListener(({ type, payload }) => { switch (type) { case 'bridge::ext/clear': { - selected.set(undefined); - hovered.set(undefined); - return root.set([]); + app.nodes = {}; + app.selected = undefined; + app.hovered = undefined; + break; } case 'bridge::ext/inspect': { - if (typeof payload === 'string') return; - const current = nodes.get(payload.node.id); - return selected.set(current); + if (typeof payload === 'string') break; + app.selected = app.nodes[payload.node.id]; + app.inspecting = false; + break; } case 'bridge::courier/node->add': { const { node, target, anchor } = payload as { node: DebugNode; - target: null | number; - anchor: null | number; + target: string; + anchor: string; }; + node.parent = app.nodes[target]; node.children = []; node.expanded = false; - node.invalidate = () => {}; resolveEventBubble(node); - const parent = nodes.get(target); - nodes.set(node.id, node); - if (!parent) return root.update((n) => [...n, node]); + app.nodes[node.id] = node; + if (!node.parent) break; - const index = parent.children.findIndex((n) => n.id === anchor); - if (index === -1) parent.children.push(node); - else parent.children.splice(index, 0, node); + const siblings = node.parent.children; + const index = siblings.findIndex((n) => n.id === anchor); + if (index === -1) siblings.push(node); + else siblings.splice(index, 0, node); - return (node.parent = parent).invalidate(); + break; } case 'bridge::courier/node->remove': { const node = payload.node as SvelteBlockDetail; - const current = nodes.get(node.id); - if (current) nodes.delete(current.id); - if (!current?.parent) return; + const current = app.nodes[node.id]; + if (current) delete app.nodes[current.id]; + if (!current?.parent) break; const index = current.parent.children.findIndex((o) => o.id === current.id); current.parent.children.splice(index, 1); - return current.parent.invalidate(); + break; } case 'bridge::courier/node->update': { const node = payload.node as SvelteBlockDetail; - const current = nodes.get(node.id); - if (!current) return; - Object.assign(current, payload.node); + const current = app.nodes[node.id]; + if (!current) break; + Object.assign(current, node); resolveEventBubble(current); - - selected.update((o) => o); - return current.invalidate(); + break; } // case 'bridge::courier/profile->update': { @@ -106,7 +111,7 @@ port.onMessage.addListener(({ type, payload }) => { // if (!frame.node) return; - // frame.node = nodes.get(frame.node) || { + // frame.node = app.nodes.get(frame.node) || { // type: 'Unknown', // tagName: 'Unknown', // }; diff --git a/src/lib/store.ts b/workspace/extension/src/lib/state.svelte.ts similarity index 51% rename from src/lib/store.ts rename to workspace/extension/src/lib/state.svelte.ts index 3f0e6e9..f192277 100644 --- a/src/lib/store.ts +++ b/workspace/extension/src/lib/state.svelte.ts @@ -1,11 +1,8 @@ -import { writable } from 'svelte/store'; - type Overwrite = Omit & B; export type DebugNode = Overwrite< SvelteBlockDetail, { - invalidate(): void; expanded: boolean; detail: { attributes?: Array<{ @@ -30,10 +27,22 @@ export type DebugNode = Overwrite< dom?: HTMLLIElement; } >; -export const selected = writable(undefined); -export const hovered = writable(undefined); -export const root = writable([]); -export const visibility = writable<{ [key: string]: boolean }>({ + +export const app = $state({ + nodes: {} as { [key: string]: DebugNode }, + get root() { + const nodes = Object.values(this.nodes); + return nodes.filter((node) => !node.parent); + }, + + selected: undefined as undefined | DebugNode, + hovered: undefined as undefined | DebugNode, + + inspecting: false, + query: '', +}); + +export const visibility = $state<{ [key: string]: boolean }>({ component: true, element: true, block: true, @@ -42,15 +51,3 @@ export const visibility = writable<{ [key: string]: boolean }>({ text: true, anchor: false, }); - -export const query = writable(''); - -export type Profiler = { - type: 'mount' | 'patch' | 'detach'; - node: DebugNode; - duration: number; - start: number; - end: number; - children: Profiler[]; -}; -export const profileFrame = writable(undefined); diff --git a/src/routes/Breadcrumbs.svelte b/workspace/extension/src/routes/Breadcrumbs.svelte similarity index 71% rename from src/routes/Breadcrumbs.svelte rename to workspace/extension/src/routes/Breadcrumbs.svelte index 6087997..da4a89d 100644 --- a/src/routes/Breadcrumbs.svelte +++ b/workspace/extension/src/routes/Breadcrumbs.svelte @@ -1,27 +1,26 @@ {#if breadcrumbs.length}
      {#each breadcrumbs as node} - {#if $visibility[node.type]} + {#if visibility[node.type]} diff --git a/src/routes/ConnectMessage.svelte b/workspace/extension/src/routes/ConnectMessage.svelte similarity index 84% rename from src/routes/ConnectMessage.svelte rename to workspace/extension/src/routes/ConnectMessage.svelte index dc37a9c..d7f9553 100644 --- a/src/routes/ConnectMessage.svelte +++ b/workspace/extension/src/routes/ConnectMessage.svelte @@ -1,5 +1,5 @@
      @@ -7,14 +7,14 @@

      No Svelte app detected - +

      Not working? Did you...

      • Build with dev mode enabled?
      • -
      • Use Svelte version 4.0.0 or above?
      • +
      • Use Svelte version ^4.0.0?
      diff --git a/src/routes/Inspector.svelte b/workspace/extension/src/routes/Inspector.svelte similarity index 59% rename from src/routes/Inspector.svelte rename to workspace/extension/src/routes/Inspector.svelte index 5ded50a..ff7ca08 100644 --- a/src/routes/Inspector.svelte +++ b/workspace/extension/src/routes/Inspector.svelte @@ -1,21 +1,16 @@ - - dispatch('click', frame)} /> + onclick(frame)} /> {/each}
    diff --git a/src/routes/SearchBox.svelte b/workspace/extension/src/routes/SearchBox.svelte similarity index 71% rename from src/routes/SearchBox.svelte rename to workspace/extension/src/routes/SearchBox.svelte index 71d6a4d..a1ad6d7 100644 --- a/src/routes/SearchBox.svelte +++ b/workspace/extension/src/routes/SearchBox.svelte @@ -1,26 +1,26 @@ -
    + event.preventDefault()}> { + bind:value={app.query} + onkeydown={({ key, shiftKey }) => { if (key === 'Enter') submit[shiftKey ? 'prev' : 'next'](); }} /> @@ -52,10 +52,10 @@ {position + 1} of {results.length} {/if} - -
    diff --git a/src/routes/VisibilitySelection.svelte b/workspace/extension/src/routes/VisibilitySelection.svelte similarity index 86% rename from src/routes/VisibilitySelection.svelte rename to workspace/extension/src/routes/VisibilitySelection.svelte index f68ffff..15a2fb0 100644 --- a/src/routes/VisibilitySelection.svelte +++ b/workspace/extension/src/routes/VisibilitySelection.svelte @@ -2,13 +2,13 @@ import Button from '$lib/components/Button.svelte'; import Relative from '$lib/components/Relative.svelte'; - import { visibility } from '$lib/store'; + import { visibility } from '$lib/state.svelte'; - let opened = false; + let opened = $state(false); -