From 3f03c121524d72375c57190e272ef99e8d897c19 Mon Sep 17 00:00:00 2001 From: ari Date: Sun, 20 Apr 2025 00:18:33 -0400 Subject: [PATCH] whoa svelte is here Co-authored-by: Astra --- deno.json | 1 - deno.lock | 166 ++++++++++- index.html | 11 + main.ts | 2 +- web/.gitignore | 24 ++ web/.vscode/extensions.json | 3 + web/README.md | 47 ++++ web/deno.lock | 455 +++++++++++++++++++++++++++++++ web/index.html | 13 + web/package.json | 24 ++ web/public/vite.svg | 1 + web/public/witchcraft.ico | Bin 0 -> 111836 bytes web/src/App.svelte | 19 ++ web/src/app.css | 79 ++++++ web/src/assets/svelte.svg | 1 + web/src/lib/PostComponent.svelte | 21 ++ web/src/lib/pdsfetch.ts | 153 +++++++++++ web/src/main.ts | 9 + web/src/vite-env.d.ts | 2 + web/svelte.config.js | 7 + web/tsconfig.app.json | 20 ++ web/tsconfig.json | 7 + web/tsconfig.node.json | 24 ++ web/vite.config.ts | 7 + 24 files changed, 1080 insertions(+), 16 deletions(-) create mode 100644 index.html create mode 100644 web/.gitignore create mode 100644 web/.vscode/extensions.json create mode 100644 web/README.md create mode 100644 web/deno.lock create mode 100644 web/index.html create mode 100644 web/package.json create mode 100644 web/public/vite.svg create mode 100644 web/public/witchcraft.ico create mode 100644 web/src/App.svelte create mode 100644 web/src/app.css create mode 100644 web/src/assets/svelte.svg create mode 100644 web/src/lib/PostComponent.svelte create mode 100644 web/src/lib/pdsfetch.ts create mode 100644 web/src/main.ts create mode 100644 web/src/vite-env.d.ts create mode 100644 web/svelte.config.js create mode 100644 web/tsconfig.app.json create mode 100644 web/tsconfig.json create mode 100644 web/tsconfig.node.json create mode 100644 web/vite.config.ts diff --git a/deno.json b/deno.json index 29bd726..fe3ae43 100644 --- a/deno.json +++ b/deno.json @@ -5,7 +5,6 @@ "imports": { "@atcute/bluesky": "npm:@atcute/bluesky@^2.0.2", "@atcute/client": "npm:@atcute/client@^3.0.1", - "@skyware/jetstream": "npm:@skyware/jetstream@^0.2.2", "@std/assert": "jsr:@std/assert@1", "dotenv": "npm:dotenv@^16.5.0" } diff --git a/deno.lock b/deno.lock index 2346894..048800f 100644 --- a/deno.lock +++ b/deno.lock @@ -5,7 +5,8 @@ "jsr:@std/internal@^1.0.6": "1.0.6", "npm:@atcute/bluesky@^2.0.2": "2.0.2_@atcute+client@3.0.1", "npm:@atcute/client@^3.0.1": "3.0.1", - "npm:@skyware/jetstream@~0.2.2": "0.2.2_@atcute+client@3.0.1", + "npm:create-astro@*": "4.11.2", + "npm:create-vite@latest": "6.4.1", "npm:dotenv@^16.5.0": "16.5.0" }, "jsr": { @@ -20,10 +21,12 @@ } }, "npm": { - "@atcute/bluesky@1.0.15_@atcute+client@3.0.1": { - "integrity": "sha512-+EFiybmKQ97aBAgtaD+cKRJER5AMn3cZMkEwEg/pDdWyzxYJ9m1UgemmLdTgI8VrxPufKqdXS2nl7uO7TY6BPA==", + "@astrojs/cli-kit@0.4.1": { + "integrity": "sha512-bVzyKzEpIwqjihBU/aUzt1LQckJuHK0agd3/ITdXhPUYculrc6K1/K7H+XG4rwjXtg+ikT3PM05V1MVYWiIvQw==", "dependencies": [ - "@atcute/client" + "chalk", + "log-update", + "sisteransi" ] }, "@atcute/bluesky@2.0.2_@atcute+client@3.0.1": { @@ -35,24 +38,160 @@ "@atcute/client@3.0.1": { "integrity": "sha512-j51SuQYQj5jeKrx1DCXx+Q3fpVvO0JYGnKnJAdDSlesSLjPXjvnx1abC+hkuro58KRHHJvRA6P1MC0pmJsWfcg==" }, - "@skyware/jetstream@0.2.2_@atcute+client@3.0.1": { - "integrity": "sha512-d1MtWPTIFEciSzV8OClXZCJoz0DJ7aupt4EZSwpGAASYG0ZIPmZTt7RVJkoFzQyqRPHAMD7CvEwu0ut3MHX1og==", + "@bluwy/giget-core@0.1.2": { + "integrity": "sha512-v9f+ueUOKkZCDKiCm0yxKtYgYNLD9zlKarNux0NSXOvNm94QEYL3RlMpGKgD2hq44pbF2qWqEmHnCvmk56kPJw==", "dependencies": [ - "@atcute/bluesky@1.0.15_@atcute+client@3.0.1", - "partysocket" + "tar" ] }, + "ansi-escapes@5.0.0": { + "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", + "dependencies": [ + "type-fest" + ] + }, + "ansi-regex@6.1.0": { + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==" + }, + "ansi-styles@6.2.1": { + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" + }, + "chalk@5.4.1": { + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==" + }, + "chownr@2.0.0": { + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + }, + "cli-cursor@4.0.0": { + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dependencies": [ + "restore-cursor" + ] + }, + "create-astro@4.11.2": { + "integrity": "sha512-/kzqE865PBF89v7iPlhZRpvDA0q8hBlxzPUli2hxtY8pSIDyDAUEy4kl0j61QYxwj0K2rdTT+bKO469MngIsVw==", + "dependencies": [ + "@astrojs/cli-kit", + "@bluwy/giget-core" + ] + }, + "create-vite@6.4.1": { + "integrity": "sha512-an7oLlpm4FFd8zkVk6ytazmfLwMVYYyoLeuzlCoGPBKCbS6d7obm6OyVXAKt58xCxYlhMzxM0z42HBmMGWME2g==" + }, "dotenv@16.5.0": { "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==" }, - "event-target-polyfill@0.0.4": { - "integrity": "sha512-Gs6RLjzlLRdT8X9ZipJdIZI/Y6/HhRLyq9RdDlCsnpxr/+Nn6bU2EFGuC94GjxqhM+Nmij2Vcq98yoHrU8uNFQ==" + "eastasianwidth@0.2.0": { + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, - "partysocket@1.1.3": { - "integrity": "sha512-87Jd/nqPoWnVfzHE6Z12WLWTJ+TAgxs0b7i2S163HfQSrVDUK5tW/FC64T5N8L5ss+gqF+EV0BwjZMWggMY3UA==", + "emoji-regex@9.2.2": { + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "fs-minipass@2.1.0": { + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dependencies": [ - "event-target-polyfill" + "minipass@3.3.6" ] + }, + "is-fullwidth-code-point@4.0.0": { + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==" + }, + "log-update@5.0.1": { + "integrity": "sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==", + "dependencies": [ + "ansi-escapes", + "cli-cursor", + "slice-ansi", + "strip-ansi", + "wrap-ansi" + ] + }, + "mimic-fn@2.1.0": { + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "minipass@3.3.6": { + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": [ + "yallist" + ] + }, + "minipass@5.0.0": { + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==" + }, + "minizlib@2.1.2": { + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": [ + "minipass@3.3.6", + "yallist" + ] + }, + "mkdirp@1.0.4": { + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, + "onetime@5.1.2": { + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": [ + "mimic-fn" + ] + }, + "restore-cursor@4.0.0": { + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dependencies": [ + "onetime", + "signal-exit" + ] + }, + "signal-exit@3.0.7": { + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "sisteransi@1.0.5": { + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + }, + "slice-ansi@5.0.0": { + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dependencies": [ + "ansi-styles", + "is-fullwidth-code-point" + ] + }, + "string-width@5.1.2": { + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": [ + "eastasianwidth", + "emoji-regex", + "strip-ansi" + ] + }, + "strip-ansi@7.1.0": { + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": [ + "ansi-regex" + ] + }, + "tar@6.2.1": { + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dependencies": [ + "chownr", + "fs-minipass", + "minipass@5.0.0", + "minizlib", + "mkdirp", + "yallist" + ] + }, + "type-fest@1.4.0": { + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==" + }, + "wrap-ansi@8.1.0": { + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": [ + "ansi-styles", + "string-width", + "strip-ansi" + ] + }, + "yallist@4.0.0": { + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } }, "workspace": { @@ -60,7 +199,6 @@ "jsr:@std/assert@1", "npm:@atcute/bluesky@^2.0.2", "npm:@atcute/client@^3.0.1", - "npm:@skyware/jetstream@~0.2.2", "npm:dotenv@^16.5.0" ] } diff --git a/index.html b/index.html new file mode 100644 index 0000000..e9cd8ac --- /dev/null +++ b/index.html @@ -0,0 +1,11 @@ + + + + + + Alpine.js Test + + + $POSTSPLACEHOLDER + + \ No newline at end of file diff --git a/main.ts b/main.ts index ae3dbfb..6526369 100644 --- a/main.ts +++ b/main.ts @@ -142,4 +142,4 @@ const fetchAllPosts = async () => { return posts; }; -console.log(await fetchAllPosts()); \ No newline at end of file +export { fetchAllPosts, Post }; \ No newline at end of file diff --git a/web/.gitignore b/web/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/web/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/web/.vscode/extensions.json b/web/.vscode/extensions.json new file mode 100644 index 0000000..bdef820 --- /dev/null +++ b/web/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["svelte.svelte-vscode"] +} diff --git a/web/README.md b/web/README.md new file mode 100644 index 0000000..e6cd94f --- /dev/null +++ b/web/README.md @@ -0,0 +1,47 @@ +# Svelte + TS + Vite + +This template should help get you started developing with Svelte and TypeScript in Vite. + +## Recommended IDE Setup + +[VS Code](https://code.visualstudio.com/) + [Svelte](https://marketplace.visualstudio.com/items?itemName=svelte.svelte-vscode). + +## Need an official Svelte framework? + +Check out [SvelteKit](https://github.com/sveltejs/kit#readme), which is also powered by Vite. Deploy anywhere with its serverless-first approach and adapt to various platforms, with out of the box support for TypeScript, SCSS, and Less, and easily-added support for mdsvex, GraphQL, PostCSS, Tailwind CSS, and more. + +## Technical considerations + +**Why use this over SvelteKit?** + +- It brings its own routing solution which might not be preferable for some users. +- It is first and foremost a framework that just happens to use Vite under the hood, not a Vite app. + +This template contains as little as possible to get started with Vite + TypeScript + Svelte, while taking into account the developer experience with regards to HMR and intellisense. It demonstrates capabilities on par with the other `create-vite` templates and is a good starting point for beginners dipping their toes into a Vite + Svelte project. + +Should you later need the extended capabilities and extensibility provided by SvelteKit, the template has been structured similarly to SvelteKit so that it is easy to migrate. + +**Why `global.d.ts` instead of `compilerOptions.types` inside `jsconfig.json` or `tsconfig.json`?** + +Setting `compilerOptions.types` shuts out all other types not explicitly listed in the configuration. Using triple-slash references keeps the default TypeScript setting of accepting type information from the entire workspace, while also adding `svelte` and `vite/client` type information. + +**Why include `.vscode/extensions.json`?** + +Other templates indirectly recommend extensions via the README, but this file allows VS Code to prompt the user to install the recommended extension upon opening the project. + +**Why enable `allowJs` in the TS template?** + +While `allowJs: false` would indeed prevent the use of `.js` files in the project, it does not prevent the use of JavaScript syntax in `.svelte` files. In addition, it would force `checkJs: false`, bringing the worst of both worlds: not being able to guarantee the entire codebase is TypeScript, and also having worse typechecking for the existing JavaScript. In addition, there are valid use cases in which a mixed codebase may be relevant. + +**Why is HMR not preserving my local component state?** + +HMR state preservation comes with a number of gotchas! It has been disabled by default in both `svelte-hmr` and `@sveltejs/vite-plugin-svelte` due to its often surprising behavior. You can read the details [here](https://github.com/rixo/svelte-hmr#svelte-hmr). + +If you have state that's important to retain within a component, consider creating an external store which would not be replaced by HMR. + +```ts +// store.ts +// An extremely simple external store +import { writable } from 'svelte/store' +export default writable(0) +``` diff --git a/web/deno.lock b/web/deno.lock new file mode 100644 index 0000000..1e4f356 --- /dev/null +++ b/web/deno.lock @@ -0,0 +1,455 @@ +{ + "version": "4", + "specifiers": { + "npm:@atcute/bluesky@^2.0.2": "2.0.2_@atcute+client@3.0.1", + "npm:@atcute/client@^3.0.1": "3.0.1", + "npm:@sveltejs/vite-plugin-svelte@^5.0.3": "5.0.3_svelte@5.28.1__acorn@8.14.1_vite@6.3.2__picomatch@4.0.2", + "npm:@tsconfig/svelte@^5.0.4": "5.0.4", + "npm:svelte-check@^4.1.5": "4.1.6_svelte@5.28.1__acorn@8.14.1_typescript@5.7.3", + "npm:svelte@^5.23.1": "5.28.1_acorn@8.14.1", + "npm:typescript@~5.7.2": "5.7.3", + "npm:vite@^6.3.1": "6.3.2_picomatch@4.0.2" + }, + "npm": { + "@ampproject/remapping@2.3.0": { + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dependencies": [ + "@jridgewell/gen-mapping", + "@jridgewell/trace-mapping" + ] + }, + "@atcute/bluesky@2.0.2_@atcute+client@3.0.1": { + "integrity": "sha512-xU+9Rp8bzc9AOnWSc11M1urRppDt3BiWR7v2QrLt3Qoysa5jvL8j2p2w4iRT8vLByz8Q+Xgk5Kz4zWVx1zCiug==", + "dependencies": [ + "@atcute/client" + ] + }, + "@atcute/client@3.0.1": { + "integrity": "sha512-j51SuQYQj5jeKrx1DCXx+Q3fpVvO0JYGnKnJAdDSlesSLjPXjvnx1abC+hkuro58KRHHJvRA6P1MC0pmJsWfcg==" + }, + "@esbuild/aix-ppc64@0.25.2": { + "integrity": "sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==" + }, + "@esbuild/android-arm64@0.25.2": { + "integrity": "sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==" + }, + "@esbuild/android-arm@0.25.2": { + "integrity": "sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==" + }, + "@esbuild/android-x64@0.25.2": { + "integrity": "sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==" + }, + "@esbuild/darwin-arm64@0.25.2": { + "integrity": "sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==" + }, + "@esbuild/darwin-x64@0.25.2": { + "integrity": "sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==" + }, + "@esbuild/freebsd-arm64@0.25.2": { + "integrity": "sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==" + }, + "@esbuild/freebsd-x64@0.25.2": { + "integrity": "sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==" + }, + "@esbuild/linux-arm64@0.25.2": { + "integrity": "sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==" + }, + "@esbuild/linux-arm@0.25.2": { + "integrity": "sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==" + }, + "@esbuild/linux-ia32@0.25.2": { + "integrity": "sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==" + }, + "@esbuild/linux-loong64@0.25.2": { + "integrity": "sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==" + }, + "@esbuild/linux-mips64el@0.25.2": { + "integrity": "sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==" + }, + "@esbuild/linux-ppc64@0.25.2": { + "integrity": "sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==" + }, + "@esbuild/linux-riscv64@0.25.2": { + "integrity": "sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==" + }, + "@esbuild/linux-s390x@0.25.2": { + "integrity": "sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==" + }, + "@esbuild/linux-x64@0.25.2": { + "integrity": "sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==" + }, + "@esbuild/netbsd-arm64@0.25.2": { + "integrity": "sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==" + }, + "@esbuild/netbsd-x64@0.25.2": { + "integrity": "sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==" + }, + "@esbuild/openbsd-arm64@0.25.2": { + "integrity": "sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==" + }, + "@esbuild/openbsd-x64@0.25.2": { + "integrity": "sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==" + }, + "@esbuild/sunos-x64@0.25.2": { + "integrity": "sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==" + }, + "@esbuild/win32-arm64@0.25.2": { + "integrity": "sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==" + }, + "@esbuild/win32-ia32@0.25.2": { + "integrity": "sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==" + }, + "@esbuild/win32-x64@0.25.2": { + "integrity": "sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==" + }, + "@jridgewell/gen-mapping@0.3.8": { + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dependencies": [ + "@jridgewell/set-array", + "@jridgewell/sourcemap-codec", + "@jridgewell/trace-mapping" + ] + }, + "@jridgewell/resolve-uri@3.1.2": { + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==" + }, + "@jridgewell/set-array@1.2.1": { + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==" + }, + "@jridgewell/sourcemap-codec@1.5.0": { + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" + }, + "@jridgewell/trace-mapping@0.3.25": { + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dependencies": [ + "@jridgewell/resolve-uri", + "@jridgewell/sourcemap-codec" + ] + }, + "@rollup/rollup-android-arm-eabi@4.40.0": { + "integrity": "sha512-+Fbls/diZ0RDerhE8kyC6hjADCXA1K4yVNlH0EYfd2XjyH0UGgzaQ8MlT0pCXAThfxv3QUAczHaL+qSv1E4/Cg==" + }, + "@rollup/rollup-android-arm64@4.40.0": { + "integrity": "sha512-PPA6aEEsTPRz+/4xxAmaoWDqh67N7wFbgFUJGMnanCFs0TV99M0M8QhhaSCks+n6EbQoFvLQgYOGXxlMGQe/6w==" + }, + "@rollup/rollup-darwin-arm64@4.40.0": { + "integrity": "sha512-GwYOcOakYHdfnjjKwqpTGgn5a6cUX7+Ra2HeNj/GdXvO2VJOOXCiYYlRFU4CubFM67EhbmzLOmACKEfvp3J1kQ==" + }, + "@rollup/rollup-darwin-x64@4.40.0": { + "integrity": "sha512-CoLEGJ+2eheqD9KBSxmma6ld01czS52Iw0e2qMZNpPDlf7Z9mj8xmMemxEucinev4LgHalDPczMyxzbq+Q+EtA==" + }, + "@rollup/rollup-freebsd-arm64@4.40.0": { + "integrity": "sha512-r7yGiS4HN/kibvESzmrOB/PxKMhPTlz+FcGvoUIKYoTyGd5toHp48g1uZy1o1xQvybwwpqpe010JrcGG2s5nkg==" + }, + "@rollup/rollup-freebsd-x64@4.40.0": { + "integrity": "sha512-mVDxzlf0oLzV3oZOr0SMJ0lSDd3xC4CmnWJ8Val8isp9jRGl5Dq//LLDSPFrasS7pSm6m5xAcKaw3sHXhBjoRw==" + }, + "@rollup/rollup-linux-arm-gnueabihf@4.40.0": { + "integrity": "sha512-y/qUMOpJxBMy8xCXD++jeu8t7kzjlOCkoxxajL58G62PJGBZVl/Gwpm7JK9+YvlB701rcQTzjUZ1JgUoPTnoQA==" + }, + "@rollup/rollup-linux-arm-musleabihf@4.40.0": { + "integrity": "sha512-GoCsPibtVdJFPv/BOIvBKO/XmwZLwaNWdyD8TKlXuqp0veo2sHE+A/vpMQ5iSArRUz/uaoj4h5S6Pn0+PdhRjg==" + }, + "@rollup/rollup-linux-arm64-gnu@4.40.0": { + "integrity": "sha512-L5ZLphTjjAD9leJzSLI7rr8fNqJMlGDKlazW2tX4IUF9P7R5TMQPElpH82Q7eNIDQnQlAyiNVfRPfP2vM5Avvg==" + }, + "@rollup/rollup-linux-arm64-musl@4.40.0": { + "integrity": "sha512-ATZvCRGCDtv1Y4gpDIXsS+wfFeFuLwVxyUBSLawjgXK2tRE6fnsQEkE4csQQYWlBlsFztRzCnBvWVfcae/1qxQ==" + }, + "@rollup/rollup-linux-loongarch64-gnu@4.40.0": { + "integrity": "sha512-wG9e2XtIhd++QugU5MD9i7OnpaVb08ji3P1y/hNbxrQ3sYEelKJOq1UJ5dXczeo6Hj2rfDEL5GdtkMSVLa/AOg==" + }, + "@rollup/rollup-linux-powerpc64le-gnu@4.40.0": { + "integrity": "sha512-vgXfWmj0f3jAUvC7TZSU/m/cOE558ILWDzS7jBhiCAFpY2WEBn5jqgbqvmzlMjtp8KlLcBlXVD2mkTSEQE6Ixw==" + }, + "@rollup/rollup-linux-riscv64-gnu@4.40.0": { + "integrity": "sha512-uJkYTugqtPZBS3Z136arevt/FsKTF/J9dEMTX/cwR7lsAW4bShzI2R0pJVw+hcBTWF4dxVckYh72Hk3/hWNKvA==" + }, + "@rollup/rollup-linux-riscv64-musl@4.40.0": { + "integrity": "sha512-rKmSj6EXQRnhSkE22+WvrqOqRtk733x3p5sWpZilhmjnkHkpeCgWsFFo0dGnUGeA+OZjRl3+VYq+HyCOEuwcxQ==" + }, + "@rollup/rollup-linux-s390x-gnu@4.40.0": { + "integrity": "sha512-SpnYlAfKPOoVsQqmTFJ0usx0z84bzGOS9anAC0AZ3rdSo3snecihbhFTlJZ8XMwzqAcodjFU4+/SM311dqE5Sw==" + }, + "@rollup/rollup-linux-x64-gnu@4.40.0": { + "integrity": "sha512-RcDGMtqF9EFN8i2RYN2W+64CdHruJ5rPqrlYw+cgM3uOVPSsnAQps7cpjXe9be/yDp8UC7VLoCoKC8J3Kn2FkQ==" + }, + "@rollup/rollup-linux-x64-musl@4.40.0": { + "integrity": "sha512-HZvjpiUmSNx5zFgwtQAV1GaGazT2RWvqeDi0hV+AtC8unqqDSsaFjPxfsO6qPtKRRg25SisACWnJ37Yio8ttaw==" + }, + "@rollup/rollup-win32-arm64-msvc@4.40.0": { + "integrity": "sha512-UtZQQI5k/b8d7d3i9AZmA/t+Q4tk3hOC0tMOMSq2GlMYOfxbesxG4mJSeDp0EHs30N9bsfwUvs3zF4v/RzOeTQ==" + }, + "@rollup/rollup-win32-ia32-msvc@4.40.0": { + "integrity": "sha512-+m03kvI2f5syIqHXCZLPVYplP8pQch9JHyXKZ3AGMKlg8dCyr2PKHjwRLiW53LTrN/Nc3EqHOKxUxzoSPdKddA==" + }, + "@rollup/rollup-win32-x64-msvc@4.40.0": { + "integrity": "sha512-lpPE1cLfP5oPzVjKMx10pgBmKELQnFJXHgvtHCtuJWOv8MxqdEIMNtgHgBFf7Ea2/7EuVwa9fodWUfXAlXZLZQ==" + }, + "@sveltejs/acorn-typescript@1.0.5_acorn@8.14.1": { + "integrity": "sha512-IwQk4yfwLdibDlrXVE04jTZYlLnwsTT2PIOQQGNLWfjavGifnk1JD1LcZjZaBTRcxZu2FfPfNLOE04DSu9lqtQ==", + "dependencies": [ + "acorn" + ] + }, + "@sveltejs/vite-plugin-svelte-inspector@4.0.1_@sveltejs+vite-plugin-svelte@5.0.3__svelte@5.28.1___acorn@8.14.1__vite@6.3.2___picomatch@4.0.2_svelte@5.28.1__acorn@8.14.1_vite@6.3.2__picomatch@4.0.2": { + "integrity": "sha512-J/Nmb2Q2y7mck2hyCX4ckVHcR5tu2J+MtBEQqpDrrgELZ2uvraQcK/ioCV61AqkdXFgriksOKIceDcQmqnGhVw==", + "dependencies": [ + "@sveltejs/vite-plugin-svelte", + "debug", + "svelte", + "vite" + ] + }, + "@sveltejs/vite-plugin-svelte@5.0.3_svelte@5.28.1__acorn@8.14.1_vite@6.3.2__picomatch@4.0.2": { + "integrity": "sha512-MCFS6CrQDu1yGwspm4qtli0e63vaPCehf6V7pIMP15AsWgMKrqDGCPFF/0kn4SP0ii4aySu4Pa62+fIRGFMjgw==", + "dependencies": [ + "@sveltejs/vite-plugin-svelte-inspector", + "debug", + "deepmerge", + "kleur", + "magic-string", + "svelte", + "vite", + "vitefu" + ] + }, + "@tsconfig/svelte@5.0.4": { + "integrity": "sha512-BV9NplVgLmSi4mwKzD8BD/NQ8erOY/nUE/GpgWe2ckx+wIQF5RyRirn/QsSSCPeulVpc3RA/iJt6DpfTIZps0Q==" + }, + "@types/estree@1.0.7": { + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==" + }, + "acorn@8.14.1": { + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==" + }, + "aria-query@5.3.2": { + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==" + }, + "axobject-query@4.1.0": { + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==" + }, + "chokidar@4.0.3": { + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dependencies": [ + "readdirp" + ] + }, + "clsx@2.1.1": { + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==" + }, + "debug@4.4.0": { + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dependencies": [ + "ms" + ] + }, + "deepmerge@4.3.1": { + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==" + }, + "esbuild@0.25.2": { + "integrity": "sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==", + "dependencies": [ + "@esbuild/aix-ppc64", + "@esbuild/android-arm", + "@esbuild/android-arm64", + "@esbuild/android-x64", + "@esbuild/darwin-arm64", + "@esbuild/darwin-x64", + "@esbuild/freebsd-arm64", + "@esbuild/freebsd-x64", + "@esbuild/linux-arm", + "@esbuild/linux-arm64", + "@esbuild/linux-ia32", + "@esbuild/linux-loong64", + "@esbuild/linux-mips64el", + "@esbuild/linux-ppc64", + "@esbuild/linux-riscv64", + "@esbuild/linux-s390x", + "@esbuild/linux-x64", + "@esbuild/netbsd-arm64", + "@esbuild/netbsd-x64", + "@esbuild/openbsd-arm64", + "@esbuild/openbsd-x64", + "@esbuild/sunos-x64", + "@esbuild/win32-arm64", + "@esbuild/win32-ia32", + "@esbuild/win32-x64" + ] + }, + "esm-env@1.2.2": { + "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==" + }, + "esrap@1.4.6": { + "integrity": "sha512-F/D2mADJ9SHY3IwksD4DAXjTt7qt7GWUf3/8RhCNWmC/67tyb55dpimHmy7EplakFaflV0R/PC+fdSPqrRHAQw==", + "dependencies": [ + "@jridgewell/sourcemap-codec" + ] + }, + "fdir@6.4.4_picomatch@4.0.2": { + "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==", + "dependencies": [ + "picomatch" + ] + }, + "fsevents@2.3.3": { + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==" + }, + "is-reference@3.0.3": { + "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", + "dependencies": [ + "@types/estree" + ] + }, + "kleur@4.1.5": { + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==" + }, + "locate-character@3.0.0": { + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==" + }, + "magic-string@0.30.17": { + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "dependencies": [ + "@jridgewell/sourcemap-codec" + ] + }, + "mri@1.2.0": { + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==" + }, + "ms@2.1.3": { + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "nanoid@3.3.11": { + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==" + }, + "picocolors@1.1.1": { + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + }, + "picomatch@4.0.2": { + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==" + }, + "postcss@8.5.3": { + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "dependencies": [ + "nanoid", + "picocolors", + "source-map-js" + ] + }, + "readdirp@4.1.2": { + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==" + }, + "rollup@4.40.0": { + "integrity": "sha512-Noe455xmA96nnqH5piFtLobsGbCij7Tu+tb3c1vYjNbTkfzGqXqQXG3wJaYXkRZuQ0vEYN4bhwg7QnIrqB5B+w==", + "dependencies": [ + "@rollup/rollup-android-arm-eabi", + "@rollup/rollup-android-arm64", + "@rollup/rollup-darwin-arm64", + "@rollup/rollup-darwin-x64", + "@rollup/rollup-freebsd-arm64", + "@rollup/rollup-freebsd-x64", + "@rollup/rollup-linux-arm-gnueabihf", + "@rollup/rollup-linux-arm-musleabihf", + "@rollup/rollup-linux-arm64-gnu", + "@rollup/rollup-linux-arm64-musl", + "@rollup/rollup-linux-loongarch64-gnu", + "@rollup/rollup-linux-powerpc64le-gnu", + "@rollup/rollup-linux-riscv64-gnu", + "@rollup/rollup-linux-riscv64-musl", + "@rollup/rollup-linux-s390x-gnu", + "@rollup/rollup-linux-x64-gnu", + "@rollup/rollup-linux-x64-musl", + "@rollup/rollup-win32-arm64-msvc", + "@rollup/rollup-win32-ia32-msvc", + "@rollup/rollup-win32-x64-msvc", + "@types/estree", + "fsevents" + ] + }, + "sade@1.8.1": { + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dependencies": [ + "mri" + ] + }, + "source-map-js@1.2.1": { + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==" + }, + "svelte-check@4.1.6_svelte@5.28.1__acorn@8.14.1_typescript@5.7.3": { + "integrity": "sha512-P7w/6tdSfk3zEVvfsgrp3h3DFC75jCdZjTQvgGJtjPORs1n7/v2VMPIoty3PWv7jnfEm3x0G/p9wH4pecTb0Wg==", + "dependencies": [ + "@jridgewell/trace-mapping", + "chokidar", + "fdir", + "picocolors", + "sade", + "svelte", + "typescript" + ] + }, + "svelte@5.28.1_acorn@8.14.1": { + "integrity": "sha512-iOa9WmfNG95lSOSJdMhdjJ4Afok7IRAQYXpbnxhd5EINnXseG0GVa9j6WPght4eX78XfFez45Fi+uRglGKPV/Q==", + "dependencies": [ + "@ampproject/remapping", + "@jridgewell/sourcemap-codec", + "@sveltejs/acorn-typescript", + "@types/estree", + "acorn", + "aria-query", + "axobject-query", + "clsx", + "esm-env", + "esrap", + "is-reference", + "locate-character", + "magic-string", + "zimmerframe" + ] + }, + "tinyglobby@0.2.13_picomatch@4.0.2": { + "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==", + "dependencies": [ + "fdir", + "picomatch" + ] + }, + "typescript@5.7.3": { + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==" + }, + "vite@6.3.2_picomatch@4.0.2": { + "integrity": "sha512-ZSvGOXKGceizRQIZSz7TGJ0pS3QLlVY/9hwxVh17W3re67je1RKYzFHivZ/t0tubU78Vkyb9WnHPENSBCzbckg==", + "dependencies": [ + "esbuild", + "fdir", + "fsevents", + "picomatch", + "postcss", + "rollup", + "tinyglobby" + ] + }, + "vitefu@1.0.6_vite@6.3.2__picomatch@4.0.2": { + "integrity": "sha512-+Rex1GlappUyNN6UfwbVZne/9cYC4+R2XDk9xkNXBKMw6HQagdX9PgZ8V2v1WUSK1wfBLp7qbI1+XSNIlB1xmA==", + "dependencies": [ + "vite" + ] + }, + "zimmerframe@1.1.2": { + "integrity": "sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==" + } + }, + "workspace": { + "packageJson": { + "dependencies": [ + "npm:@atcute/bluesky@^2.0.2", + "npm:@atcute/client@^3.0.1", + "npm:@sveltejs/vite-plugin-svelte@^5.0.3", + "npm:@tsconfig/svelte@^5.0.4", + "npm:svelte-check@^4.1.5", + "npm:svelte@^5.23.1", + "npm:typescript@~5.7.2", + "npm:vite@^6.3.1" + ] + } + } +} diff --git a/web/index.html b/web/index.html new file mode 100644 index 0000000..3eb2a08 --- /dev/null +++ b/web/index.html @@ -0,0 +1,13 @@ + + + + + + + ATProto PDS + + +
+ + + diff --git a/web/package.json b/web/package.json new file mode 100644 index 0000000..36d1491 --- /dev/null +++ b/web/package.json @@ -0,0 +1,24 @@ +{ + "name": "web", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview", + "check": "svelte-check --tsconfig ./tsconfig.app.json && tsc -p tsconfig.node.json" + }, + "dependencies": { + "@atcute/bluesky": "^2.0.2", + "@atcute/client": "^3.0.1" + }, + "devDependencies": { + "@sveltejs/vite-plugin-svelte": "^5.0.3", + "@tsconfig/svelte": "^5.0.4", + "svelte": "^5.23.1", + "svelte-check": "^4.1.5", + "typescript": "~5.7.2", + "vite": "^6.3.1" + } +} diff --git a/web/public/vite.svg b/web/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/web/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/public/witchcraft.ico b/web/public/witchcraft.ico new file mode 100644 index 0000000000000000000000000000000000000000..af539bbd413a39b79da495ab792c164e787fb4b3 GIT binary patch literal 111836 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 literal 0 HcmV?d00001 diff --git a/web/src/App.svelte b/web/src/App.svelte new file mode 100644 index 0000000..c51f79c --- /dev/null +++ b/web/src/App.svelte @@ -0,0 +1,19 @@ + + +
+ {#await postsPromise} +

Loading...

+ {:then postsData} + {#each postsData as postObject} + + {/each} + {/await} +
+ + diff --git a/web/src/app.css b/web/src/app.css new file mode 100644 index 0000000..61ba367 --- /dev/null +++ b/web/src/app.css @@ -0,0 +1,79 @@ +:root { + font-family: system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +.card { + padding: 2em; +} + +#app { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} diff --git a/web/src/assets/svelte.svg b/web/src/assets/svelte.svg new file mode 100644 index 0000000..c5e0848 --- /dev/null +++ b/web/src/assets/svelte.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/src/lib/PostComponent.svelte b/web/src/lib/PostComponent.svelte new file mode 100644 index 0000000..6a4cd16 --- /dev/null +++ b/web/src/lib/PostComponent.svelte @@ -0,0 +1,21 @@ + + +
+

{post.displayName} | {post.timenotstamp}

+

{post.text}

+ {#if post.replyingDid} +

Replying to: {post.replyingDid}

+ {/if} + {#if post.imagesLinksCid} + {#each post.imagesLinksCid as imageLink} + + {/each} + {/if} + {#if post.videosLinkCid} +
\ No newline at end of file diff --git a/web/src/lib/pdsfetch.ts b/web/src/lib/pdsfetch.ts new file mode 100644 index 0000000..e2ae36d --- /dev/null +++ b/web/src/lib/pdsfetch.ts @@ -0,0 +1,153 @@ +import { simpleFetchHandler, XRPC } from "@atcute/client"; +import "@atcute/bluesky/lexicons"; +// import { ComAtprotoRepoListRecords } from "@atcute/client/lexicons"; +// import { AppBskyFeedPost } from "@atcute/client/lexicons"; +// import { AppBskyActorDefs } from "@atcute/client/lexicons"; + +interface AccountMetadata { + did: string; + displayName: string; + avatarCid: string | null; +} +class Post { + authorDid: string; + displayName : string; + text: string; + timestamp: number; + timenotstamp: string; + quotingDid: string | null; + replyingDid: string | null; + imagesLinksCid: string[] | null; + imagesAltText: string[] | null; + videosLinkCid: string | null; + videosLinksUrls: string[] | null; + + constructor(record: ComAtprotoRepoListRecords.Record, account : AccountMetadata) { + this.authorDid = account.did; + this.displayName = account.displayName; + const post = record.value as AppBskyFeedPost.Record; + this.timenotstamp = post.createdAt; + this.text = post.text; + this.timestamp = Date.parse(post.createdAt); + if (post.reply) { + this.replyingDid = didFromATuri(post.reply.parent.uri).repo; + } else { + this.replyingDid = null; + } + this.quotingDid = null; + this.imagesLinksCid = null; + this.videosLinkCid = null; + switch (post.embed?.$type) { + case "app.bsky.embed.images": + this.imagesLinksCid = post.embed.images.map((imageRecord) => + imageRecord.image.ref.$link + ); + this.imagesAltText = post.embed.images.map((imageRecord) => imageRecord.alt || "no alt text :(") + break; + case "app.bsky.embed.video": + this.videosLinkCid = post.embed.video.ref.$link; + break; + case "app.bsky.embed.record": + this.quotingDid = didFromATuri(post.embed.record.uri).repo; + break; + case "app.bsky.embed.recordWithMedia": + this.quotingDid = didFromATuri(post.embed.record.record.uri).repo; + switch (post.embed.media.$type) { + case "app.bsky.embed.images": + this.imagesLinksCid = post.embed.media.images.map((imageRecord) => + imageRecord.image.ref.$link + ); + this.imagesAltText = post.embed.images.map((imageRecord) => imageRecord.alt || "no alt text :(") + + break; + case "app.bsky.embed.video": + this.videosLinkCid = post.embed.media.video.ref.$link; + + break; + } + break; + } + } +} + +const didFromATuri = (aturi: string) => { + const parts = aturi.split("/"); + return { + repo: parts[2], + collection: parts[3], + rkey: parts[4], + }; +}; + +const rpc = new XRPC({ + handler: simpleFetchHandler({ + service: "https://pds.witchcraft.systems", + }), +}); + +const getDidsFromPDS = async () => { + const { data } = await rpc.get("com.atproto.sync.listRepos", { + params: {}, + }); + return data.repos.map((repo: any) => (repo.did)); +}; +const getAccountMetadata = async (did: `did:${string}:${string}`) => { + // gonna assume self exists in the app.bsky.actor.profile + const { data } = await rpc.get("com.atproto.repo.getRecord", { + params: { + repo: did, + collection: "app.bsky.actor.profile", + rkey: "self", + }, + }); + const value = data.value as AppBskyActorDefs.ProfileView; + const account: AccountMetadata = { + did: did, + displayName: value.displayName || "", + avatarCid: null, + }; + if (value.avatar) { + account.avatarCid = value.avatar.ref["$link"]; + } + return account; +}; + +const getAllMetadataFromPds = async () => { + const dids = await getDidsFromPDS(); + const metadata = await Promise.all( + dids.map(async (repo: `did:${string}:${string}`) => { + return await getAccountMetadata(repo); + }), + ); + return metadata; +}; + +const fetchPosts = async (did: string) => { + const { data } = await rpc.get("com.atproto.repo.listRecords", { + params: { + repo: did, + collection: "app.bsky.feed.post", + limit: 5, + }, + }); + return { + records: data.records as ComAtprotoRepoListRecords.Record[], + did: did, + }; +}; + +const fetchAllPosts = async () => { + const users: AccountMetadata[] = await getAllMetadataFromPds(); + const postRecords = await Promise.all( + users.map(async (metadata: AccountMetadata) => + await fetchPosts(metadata.did) + ), + ); + const posts : Post[] = postRecords.flatMap((userFetch) => + userFetch.records.map((record) => new Post(record, users.find((user : AccountMetadata) => user.did == userFetch.did))) + ); + posts.sort((a, b) => b.timestamp - a.timestamp); + return posts; +}; + +export { fetchAllPosts, Post }; \ No newline at end of file diff --git a/web/src/main.ts b/web/src/main.ts new file mode 100644 index 0000000..664a057 --- /dev/null +++ b/web/src/main.ts @@ -0,0 +1,9 @@ +import { mount } from 'svelte' +import './app.css' +import App from './App.svelte' + +const app = mount(App, { + target: document.getElementById('app')!, +}) + +export default app diff --git a/web/src/vite-env.d.ts b/web/src/vite-env.d.ts new file mode 100644 index 0000000..4078e74 --- /dev/null +++ b/web/src/vite-env.d.ts @@ -0,0 +1,2 @@ +/// +/// diff --git a/web/svelte.config.js b/web/svelte.config.js new file mode 100644 index 0000000..b0683fd --- /dev/null +++ b/web/svelte.config.js @@ -0,0 +1,7 @@ +import { vitePreprocess } from '@sveltejs/vite-plugin-svelte' + +export default { + // Consult https://svelte.dev/docs#compile-time-svelte-preprocess + // for more information about preprocessors + preprocess: vitePreprocess(), +} diff --git a/web/tsconfig.app.json b/web/tsconfig.app.json new file mode 100644 index 0000000..55a2f9b --- /dev/null +++ b/web/tsconfig.app.json @@ -0,0 +1,20 @@ +{ + "extends": "@tsconfig/svelte/tsconfig.json", + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "module": "ESNext", + "resolveJsonModule": true, + /** + * Typecheck JS in `.svelte` and `.js` files by default. + * Disable checkJs if you'd like to use dynamic types in JS. + * Note that setting allowJs false does not prevent the use + * of JS in `.svelte` files. + */ + "allowJs": true, + "checkJs": true, + "isolatedModules": true, + "moduleDetection": "force" + }, + "include": ["src/**/*.ts", "src/**/*.js", "src/**/*.svelte"] +} diff --git a/web/tsconfig.json b/web/tsconfig.json new file mode 100644 index 0000000..1ffef60 --- /dev/null +++ b/web/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/web/tsconfig.node.json b/web/tsconfig.node.json new file mode 100644 index 0000000..db0becc --- /dev/null +++ b/web/tsconfig.node.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "ES2022", + "lib": ["ES2023"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/web/vite.config.ts b/web/vite.config.ts new file mode 100644 index 0000000..d32eba1 --- /dev/null +++ b/web/vite.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import { svelte } from '@sveltejs/vite-plugin-svelte' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [svelte()], +})