diff --git a/.env.example b/.env.example index aa929cd1..d26e7962 100644 --- a/.env.example +++ b/.env.example @@ -1,6 +1,3 @@ -# Run `npx vercel env pull .env` to pull env variables from Vercel. -# The project needs to be linked with `npx vercel link`. - # Bluesky DID. BLUESKY_DID=did @@ -23,3 +20,6 @@ GITHUB_TOKEN=token # On Railway: `https://${{RAILWAY_PUBLIC_DOMAIN}}`. PUBLIC_URL_ORIGIN=origin +# API key to generate OG image links. +VIRALCARDS_API_KEY=key + diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 972f7e11..acf8a296 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,6 +15,7 @@ env: EO_LIST_ID: ${{ secrets.EO_LIST_ID }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} PUBLIC_URL_ORIGIN: ${{ vars.PUBLIC_URL_ORIGIN }} + VIRALCARDS_API_KEY: ${{ secrets.VIRALCARDS_API_KEY }} jobs: checks: @@ -40,4 +41,4 @@ jobs: # - name: Install Playwright Chromium # run: pnpm exec playwright install --with-deps chromium - - run: pnpm test:unit + # - run: pnpm test:unit diff --git a/package.json b/package.json index 6f2ea4a4..a909d407 100644 --- a/package.json +++ b/package.json @@ -12,28 +12,24 @@ "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", "lint": "prettier --check . && eslint .", - "format": "prettier --write .", - "test:e2e": "playwright test", - "test:unit": "vitest", - "test": "pnpm test:unit && pnpm run test:e2e" + "format": "prettier --write ." }, "devDependencies": { - "@atproto/api": "^0.15.27", "@eslint/compat": "^1.3.1", - "@eslint/js": "^9.31.0", - "@iconify/svelte": "^5.0.0", - "@lucide/svelte": "^0.525.0", - "@maiertech/sveltekit-helpers": "^0.26.0", + "@eslint/js": "^9.32.0", + "@iconify/svelte": "^5.0.1", + "@lucide/svelte": "^0.526.0", + "@maiertech/sveltekit-helpers": "^0.28.0", "@playwright/test": "^1.54.1", "@sindresorhus/slugify": "^2.2.1", "@stackblitz/sdk": "^1.11.0", "@sveltejs/adapter-node": "^5.2.13", - "@sveltejs/kit": "^2.25.1", + "@sveltejs/kit": "^2.26.1", "@sveltejs/vite-plugin-svelte": "^6.1.0", "@tailwindcss/vite": "^4.1.11", "@types/node": "^24.1.0", "@types/rss": "^0.0.32", - "eslint": "^9.31.0", + "eslint": "^9.32.0", "eslint-config-prettier": "^10.1.8", "eslint-plugin-svelte": "^3.11.0", "globals": "^16.3.0", @@ -43,16 +39,15 @@ "prettier-plugin-tailwindcss": "^0.6.14", "rss": "^1.2.2", "shiki": "^3.8.1", - "svelte": "^5.36.13", + "svelte": "^5.36.17", "svelte-check": "^4.3.0", "sveltekit-embed": "^0.0.22", "tailwind-merge": "^3.3.1", "tailwindcss": "^4.1.11", "typescript": "^5.8.3", "typescript-eslint": "^8.38.0", - "vite": "^7.0.5", - "vitest": "^3.2.4", - "zod": "^4.0.5" + "vite": "^7.0.6", + "zod": "^4.0.10" }, "pnpm": { "onlyBuiltDependencies": [ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9e8f90dd..a1e31867 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,24 +8,21 @@ importers: .: devDependencies: - '@atproto/api': - specifier: ^0.15.27 - version: 0.15.27 '@eslint/compat': specifier: ^1.3.1 - version: 1.3.1(eslint@9.31.0(jiti@2.4.2)) + version: 1.3.1(eslint@9.32.0(jiti@2.5.1)) '@eslint/js': - specifier: ^9.31.0 - version: 9.31.0 + specifier: ^9.32.0 + version: 9.32.0 '@iconify/svelte': - specifier: ^5.0.0 - version: 5.0.0(svelte@5.36.13) + specifier: ^5.0.1 + version: 5.0.1(svelte@5.36.17) '@lucide/svelte': - specifier: ^0.525.0 - version: 0.525.0(svelte@5.36.13) + specifier: ^0.526.0 + version: 0.526.0(svelte@5.36.17) '@maiertech/sveltekit-helpers': - specifier: ^0.26.0 - version: 0.26.0(@sveltejs/kit@2.25.1(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.36.13)(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1)))(svelte@5.36.13)(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1)))(svelte@5.36.13)(tailwindcss@4.1.11)(zod@4.0.5) + specifier: ^0.28.0 + version: 0.28.0(@sveltejs/kit@2.26.1(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.36.17)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.6.1)))(svelte@5.36.17)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.6.1)))(svelte@5.36.17)(tailwindcss@4.1.11)(zod@4.0.10) '@playwright/test': specifier: ^1.54.1 version: 1.54.1 @@ -37,16 +34,16 @@ importers: version: 1.11.0 '@sveltejs/adapter-node': specifier: ^5.2.13 - version: 5.2.13(@sveltejs/kit@2.25.1(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.36.13)(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1)))(svelte@5.36.13)(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1))) + version: 5.2.13(@sveltejs/kit@2.26.1(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.36.17)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.6.1)))(svelte@5.36.17)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.6.1))) '@sveltejs/kit': - specifier: ^2.25.1 - version: 2.25.1(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.36.13)(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1)))(svelte@5.36.13)(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1)) + specifier: ^2.26.1 + version: 2.26.1(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.36.17)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.6.1)))(svelte@5.36.17)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.6.1)) '@sveltejs/vite-plugin-svelte': specifier: ^6.1.0 - version: 6.1.0(svelte@5.36.13)(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1)) + version: 6.1.0(svelte@5.36.17)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.6.1)) '@tailwindcss/vite': specifier: ^4.1.11 - version: 4.1.11(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1)) + version: 4.1.11(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.6.1)) '@types/node': specifier: ^24.1.0 version: 24.1.0 @@ -54,29 +51,29 @@ importers: specifier: ^0.0.32 version: 0.0.32 eslint: - specifier: ^9.31.0 - version: 9.31.0(jiti@2.4.2) + specifier: ^9.32.0 + version: 9.32.0(jiti@2.5.1) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.31.0(jiti@2.4.2)) + version: 10.1.8(eslint@9.32.0(jiti@2.5.1)) eslint-plugin-svelte: specifier: ^3.11.0 - version: 3.11.0(eslint@9.31.0(jiti@2.4.2))(svelte@5.36.13) + version: 3.11.0(eslint@9.32.0(jiti@2.5.1))(svelte@5.36.17) globals: specifier: ^16.3.0 version: 16.3.0 mdsvex: specifier: ^0.12.6 - version: 0.12.6(svelte@5.36.13) + version: 0.12.6(svelte@5.36.17) prettier: specifier: ^3.6.2 version: 3.6.2 prettier-plugin-svelte: specifier: ^3.4.0 - version: 3.4.0(prettier@3.6.2)(svelte@5.36.13) + version: 3.4.0(prettier@3.6.2)(svelte@5.36.17) prettier-plugin-tailwindcss: specifier: ^0.6.14 - version: 0.6.14(prettier-plugin-svelte@3.4.0(prettier@3.6.2)(svelte@5.36.13))(prettier@3.6.2) + version: 0.6.14(prettier-plugin-svelte@3.4.0(prettier@3.6.2)(svelte@5.36.17))(prettier@3.6.2) rss: specifier: ^1.2.2 version: 1.2.2 @@ -84,14 +81,14 @@ importers: specifier: ^3.8.1 version: 3.8.1 svelte: - specifier: ^5.36.13 - version: 5.36.13 + specifier: ^5.36.17 + version: 5.36.17 svelte-check: specifier: ^4.3.0 - version: 4.3.0(picomatch@4.0.3)(svelte@5.36.13)(typescript@5.8.3) + version: 4.3.0(picomatch@4.0.3)(svelte@5.36.17)(typescript@5.8.3) sveltekit-embed: specifier: ^0.0.22 - version: 0.0.22(svelte@5.36.13) + version: 0.0.22(svelte@5.36.17) tailwind-merge: specifier: ^3.3.1 version: 3.3.1 @@ -103,16 +100,13 @@ importers: version: 5.8.3 typescript-eslint: specifier: ^8.38.0 - version: 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + version: 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) vite: - specifier: ^7.0.5 - version: 7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1) - vitest: - specifier: ^3.2.4 - version: 3.2.4(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1) + specifier: ^7.0.6 + version: 7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.6.1) zod: - specifier: ^4.0.5 - version: 4.0.5 + specifier: ^4.0.10 + version: 4.0.10 packages: @@ -120,21 +114,6 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@atproto/api@0.15.27': - resolution: {integrity: sha512-ok/WGafh1nz4t8pEQGtAF/32x2E2VDWU4af6BajkO5Gky2jp2q6cv6aB2A5yuvNNcc3XkYMYipsqVHVwLPMF9g==} - - '@atproto/common-web@0.4.2': - resolution: {integrity: sha512-vrXwGNoFGogodjQvJDxAeP3QbGtawgZute2ed1XdRO0wMixLk3qewtikZm06H259QDJVu6voKC5mubml+WgQUw==} - - '@atproto/lexicon@0.4.12': - resolution: {integrity: sha512-fcEvEQ1GpQYF5igZ4IZjPWEoWVpsEF22L9RexxLS3ptfySXLflEyH384e7HITzO/73McDeaJx3lqHIuqn9ulnw==} - - '@atproto/syntax@0.4.0': - resolution: {integrity: sha512-b9y5ceHS8YKOfP3mdKmwAx5yVj9294UN7FG2XzP6V5aKUdFazEYRnR9m5n5ZQFKa3GNvz7de9guZCJ/sUTcOAA==} - - '@atproto/xrpc@0.7.1': - resolution: {integrity: sha512-ANHEzlskYlMEdH18m+Itp3a8d0pEJao2qoDybDoMupTnoeNkya4VKIaOgAi6ERQnqatBBZyn9asW+7rJmSt/8g==} - '@esbuild/aix-ppc64@0.25.8': resolution: {integrity: sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==} engines: {node: '>=18'} @@ -326,8 +305,8 @@ packages: resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.31.0': - resolution: {integrity: sha512-LOm5OVt7D4qiKCqoiPbA7LWmI+tbw1VbTUowBcUMgQSuM6poJufkFkYDcQpo5KfgD39TnNySV26QjOh7VFpSyw==} + '@eslint/js@9.32.0': + resolution: {integrity: sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.6': @@ -358,8 +337,8 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} - '@iconify/svelte@5.0.0': - resolution: {integrity: sha512-Bm5iKnNpIWHuUlWaaf16QgVL1tcbQUUSdPdkvDlpmYXg3nFJSA1SLY9V4rRTd+K4h3QT12ZS7JHFLkf8khQd8Q==} + '@iconify/svelte@5.0.1': + resolution: {integrity: sha512-nR1ApafyeRDcsx6ytd+0mzaY0ASYfG5YBW9dN8rUWxwi792/HX401qAZEkXSjT0iHm2Dgua+PwXDs/3ttJhkqQ==} peerDependencies: svelte: '>4.0.0' @@ -383,18 +362,18 @@ packages: '@jridgewell/trace-mapping@0.3.29': resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} - '@lucide/svelte@0.525.0': - resolution: {integrity: sha512-dyUxkXzepagLUzL8jHQNdeH286nC66ClLACsg+Neu/bjkRJWPWMzkT+H0DKlE70QdkicGCfs1ZGmXCc351hmZA==} + '@lucide/svelte@0.526.0': + resolution: {integrity: sha512-D0pRA/tTLajPFok7gr5+bMeGeEsszAJOSx02i/jPuiGiakj1DHj3D+OEjTyYLeSHAYOmRu5AdWZB/Ft01tdAUQ==} peerDependencies: svelte: ^5 - '@maiertech/sveltekit-helpers@0.26.0': - resolution: {integrity: sha512-qtryd1Px5GS/02f94LZpbOCCdP0MPI5SNDrJXZTF58gC0YV58Xdyhb19eis+hvYtylFrHUuZziqVWlZxlYFPOg==, tarball: https://npm.pkg.github.com/download/@maiertech/sveltekit-helpers/0.26.0/4b505e8bd701f9cbe08e367fc9c72a0787bce3fd} + '@maiertech/sveltekit-helpers@0.28.0': + resolution: {integrity: sha512-liZ5YB2CtVWsUCwmgF2zXwyDhHvny6qoQYO4VrshO8hUuVCD3TAt527pXwmy1dDnGreKB1Xv3jn0/AoOJLwyIA==, tarball: https://npm.pkg.github.com/download/@maiertech/sveltekit-helpers/0.28.0/ef861c1951ae67e16a620e66f4b51545b3b989fb} peerDependencies: '@sveltejs/kit': ^2.25.1 svelte: ^5.36.10 tailwindcss: ^4.1.11 - zod: ^4.0.5 + zod: ^4.0.8 '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -504,103 +483,103 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.45.1': - resolution: {integrity: sha512-NEySIFvMY0ZQO+utJkgoMiCAjMrGvnbDLHvcmlA33UXJpYBCvlBEbMMtV837uCkS+plG2umfhn0T5mMAxGrlRA==} + '@rollup/rollup-android-arm-eabi@4.45.3': + resolution: {integrity: sha512-8oQkCTve4H4B4JpmD2FV7fV2ZPTxJHN//bRhCqPUU8v6c5APlxteAXyc7BFaEb4aGpUzrPLU4PoAcGhwmRzZTA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.45.1': - resolution: {integrity: sha512-ujQ+sMXJkg4LRJaYreaVx7Z/VMgBBd89wGS4qMrdtfUFZ+TSY5Rs9asgjitLwzeIbhwdEhyj29zhst3L1lKsRQ==} + '@rollup/rollup-android-arm64@4.45.3': + resolution: {integrity: sha512-StOsmdXHU2hx3UFTTs6yYxCSwSIgLsfjUBICXyWj625M32OOjakXlaZuGKL+jA3Nvv35+hMxrm/64eCoT07SYQ==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.45.1': - resolution: {integrity: sha512-FSncqHvqTm3lC6Y13xncsdOYfxGSLnP+73k815EfNmpewPs+EyM49haPS105Rh4aF5mJKywk9X0ogzLXZzN9lA==} + '@rollup/rollup-darwin-arm64@4.45.3': + resolution: {integrity: sha512-6CfLF3eqKhCdhK0GUnR5ZS99OFz+dtOeB/uePznLKxjCsk5QjT/V0eSEBb4vj+o/ri3i35MseSEQHCLLAgClVw==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.45.1': - resolution: {integrity: sha512-2/vVn/husP5XI7Fsf/RlhDaQJ7x9zjvC81anIVbr4b/f0xtSmXQTFcGIQ/B1cXIYM6h2nAhJkdMHTnD7OtQ9Og==} + '@rollup/rollup-darwin-x64@4.45.3': + resolution: {integrity: sha512-QLWyWmAJG9elNTNLdcSXUT/M+J7DhEmvs1XPHYcgYkse3UHf9iWTJ+yTPlKMIetiQnNi+cNp+gY4gvjDpREfKw==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.45.1': - resolution: {integrity: sha512-4g1kaDxQItZsrkVTdYQ0bxu4ZIQ32cotoQbmsAnW1jAE4XCMbcBPDirX5fyUzdhVCKgPcrwWuucI8yrVRBw2+g==} + '@rollup/rollup-freebsd-arm64@4.45.3': + resolution: {integrity: sha512-ZOvBq+5nL0yrZIEo1eq6r7MPvkJ8kC1XATS/yHvcq3WbDNKNKBQ1uIF4hicyzDMoJt72G+sn1nKsFXpifZyRDA==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.45.1': - resolution: {integrity: sha512-L/6JsfiL74i3uK1Ti2ZFSNsp5NMiM4/kbbGEcOCps99aZx3g8SJMO1/9Y0n/qKlWZfn6sScf98lEOUe2mBvW9A==} + '@rollup/rollup-freebsd-x64@4.45.3': + resolution: {integrity: sha512-AYvGR07wecEnyYSovyJ71pTOulbNvsrpRpK6i/IM1b0UGX1vFx51afYuPYPxnvE9aCl5xPnhQicEvdIMxClRgQ==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.45.1': - resolution: {integrity: sha512-RkdOTu2jK7brlu+ZwjMIZfdV2sSYHK2qR08FUWcIoqJC2eywHbXr0L8T/pONFwkGukQqERDheaGTeedG+rra6Q==} + '@rollup/rollup-linux-arm-gnueabihf@4.45.3': + resolution: {integrity: sha512-Yx8Cp38tfRRToVLuIWzBHV25/QPzpUreOPIiUuNV7KahNPurYg2pYQ4l7aYnvpvklO1riX4643bXLvDsYSBIrA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.45.1': - resolution: {integrity: sha512-3kJ8pgfBt6CIIr1o+HQA7OZ9mp/zDk3ctekGl9qn/pRBgrRgfwiffaUmqioUGN9hv0OHv2gxmvdKOkARCtRb8Q==} + '@rollup/rollup-linux-arm-musleabihf@4.45.3': + resolution: {integrity: sha512-4dIYRNxlXGDKnO6qgcda6LxnObPO6r1OBU9HG8F9pAnHHLtfbiOqCzDvkeHknx+5mfFVH4tWOl+h+cHylwsPWA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.45.1': - resolution: {integrity: sha512-k3dOKCfIVixWjG7OXTCOmDfJj3vbdhN0QYEqB+OuGArOChek22hn7Uy5A/gTDNAcCy5v2YcXRJ/Qcnm4/ma1xw==} + '@rollup/rollup-linux-arm64-gnu@4.45.3': + resolution: {integrity: sha512-M6uVlWKmhLN7LguLDu6396K1W5IBlAaRonjlHQgc3s4dOGceu0FeBuvbXiUPYvup/6b5Ln7IEX7XNm68DN4vrg==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.45.1': - resolution: {integrity: sha512-PmI1vxQetnM58ZmDFl9/Uk2lpBBby6B6rF4muJc65uZbxCs0EA7hhKCk2PKlmZKuyVSHAyIw3+/SiuMLxKxWog==} + '@rollup/rollup-linux-arm64-musl@4.45.3': + resolution: {integrity: sha512-emaYiOTQJUd6fC9a6jcw9zIWtzaUiuBC+vomggaM4In2iOra/lA6IMHlqZqQZr08NYXrOPMVigreLMeSAwv3Uw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.45.1': - resolution: {integrity: sha512-9UmI0VzGmNJ28ibHW2GpE2nF0PBQqsyiS4kcJ5vK+wuwGnV5RlqdczVocDSUfGX/Na7/XINRVoUgJyFIgipoRg==} + '@rollup/rollup-linux-loongarch64-gnu@4.45.3': + resolution: {integrity: sha512-3P77T5AQ4UfVRJSrTKLiUZDJ6XsxeP80027bp6mOFh8sevSD038mYuIYFiUtrSJxxgFb+NgRJFF9oIa0rlUsmg==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.45.1': - resolution: {integrity: sha512-7nR2KY8oEOUTD3pBAxIBBbZr0U7U+R9HDTPNy+5nVVHDXI4ikYniH1oxQz9VoB5PbBU1CZuDGHkLJkd3zLMWsg==} + '@rollup/rollup-linux-ppc64-gnu@4.45.3': + resolution: {integrity: sha512-/VPH3ZVeSlmCBPhZdx/+4dMXDjaGMhDsWOBo9EwSkGbw2+OAqaslL53Ao2OqCxR0GgYjmmssJ+OoG+qYGE7IBg==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.45.1': - resolution: {integrity: sha512-nlcl3jgUultKROfZijKjRQLUu9Ma0PeNv/VFHkZiKbXTBQXhpytS8CIj5/NfBeECZtY2FJQubm6ltIxm/ftxpw==} + '@rollup/rollup-linux-riscv64-gnu@4.45.3': + resolution: {integrity: sha512-Hs5if0PjROl1MGMmZX3xMAIfqcGxQE2SJWUr/CpDQsOQn43Wq4IvXXxUMWtiY/BrzdqCCJlRgJ5DKxzS3qWkCw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.45.1': - resolution: {integrity: sha512-HJV65KLS51rW0VY6rvZkiieiBnurSzpzore1bMKAhunQiECPuxsROvyeaot/tcK3A3aGnI+qTHqisrpSgQrpgA==} + '@rollup/rollup-linux-riscv64-musl@4.45.3': + resolution: {integrity: sha512-Qm0WOwh3Lk388+HJFl1ILGbd2iOoQf6yl4fdGqOjBzEA+5JYbLcwd+sGsZjs5pkt8Cr/1G42EiXmlRp9ZeTvFA==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.45.1': - resolution: {integrity: sha512-NITBOCv3Qqc6hhwFt7jLV78VEO/il4YcBzoMGGNxznLgRQf43VQDae0aAzKiBeEPIxnDrACiMgbqjuihx08OOw==} + '@rollup/rollup-linux-s390x-gnu@4.45.3': + resolution: {integrity: sha512-VJdknTaYw+TqXzlh9c7vaVMh/fV2sU8Khfk4a9vAdYXJawpjf6z3U1k7vDWx2IQ9ZOPoOPxgVpDfYOYhxD7QUA==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.45.1': - resolution: {integrity: sha512-+E/lYl6qu1zqgPEnTrs4WysQtvc/Sh4fC2nByfFExqgYrqkKWp1tWIbe+ELhixnenSpBbLXNi6vbEEJ8M7fiHw==} + '@rollup/rollup-linux-x64-gnu@4.45.3': + resolution: {integrity: sha512-SUDXU5YabLAMl86FpupSQQEWzVG8X0HM+Q/famnJusbPiUgQnTGuSxtxg4UAYgv1ZmRV1nioYYXsgtSokU/7+Q==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.45.1': - resolution: {integrity: sha512-a6WIAp89p3kpNoYStITT9RbTbTnqarU7D8N8F2CV+4Cl9fwCOZraLVuVFvlpsW0SbIiYtEnhCZBPLoNdRkjQFw==} + '@rollup/rollup-linux-x64-musl@4.45.3': + resolution: {integrity: sha512-ezmqknOUFgZMN6wW+Avlo4sXF3Frswd+ncrwMz4duyZ5Eqd+dAYgJ+A1MY+12LNZ7XDhCiijJceueYvtnzdviw==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.45.1': - resolution: {integrity: sha512-T5Bi/NS3fQiJeYdGvRpTAP5P02kqSOpqiopwhj0uaXB6nzs5JVi2XMJb18JUSKhCOX8+UE1UKQufyD6Or48dJg==} + '@rollup/rollup-win32-arm64-msvc@4.45.3': + resolution: {integrity: sha512-1YfXoUEE++gIW66zNB9Twd0Ua5xCXpfYppFUxVT/Io5ZT3fO6Se+C/Jvmh3usaIHHyi53t3kpfjydO2GAy5eBA==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.45.1': - resolution: {integrity: sha512-lxV2Pako3ujjuUe9jiU3/s7KSrDfH6IgTSQOnDWr9aJ92YsFd7EurmClK0ly/t8dzMkDtd04g60WX6yl0sGfdw==} + '@rollup/rollup-win32-ia32-msvc@4.45.3': + resolution: {integrity: sha512-Iok2YA3PvC163rVZf2Zy81A0g88IUcSPeU5pOilcbICXre2EP1mxn1Db/l09Z/SK1vdSLtpJXAnwGuMOyf5O9g==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.45.1': - resolution: {integrity: sha512-M/fKi4sasCdM8i0aWJjCSFm2qEnYRR8AMLG2kxp6wD13+tMGA4Z1tVAuHkNRjud5SW2EM3naLuK35w9twvf6aA==} + '@rollup/rollup-win32-x64-msvc@4.45.3': + resolution: {integrity: sha512-HwHCH5GQTOeGYP5wBEBXFVhfQecwRl24Rugoqhh8YwGarsU09bHhOKuqlyW4ZolZCan3eTUax7UJbGSmKSM51A==} cpu: [x64] os: [win32] @@ -646,8 +625,8 @@ packages: peerDependencies: '@sveltejs/kit': ^2.4.0 - '@sveltejs/kit@2.25.1': - resolution: {integrity: sha512-8H+fxDEp7Xq6tLFdrGdS5fLu6ONDQQ9DgyjboXpChubuFdfH9QoFX09ypssBpyNkJNZFt9eW3yLmXIc9CesPCA==} + '@sveltejs/kit@2.26.1': + resolution: {integrity: sha512-FwDhHAoXYUGnYndrrEzEYcKdYWpSoRKq4kli29oMe83hLri4/DOGQk3xUgwjDo0LKpSmj5M/Sj29/Ug3wO0Cbg==} engines: {node: '>=18.13'} hasBin: true peerDependencies: @@ -760,15 +739,9 @@ packages: peerDependencies: vite: ^5.2.0 || ^6 || ^7 - '@types/chai@5.2.2': - resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} - '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - '@types/deep-eql@4.0.2': - resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} - '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} @@ -858,35 +831,6 @@ packages: '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - '@vitest/expect@3.2.4': - resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} - - '@vitest/mocker@3.2.4': - resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} - peerDependencies: - msw: ^2.4.9 - vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 - peerDependenciesMeta: - msw: - optional: true - vite: - optional: true - - '@vitest/pretty-format@3.2.4': - resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} - - '@vitest/runner@3.2.4': - resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} - - '@vitest/snapshot@3.2.4': - resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} - - '@vitest/spy@3.2.4': - resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} - - '@vitest/utils@3.2.4': - resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} - acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -911,13 +855,6 @@ packages: resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} engines: {node: '>= 0.4'} - assertion-error@2.0.1: - resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} - engines: {node: '>=12'} - - await-lock@2.2.2: - resolution: {integrity: sha512-aDczADvlvTGajTDjcjpJMqRkOF6Qdz3YbPZm/PyW6tKPkx2hlYBzxMhEywM/tU72HrVZjgl5VCdRuMlA7pZ8Gw==} - axobject-query@4.1.0: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} engines: {node: '>= 0.4'} @@ -938,10 +875,6 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -949,10 +882,6 @@ packages: ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - chai@5.2.1: - resolution: {integrity: sha512-5nFxhUrX0PqtyogoYOA8IPswy5sZFTOsBFl/9bNsmDLgsxYTzSZQJDPppDnZPTQbzSEm0hqGjWPzRemQCYbD6A==} - engines: {node: '>=18'} - chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -963,10 +892,6 @@ packages: character-entities-legacy@3.0.0: resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} - check-error@2.1.1: - resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} - engines: {node: '>= 16'} - chokidar@4.0.3: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} @@ -1017,10 +942,6 @@ packages: supports-color: optional: true - deep-eql@5.0.2: - resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} - engines: {node: '>=6'} - deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -1046,9 +967,6 @@ packages: resolution: {integrity: sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==} engines: {node: '>=10.13.0'} - es-module-lexer@1.7.0: - resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} - esbuild@0.25.8: resolution: {integrity: sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==} engines: {node: '>=18'} @@ -1090,8 +1008,8 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.31.0: - resolution: {integrity: sha512-QldCVh/ztyKJJZLr4jXNUByx3gR+TDYZCRXEktiZoUR3PGy4qCmSbkxcIle8GEwGpb5JBZazlaJ/CxLidXdEbQ==} + eslint@9.32.0: + resolution: {integrity: sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -1125,17 +1043,10 @@ packages: estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - expect-type@1.2.2: - resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} - engines: {node: '>=12.0.0'} - fast-content-type-parse@3.0.0: resolution: {integrity: sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg==} @@ -1278,16 +1189,10 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - iso-datestring-validator@2.2.2: - resolution: {integrity: sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA==} - - jiti@2.4.2: - resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + jiti@2.5.1: + resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==} hasBin: true - js-tokens@9.0.1: - resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} - js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true @@ -1393,9 +1298,6 @@ packages: lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - loupe@3.1.4: - resolution: {integrity: sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg==} - magic-string@0.30.17: resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} @@ -1469,9 +1371,6 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - multiformats@9.9.0: - resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} - nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -1513,13 +1412,6 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - pathe@2.0.3: - resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - - pathval@2.0.1: - resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} - engines: {node: '>= 14.16'} - picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -1692,8 +1584,8 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rollup@4.45.1: - resolution: {integrity: sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw==} + rollup@4.45.3: + resolution: {integrity: sha512-STwyHZF3G+CrmZhB+qDiROq9s8B5PrOCYN6dtmOvwz585XBnyeHk1GTEhHJtUVb355/9uZhOazyVclTt5uahzA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -1726,9 +1618,6 @@ packages: shiki@3.8.1: resolution: {integrity: sha512-+MYIyjwGPCaegbpBeFN9+oOifI8CKiKG3awI/6h3JeT85c//H2wDW/xCJEGuQ5jPqtbboKNqNy+JyX9PYpGwNg==} - siginfo@2.0.0: - resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} - sirv@3.0.1: resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==} engines: {node: '>=18'} @@ -1740,12 +1629,6 @@ packages: space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} - stackback@0.0.2: - resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - - std-env@3.9.0: - resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} - stringify-entities@4.0.4: resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} @@ -1753,9 +1636,6 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - strip-literal@3.0.0: - resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==} - supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -1781,8 +1661,8 @@ packages: svelte: optional: true - svelte@5.36.13: - resolution: {integrity: sha512-LnSywHHQM/nJekC65d84T1Yo85IeCYN4AryWYPhTokSvcEAFdYFCfbMhX1mc0zHizT736QQj0nalUk+SXaWrEQ==} + svelte@5.36.17: + resolution: {integrity: sha512-yxJVoHo3Km6+BlQLO3MXrhpZ8eeBuy/UOvEKLkmyQ8QmMFIkL0Hxs+DdmHBgAJazkc9o91TkTPgP6CvGenU1Ig==} engines: {node: '>=18'} sveltekit-embed@0.0.22: @@ -1805,32 +1685,10 @@ packages: resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} engines: {node: '>=18'} - tinybench@2.9.0: - resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - - tinyexec@0.3.2: - resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - tinyglobby@0.2.14: resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} engines: {node: '>=12.0.0'} - tinypool@1.1.1: - resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} - engines: {node: ^18.0.0 || >=20.0.0} - - tinyrainbow@2.0.0: - resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} - engines: {node: '>=14.0.0'} - - tinyspy@4.0.3: - resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==} - engines: {node: '>=14.0.0'} - - tlds@1.259.0: - resolution: {integrity: sha512-AldGGlDP0PNgwppe2quAvuBl18UcjuNtOnDuUkqhd6ipPqrYYBt3aTxK1QTsBVknk97lS2JcafWMghjGWFtunw==} - hasBin: true - to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -1864,9 +1722,6 @@ packages: engines: {node: '>=14.17'} hasBin: true - uint8arrays@3.0.0: - resolution: {integrity: sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==} - undici-types@7.8.0: resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} @@ -1909,19 +1764,14 @@ packages: vfile-message@2.0.4: resolution: {integrity: sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==} - vfile-message@4.0.2: - resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + vfile-message@4.0.3: + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vite-node@3.2.4: - resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - - vite@7.0.5: - resolution: {integrity: sha512-1mncVwJxy2C9ThLwz0+2GKZyEXuC3MyWtAAlNftlZZXZDP3AJt5FmwcMit/IGGaNZ8ZOB2BNO/HFUB+CpN0NQw==} + vite@7.0.6: + resolution: {integrity: sha512-MHFiOENNBd+Bd9uvc8GEsIzdkn1JxMmEeYX35tI3fv0sJBUTfW5tQsoaOwuY4KhBI09A3dUJ/DXf2yxPVPUceg==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -1968,44 +1818,11 @@ packages: vite: optional: true - vitest@3.2.4: - resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@types/debug': ^4.1.12 - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.2.4 - '@vitest/ui': 3.2.4 - happy-dom: '*' - jsdom: '*' - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@types/debug': - optional: true - '@types/node': - optional: true - '@vitest/browser': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} hasBin: true - why-is-node-running@2.3.0: - resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} - engines: {node: '>=8'} - hasBin: true - word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} @@ -2033,11 +1850,8 @@ packages: zimmerframe@1.1.2: resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==} - zod@3.25.76: - resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} - - zod@4.0.5: - resolution: {integrity: sha512-/5UuuRPStvHXu7RS+gmvRf4NXrNxpSllGwDnCBcJZtQsKrviYXm54yDGV2KYNLT5kq0lHGcl7lqWJLgSaG+tgA==} + zod@4.0.10: + resolution: {integrity: sha512-3vB+UU3/VmLL2lvwcY/4RV2i9z/YU0DTV/tDuYjrwmx5WeJ7hwy+rGEEx8glHp6Yxw7ibRbKSaIFBgReRPe5KA==} zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} @@ -2049,39 +1863,6 @@ snapshots: '@jridgewell/gen-mapping': 0.3.12 '@jridgewell/trace-mapping': 0.3.29 - '@atproto/api@0.15.27': - dependencies: - '@atproto/common-web': 0.4.2 - '@atproto/lexicon': 0.4.12 - '@atproto/syntax': 0.4.0 - '@atproto/xrpc': 0.7.1 - await-lock: 2.2.2 - multiformats: 9.9.0 - tlds: 1.259.0 - zod: 3.25.76 - - '@atproto/common-web@0.4.2': - dependencies: - graphemer: 1.4.0 - multiformats: 9.9.0 - uint8arrays: 3.0.0 - zod: 3.25.76 - - '@atproto/lexicon@0.4.12': - dependencies: - '@atproto/common-web': 0.4.2 - '@atproto/syntax': 0.4.0 - iso-datestring-validator: 2.2.2 - multiformats: 9.9.0 - zod: 3.25.76 - - '@atproto/syntax@0.4.0': {} - - '@atproto/xrpc@0.7.1': - dependencies: - '@atproto/lexicon': 0.4.12 - zod: 3.25.76 - '@esbuild/aix-ppc64@0.25.8': optional: true @@ -2160,16 +1941,16 @@ snapshots: '@esbuild/win32-x64@0.25.8': optional: true - '@eslint-community/eslint-utils@4.7.0(eslint@9.31.0(jiti@2.4.2))': + '@eslint-community/eslint-utils@4.7.0(eslint@9.32.0(jiti@2.5.1))': dependencies: - eslint: 9.31.0(jiti@2.4.2) + eslint: 9.32.0(jiti@2.5.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} - '@eslint/compat@1.3.1(eslint@9.31.0(jiti@2.4.2))': + '@eslint/compat@1.3.1(eslint@9.32.0(jiti@2.5.1))': optionalDependencies: - eslint: 9.31.0(jiti@2.4.2) + eslint: 9.32.0(jiti@2.5.1) '@eslint/config-array@0.21.0': dependencies: @@ -2199,7 +1980,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.31.0': {} + '@eslint/js@9.32.0': {} '@eslint/object-schema@2.1.6': {} @@ -2221,10 +2002,10 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} - '@iconify/svelte@5.0.0(svelte@5.36.13)': + '@iconify/svelte@5.0.1(svelte@5.36.17)': dependencies: '@iconify/types': 2.0.0 - svelte: 5.36.13 + svelte: 5.36.17 '@iconify/types@2.0.0': {} @@ -2246,19 +2027,19 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.4 - '@lucide/svelte@0.525.0(svelte@5.36.13)': + '@lucide/svelte@0.526.0(svelte@5.36.17)': dependencies: - svelte: 5.36.13 + svelte: 5.36.17 - '@maiertech/sveltekit-helpers@0.26.0(@sveltejs/kit@2.25.1(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.36.13)(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1)))(svelte@5.36.13)(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1)))(svelte@5.36.13)(tailwindcss@4.1.11)(zod@4.0.5)': + '@maiertech/sveltekit-helpers@0.28.0(@sveltejs/kit@2.26.1(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.36.17)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.6.1)))(svelte@5.36.17)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.6.1)))(svelte@5.36.17)(tailwindcss@4.1.11)(zod@4.0.10)': dependencies: '@octokit/rest': 22.0.0 - '@sveltejs/kit': 2.25.1(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.36.13)(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1)))(svelte@5.36.13)(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1)) + '@sveltejs/kit': 2.26.1(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.36.17)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.6.1)))(svelte@5.36.17)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.6.1)) shiki: 3.8.1 - svelte: 5.36.13 + svelte: 5.36.17 tailwind-merge: 3.3.1 tailwindcss: 4.1.11 - zod: 4.0.5 + zod: 4.0.10 '@nodelib/fs.scandir@2.1.5': dependencies: @@ -2340,9 +2121,9 @@ snapshots: '@polka/url@1.0.0-next.29': {} - '@rollup/plugin-commonjs@28.0.6(rollup@4.45.1)': + '@rollup/plugin-commonjs@28.0.6(rollup@4.45.3)': dependencies: - '@rollup/pluginutils': 5.2.0(rollup@4.45.1) + '@rollup/pluginutils': 5.2.0(rollup@4.45.3) commondir: 1.0.1 estree-walker: 2.0.2 fdir: 6.4.6(picomatch@4.0.3) @@ -2350,90 +2131,90 @@ snapshots: magic-string: 0.30.17 picomatch: 4.0.3 optionalDependencies: - rollup: 4.45.1 + rollup: 4.45.3 - '@rollup/plugin-json@6.1.0(rollup@4.45.1)': + '@rollup/plugin-json@6.1.0(rollup@4.45.3)': dependencies: - '@rollup/pluginutils': 5.2.0(rollup@4.45.1) + '@rollup/pluginutils': 5.2.0(rollup@4.45.3) optionalDependencies: - rollup: 4.45.1 + rollup: 4.45.3 - '@rollup/plugin-node-resolve@16.0.1(rollup@4.45.1)': + '@rollup/plugin-node-resolve@16.0.1(rollup@4.45.3)': dependencies: - '@rollup/pluginutils': 5.2.0(rollup@4.45.1) + '@rollup/pluginutils': 5.2.0(rollup@4.45.3) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 resolve: 1.22.10 optionalDependencies: - rollup: 4.45.1 + rollup: 4.45.3 - '@rollup/pluginutils@5.2.0(rollup@4.45.1)': + '@rollup/pluginutils@5.2.0(rollup@4.45.3)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 picomatch: 4.0.3 optionalDependencies: - rollup: 4.45.1 + rollup: 4.45.3 - '@rollup/rollup-android-arm-eabi@4.45.1': + '@rollup/rollup-android-arm-eabi@4.45.3': optional: true - '@rollup/rollup-android-arm64@4.45.1': + '@rollup/rollup-android-arm64@4.45.3': optional: true - '@rollup/rollup-darwin-arm64@4.45.1': + '@rollup/rollup-darwin-arm64@4.45.3': optional: true - '@rollup/rollup-darwin-x64@4.45.1': + '@rollup/rollup-darwin-x64@4.45.3': optional: true - '@rollup/rollup-freebsd-arm64@4.45.1': + '@rollup/rollup-freebsd-arm64@4.45.3': optional: true - '@rollup/rollup-freebsd-x64@4.45.1': + '@rollup/rollup-freebsd-x64@4.45.3': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.45.1': + '@rollup/rollup-linux-arm-gnueabihf@4.45.3': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.45.1': + '@rollup/rollup-linux-arm-musleabihf@4.45.3': optional: true - '@rollup/rollup-linux-arm64-gnu@4.45.1': + '@rollup/rollup-linux-arm64-gnu@4.45.3': optional: true - '@rollup/rollup-linux-arm64-musl@4.45.1': + '@rollup/rollup-linux-arm64-musl@4.45.3': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.45.1': + '@rollup/rollup-linux-loongarch64-gnu@4.45.3': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.45.1': + '@rollup/rollup-linux-ppc64-gnu@4.45.3': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.45.1': + '@rollup/rollup-linux-riscv64-gnu@4.45.3': optional: true - '@rollup/rollup-linux-riscv64-musl@4.45.1': + '@rollup/rollup-linux-riscv64-musl@4.45.3': optional: true - '@rollup/rollup-linux-s390x-gnu@4.45.1': + '@rollup/rollup-linux-s390x-gnu@4.45.3': optional: true - '@rollup/rollup-linux-x64-gnu@4.45.1': + '@rollup/rollup-linux-x64-gnu@4.45.3': optional: true - '@rollup/rollup-linux-x64-musl@4.45.1': + '@rollup/rollup-linux-x64-musl@4.45.3': optional: true - '@rollup/rollup-win32-arm64-msvc@4.45.1': + '@rollup/rollup-win32-arm64-msvc@4.45.3': optional: true - '@rollup/rollup-win32-ia32-msvc@4.45.1': + '@rollup/rollup-win32-ia32-msvc@4.45.3': optional: true - '@rollup/rollup-win32-x64-msvc@4.45.1': + '@rollup/rollup-win32-x64-msvc@4.45.3': optional: true '@shikijs/core@3.8.1': @@ -2484,18 +2265,18 @@ snapshots: dependencies: acorn: 8.15.0 - '@sveltejs/adapter-node@5.2.13(@sveltejs/kit@2.25.1(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.36.13)(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1)))(svelte@5.36.13)(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1)))': + '@sveltejs/adapter-node@5.2.13(@sveltejs/kit@2.26.1(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.36.17)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.6.1)))(svelte@5.36.17)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.6.1)))': dependencies: - '@rollup/plugin-commonjs': 28.0.6(rollup@4.45.1) - '@rollup/plugin-json': 6.1.0(rollup@4.45.1) - '@rollup/plugin-node-resolve': 16.0.1(rollup@4.45.1) - '@sveltejs/kit': 2.25.1(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.36.13)(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1)))(svelte@5.36.13)(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1)) - rollup: 4.45.1 + '@rollup/plugin-commonjs': 28.0.6(rollup@4.45.3) + '@rollup/plugin-json': 6.1.0(rollup@4.45.3) + '@rollup/plugin-node-resolve': 16.0.1(rollup@4.45.3) + '@sveltejs/kit': 2.26.1(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.36.17)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.6.1)))(svelte@5.36.17)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.6.1)) + rollup: 4.45.3 - '@sveltejs/kit@2.25.1(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.36.13)(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1)))(svelte@5.36.13)(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1))': + '@sveltejs/kit@2.26.1(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.36.17)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.6.1)))(svelte@5.36.17)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.6.1))': dependencies: '@sveltejs/acorn-typescript': 1.0.5(acorn@8.15.0) - '@sveltejs/vite-plugin-svelte': 6.1.0(svelte@5.36.13)(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1)) + '@sveltejs/vite-plugin-svelte': 6.1.0(svelte@5.36.17)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.6.1)) '@types/cookie': 0.6.0 acorn: 8.15.0 cookie: 0.6.0 @@ -2507,28 +2288,28 @@ snapshots: sade: 1.8.1 set-cookie-parser: 2.7.1 sirv: 3.0.1 - svelte: 5.36.13 - vite: 7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1) + svelte: 5.36.17 + vite: 7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.6.1) - '@sveltejs/vite-plugin-svelte-inspector@5.0.0(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.36.13)(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1)))(svelte@5.36.13)(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1))': + '@sveltejs/vite-plugin-svelte-inspector@5.0.0(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.36.17)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.6.1)))(svelte@5.36.17)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.6.1))': dependencies: - '@sveltejs/vite-plugin-svelte': 6.1.0(svelte@5.36.13)(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1)) + '@sveltejs/vite-plugin-svelte': 6.1.0(svelte@5.36.17)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.6.1)) debug: 4.4.1 - svelte: 5.36.13 - vite: 7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1) + svelte: 5.36.17 + vite: 7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.6.1) transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.36.13)(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1))': + '@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.36.17)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.6.1))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 5.0.0(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.36.13)(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1)))(svelte@5.36.13)(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1)) + '@sveltejs/vite-plugin-svelte-inspector': 5.0.0(@sveltejs/vite-plugin-svelte@6.1.0(svelte@5.36.17)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.6.1)))(svelte@5.36.17)(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.6.1)) debug: 4.4.1 deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.17 - svelte: 5.36.13 - vite: 7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1) - vitefu: 1.1.1(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1)) + svelte: 5.36.17 + vite: 7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.6.1) + vitefu: 1.1.1(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.6.1)) transitivePeerDependencies: - supports-color @@ -2536,7 +2317,7 @@ snapshots: dependencies: '@ampproject/remapping': 2.3.0 enhanced-resolve: 5.18.2 - jiti: 2.4.2 + jiti: 2.5.1 lightningcss: 1.30.1 magic-string: 0.30.17 source-map-js: 1.2.1 @@ -2596,21 +2377,15 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.1.11 '@tailwindcss/oxide-win32-x64-msvc': 4.1.11 - '@tailwindcss/vite@4.1.11(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1))': + '@tailwindcss/vite@4.1.11(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.6.1))': dependencies: '@tailwindcss/node': 4.1.11 '@tailwindcss/oxide': 4.1.11 tailwindcss: 4.1.11 - vite: 7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1) - - '@types/chai@5.2.2': - dependencies: - '@types/deep-eql': 4.0.2 + vite: 7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.6.1) '@types/cookie@0.6.0': {} - '@types/deep-eql@4.0.2': {} - '@types/estree@1.0.8': {} '@types/hast@3.0.4': @@ -2635,15 +2410,15 @@ snapshots: '@types/unist@3.0.3': {} - '@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/parser': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/type-utils': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) '@typescript-eslint/visitor-keys': 8.38.0 - eslint: 9.31.0(jiti@2.4.2) + eslint: 9.32.0(jiti@2.5.1) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -2652,14 +2427,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3)': dependencies: '@typescript-eslint/scope-manager': 8.38.0 '@typescript-eslint/types': 8.38.0 '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) '@typescript-eslint/visitor-keys': 8.38.0 debug: 4.4.1 - eslint: 9.31.0(jiti@2.4.2) + eslint: 9.32.0(jiti@2.5.1) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -2682,13 +2457,13 @@ snapshots: dependencies: typescript: 5.8.3 - '@typescript-eslint/type-utils@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3)': dependencies: '@typescript-eslint/types': 8.38.0 '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) debug: 4.4.1 - eslint: 9.31.0(jiti@2.4.2) + eslint: 9.32.0(jiti@2.5.1) ts-api-utils: 2.1.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: @@ -2712,13 +2487,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/utils@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.5.1)) '@typescript-eslint/scope-manager': 8.38.0 '@typescript-eslint/types': 8.38.0 '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) - eslint: 9.31.0(jiti@2.4.2) + eslint: 9.32.0(jiti@2.5.1) typescript: 5.8.3 transitivePeerDependencies: - supports-color @@ -2730,48 +2505,6 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vitest/expect@3.2.4': - dependencies: - '@types/chai': 5.2.2 - '@vitest/spy': 3.2.4 - '@vitest/utils': 3.2.4 - chai: 5.2.1 - tinyrainbow: 2.0.0 - - '@vitest/mocker@3.2.4(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1))': - dependencies: - '@vitest/spy': 3.2.4 - estree-walker: 3.0.3 - magic-string: 0.30.17 - optionalDependencies: - vite: 7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1) - - '@vitest/pretty-format@3.2.4': - dependencies: - tinyrainbow: 2.0.0 - - '@vitest/runner@3.2.4': - dependencies: - '@vitest/utils': 3.2.4 - pathe: 2.0.3 - strip-literal: 3.0.0 - - '@vitest/snapshot@3.2.4': - dependencies: - '@vitest/pretty-format': 3.2.4 - magic-string: 0.30.17 - pathe: 2.0.3 - - '@vitest/spy@3.2.4': - dependencies: - tinyspy: 4.0.3 - - '@vitest/utils@3.2.4': - dependencies: - '@vitest/pretty-format': 3.2.4 - loupe: 3.1.4 - tinyrainbow: 2.0.0 - acorn-jsx@5.3.2(acorn@8.15.0): dependencies: acorn: 8.15.0 @@ -2793,10 +2526,6 @@ snapshots: aria-query@5.3.2: {} - assertion-error@2.0.1: {} - - await-lock@2.2.2: {} - axobject-query@4.1.0: {} balanced-match@1.0.2: {} @@ -2816,20 +2545,10 @@ snapshots: dependencies: fill-range: 7.1.1 - cac@6.7.14: {} - callsites@3.1.0: {} ccount@2.0.1: {} - chai@5.2.1: - dependencies: - assertion-error: 2.0.1 - check-error: 2.1.1 - deep-eql: 5.0.2 - loupe: 3.1.4 - pathval: 2.0.1 - chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -2839,8 +2558,6 @@ snapshots: character-entities-legacy@3.0.0: {} - check-error@2.1.1: {} - chokidar@4.0.3: dependencies: readdirp: 4.1.2 @@ -2875,8 +2592,6 @@ snapshots: dependencies: ms: 2.1.3 - deep-eql@5.0.2: {} - deep-is@0.1.4: {} deepmerge@4.3.1: {} @@ -2896,8 +2611,6 @@ snapshots: graceful-fs: 4.2.11 tapable: 2.2.2 - es-module-lexer@1.7.0: {} - esbuild@0.25.8: optionalDependencies: '@esbuild/aix-ppc64': 0.25.8 @@ -2931,15 +2644,15 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-config-prettier@10.1.8(eslint@9.31.0(jiti@2.4.2)): + eslint-config-prettier@10.1.8(eslint@9.32.0(jiti@2.5.1)): dependencies: - eslint: 9.31.0(jiti@2.4.2) + eslint: 9.32.0(jiti@2.5.1) - eslint-plugin-svelte@3.11.0(eslint@9.31.0(jiti@2.4.2))(svelte@5.36.13): + eslint-plugin-svelte@3.11.0(eslint@9.32.0(jiti@2.5.1))(svelte@5.36.17): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.5.1)) '@jridgewell/sourcemap-codec': 1.5.4 - eslint: 9.31.0(jiti@2.4.2) + eslint: 9.32.0(jiti@2.5.1) esutils: 2.0.3 globals: 16.3.0 known-css-properties: 0.37.0 @@ -2947,9 +2660,9 @@ snapshots: postcss-load-config: 3.1.4(postcss@8.5.6) postcss-safe-parser: 7.0.1(postcss@8.5.6) semver: 7.7.2 - svelte-eslint-parser: 1.3.0(svelte@5.36.13) + svelte-eslint-parser: 1.3.0(svelte@5.36.17) optionalDependencies: - svelte: 5.36.13 + svelte: 5.36.17 transitivePeerDependencies: - ts-node @@ -2962,15 +2675,15 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.31.0(jiti@2.4.2): + eslint@9.32.0(jiti@2.5.1): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.5.1)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.21.0 '@eslint/config-helpers': 0.3.0 '@eslint/core': 0.15.1 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.31.0 + '@eslint/js': 9.32.0 '@eslint/plugin-kit': 0.3.4 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 @@ -3000,7 +2713,7 @@ snapshots: natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: - jiti: 2.4.2 + jiti: 2.5.1 transitivePeerDependencies: - supports-color @@ -3028,14 +2741,8 @@ snapshots: estree-walker@2.0.2: {} - estree-walker@3.0.3: - dependencies: - '@types/estree': 1.0.8 - esutils@2.0.3: {} - expect-type@1.2.2: {} - fast-content-type-parse@3.0.0: {} fast-deep-equal@3.1.3: {} @@ -3165,11 +2872,7 @@ snapshots: isexe@2.0.0: {} - iso-datestring-validator@2.2.2: {} - - jiti@2.4.2: {} - - js-tokens@9.0.1: {} + jiti@2.5.1: {} js-yaml@4.1.0: dependencies: @@ -3249,8 +2952,6 @@ snapshots: lodash.merge@4.6.2: {} - loupe@3.1.4: {} - magic-string@0.30.17: dependencies: '@jridgewell/sourcemap-codec': 1.5.4 @@ -3267,13 +2968,13 @@ snapshots: unist-util-visit: 5.0.0 vfile: 6.0.3 - mdsvex@0.12.6(svelte@5.36.13): + mdsvex@0.12.6(svelte@5.36.17): dependencies: '@types/mdast': 4.0.4 '@types/unist': 2.0.11 prism-svelte: 0.4.7 prismjs: 1.30.0 - svelte: 5.36.13 + svelte: 5.36.17 unist-util-visit: 2.0.3 vfile-message: 2.0.4 @@ -3329,8 +3030,6 @@ snapshots: ms@2.1.3: {} - multiformats@9.9.0: {} - nanoid@3.3.11: {} natural-compare@1.4.0: {} @@ -3370,10 +3069,6 @@ snapshots: path-parse@1.0.7: {} - pathe@2.0.3: {} - - pathval@2.0.1: {} - picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -3416,16 +3111,16 @@ snapshots: prelude-ls@1.2.1: {} - prettier-plugin-svelte@3.4.0(prettier@3.6.2)(svelte@5.36.13): + prettier-plugin-svelte@3.4.0(prettier@3.6.2)(svelte@5.36.17): dependencies: prettier: 3.6.2 - svelte: 5.36.13 + svelte: 5.36.17 - prettier-plugin-tailwindcss@0.6.14(prettier-plugin-svelte@3.4.0(prettier@3.6.2)(svelte@5.36.13))(prettier@3.6.2): + prettier-plugin-tailwindcss@0.6.14(prettier-plugin-svelte@3.4.0(prettier@3.6.2)(svelte@5.36.17))(prettier@3.6.2): dependencies: prettier: 3.6.2 optionalDependencies: - prettier-plugin-svelte: 3.4.0(prettier@3.6.2)(svelte@5.36.13) + prettier-plugin-svelte: 3.4.0(prettier@3.6.2)(svelte@5.36.17) prettier@3.6.2: {} @@ -3461,30 +3156,30 @@ snapshots: reusify@1.1.0: {} - rollup@4.45.1: + rollup@4.45.3: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.45.1 - '@rollup/rollup-android-arm64': 4.45.1 - '@rollup/rollup-darwin-arm64': 4.45.1 - '@rollup/rollup-darwin-x64': 4.45.1 - '@rollup/rollup-freebsd-arm64': 4.45.1 - '@rollup/rollup-freebsd-x64': 4.45.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.45.1 - '@rollup/rollup-linux-arm-musleabihf': 4.45.1 - '@rollup/rollup-linux-arm64-gnu': 4.45.1 - '@rollup/rollup-linux-arm64-musl': 4.45.1 - '@rollup/rollup-linux-loongarch64-gnu': 4.45.1 - '@rollup/rollup-linux-powerpc64le-gnu': 4.45.1 - '@rollup/rollup-linux-riscv64-gnu': 4.45.1 - '@rollup/rollup-linux-riscv64-musl': 4.45.1 - '@rollup/rollup-linux-s390x-gnu': 4.45.1 - '@rollup/rollup-linux-x64-gnu': 4.45.1 - '@rollup/rollup-linux-x64-musl': 4.45.1 - '@rollup/rollup-win32-arm64-msvc': 4.45.1 - '@rollup/rollup-win32-ia32-msvc': 4.45.1 - '@rollup/rollup-win32-x64-msvc': 4.45.1 + '@rollup/rollup-android-arm-eabi': 4.45.3 + '@rollup/rollup-android-arm64': 4.45.3 + '@rollup/rollup-darwin-arm64': 4.45.3 + '@rollup/rollup-darwin-x64': 4.45.3 + '@rollup/rollup-freebsd-arm64': 4.45.3 + '@rollup/rollup-freebsd-x64': 4.45.3 + '@rollup/rollup-linux-arm-gnueabihf': 4.45.3 + '@rollup/rollup-linux-arm-musleabihf': 4.45.3 + '@rollup/rollup-linux-arm64-gnu': 4.45.3 + '@rollup/rollup-linux-arm64-musl': 4.45.3 + '@rollup/rollup-linux-loongarch64-gnu': 4.45.3 + '@rollup/rollup-linux-ppc64-gnu': 4.45.3 + '@rollup/rollup-linux-riscv64-gnu': 4.45.3 + '@rollup/rollup-linux-riscv64-musl': 4.45.3 + '@rollup/rollup-linux-s390x-gnu': 4.45.3 + '@rollup/rollup-linux-x64-gnu': 4.45.3 + '@rollup/rollup-linux-x64-musl': 4.45.3 + '@rollup/rollup-win32-arm64-msvc': 4.45.3 + '@rollup/rollup-win32-ia32-msvc': 4.45.3 + '@rollup/rollup-win32-x64-msvc': 4.45.3 fsevents: 2.3.3 rss@1.2.2: @@ -3521,8 +3216,6 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 - siginfo@2.0.0: {} - sirv@3.0.1: dependencies: '@polka/url': 1.0.0-next.29 @@ -3533,10 +3226,6 @@ snapshots: space-separated-tokens@2.0.2: {} - stackback@0.0.2: {} - - std-env@3.9.0: {} - stringify-entities@4.0.4: dependencies: character-entities-html4: 2.1.0 @@ -3544,29 +3233,25 @@ snapshots: strip-json-comments@3.1.1: {} - strip-literal@3.0.0: - dependencies: - js-tokens: 9.0.1 - supports-color@7.2.0: dependencies: has-flag: 4.0.0 supports-preserve-symlinks-flag@1.0.0: {} - svelte-check@4.3.0(picomatch@4.0.3)(svelte@5.36.13)(typescript@5.8.3): + svelte-check@4.3.0(picomatch@4.0.3)(svelte@5.36.17)(typescript@5.8.3): dependencies: '@jridgewell/trace-mapping': 0.3.29 chokidar: 4.0.3 fdir: 6.4.6(picomatch@4.0.3) picocolors: 1.1.1 sade: 1.8.1 - svelte: 5.36.13 + svelte: 5.36.17 typescript: 5.8.3 transitivePeerDependencies: - picomatch - svelte-eslint-parser@1.3.0(svelte@5.36.13): + svelte-eslint-parser@1.3.0(svelte@5.36.17): dependencies: eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 @@ -3575,9 +3260,9 @@ snapshots: postcss-scss: 4.0.9(postcss@8.5.6) postcss-selector-parser: 7.1.0 optionalDependencies: - svelte: 5.36.13 + svelte: 5.36.17 - svelte@5.36.13: + svelte@5.36.17: dependencies: '@ampproject/remapping': 2.3.0 '@jridgewell/sourcemap-codec': 1.5.4 @@ -3594,9 +3279,9 @@ snapshots: magic-string: 0.30.17 zimmerframe: 1.1.2 - sveltekit-embed@0.0.22(svelte@5.36.13): + sveltekit-embed@0.0.22(svelte@5.36.17): dependencies: - svelte: 5.36.13 + svelte: 5.36.17 tailwind-merge@3.3.1: {} @@ -3613,23 +3298,11 @@ snapshots: mkdirp: 3.0.1 yallist: 5.0.0 - tinybench@2.9.0: {} - - tinyexec@0.3.2: {} - tinyglobby@0.2.14: dependencies: fdir: 6.4.6(picomatch@4.0.3) picomatch: 4.0.3 - tinypool@1.1.1: {} - - tinyrainbow@2.0.0: {} - - tinyspy@4.0.3: {} - - tlds@1.259.0: {} - to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -3646,23 +3319,19 @@ snapshots: dependencies: prelude-ls: 1.2.1 - typescript-eslint@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3): + typescript-eslint@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/parser': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/eslint-plugin': 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/parser': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.31.0(jiti@2.4.2) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.8.3) + eslint: 9.32.0(jiti@2.5.1) typescript: 5.8.3 transitivePeerDependencies: - supports-color typescript@5.8.3: {} - uint8arrays@3.0.0: - dependencies: - multiformats: 9.9.0 - undici-types@7.8.0: {} unist-util-is@4.1.0: {} @@ -3718,7 +3387,7 @@ snapshots: '@types/unist': 2.0.11 unist-util-stringify-position: 2.0.3 - vfile-message@4.0.2: + vfile-message@4.0.3: dependencies: '@types/unist': 3.0.3 unist-util-stringify-position: 4.0.0 @@ -3726,98 +3395,31 @@ snapshots: vfile@6.0.3: dependencies: '@types/unist': 3.0.3 - vfile-message: 4.0.2 + vfile-message: 4.0.3 - vite-node@3.2.4(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1): - dependencies: - cac: 6.7.14 - debug: 4.4.1 - es-module-lexer: 1.7.0 - pathe: 2.0.3 - vite: 7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1) - transitivePeerDependencies: - - '@types/node' - - jiti - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - - vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1): + vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.6.1): dependencies: esbuild: 0.25.8 fdir: 6.4.6(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.45.1 + rollup: 4.45.3 tinyglobby: 0.2.14 optionalDependencies: '@types/node': 24.1.0 fsevents: 2.3.3 - jiti: 2.4.2 + jiti: 2.5.1 lightningcss: 1.30.1 yaml: 2.6.1 - vitefu@1.1.1(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1)): - optionalDependencies: - vite: 7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1) - - vitest@3.2.4(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1): - dependencies: - '@types/chai': 5.2.2 - '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1)) - '@vitest/pretty-format': 3.2.4 - '@vitest/runner': 3.2.4 - '@vitest/snapshot': 3.2.4 - '@vitest/spy': 3.2.4 - '@vitest/utils': 3.2.4 - chai: 5.2.1 - debug: 4.4.1 - expect-type: 1.2.2 - magic-string: 0.30.17 - pathe: 2.0.3 - picomatch: 4.0.3 - std-env: 3.9.0 - tinybench: 2.9.0 - tinyexec: 0.3.2 - tinyglobby: 0.2.14 - tinypool: 1.1.1 - tinyrainbow: 2.0.0 - vite: 7.0.5(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1) - vite-node: 3.2.4(@types/node@24.1.0)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.6.1) - why-is-node-running: 2.3.0 + vitefu@1.1.1(vite@7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.6.1)): optionalDependencies: - '@types/node': 24.1.0 - transitivePeerDependencies: - - jiti - - less - - lightningcss - - msw - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml + vite: 7.0.6(@types/node@24.1.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.6.1) which@2.0.2: dependencies: isexe: 2.0.0 - why-is-node-running@2.3.0: - dependencies: - siginfo: 2.0.0 - stackback: 0.0.2 - word-wrap@1.2.5: {} xml@1.0.1: {} @@ -3833,8 +3435,6 @@ snapshots: zimmerframe@1.1.2: {} - zod@3.25.76: {} - - zod@4.0.5: {} + zod@4.0.10: {} zwitch@2.0.4: {} diff --git a/src/app.d.ts b/src/app.d.ts index 534f3d03..2baa01e0 100644 --- a/src/app.d.ts +++ b/src/app.d.ts @@ -12,6 +12,7 @@ declare global { seo?: { title: string; description: string; + ogImageUrl?: string; }; } // interface PageState {} diff --git a/src/lib/schemas/index.ts b/src/lib/schemas/index.ts index a400546a..19d6ff76 100644 --- a/src/lib/schemas/index.ts +++ b/src/lib/schemas/index.ts @@ -1,6 +1,5 @@ export { default as eoApiErrorSchema } from './eo-api-error-schema'; export { default as eoListSchema } from './eo-list-schema'; export { default as eoSubscriberSchema } from './eo-subscriber-schema'; -export { default as linkSchema } from './link-schema'; export { default as subscribeFormSchema } from './subscribe-form-schema'; export { default as unsubscribeFormSchema } from './unsubscribe-form-schema'; diff --git a/src/lib/schemas/link-schema.js b/src/lib/schemas/link-schema.js deleted file mode 100644 index 180a1b97..00000000 --- a/src/lib/schemas/link-schema.js +++ /dev/null @@ -1,6 +0,0 @@ -import { z } from 'zod'; - -export default z.object({ - title: z.string(), - href: z.string() -}); diff --git a/src/lib/server/api/bluesky.test.ts b/src/lib/server/api/bluesky.test.ts deleted file mode 100644 index 0304ee8b..00000000 --- a/src/lib/server/api/bluesky.test.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { describe, test, expect } from 'vitest'; -import { convertToUrl, getPosts } from './bluesky'; - -describe('getPosts', () => { - test('fetch posts', async () => { - const posts = await getPosts(); - expect(posts[0].post.author.displayName).toBeDefined(); - expect(posts[0].post.record).toBeDefined(); - }); -}); - -describe('convertToUrl', () => { - test('convert a Bluesky URI to a URL', () => { - const uri = 'at://did:plc:sdvm256ktltt3ifqdijdhh4t/app.bsky.feed.post/3lbayulsl5h2c'; - const url = convertToUrl(uri); - expect(url).toBe( - 'https://bsky.app/profile/did:plc:sdvm256ktltt3ifqdijdhh4t/post/3lbayulsl5h2c' - ); - }); -}); diff --git a/src/lib/server/api/bluesky.ts b/src/lib/server/api/bluesky.ts deleted file mode 100644 index cf613763..00000000 --- a/src/lib/server/api/bluesky.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { BLUESKY_PASSWORD, BLUESKY_DID } from '$env/static/private'; -import { BskyAgent } from '@atproto/api'; - -const agent = new BskyAgent({ - service: 'https://bsky.social' -}); - -await agent.login({ - identifier: 'maier.tech', - password: BLUESKY_PASSWORD -}); - -/** Get the latest 10 posts. */ -export async function getPosts() { - const { data } = await agent.getAuthorFeed({ - actor: BLUESKY_DID, - filter: 'posts_no_replies', - limit: 10 - }); - - const { feed } = data; - - return feed; -} - -/** Convert a Bluesky URI to a HTTP URL. */ -export function convertToUrl(uri: string) { - const [, , did, , rkey] = uri.split('/'); - return `https://bsky.app/profile/${did}/post/${rkey}`; -} diff --git a/src/lib/server/resolvers/index.ts b/src/lib/server/resolvers/index.ts new file mode 100644 index 00000000..67e62586 --- /dev/null +++ b/src/lib/server/resolvers/index.ts @@ -0,0 +1,2 @@ +export { default as resolvePost } from './resolvePost'; +export { default as resolveNote } from './resolveNote'; diff --git a/src/lib/server/resolvers/resolveNote.ts b/src/lib/server/resolvers/resolveNote.ts new file mode 100644 index 00000000..487ea817 --- /dev/null +++ b/src/lib/server/resolvers/resolveNote.ts @@ -0,0 +1,26 @@ +import { VIRALCARDS_API_KEY } from '$env/static/private'; // Needs to support prerendering. +import { ogImageTemplate } from '$lib/templates'; +import type { NoteMeta, VcImageMeta } from '@maiertech/sveltekit-helpers'; +import { getOgImageUrl } from '@maiertech/sveltekit-helpers'; + +export default async function (noteMeta: NoteMeta) { + // Resolve ogImageUrl. + // `ogImageUrl` from `postMeta` takes precedence. + let ogImageUrl: string | undefined = noteMeta.ogImageUrl; + + if (!ogImageUrl) { + const ogImageMeta = { + ...ogImageTemplate, + template: 'maiertechNote', + title: noteMeta.title + } as VcImageMeta; + ogImageUrl = await getOgImageUrl({ meta: ogImageMeta, apiKey: VIRALCARDS_API_KEY }); + } + + const resolvedNote: NoteMeta = { + ...noteMeta, + ogImageUrl + }; + + return resolvedNote; +} diff --git a/src/lib/server/resolvers/resolvePost.ts b/src/lib/server/resolvers/resolvePost.ts new file mode 100644 index 00000000..1148eb9d --- /dev/null +++ b/src/lib/server/resolvers/resolvePost.ts @@ -0,0 +1,75 @@ +import { GITHUB_TOKEN, VIRALCARDS_API_KEY } from '$env/static/private'; // Needs to support prerendering. +import { ogImageTemplate } from '$lib/templates'; +import type { + AvatarMeta, + PostMeta, + ResolvedPost, + Tag, + VcImageMeta +} from '@maiertech/sveltekit-helpers'; +import { getAuthor, getLastCommit, getOgImageUrl, getTag } from '@maiertech/sveltekit-helpers'; +import type { RequestEvent } from '@sveltejs/kit'; + +export default async function ({ + postMeta, + event +}: { + postMeta: PostMeta; + event: RequestEvent; +}): Promise { + // Resolve author. + let author: AvatarMeta | undefined = undefined; + if (postMeta.author) { + author = await getAuthor(postMeta.author, event); + } + + // Resolve tags. + const tags: Tag[] = []; + if (postMeta.tags && postMeta.tags.length > 0) { + // Fetch all tags asynchronously. + await Promise.all( + postMeta.tags.map(async (id) => { + const tag = await getTag(id, event); + if (tag) { + tags.push(tag); + } + }) + ); + } + + // Resolve ogImageUrl. + // `ogImageUrl` from `postMeta` takes precedence. + let ogImageUrl: string | undefined = postMeta.ogImageUrl; + + if (!ogImageUrl) { + const ogImageMeta = { + ...ogImageTemplate, + template: 'maiertechPost', + title: postMeta.title + } as VcImageMeta; + ogImageUrl = await getOgImageUrl({ meta: ogImageMeta, apiKey: VIRALCARDS_API_KEY }); + } + + // Resolve lastmodDate. + let lastmodDate: string | undefined = undefined; + const lastCommit = await getLastCommit({ + owner: 'maiertech', + repo: 'website', + path: postMeta.filepath, + token: GITHUB_TOKEN + }); + + if (lastCommit) { + lastmodDate = lastCommit.commit.author?.date; + } + + const resolvedPost: ResolvedPost = { + ...postMeta, + author, + tags: tags.length > 0 ? tags : undefined, + ogImageUrl, + lastmodDate + }; + + return resolvedPost; +} diff --git a/src/lib/server/transformations/index.ts b/src/lib/server/transformations/index.ts deleted file mode 100644 index 5598a572..00000000 --- a/src/lib/server/transformations/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { default as transformPost } from './transformPost'; -export { default as transformPostWithLastmodDate } from './transformPostWithLastmodDate'; diff --git a/src/lib/server/transformations/transformPost.ts b/src/lib/server/transformations/transformPost.ts deleted file mode 100644 index 0871c009..00000000 --- a/src/lib/server/transformations/transformPost.ts +++ /dev/null @@ -1,24 +0,0 @@ -import type { PostMeta, ResolvedPost } from '@maiertech/sveltekit-helpers'; -import { - createAuthorTransformer, - createPipeline, - createTagsTransformer -} from '@maiertech/sveltekit-helpers'; -import type { RequestEvent } from '@sveltejs/kit'; - -export default async function (postMeta: PostMeta, event: RequestEvent): Promise { - const transform = createPipeline([ - createAuthorTransformer(event), - createTagsTransformer(event) - ]); - const post = await transform(postMeta, { - title: postMeta.title, - description: postMeta.description, - publishedDate: postMeta.publishedDate, - path: postMeta.path, - ogImageUrl: postMeta.ogImageUrl, - prev: postMeta.prev, - next: postMeta.next - }); - return post; -} diff --git a/src/lib/server/transformations/transformPostWithLastmodDate.ts b/src/lib/server/transformations/transformPostWithLastmodDate.ts deleted file mode 100644 index 77aa8af4..00000000 --- a/src/lib/server/transformations/transformPostWithLastmodDate.ts +++ /dev/null @@ -1,34 +0,0 @@ -// This runs on the server only. -// Secret is bundled into the server bundle. -// Not great, but the only way to make prerendering work for posts. -import { GITHUB_TOKEN } from '$env/static/private'; -import type { PostMeta, ResolvedPost } from '@maiertech/sveltekit-helpers'; -import { - createAuthorTransformer, - createFilepathTransformer, - createPipeline, - createTagsTransformer -} from '@maiertech/sveltekit-helpers'; -import type { RequestEvent } from '@sveltejs/kit'; - -export default async function (postMeta: PostMeta, event: RequestEvent): Promise { - const transform = createPipeline([ - createAuthorTransformer(event), - createTagsTransformer(event), - createFilepathTransformer({ - owner: 'maiertech', - repo: 'website', - token: GITHUB_TOKEN - }) - ]); - const post = await transform(postMeta, { - title: postMeta.title, - description: postMeta.description, - publishedDate: postMeta.publishedDate, - path: postMeta.path, - ogImageUrl: postMeta.ogImageUrl, - prev: postMeta.prev, - next: postMeta.next - }); - return post; -} diff --git a/src/lib/templates/index.ts b/src/lib/templates/index.ts new file mode 100644 index 00000000..4aa9996c --- /dev/null +++ b/src/lib/templates/index.ts @@ -0,0 +1 @@ +export { default as ogImageTemplate } from './ogImageTemplate'; diff --git a/src/lib/templates/ogImageTemplate.ts b/src/lib/templates/ogImageTemplate.ts new file mode 100644 index 00000000..af5fcf84 --- /dev/null +++ b/src/lib/templates/ogImageTemplate.ts @@ -0,0 +1,46 @@ +export default { + template: 'maiertechPost', + title: 'Post title', + avatarName: 'Thilo Maier', + avatarImageUrl: 'https://www.maier.tech/assets/portrait-thilo-maier.jpg', + height: 630, + width: 1200, + colors: { + ink: '#020617', + surface: '#f8fafc', + primary: '#1e40af', + accent: '#f97316' + }, + fonts: [ + { + name: 'Roboto', + style: 'normal', + weight: 300 + }, + { + name: 'Roboto', + style: 'normal', + weight: 400 + }, + { + name: 'Roboto', + style: 'normal', + weight: 500 + }, + { + name: 'Roboto', + style: 'normal', + weight: 600 + }, + { + name: 'Roboto', + style: 'normal', + weight: 700 + }, + { + name: 'Roboto', + style: 'normal', + weight: 800 + } + ] +}; diff --git a/src/routes/+layout.server.ts b/src/routes/+layout.server.ts index ccbc9089..29dd6626 100644 --- a/src/routes/+layout.server.ts +++ b/src/routes/+layout.server.ts @@ -4,5 +4,9 @@ import type { LayoutServerLoad } from './$types'; export const load: LayoutServerLoad = ({ url }) => { // Make `urlOrigin` for `ResponsiveImage` component available to support prerendering. const urlOrigin = PUBLIC_URL_ORIGIN || url.origin; - return { urlOrigin }; + return { + urlOrigin, + defaultOgImageUrl: + 'https://create.viral.cards/api/v1/satori?meta=%7B%22template%22%3A%22maiertech%22%2C%22title%22%3A%22Notes+and+posts+about+web+development%22%2C%22avatarName%22%3A%22Thilo+Maier%22%2C%22avatarImageUrl%22%3A%22https%3A%2F%2Fwww.maier.tech%2Fassets%2Fportrait-thilo-maier.jpg%22%2C%22height%22%3A630%2C%22width%22%3A1200%2C%22colors%22%3A%7B%22ink%22%3A%22%23020617%22%2C%22surface%22%3A%22%23f8fafc%22%2C%22primary%22%3A%22%231e40af%22%2C%22accent%22%3A%22%23f97316%22%7D%2C%22fonts%22%3A%5B%7B%22name%22%3A%22Roboto%22%2C%22style%22%3A%22normal%22%2C%22weight%22%3A300%7D%2C%7B%22name%22%3A%22Roboto%22%2C%22style%22%3A%22normal%22%2C%22weight%22%3A400%7D%2C%7B%22name%22%3A%22Roboto%22%2C%22style%22%3A%22normal%22%2C%22weight%22%3A500%7D%2C%7B%22name%22%3A%22Roboto%22%2C%22style%22%3A%22normal%22%2C%22weight%22%3A600%7D%2C%7B%22name%22%3A%22Roboto%22%2C%22style%22%3A%22normal%22%2C%22weight%22%3A700%7D%2C%7B%22name%22%3A%22Roboto%22%2C%22style%22%3A%22normal%22%2C%22weight%22%3A800%7D%5D%7D&sig=da35c48eae40b4c66c48694f82384ed834f45ff76216c941ea42f7a5f8e8e865' + }; }; diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 46d4151f..af2d1df5 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -1,21 +1,22 @@ {#if page.data.seo} + {#if page.data.seo.ogImageUrl} + + {:else} + + {/if} {/if} diff --git a/src/routes/api/posts/2021/+server.ts b/src/routes/api/posts/2021/+server.ts index e58b585e..da19da6d 100644 --- a/src/routes/api/posts/2021/+server.ts +++ b/src/routes/api/posts/2021/+server.ts @@ -1,10 +1,10 @@ -import { transformPost } from '$lib/server/transformations'; +import { resolvePost } from '$lib/server/resolvers'; +import postDisposableWorkspaces from '$posts/(2021)/a-better-development-workflow-with-disposable-workspaces/meta'; +import postGitHubCliSshConfig from '$posts/(2021)/how-to-use-github-cli-to-configure-ssh-authentication-to-github/meta'; +import postFathomAnalytics from '$posts/(2021)/how-to-wire-up-fathom-analytics-in-a-sveltekit-app/meta'; import postMoveYourIdeToTheCloud from '$posts/(2021)/move-your-ide-to-the-cloud-introduction-to-github-codespaces/meta'; import { json } from '@sveltejs/kit'; import type { RequestHandler } from './$types'; -import postFathomAnalytics from '$posts/(2021)/how-to-wire-up-fathom-analytics-in-a-sveltekit-app/meta'; -import postGitHubCliSshConfig from '$posts/(2021)/how-to-use-github-cli-to-configure-ssh-authentication-to-github/meta'; -import postDisposableWorkspaces from '$posts/(2021)/a-better-development-workflow-with-disposable-workspaces/meta'; // Needs to be set explicitly because we prerender endpoint `/sitemap.xml`. export const prerender = true; @@ -20,7 +20,7 @@ export const GET: RequestHandler = async (event) => { const transformedPosts = await Promise.all( posts.map((post) => { - return transformPost(post, event); + return resolvePost({ postMeta: post, event }); }) ); diff --git a/src/routes/api/posts/2022/+server.ts b/src/routes/api/posts/2022/+server.ts index 78493807..7adcbf3e 100644 --- a/src/routes/api/posts/2022/+server.ts +++ b/src/routes/api/posts/2022/+server.ts @@ -1,4 +1,4 @@ -import { transformPost } from '$lib/server/transformations'; +import { resolvePost } from '$lib/server/resolvers'; import postExploreD3ArrayMethods from '$posts/(2022)/exploring-frequently-used-methods-of-d3-array/meta'; import postGrokingFocusPseudoClasses from '$posts/(2022)/groking-active-focus-and-focus-visible-pseudo-classes/meta'; import postSvelteKitBreakingChanges from '$posts/(2022)/handling-breaking-changes-in-sveltekit-pre-1-0/meta'; @@ -28,7 +28,7 @@ export const GET: RequestHandler = async (event) => { const transformedPosts = await Promise.all( posts.map((post) => { - return transformPost(post, event); + return resolvePost({ postMeta: post, event }); }) ); diff --git a/src/routes/api/posts/2023/+server.ts b/src/routes/api/posts/2023/+server.ts index 38257e44..6d78df48 100644 --- a/src/routes/api/posts/2023/+server.ts +++ b/src/routes/api/posts/2023/+server.ts @@ -1,4 +1,4 @@ -import { transformPost } from '$lib/server/transformations'; +import { resolvePost } from '$lib/server/resolvers'; import postComplementZeroEffortTypeSafety from '$posts/(2023)/complement-zero-effort-type-safety-in-sveltekit-with-zod-for-even-more-type-safety/meta'; import postConfiguringTurborepo from '$posts/(2023)/configuring-turborepo-for-a-sveltekit-monorepo/meta'; import postCookieSettingsForStackblitz from '$posts/(2023)/cookie-settings-for-stackblitz-webcontainers/meta'; @@ -26,7 +26,7 @@ export const GET: RequestHandler = async (event) => { const transformedPosts = await Promise.all( posts.map((post) => { - return transformPost(post, event); + return resolvePost({ postMeta: post, event }); }) ); diff --git a/src/routes/api/posts/2024/+server.ts b/src/routes/api/posts/2024/+server.ts index 91efe653..6a4e9408 100644 --- a/src/routes/api/posts/2024/+server.ts +++ b/src/routes/api/posts/2024/+server.ts @@ -1,7 +1,7 @@ -import { transformPost } from '$lib/server/transformations'; +import { resolvePost } from '$lib/server/resolvers'; +import postCopilotContext from '$posts/(2024)/github-copilot-context/meta'; import { json } from '@sveltejs/kit'; import type { RequestHandler } from './$types'; -import postCopilotContext from '$posts/(2024)/github-copilot-context/meta'; // Needs to be set explicitly because we prerender endpoint `/sitemap.xml`. export const prerender = true; @@ -12,7 +12,7 @@ export const GET: RequestHandler = async (event) => { const transformedPosts = await Promise.all( posts.map((post) => { - return transformPost(post, event); + return resolvePost({ postMeta: post, event }); }) ); diff --git a/src/routes/notes/(2025)/am-i-still-relevant-as-a-developer/+page.server.ts b/src/routes/notes/(2025)/am-i-still-relevant-as-a-developer/+page.server.ts new file mode 100644 index 00000000..3f9585ed --- /dev/null +++ b/src/routes/notes/(2025)/am-i-still-relevant-as-a-developer/+page.server.ts @@ -0,0 +1,12 @@ +import { resolveNote } from '$lib/server/resolvers'; +import type { PageServerLoad } from './$types'; +import meta from './meta'; + +export const load: PageServerLoad = async () => { + const note = await resolveNote(meta); + const { title, description, ogImageUrl } = note; + return { + note, + seo: { title, description, ogImageUrl } + }; +}; diff --git a/src/routes/notes/(2025)/am-i-still-relevant-as-a-developer/+page.ts b/src/routes/notes/(2025)/am-i-still-relevant-as-a-developer/+page.ts deleted file mode 100644 index 18cc6754..00000000 --- a/src/routes/notes/(2025)/am-i-still-relevant-as-a-developer/+page.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { PageLoad } from './$types'; -import note from './meta'; - -export const load: PageLoad = async () => { - const { title, description } = note; - return { - note, - seo: { title, description } - }; -}; diff --git a/src/routes/notes/(2025)/env-vars-in-vscode/+page.server.ts b/src/routes/notes/(2025)/env-vars-in-vscode/+page.server.ts new file mode 100644 index 00000000..3f9585ed --- /dev/null +++ b/src/routes/notes/(2025)/env-vars-in-vscode/+page.server.ts @@ -0,0 +1,12 @@ +import { resolveNote } from '$lib/server/resolvers'; +import type { PageServerLoad } from './$types'; +import meta from './meta'; + +export const load: PageServerLoad = async () => { + const note = await resolveNote(meta); + const { title, description, ogImageUrl } = note; + return { + note, + seo: { title, description, ogImageUrl } + }; +}; diff --git a/src/routes/notes/(2025)/env-vars-in-vscode/+page.ts b/src/routes/notes/(2025)/env-vars-in-vscode/+page.ts deleted file mode 100644 index 18cc6754..00000000 --- a/src/routes/notes/(2025)/env-vars-in-vscode/+page.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { PageLoad } from './$types'; -import note from './meta'; - -export const load: PageLoad = async () => { - const { title, description } = note; - return { - note, - seo: { title, description } - }; -}; diff --git a/src/routes/notes/(2025)/hosting-in-europe-beyond-big-tech/+page.server.ts b/src/routes/notes/(2025)/hosting-in-europe-beyond-big-tech/+page.server.ts new file mode 100644 index 00000000..3f9585ed --- /dev/null +++ b/src/routes/notes/(2025)/hosting-in-europe-beyond-big-tech/+page.server.ts @@ -0,0 +1,12 @@ +import { resolveNote } from '$lib/server/resolvers'; +import type { PageServerLoad } from './$types'; +import meta from './meta'; + +export const load: PageServerLoad = async () => { + const note = await resolveNote(meta); + const { title, description, ogImageUrl } = note; + return { + note, + seo: { title, description, ogImageUrl } + }; +}; diff --git a/src/routes/notes/(2025)/hosting-in-europe-beyond-big-tech/+page.ts b/src/routes/notes/(2025)/hosting-in-europe-beyond-big-tech/+page.ts deleted file mode 100644 index 18cc6754..00000000 --- a/src/routes/notes/(2025)/hosting-in-europe-beyond-big-tech/+page.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { PageLoad } from './$types'; -import note from './meta'; - -export const load: PageLoad = async () => { - const { title, description } = note; - return { - note, - seo: { title, description } - }; -}; diff --git a/src/routes/notes/(2025)/how-to-write-exceptional-docs/+page.server.ts b/src/routes/notes/(2025)/how-to-write-exceptional-docs/+page.server.ts new file mode 100644 index 00000000..3f9585ed --- /dev/null +++ b/src/routes/notes/(2025)/how-to-write-exceptional-docs/+page.server.ts @@ -0,0 +1,12 @@ +import { resolveNote } from '$lib/server/resolvers'; +import type { PageServerLoad } from './$types'; +import meta from './meta'; + +export const load: PageServerLoad = async () => { + const note = await resolveNote(meta); + const { title, description, ogImageUrl } = note; + return { + note, + seo: { title, description, ogImageUrl } + }; +}; diff --git a/src/routes/notes/(2025)/how-to-write-exceptional-docs/+page.ts b/src/routes/notes/(2025)/how-to-write-exceptional-docs/+page.ts deleted file mode 100644 index 18cc6754..00000000 --- a/src/routes/notes/(2025)/how-to-write-exceptional-docs/+page.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { PageLoad } from './$types'; -import note from './meta'; - -export const load: PageLoad = async () => { - const { title, description } = note; - return { - note, - seo: { title, description } - }; -}; diff --git a/src/routes/notes/(2025)/penpots-missing-svg-text-to-path-feature/+page.server.ts b/src/routes/notes/(2025)/penpots-missing-svg-text-to-path-feature/+page.server.ts new file mode 100644 index 00000000..3f9585ed --- /dev/null +++ b/src/routes/notes/(2025)/penpots-missing-svg-text-to-path-feature/+page.server.ts @@ -0,0 +1,12 @@ +import { resolveNote } from '$lib/server/resolvers'; +import type { PageServerLoad } from './$types'; +import meta from './meta'; + +export const load: PageServerLoad = async () => { + const note = await resolveNote(meta); + const { title, description, ogImageUrl } = note; + return { + note, + seo: { title, description, ogImageUrl } + }; +}; diff --git a/src/routes/notes/(2025)/penpots-missing-svg-text-to-path-feature/+page.ts b/src/routes/notes/(2025)/penpots-missing-svg-text-to-path-feature/+page.ts deleted file mode 100644 index 18cc6754..00000000 --- a/src/routes/notes/(2025)/penpots-missing-svg-text-to-path-feature/+page.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { PageLoad } from './$types'; -import note from './meta'; - -export const load: PageLoad = async () => { - const { title, description } = note; - return { - note, - seo: { title, description } - }; -}; diff --git a/src/routes/notes/(2025)/prerendering-server-routes-in-sveltekit/+page.server.ts b/src/routes/notes/(2025)/prerendering-server-routes-in-sveltekit/+page.server.ts new file mode 100644 index 00000000..3f9585ed --- /dev/null +++ b/src/routes/notes/(2025)/prerendering-server-routes-in-sveltekit/+page.server.ts @@ -0,0 +1,12 @@ +import { resolveNote } from '$lib/server/resolvers'; +import type { PageServerLoad } from './$types'; +import meta from './meta'; + +export const load: PageServerLoad = async () => { + const note = await resolveNote(meta); + const { title, description, ogImageUrl } = note; + return { + note, + seo: { title, description, ogImageUrl } + }; +}; diff --git a/src/routes/notes/(2025)/prerendering-server-routes-in-sveltekit/+page.ts b/src/routes/notes/(2025)/prerendering-server-routes-in-sveltekit/+page.ts deleted file mode 100644 index 18cc6754..00000000 --- a/src/routes/notes/(2025)/prerendering-server-routes-in-sveltekit/+page.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { PageLoad } from './$types'; -import note from './meta'; - -export const load: PageLoad = async () => { - const { title, description } = note; - return { - note, - seo: { title, description } - }; -}; diff --git a/src/routes/notes/(2025)/the-umpteenth-interview-with-rich-harris/+page.server.ts b/src/routes/notes/(2025)/the-umpteenth-interview-with-rich-harris/+page.server.ts new file mode 100644 index 00000000..3f9585ed --- /dev/null +++ b/src/routes/notes/(2025)/the-umpteenth-interview-with-rich-harris/+page.server.ts @@ -0,0 +1,12 @@ +import { resolveNote } from '$lib/server/resolvers'; +import type { PageServerLoad } from './$types'; +import meta from './meta'; + +export const load: PageServerLoad = async () => { + const note = await resolveNote(meta); + const { title, description, ogImageUrl } = note; + return { + note, + seo: { title, description, ogImageUrl } + }; +}; diff --git a/src/routes/notes/(2025)/the-umpteenth-interview-with-rich-harris/+page.ts b/src/routes/notes/(2025)/the-umpteenth-interview-with-rich-harris/+page.ts deleted file mode 100644 index 18cc6754..00000000 --- a/src/routes/notes/(2025)/the-umpteenth-interview-with-rich-harris/+page.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { PageLoad } from './$types'; -import note from './meta'; - -export const load: PageLoad = async () => { - const { title, description } = note; - return { - note, - seo: { title, description } - }; -}; diff --git a/src/routes/posts/(2021)/a-better-development-workflow-with-disposable-workspaces/+page.server.ts b/src/routes/posts/(2021)/a-better-development-workflow-with-disposable-workspaces/+page.server.ts index 79a251df..5a3c0179 100644 --- a/src/routes/posts/(2021)/a-better-development-workflow-with-disposable-workspaces/+page.server.ts +++ b/src/routes/posts/(2021)/a-better-development-workflow-with-disposable-workspaces/+page.server.ts @@ -1,10 +1,10 @@ +import { resolvePost } from '$lib/server/resolvers'; import type { PageServerLoad } from './$types'; -import { transformPostWithLastmodDate } from '$lib/server/transformations'; import meta from './meta'; export const load: PageServerLoad = async (event) => { - const post = await transformPostWithLastmodDate(meta, event); - const { title, description } = post; + const post = await resolvePost({ postMeta: meta, event }); + const { title, description, ogImageUrl } = post; - return { post, seo: { title, description } }; + return { post, seo: { title, description, ogImageUrl } }; }; diff --git a/src/routes/posts/(2021)/how-to-use-github-cli-to-configure-ssh-authentication-to-github/+page.server.ts b/src/routes/posts/(2021)/how-to-use-github-cli-to-configure-ssh-authentication-to-github/+page.server.ts index dea218f9..7d1022bc 100644 --- a/src/routes/posts/(2021)/how-to-use-github-cli-to-configure-ssh-authentication-to-github/+page.server.ts +++ b/src/routes/posts/(2021)/how-to-use-github-cli-to-configure-ssh-authentication-to-github/+page.server.ts @@ -1,12 +1,12 @@ +import { resolvePost } from '$lib/server/resolvers'; import type { PageServerLoad } from './$types'; -import { transformPostWithLastmodDate } from '$lib/server/transformations'; import meta from './meta'; export const load: PageServerLoad = async (event) => { - const post = await transformPostWithLastmodDate(meta, event); - const { title, description } = post; + const post = await resolvePost({ postMeta: meta, event }); + const { title, description, ogImageUrl } = post; - return { examples, post, seo: { title, description } }; + return { examples, post, seo: { title, description, ogImageUrl } }; }; const examples = { diff --git a/src/routes/posts/(2021)/how-to-wire-up-fathom-analytics-in-a-sveltekit-app/+page.server.ts b/src/routes/posts/(2021)/how-to-wire-up-fathom-analytics-in-a-sveltekit-app/+page.server.ts index 63e745fb..2f9295ab 100644 --- a/src/routes/posts/(2021)/how-to-wire-up-fathom-analytics-in-a-sveltekit-app/+page.server.ts +++ b/src/routes/posts/(2021)/how-to-wire-up-fathom-analytics-in-a-sveltekit-app/+page.server.ts @@ -1,12 +1,12 @@ +import { resolvePost } from '$lib/server/resolvers'; import type { PageServerLoad } from './$types'; -import { transformPostWithLastmodDate } from '$lib/server/transformations'; import meta from './meta'; export const load: PageServerLoad = async (event) => { - const post = await transformPostWithLastmodDate(meta, event); - const { title, description } = post; + const post = await resolvePost({ postMeta: meta, event }); + const { title, description, ogImageUrl } = post; - return { examples, post, seo: { title, description } }; + return { examples, post, seo: { title, description, ogImageUrl } }; }; const examples = { diff --git a/src/routes/posts/(2021)/move-your-ide-to-the-cloud-introduction-to-github-codespaces/+page.server.ts b/src/routes/posts/(2021)/move-your-ide-to-the-cloud-introduction-to-github-codespaces/+page.server.ts index 61faa211..31845bbc 100644 --- a/src/routes/posts/(2021)/move-your-ide-to-the-cloud-introduction-to-github-codespaces/+page.server.ts +++ b/src/routes/posts/(2021)/move-your-ide-to-the-cloud-introduction-to-github-codespaces/+page.server.ts @@ -1,12 +1,12 @@ +import { resolvePost } from '$lib/server/resolvers'; import type { PageServerLoad } from './$types'; -import { transformPostWithLastmodDate } from '$lib/server/transformations'; import meta from './meta'; export const load: PageServerLoad = async (event) => { - const post = await transformPostWithLastmodDate(meta, event); - const { title, description } = post; + const post = await resolvePost({ postMeta: meta, event }); + const { title, description, ogImageUrl } = post; - return { examples, post, seo: { title, description } }; + return { examples, post, seo: { title, description, ogImageUrl } }; }; const examples = { diff --git a/src/routes/posts/(2022)/exploring-frequently-used-methods-of-d3-array/+page.server.ts b/src/routes/posts/(2022)/exploring-frequently-used-methods-of-d3-array/+page.server.ts index 196f1fac..12359711 100644 --- a/src/routes/posts/(2022)/exploring-frequently-used-methods-of-d3-array/+page.server.ts +++ b/src/routes/posts/(2022)/exploring-frequently-used-methods-of-d3-array/+page.server.ts @@ -1,13 +1,13 @@ +import { resolvePost } from '$lib/server/resolvers'; +import type { StackBlitzExample } from '$lib/types'; import type { PageServerLoad } from './$types'; -import { transformPostWithLastmodDate } from '$lib/server/transformations'; import meta from './meta'; -import type { StackBlitzExample } from '$lib/types'; export const load: PageServerLoad = async (event) => { - const post = await transformPostWithLastmodDate(meta, event); - const { title, description } = post; + const post = await resolvePost({ postMeta: meta, event }); + const { title, description, ogImageUrl } = post; - return { examples, post, seo: { title, description } }; + return { examples, post, seo: { title, description, ogImageUrl } }; }; const examples: { [key: string]: StackBlitzExample } = { diff --git a/src/routes/posts/(2022)/groking-active-focus-and-focus-visible-pseudo-classes/+page.server.ts b/src/routes/posts/(2022)/groking-active-focus-and-focus-visible-pseudo-classes/+page.server.ts index e7967ed1..dcff3b9b 100644 --- a/src/routes/posts/(2022)/groking-active-focus-and-focus-visible-pseudo-classes/+page.server.ts +++ b/src/routes/posts/(2022)/groking-active-focus-and-focus-visible-pseudo-classes/+page.server.ts @@ -1,13 +1,13 @@ -import { transformPostWithLastmodDate } from '$lib/server/transformations'; +import { resolvePost } from '$lib/server/resolvers'; import type { StackBlitzExample } from '$lib/types'; import type { PageServerLoad } from './$types'; import meta from './meta'; export const load: PageServerLoad = async (event) => { - const post = await transformPostWithLastmodDate(meta, event); - const { title, description } = post; + const post = await resolvePost({ postMeta: meta, event }); + const { title, description, ogImageUrl } = post; - return { example, post, seo: { title, description } }; + return { example, post, seo: { title, description, ogImageUrl } }; }; const example: StackBlitzExample = { diff --git a/src/routes/posts/(2022)/handling-breaking-changes-in-sveltekit-pre-1-0/+page.server.ts b/src/routes/posts/(2022)/handling-breaking-changes-in-sveltekit-pre-1-0/+page.server.ts index 79a251df..5a3c0179 100644 --- a/src/routes/posts/(2022)/handling-breaking-changes-in-sveltekit-pre-1-0/+page.server.ts +++ b/src/routes/posts/(2022)/handling-breaking-changes-in-sveltekit-pre-1-0/+page.server.ts @@ -1,10 +1,10 @@ +import { resolvePost } from '$lib/server/resolvers'; import type { PageServerLoad } from './$types'; -import { transformPostWithLastmodDate } from '$lib/server/transformations'; import meta from './meta'; export const load: PageServerLoad = async (event) => { - const post = await transformPostWithLastmodDate(meta, event); - const { title, description } = post; + const post = await resolvePost({ postMeta: meta, event }); + const { title, description, ogImageUrl } = post; - return { post, seo: { title, description } }; + return { post, seo: { title, description, ogImageUrl } }; }; diff --git a/src/routes/posts/(2022)/how-to-make-sveltekit-hmr-work-with-gitpod/+page.server.ts b/src/routes/posts/(2022)/how-to-make-sveltekit-hmr-work-with-gitpod/+page.server.ts index 79a251df..5a3c0179 100644 --- a/src/routes/posts/(2022)/how-to-make-sveltekit-hmr-work-with-gitpod/+page.server.ts +++ b/src/routes/posts/(2022)/how-to-make-sveltekit-hmr-work-with-gitpod/+page.server.ts @@ -1,10 +1,10 @@ +import { resolvePost } from '$lib/server/resolvers'; import type { PageServerLoad } from './$types'; -import { transformPostWithLastmodDate } from '$lib/server/transformations'; import meta from './meta'; export const load: PageServerLoad = async (event) => { - const post = await transformPostWithLastmodDate(meta, event); - const { title, description } = post; + const post = await resolvePost({ postMeta: meta, event }); + const { title, description, ogImageUrl } = post; - return { post, seo: { title, description } }; + return { post, seo: { title, description, ogImageUrl } }; }; diff --git a/src/routes/posts/(2022)/recording-screencasts-on-a-hidpi-display/+page.server.ts b/src/routes/posts/(2022)/recording-screencasts-on-a-hidpi-display/+page.server.ts index 79a251df..5a3c0179 100644 --- a/src/routes/posts/(2022)/recording-screencasts-on-a-hidpi-display/+page.server.ts +++ b/src/routes/posts/(2022)/recording-screencasts-on-a-hidpi-display/+page.server.ts @@ -1,10 +1,10 @@ +import { resolvePost } from '$lib/server/resolvers'; import type { PageServerLoad } from './$types'; -import { transformPostWithLastmodDate } from '$lib/server/transformations'; import meta from './meta'; export const load: PageServerLoad = async (event) => { - const post = await transformPostWithLastmodDate(meta, event); - const { title, description } = post; + const post = await resolvePost({ postMeta: meta, event }); + const { title, description, ogImageUrl } = post; - return { post, seo: { title, description } }; + return { post, seo: { title, description, ogImageUrl } }; }; diff --git a/src/routes/posts/(2022)/route-matching-in-sveltekit/+page.server.ts b/src/routes/posts/(2022)/route-matching-in-sveltekit/+page.server.ts index 79a251df..5a3c0179 100644 --- a/src/routes/posts/(2022)/route-matching-in-sveltekit/+page.server.ts +++ b/src/routes/posts/(2022)/route-matching-in-sveltekit/+page.server.ts @@ -1,10 +1,10 @@ +import { resolvePost } from '$lib/server/resolvers'; import type { PageServerLoad } from './$types'; -import { transformPostWithLastmodDate } from '$lib/server/transformations'; import meta from './meta'; export const load: PageServerLoad = async (event) => { - const post = await transformPostWithLastmodDate(meta, event); - const { title, description } = post; + const post = await resolvePost({ postMeta: meta, event }); + const { title, description, ogImageUrl } = post; - return { post, seo: { title, description } }; + return { post, seo: { title, description, ogImageUrl } }; }; diff --git a/src/routes/posts/(2022)/three-ways-to-bootstrap-a-svelte-project/+page.server.ts b/src/routes/posts/(2022)/three-ways-to-bootstrap-a-svelte-project/+page.server.ts index 79a251df..5a3c0179 100644 --- a/src/routes/posts/(2022)/three-ways-to-bootstrap-a-svelte-project/+page.server.ts +++ b/src/routes/posts/(2022)/three-ways-to-bootstrap-a-svelte-project/+page.server.ts @@ -1,10 +1,10 @@ +import { resolvePost } from '$lib/server/resolvers'; import type { PageServerLoad } from './$types'; -import { transformPostWithLastmodDate } from '$lib/server/transformations'; import meta from './meta'; export const load: PageServerLoad = async (event) => { - const post = await transformPostWithLastmodDate(meta, event); - const { title, description } = post; + const post = await resolvePost({ postMeta: meta, event }); + const { title, description, ogImageUrl } = post; - return { post, seo: { title, description } }; + return { post, seo: { title, description, ogImageUrl } }; }; diff --git a/src/routes/posts/(2022)/using-the-at-and-hash-symbols-in-tweets-with-a-word-joiner-character/+page.server.ts b/src/routes/posts/(2022)/using-the-at-and-hash-symbols-in-tweets-with-a-word-joiner-character/+page.server.ts index 79a251df..5a3c0179 100644 --- a/src/routes/posts/(2022)/using-the-at-and-hash-symbols-in-tweets-with-a-word-joiner-character/+page.server.ts +++ b/src/routes/posts/(2022)/using-the-at-and-hash-symbols-in-tweets-with-a-word-joiner-character/+page.server.ts @@ -1,10 +1,10 @@ +import { resolvePost } from '$lib/server/resolvers'; import type { PageServerLoad } from './$types'; -import { transformPostWithLastmodDate } from '$lib/server/transformations'; import meta from './meta'; export const load: PageServerLoad = async (event) => { - const post = await transformPostWithLastmodDate(meta, event); - const { title, description } = post; + const post = await resolvePost({ postMeta: meta, event }); + const { title, description, ogImageUrl } = post; - return { post, seo: { title, description } }; + return { post, seo: { title, description, ogImageUrl } }; }; diff --git a/src/routes/posts/(2023)/complement-zero-effort-type-safety-in-sveltekit-with-zod-for-even-more-type-safety/+page.server.ts b/src/routes/posts/(2023)/complement-zero-effort-type-safety-in-sveltekit-with-zod-for-even-more-type-safety/+page.server.ts index 16ccd82b..aeb39d61 100644 --- a/src/routes/posts/(2023)/complement-zero-effort-type-safety-in-sveltekit-with-zod-for-even-more-type-safety/+page.server.ts +++ b/src/routes/posts/(2023)/complement-zero-effort-type-safety-in-sveltekit-with-zod-for-even-more-type-safety/+page.server.ts @@ -1,12 +1,12 @@ +import { resolvePost } from '$lib/server/resolvers'; import type { PageServerLoad } from './$types'; -import { transformPostWithLastmodDate } from '$lib/server/transformations'; import meta from './meta'; export const load: PageServerLoad = async (event) => { - const post = await transformPostWithLastmodDate(meta, event); - const { title, description } = post; + const post = await resolvePost({ postMeta: meta, event }); + const { title, description, ogImageUrl } = post; - return { examples, post, seo: { title, description } }; + return { examples, post, seo: { title, description, ogImageUrl } }; }; const examples = { diff --git a/src/routes/posts/(2023)/configuring-turborepo-for-a-sveltekit-monorepo/+page.server.ts b/src/routes/posts/(2023)/configuring-turborepo-for-a-sveltekit-monorepo/+page.server.ts index 2ad7215f..2e791c1f 100644 --- a/src/routes/posts/(2023)/configuring-turborepo-for-a-sveltekit-monorepo/+page.server.ts +++ b/src/routes/posts/(2023)/configuring-turborepo-for-a-sveltekit-monorepo/+page.server.ts @@ -1,12 +1,12 @@ -import { transformPostWithLastmodDate } from '$lib/server/transformations'; +import { resolvePost } from '$lib/server/resolvers'; import type { PageServerLoad } from './$types'; import meta from './meta'; export const load: PageServerLoad = async (event) => { - const post = await transformPostWithLastmodDate(meta, event); - const { title, description } = post; + const post = await resolvePost({ postMeta: meta, event }); + const { title, description, ogImageUrl } = post; - return { examples, post, seo: { title, description } }; + return { examples, post, seo: { title, description, ogImageUrl } }; }; const examples = { diff --git a/src/routes/posts/(2023)/cookie-settings-for-stackblitz-webcontainers/+page.server.ts b/src/routes/posts/(2023)/cookie-settings-for-stackblitz-webcontainers/+page.server.ts index 79a251df..5a3c0179 100644 --- a/src/routes/posts/(2023)/cookie-settings-for-stackblitz-webcontainers/+page.server.ts +++ b/src/routes/posts/(2023)/cookie-settings-for-stackblitz-webcontainers/+page.server.ts @@ -1,10 +1,10 @@ +import { resolvePost } from '$lib/server/resolvers'; import type { PageServerLoad } from './$types'; -import { transformPostWithLastmodDate } from '$lib/server/transformations'; import meta from './meta'; export const load: PageServerLoad = async (event) => { - const post = await transformPostWithLastmodDate(meta, event); - const { title, description } = post; + const post = await resolvePost({ postMeta: meta, event }); + const { title, description, ogImageUrl } = post; - return { post, seo: { title, description } }; + return { post, seo: { title, description, ogImageUrl } }; }; diff --git a/src/routes/posts/(2023)/do-i-need-a-sitemap-for-my-sveltekit-app-and-how-do-i-create-it/+page.server.ts b/src/routes/posts/(2023)/do-i-need-a-sitemap-for-my-sveltekit-app-and-how-do-i-create-it/+page.server.ts index 79a251df..5a3c0179 100644 --- a/src/routes/posts/(2023)/do-i-need-a-sitemap-for-my-sveltekit-app-and-how-do-i-create-it/+page.server.ts +++ b/src/routes/posts/(2023)/do-i-need-a-sitemap-for-my-sveltekit-app-and-how-do-i-create-it/+page.server.ts @@ -1,10 +1,10 @@ +import { resolvePost } from '$lib/server/resolvers'; import type { PageServerLoad } from './$types'; -import { transformPostWithLastmodDate } from '$lib/server/transformations'; import meta from './meta'; export const load: PageServerLoad = async (event) => { - const post = await transformPostWithLastmodDate(meta, event); - const { title, description } = post; + const post = await resolvePost({ postMeta: meta, event }); + const { title, description, ogImageUrl } = post; - return { post, seo: { title, description } }; + return { post, seo: { title, description, ogImageUrl } }; }; diff --git a/src/routes/posts/(2023)/five-ways-to-customize-a-gitpod-workspace/+page.server.ts b/src/routes/posts/(2023)/five-ways-to-customize-a-gitpod-workspace/+page.server.ts index 79a251df..5a3c0179 100644 --- a/src/routes/posts/(2023)/five-ways-to-customize-a-gitpod-workspace/+page.server.ts +++ b/src/routes/posts/(2023)/five-ways-to-customize-a-gitpod-workspace/+page.server.ts @@ -1,10 +1,10 @@ +import { resolvePost } from '$lib/server/resolvers'; import type { PageServerLoad } from './$types'; -import { transformPostWithLastmodDate } from '$lib/server/transformations'; import meta from './meta'; export const load: PageServerLoad = async (event) => { - const post = await transformPostWithLastmodDate(meta, event); - const { title, description } = post; + const post = await resolvePost({ postMeta: meta, event }); + const { title, description, ogImageUrl } = post; - return { post, seo: { title, description } }; + return { post, seo: { title, description, ogImageUrl } }; }; diff --git a/src/routes/posts/(2023)/how-to-add-a-basic-seo-component-to-sveltekit/+page.server.ts b/src/routes/posts/(2023)/how-to-add-a-basic-seo-component-to-sveltekit/+page.server.ts index 79a251df..5a3c0179 100644 --- a/src/routes/posts/(2023)/how-to-add-a-basic-seo-component-to-sveltekit/+page.server.ts +++ b/src/routes/posts/(2023)/how-to-add-a-basic-seo-component-to-sveltekit/+page.server.ts @@ -1,10 +1,10 @@ +import { resolvePost } from '$lib/server/resolvers'; import type { PageServerLoad } from './$types'; -import { transformPostWithLastmodDate } from '$lib/server/transformations'; import meta from './meta'; export const load: PageServerLoad = async (event) => { - const post = await transformPostWithLastmodDate(meta, event); - const { title, description } = post; + const post = await resolvePost({ postMeta: meta, event }); + const { title, description, ogImageUrl } = post; - return { post, seo: { title, description } }; + return { post, seo: { title, description, ogImageUrl } }; }; diff --git a/src/routes/posts/(2023)/is-stackblitz-codeflow-beta-ready-to-replace-your-local-vs-code/+page.server.ts b/src/routes/posts/(2023)/is-stackblitz-codeflow-beta-ready-to-replace-your-local-vs-code/+page.server.ts index 79a251df..5a3c0179 100644 --- a/src/routes/posts/(2023)/is-stackblitz-codeflow-beta-ready-to-replace-your-local-vs-code/+page.server.ts +++ b/src/routes/posts/(2023)/is-stackblitz-codeflow-beta-ready-to-replace-your-local-vs-code/+page.server.ts @@ -1,10 +1,10 @@ +import { resolvePost } from '$lib/server/resolvers'; import type { PageServerLoad } from './$types'; -import { transformPostWithLastmodDate } from '$lib/server/transformations'; import meta from './meta'; export const load: PageServerLoad = async (event) => { - const post = await transformPostWithLastmodDate(meta, event); - const { title, description } = post; + const post = await resolvePost({ postMeta: meta, event }); + const { title, description, ogImageUrl } = post; - return { post, seo: { title, description } }; + return { post, seo: { title, description, ogImageUrl } }; }; diff --git a/src/routes/posts/(2024)/github-copilot-context/+page.server.ts b/src/routes/posts/(2024)/github-copilot-context/+page.server.ts index 79a251df..5a3c0179 100644 --- a/src/routes/posts/(2024)/github-copilot-context/+page.server.ts +++ b/src/routes/posts/(2024)/github-copilot-context/+page.server.ts @@ -1,10 +1,10 @@ +import { resolvePost } from '$lib/server/resolvers'; import type { PageServerLoad } from './$types'; -import { transformPostWithLastmodDate } from '$lib/server/transformations'; import meta from './meta'; export const load: PageServerLoad = async (event) => { - const post = await transformPostWithLastmodDate(meta, event); - const { title, description } = post; + const post = await resolvePost({ postMeta: meta, event }); + const { title, description, ogImageUrl } = post; - return { post, seo: { title, description } }; + return { post, seo: { title, description, ogImageUrl } }; }; diff --git a/vite.config.ts b/vite.config.ts index 58b0b2fe..2f222dba 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -3,8 +3,5 @@ import { defineConfig } from 'vite'; import tailwindcss from '@tailwindcss/vite'; export default defineConfig({ - plugins: [tailwindcss(), sveltekit()], - test: { - include: ['src/**/*.test.ts'] - } + plugins: [tailwindcss(), sveltekit()] });